package com.shahul3d.indiasatelliteweather.utils; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import com.shahul3d.indiasatelliteweather.controllers.WeatherApplication; import com.shahul3d.indiasatelliteweather.data.AppConstants; import com.squareup.okhttp.Cache; import com.squareup.okhttp.CacheControl; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import java.util.concurrent.TimeUnit; public class HttpClient { private static OkHttpClient okHttpClient; public enum CacheType { NO_CACHE, USE_CACHE, FORCE_CACHE } private HttpClient() { okHttpClient = getInstance(); } public static synchronized OkHttpClient getInstance() { if (okHttpClient == null) { okHttpClient = new OkHttpClient(); configureDefaultTimeouts(); initializeHttpCache(); //TODO: Stetho library should be included. // okHttpClient.networkInterceptors().add(new StethoInterceptor()); } return okHttpClient; } private static void configureDefaultTimeouts() { okHttpClient.setConnectTimeout(AppConstants.HTTP_DEFAULT_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); okHttpClient.setReadTimeout(AppConstants.HTTP_DEFAULT_READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); okHttpClient.setWriteTimeout(AppConstants.HTTP_DEFAULT_WRITE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); } private static void initializeHttpCache() { try { int cacheSize = 10 * 1024 * 1024; // 10 MiB Cache responseCache = new Cache(WeatherApplication.getContext().getCacheDir(), cacheSize); okHttpClient.setCache(responseCache); } catch (Exception e) { CrashUtils.trackException("Can't set HTTP cache", e); } } public static Request generateRequest(String url) { return generateRequest(url, null); } public static Request generateRequest(String url, CacheType cacheType) { Request.Builder builder = new Request.Builder().url(url); if (cacheType == CacheType.USE_CACHE) { //Using cache, so the same call wont happen again for next 1 day. builder.cacheControl(new CacheControl.Builder() .maxStale(1, TimeUnit.DAYS) .build()); } return builder.build(); } public static boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) WeatherApplication.getContext().getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager != null) { NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting(); } return false; } }