// Path: app/src/main/java/com/nilhcem/devoxxfr/DevoxxApp.java
// @DebugLog
// public class DevoxxApp extends Application {
// 
//     private AppComponent component;
// 
//     public static DevoxxApp get(Context context) {
//         return (DevoxxApp) context.getApplicationContext();
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         AndroidThreeTen.init(this);
//         initGraph();
//         initLogger();
//     }
// 
//     public AppComponent component() {
//         return component;
//     }
// 
//     private void initGraph() {
//         component = AppComponent.Initializer.init(this);
//     }
// 
//     private void initLogger() {
//         Timber.plant(new Timber.DebugTree());
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/devoxxfr/core/dagger/module/ApiModule.java
// @Module
// public final class ApiModule {
// 
//     @Provides @Singleton ApiEndpoint provideApiEndpoint(Application context) {
//         return ApiEndpoint.get(context);
//     }
// 
//     @Provides @Singleton Retrofit provideRetrofit(OkHttpClient client, Moshi moshi, ApiEndpoint endpoint) {
//         return new Retrofit.Builder()
//                 .client(client)
//                 .baseUrl(endpoint.url)
//                 .addConverterFactory(MoshiConverterFactory.create(moshi))
//                 .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
//                 .build();
//     }
// 
//     @Provides @Singleton DevoxxService provideDevoxxService(Retrofit retrofit) {
//         return retrofit.create(DevoxxService.class);
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/devoxxfr/core/dagger/module/AppModule.java
// @Module
// public final class AppModule {
// 
//     private final DevoxxApp app;
// 
//     public AppModule(DevoxxApp app) {
//         this.app = app;
//     }
// 
//     @Provides @Singleton Application provideApplication() {
//         return app;
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/devoxxfr/core/dagger/module/DataModule.java
// @Module(includes = OkHttpModule.class)
// public final class DataModule {
// 
//     private static final long DISK_CACHE_SIZE = 31_457_280; // 30MB
// 
//     @Provides @Singleton SharedPreferences provideSharedPreferences(Application app) {
//         return PreferenceManager.getDefaultSharedPreferences(app);
//     }
// 
//     @Provides @Singleton Moshi provideMoshi(LocalDateTimeAdapter localDateTimeAdapter) {
//         return new Moshi.Builder()
//                 .add(localDateTimeAdapter)
//                 .build();
//     }
// 
//     @Provides @Singleton OkHttpClient.Builder provideOkHttpClientBuilder(Application app) {
//         File cacheDir = new File(app.getCacheDir(), "http");
//         Cache cache = new Cache(cacheDir, DISK_CACHE_SIZE);
//         return new OkHttpClient.Builder().cache(cache);
//     }
// 
//     @Provides @Singleton Picasso providePicasso(Application app, OkHttpClient client) {
//         return new Picasso.Builder(app)
//                 .downloader(new OkHttp3Downloader(client))
//                 .listener((picasso, uri, e) -> Timber.e(e, "Failed to load image: %s", uri))
//                 .build();
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/devoxxfr/core/dagger/module/DatabaseModule.java
// @Module
// public class DatabaseModule {
// 
//     static final String TAG = "database";
// 
//     @Provides @Singleton SQLiteOpenHelper provideSQLiteOpenHelper(Application application) {
//         return new DbOpenHelper(application);
//     }
// 
//     @Provides @Singleton SqlBrite provideSqlBrite() {
//         return SqlBrite.create(Timber.tag(TAG)::v);
//     }
// 
//     @Provides @Singleton BriteDatabase provideBriteDatabase(SqlBrite sqlBrite, SQLiteOpenHelper helper) {
//         return sqlBrite.wrapDatabaseHelper(helper, Schedulers.immediate());
//     }
// }


import com.nilhcem.devoxxfr.DevoxxApp;
import com.nilhcem.devoxxfr.core.dagger.module.ApiModule;
import com.nilhcem.devoxxfr.core.dagger.module.AppModule;
import com.nilhcem.devoxxfr.core.dagger.module.DataModule;
import com.nilhcem.devoxxfr.core.dagger.module.DatabaseModule;
import javax.inject.Singleton;
import dagger.Component;
package com.nilhcem.devoxxfr.core.dagger;




@Singleton
@Component(modules = {AppModule.class, ApiModule.class, DataModule.class, DatabaseModule.class})
public interface AppComponent extends AppGraph {

    /**
     * An initializer that creates the production graph from an application.
     */
    final class Initializer {

        private Initializer() {
            throw new UnsupportedOperationException();
        }

        public static AppComponent init(DevoxxApp app) {
            return DaggerAppComponent.builder()
                    .appModule(new AppModule(app))
                    .apiModule(new ApiModule())
                    .dataModule(new DataModule())
// Path: app/src/main/java/com/nilhcem/devoxxfr/DevoxxApp.java
// @DebugLog
// public class DevoxxApp extends Application {
// 
//     private AppComponent component;
// 
//     public static DevoxxApp get(Context context) {
//         return (DevoxxApp) context.getApplicationContext();
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         AndroidThreeTen.init(this);
//         initGraph();
//         initLogger();
//     }
// 
//     public AppComponent component() {
//         return component;
//     }
// 
//     private void initGraph() {
//         component = AppComponent.Initializer.init(this);
//     }
// 
//     private void initLogger() {
//         Timber.plant(new Timber.DebugTree());
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/devoxxfr/core/dagger/module/ApiModule.java
// @Module
// public final class ApiModule {
// 
//     @Provides @Singleton ApiEndpoint provideApiEndpoint(Application context) {
//         return ApiEndpoint.get(context);
//     }
// 
//     @Provides @Singleton Retrofit provideRetrofit(OkHttpClient client, Moshi moshi, ApiEndpoint endpoint) {
//         return new Retrofit.Builder()
//                 .client(client)
//                 .baseUrl(endpoint.url)
//                 .addConverterFactory(MoshiConverterFactory.create(moshi))
//                 .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
//                 .build();
//     }
// 
//     @Provides @Singleton DevoxxService provideDevoxxService(Retrofit retrofit) {
//         return retrofit.create(DevoxxService.class);
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/devoxxfr/core/dagger/module/AppModule.java
// @Module
// public final class AppModule {
// 
//     private final DevoxxApp app;
// 
//     public AppModule(DevoxxApp app) {
//         this.app = app;
//     }
// 
//     @Provides @Singleton Application provideApplication() {
//         return app;
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/devoxxfr/core/dagger/module/DataModule.java
// @Module(includes = OkHttpModule.class)
// public final class DataModule {
// 
//     private static final long DISK_CACHE_SIZE = 31_457_280; // 30MB
// 
//     @Provides @Singleton SharedPreferences provideSharedPreferences(Application app) {
//         return PreferenceManager.getDefaultSharedPreferences(app);
//     }
// 
//     @Provides @Singleton Moshi provideMoshi(LocalDateTimeAdapter localDateTimeAdapter) {
//         return new Moshi.Builder()
//                 .add(localDateTimeAdapter)
//                 .build();
//     }
// 
//     @Provides @Singleton OkHttpClient.Builder provideOkHttpClientBuilder(Application app) {
//         File cacheDir = new File(app.getCacheDir(), "http");
//         Cache cache = new Cache(cacheDir, DISK_CACHE_SIZE);
//         return new OkHttpClient.Builder().cache(cache);
//     }
// 
//     @Provides @Singleton Picasso providePicasso(Application app, OkHttpClient client) {
//         return new Picasso.Builder(app)
//                 .downloader(new OkHttp3Downloader(client))
//                 .listener((picasso, uri, e) -> Timber.e(e, "Failed to load image: %s", uri))
//                 .build();
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/devoxxfr/core/dagger/module/DatabaseModule.java
// @Module
// public class DatabaseModule {
// 
//     static final String TAG = "database";
// 
//     @Provides @Singleton SQLiteOpenHelper provideSQLiteOpenHelper(Application application) {
//         return new DbOpenHelper(application);
//     }
// 
//     @Provides @Singleton SqlBrite provideSqlBrite() {
//         return SqlBrite.create(Timber.tag(TAG)::v);
//     }
// 
//     @Provides @Singleton BriteDatabase provideBriteDatabase(SqlBrite sqlBrite, SQLiteOpenHelper helper) {
//         return sqlBrite.wrapDatabaseHelper(helper, Schedulers.immediate());
//     }
// }


// Path: app/src/production/java/com/nilhcem/devoxxfr/core/dagger/AppComponent.java
import com.nilhcem.devoxxfr.DevoxxApp;
import com.nilhcem.devoxxfr.core.dagger.module.ApiModule;
import com.nilhcem.devoxxfr.core.dagger.module.AppModule;
import com.nilhcem.devoxxfr.core.dagger.module.DataModule;
import com.nilhcem.devoxxfr.core.dagger.module.DatabaseModule;
import javax.inject.Singleton;
import dagger.Component;

package com.nilhcem.devoxxfr.core.dagger;




@Singleton
@Component(modules = {AppModule.class, ApiModule.class, DataModule.class, DatabaseModule.class})
public interface AppComponent extends AppGraph {

    /**
     * An initializer that creates the production graph from an application.
     */
    final class Initializer {

        private Initializer() {
            throw new UnsupportedOperationException();
        }

        public static AppComponent init(DevoxxApp app) {
            return DaggerAppComponent.builder()
                    .appModule(new AppModule(app))
                    .apiModule(new ApiModule())
                    .dataModule(new DataModule())
                    .databaseModule(new DatabaseModule())