/okhttp-preloader-interceptor

An OkHttp interceptor which uses HTTP requests queue with RxJava.

Primary LanguageJavaApache License 2.0Apache-2.0

okhttp-preloader-interceptor

An OkHttp interceptor which uses HTTP requests queue with RxJava.

flow-chart

Prerequisite

  1. Add it in your root build.gradle at the end of repositories:
allprojects {
    repositories {
    	...
        maven { url "https://jitpack.io" }
  1. Add the dependencies:
...
implementation("com.squareup.okhttp3:okhttp:4.2.x")  
implementation("io.reactivex.rxjava2:rxjava:2.x.x")
implementation("com.github.arin-pang:okhttp-preloader-interceptor:v0.1.0")
...

Adding interceptor

public static PublishSubject<HTTPPreloaderInterceptor.PreloaderInfo> 
  publishCall = PublishSubject.create();

HTTPPreloaderInterceptor preloaderInterceptor =  new HTTPPreloaderInterceptor(publishCall); 
 
OkHttpClient okHttpClient = builder  
  .addInterceptor(preloaderInterceptor)  
  .build();  

Get queued requests when requests started/stopped

private CompositeDisposable compositeDisposable = new CompositeDisposable();

private void changePreloader(HTTPPreloaderInterceptor.PreloaderInfo info){  
    if(info.isRemained()){  
        // showPreloaderUI()  
    } else {  
        // hidePreloaderUI()
    }  
}

compositeDisposable.add(  
        APIClient.publishCall.subscribe(  
                info -> {  
                    changePreloader(info);  
                }  
        )  
);

Get queued requests when requests started only

compositeDisposable.add(  
	APIClient.publishCall.ofType(HTTPPreloaderInterceptor.PreloaderRequest.class).subscribe(  
	        info -> {  
				  enqueuedRequest(info);
	        }  
	);
);

Get queued requests when requests stopped only

compositeDisposable.add(  
	APIClient.publishCall.ofType(HTTPPreloaderInterceptor.PreloaderResponse.class).subscribe(  
	        info -> {  
				  dequeuedRequest(info);
	        }
	);
);

Destroy

compositeDisposable.dispose();

Logging

HTTPPreloaderInterceptor preloaderInterceptor =  new HTTPPreloaderInterceptor(publishCallCount);  
preloaderInterceptor.logLevel(HTTPPreloaderInterceptor.LogLevel.REMAINED_REQUESTS_COUNT);  

You can change the log level at any time by calling logLevel().

To log to a custom location, pass a Logger instance to the constructor.

HttpPreloaderInterceptor logging = new HttpPreloaderInterceptor(new Logger() {
  @Override public void log(String message) {
    Timber.tag("OkHttp").d(message);
  }
});

Warning: The logs generated by this interceptor when using the REMAINED_REQUESTS or MODIFIED_REQUEST log levels have the potential to leak sensitive information such as "Authorization" or "Cookie" headers and the contents of request and response bodies. This data should only be logged in a controlled way or in a non-production environment.