// Path: client/FourFun/app/src/main/java/com/joker/fourfun/FourFun.java
// public class FourFun extends Application {
//     private static FourFun instance;
// 
//     public static FourFun getInstance() {
//         return instance;
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         instance = this;
//         if (LeakCanary.isInAnalyzerProcess(this)) {
//             return;
//         }
//         LeakCanary.install(this);
//     }
// 
//     public Context getContext() {
//         return instance.getApplicationContext();
//     }
// }
// 
// Path: client/FourFun/app/src/main/java/com/joker/fourfun/utils/RetrofitUtil.java
// public class RetrofitUtil {
//     public static final int DEFAULT_TIMEOUT = 10;
//     public static final String BASE_URL = "http://www.icodes.vip/4Fun/";
//     private static Retrofit mRetrofit;
// 
//     public RetrofitUtil() {
//         mRetrofit = new Retrofit.Builder().baseUrl(BASE_URL)
//                 .client(initOkHttp())
//                 .addConverterFactory(GsonConverterFactory.create())
//                 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
//                 .build();
//     }
// 
//     private OkHttpClient initOkHttp() {
//         OkHttpClient.Builder builder = new OkHttpClient.Builder();
//         Interceptor cacheInterceptor = new Interceptor() {
//             @Override
//             public Response intercept(Chain chain) throws IOException {
//                 Request request = chain.request();
//                 if (!SystemUtil.isNetworkConnected()) {
//                     request = request.newBuilder()
//                             .cacheControl(CacheControl.FORCE_CACHE)
//                             .build();
//                 }
//                 Response response = chain.proceed(request);
//                 if (SystemUtil.isNetworkConnected()) {
//                     int maxAge = 0;
//                     // 有网络时, 不缓存, 最大保存时长为0
//                     response.newBuilder()
//                             .header("Cache-Control", "public, max-age=" + maxAge)
//                             .removeHeader("Pragma")
//                             .build();
//                 } else {
//                     // 无网络时，设置超时为4周
//                     int maxStale = 60 * 60 * 24 * 28;
//                     response.newBuilder()
//                             .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
//                             .removeHeader("Pragma")
//                             .build();
//                 }
// 
//                 return response;
//             }
//         };
//         if (BuildConfig.DEBUG) {
//             HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
//             interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//             builder.addInterceptor(interceptor);
//         }
//         File cacheFile = new File(FourFun.getInstance().getCacheDir().getPath());
//         // 设置缓存文件 20MB
//         Cache cache = new Cache(cacheFile, 1024 * 1024 * 20);
//         return builder
//                 .addInterceptor(cacheInterceptor)
//                 .addNetworkInterceptor(cacheInterceptor)
//                 .cache(cache)
//                 .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
//                 .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
//                 .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
//                 .retryOnConnectionFailure(true)
//                 .build();
//     }
// 
//     public <T> T create(Class<T> service) {
//         return mRetrofit.create(service);
//     }
// }


import android.app.Application;
import com.joker.fourfun.FourFun;
import com.joker.fourfun.utils.RetrofitUtil;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
package com.joker.fourfun.di.module;





/**
 * Created by joker on 2016/11/28.
 */
@Module
public class AppModule {
    private Application application;

    public AppModule(Application application) {
        this.application = application;
    }

    @Singleton
    @Provides
    FourFun provideFourFun() {
        return (FourFun) this.application;
    }

    @Singleton
    @Provides
// Path: client/FourFun/app/src/main/java/com/joker/fourfun/FourFun.java
// public class FourFun extends Application {
//     private static FourFun instance;
// 
//     public static FourFun getInstance() {
//         return instance;
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         instance = this;
//         if (LeakCanary.isInAnalyzerProcess(this)) {
//             return;
//         }
//         LeakCanary.install(this);
//     }
// 
//     public Context getContext() {
//         return instance.getApplicationContext();
//     }
// }
// 
// Path: client/FourFun/app/src/main/java/com/joker/fourfun/utils/RetrofitUtil.java
// public class RetrofitUtil {
//     public static final int DEFAULT_TIMEOUT = 10;
//     public static final String BASE_URL = "http://www.icodes.vip/4Fun/";
//     private static Retrofit mRetrofit;
// 
//     public RetrofitUtil() {
//         mRetrofit = new Retrofit.Builder().baseUrl(BASE_URL)
//                 .client(initOkHttp())
//                 .addConverterFactory(GsonConverterFactory.create())
//                 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
//                 .build();
//     }
// 
//     private OkHttpClient initOkHttp() {
//         OkHttpClient.Builder builder = new OkHttpClient.Builder();
//         Interceptor cacheInterceptor = new Interceptor() {
//             @Override
//             public Response intercept(Chain chain) throws IOException {
//                 Request request = chain.request();
//                 if (!SystemUtil.isNetworkConnected()) {
//                     request = request.newBuilder()
//                             .cacheControl(CacheControl.FORCE_CACHE)
//                             .build();
//                 }
//                 Response response = chain.proceed(request);
//                 if (SystemUtil.isNetworkConnected()) {
//                     int maxAge = 0;
//                     // 有网络时, 不缓存, 最大保存时长为0
//                     response.newBuilder()
//                             .header("Cache-Control", "public, max-age=" + maxAge)
//                             .removeHeader("Pragma")
//                             .build();
//                 } else {
//                     // 无网络时，设置超时为4周
//                     int maxStale = 60 * 60 * 24 * 28;
//                     response.newBuilder()
//                             .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
//                             .removeHeader("Pragma")
//                             .build();
//                 }
// 
//                 return response;
//             }
//         };
//         if (BuildConfig.DEBUG) {
//             HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
//             interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//             builder.addInterceptor(interceptor);
//         }
//         File cacheFile = new File(FourFun.getInstance().getCacheDir().getPath());
//         // 设置缓存文件 20MB
//         Cache cache = new Cache(cacheFile, 1024 * 1024 * 20);
//         return builder
//                 .addInterceptor(cacheInterceptor)
//                 .addNetworkInterceptor(cacheInterceptor)
//                 .cache(cache)
//                 .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
//                 .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
//                 .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
//                 .retryOnConnectionFailure(true)
//                 .build();
//     }
// 
//     public <T> T create(Class<T> service) {
//         return mRetrofit.create(service);
//     }
// }


// Path: client/FourFun/app/src/main/java/com/joker/fourfun/di/module/AppModule.java
import android.app.Application;
import com.joker.fourfun.FourFun;
import com.joker.fourfun.utils.RetrofitUtil;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;

package com.joker.fourfun.di.module;





/**
 * Created by joker on 2016/11/28.
 */
@Module
public class AppModule {
    private Application application;

    public AppModule(Application application) {
        this.application = application;
    }

    @Singleton
    @Provides
    FourFun provideFourFun() {
        return (FourFun) this.application;
    }

    @Singleton
    @Provides
    RetrofitUtil provideRetrofitUtil() {