// Path: Retrofit/retrofit/app/src/main/java/com/example/retrofit/MainActivity.java
// public class MainActivity extends AppCompatActivity
// {
// 
//     @Inject TwitchAPI twitchAPI;
// 
//     private ApplicationContextComponent applicationContextComponent;
//     private App app;
// 
//     @Override
//     protected void onCreate( Bundle savedInstanceState )
//     {
//         super.onCreate( savedInstanceState );
//         setContentView( R.layout.activity_main );
// 
//         app = App.get( this );
// 
// 
//         applicationContextComponent = app.getComponent();
// 
// 
//         applicationContextComponent.inject( this );
// 
// 
//         Call<Twitch> call = twitchAPI.getTopGames();
// 
//         call.enqueue( new Callback<Twitch>()
//         {
//             @Override public void onResponse( Call<Twitch> call, Response<Twitch> response )
//             {
//                 List<Stream> gameList = response.body().getStreams();
// 
// 
//                 for ( Stream game : gameList )
//                 {
//                     Log.i( "RETRO_RESPONSE", "onResponse: " + game.getGame() );
//                 }
//             }
// 
//             @Override public void onFailure( Call<Twitch> call, Throwable t )
//             {
// 
//             }
//         } );
// 
//     }
// }
// 
// Path: Retrofit/retrofit/app/src/main/java/com/example/retrofit/http/ApiModule.java
// @Module(includes = ApplicationContextModule.class)
// public class ApiModule
// {
// 
//     public final String BASE_URL = "https://api.twitch.tv/kraken/";
// 
//     @Provides
//     public OkHttpClient provideClient( final Context context )
//     {
// 
// 
//         OkHttpClient.Builder httpClient =
//                 new OkHttpClient.Builder();
// 
// 
//         httpClient.addInterceptor( new Interceptor()
//         {
//             @Override
//             public Response intercept( Interceptor.Chain chain )
//             {
//                 Request original = chain.request();
//                 HttpUrl originalHttpUrl = original.url();
// 
//                 HttpUrl url = originalHttpUrl.newBuilder()
//                         .addQueryParameter( "client_id", context.getString( R.string.twitch_id ) )
//                         .build();
// 
//                 // Request customization: add request headers
//                 Request.Builder requestBuilder = original.newBuilder()
//                         .url( url );
// 
//                 Request request = requestBuilder.build();
//                 try
//                 {
//                     return chain.proceed( request );
//                 }
//                 catch ( IOException e )
//                 {
//                     e.printStackTrace();
//                     return null;
//                 }
// 
//             }
//         } );
// 
// 
//         HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
// 
// 
//         interceptor.setLevel( HttpLoggingInterceptor.Level.BODY );
//         return httpClient.addInterceptor( interceptor )
//                 .build();
// 
//     }
// 
//     @Provides
//     public Retrofit provideRetrofit( String baseURL, OkHttpClient client )
//     {
//         return new Retrofit.Builder()
//                 .baseUrl( baseURL )
//                 .client( client )
//                 .addConverterFactory( GsonConverterFactory.create() )
//                 .build();
//     }
// 
//     @Provides
//     public TwitchAPI provideApiService(Context context)
//     {
//         return provideRetrofit( BASE_URL, provideClient(context) ).create( TwitchAPI.class );
//     }
// }


import com.example.retrofit.MainActivity;
import com.example.retrofit.http.ApiModule;
import dagger.Component;
package com.example.retrofit.root;



/**
 * Created by tzia on 17-May-17.
 */


@Component(modules = {ApplicationContextModule.class, ApiModule.class})
// Search for dependencies in these listed modules or components in some cases
public interface ApplicationContextComponent
{


// Path: Retrofit/retrofit/app/src/main/java/com/example/retrofit/MainActivity.java
// public class MainActivity extends AppCompatActivity
// {
// 
//     @Inject TwitchAPI twitchAPI;
// 
//     private ApplicationContextComponent applicationContextComponent;
//     private App app;
// 
//     @Override
//     protected void onCreate( Bundle savedInstanceState )
//     {
//         super.onCreate( savedInstanceState );
//         setContentView( R.layout.activity_main );
// 
//         app = App.get( this );
// 
// 
//         applicationContextComponent = app.getComponent();
// 
// 
//         applicationContextComponent.inject( this );
// 
// 
//         Call<Twitch> call = twitchAPI.getTopGames();
// 
//         call.enqueue( new Callback<Twitch>()
//         {
//             @Override public void onResponse( Call<Twitch> call, Response<Twitch> response )
//             {
//                 List<Stream> gameList = response.body().getStreams();
// 
// 
//                 for ( Stream game : gameList )
//                 {
//                     Log.i( "RETRO_RESPONSE", "onResponse: " + game.getGame() );
//                 }
//             }
// 
//             @Override public void onFailure( Call<Twitch> call, Throwable t )
//             {
// 
//             }
//         } );
// 
//     }
// }
// 
// Path: Retrofit/retrofit/app/src/main/java/com/example/retrofit/http/ApiModule.java
// @Module(includes = ApplicationContextModule.class)
// public class ApiModule
// {
// 
//     public final String BASE_URL = "https://api.twitch.tv/kraken/";
// 
//     @Provides
//     public OkHttpClient provideClient( final Context context )
//     {
// 
// 
//         OkHttpClient.Builder httpClient =
//                 new OkHttpClient.Builder();
// 
// 
//         httpClient.addInterceptor( new Interceptor()
//         {
//             @Override
//             public Response intercept( Interceptor.Chain chain )
//             {
//                 Request original = chain.request();
//                 HttpUrl originalHttpUrl = original.url();
// 
//                 HttpUrl url = originalHttpUrl.newBuilder()
//                         .addQueryParameter( "client_id", context.getString( R.string.twitch_id ) )
//                         .build();
// 
//                 // Request customization: add request headers
//                 Request.Builder requestBuilder = original.newBuilder()
//                         .url( url );
// 
//                 Request request = requestBuilder.build();
//                 try
//                 {
//                     return chain.proceed( request );
//                 }
//                 catch ( IOException e )
//                 {
//                     e.printStackTrace();
//                     return null;
//                 }
// 
//             }
//         } );
// 
// 
//         HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
// 
// 
//         interceptor.setLevel( HttpLoggingInterceptor.Level.BODY );
//         return httpClient.addInterceptor( interceptor )
//                 .build();
// 
//     }
// 
//     @Provides
//     public Retrofit provideRetrofit( String baseURL, OkHttpClient client )
//     {
//         return new Retrofit.Builder()
//                 .baseUrl( baseURL )
//                 .client( client )
//                 .addConverterFactory( GsonConverterFactory.create() )
//                 .build();
//     }
// 
//     @Provides
//     public TwitchAPI provideApiService(Context context)
//     {
//         return provideRetrofit( BASE_URL, provideClient(context) ).create( TwitchAPI.class );
//     }
// }


// Path: Retrofit/retrofit/app/src/main/java/com/example/retrofit/root/ApplicationContextComponent.java
import com.example.retrofit.MainActivity;
import com.example.retrofit.http.ApiModule;
import dagger.Component;

package com.example.retrofit.root;



/**
 * Created by tzia on 17-May-17.
 */


@Component(modules = {ApplicationContextModule.class, ApiModule.class})
// Search for dependencies in these listed modules or components in some cases
public interface ApplicationContextComponent
{


    void inject(MainActivity target);