Skip to content

Instantly share code, notes, and snippets.

@malikkurosaki
Created October 1, 2019 06:32
Show Gist options
  • Save malikkurosaki/0bac5eac755c0a01394eb34dda4e1e8a to your computer and use it in GitHub Desktop.
Save malikkurosaki/0bac5eac755c0a01394eb34dda4e1e8a to your computer and use it in GitHub Desktop.
helper penangannan ofline

penangannan offline

package probus.malikkurosaki.probussystem;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;

import java.io.File;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.CacheControl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class Helper_penanganan_offline {

    private boolean isConnected = false;
    private static final String HEADER_CACHE_CONTROL = "Cache-Control";
    private static final String HEADER_PRAGMA = "Pragma";
    private Context context;
    private String TAG = "disini";

    Helper_penanganan_offline(Context context1){
        this.context = context1;
    }

    OkHttpClient client(){
        return new OkHttpClient.Builder()
                   .connectTimeout(15, TimeUnit.SECONDS)
                   .readTimeout(30, TimeUnit.SECONDS)
                   .writeTimeout(15, TimeUnit.SECONDS)
                   .addInterceptor(provideOfflineCacheInterceptor())
                   .addNetworkInterceptor(provideCacheInterceptor())
                   .cache(provideCache())
                   .build();

    }

    public boolean isConnected() {
        return isConnected;
    }
    void setConnected(boolean connected) {
        isConnected = connected;
    }

    private Interceptor provideCacheInterceptor() {
        return chain -> {
            okhttp3.Response response = chain.proceed(chain.request());
            CacheControl cacheControl;
            if (isConnected) {
                cacheControl = new CacheControl.Builder()
                        .maxAge(0, TimeUnit.SECONDS)
                        .build();
            } else {
                cacheControl = new CacheControl.Builder()
                        .maxStale(7, TimeUnit.DAYS)
                        .build();
            }
            return response.newBuilder()
                    .removeHeader(HEADER_PRAGMA)
                    .removeHeader(HEADER_CACHE_CONTROL)
                    .header(HEADER_CACHE_CONTROL, cacheControl.toString())
                    .build();

        };
    }

    private Interceptor provideOfflineCacheInterceptor() {
        return chain -> {
            Request request = chain.request();

            if (!isConnected) {
                CacheControl cacheControl = new CacheControl.Builder()
                        .maxStale(7, TimeUnit.DAYS)
                        .build();

                request = request.newBuilder()
                        .removeHeader(HEADER_PRAGMA)
                        .removeHeader(HEADER_CACHE_CONTROL)
                        .cacheControl(cacheControl)
                        .build();
            }

            return chain.proceed(request);
        };
    }

    private Cache provideCache() {
        Cache cache = null;
        try {
            cache = new Cache(new File(context.getCacheDir(), "http-cache"),
                    10 * 1024 * 1024); // 10 MB
        } catch (Exception e) {
            Log.e(TAG, "Could not create Cache!");
            Toast.makeText(context.getApplicationContext(),"helper penanganan offline tidak dapat membuat cache",Toast.LENGTH_LONG).show();
        }
        return cache;
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment