Skip to content

Instantly share code, notes, and snippets.

@Sanjay-Prajapati
Last active June 15, 2021 12:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Sanjay-Prajapati/d6e7f723d554f5dad80844f5bed2f573 to your computer and use it in GitHub Desktop.
Save Sanjay-Prajapati/d6e7f723d554f5dad80844f5bed2f573 to your computer and use it in GitHub Desktop.
Gist for Network Module creation using Hilt in java
//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation "com.squareup.okhttp3:logging-interceptor:4.9.1"
//Rx
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.12'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.1'
//hilt
implementation 'com.google.dagger:hilt-android:2.37'
annotationProcessor 'com.google.dagger:hilt-android-compiler:2.36'
// navigation component
implementation "androidx.navigation:navigation-fragment:2.3.5"
implementation "androidx.navigation:navigation-ui:2.3.5"
package com.app.myapplication.di;
import android.content.Context;
import com.app.myapplication.BuildConfig;
import com.app.myapplication.data.docs.repository.DocApi;
import java.util.concurrent.TimeUnit;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import dagger.hilt.InstallIn;
import dagger.hilt.android.qualifiers.ApplicationContext;
import dagger.hilt.components.SingletonComponent;
import io.reactivex.schedulers.Schedulers;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
@Module
@InstallIn(SingletonComponent.class)
public class NetworkModule {
@Singleton
@Provides
Retrofit provideRetrofit(OkHttpClient client) {
return new Retrofit.Builder()
.baseUrl(BuildConfig.API_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
.client(client)
.build();
}
@Singleton
@Provides
OkHttpClient provideClient(@ApplicationContext Context context) {
HttpLoggingInterceptor logger = new HttpLoggingInterceptor();
logger.setLevel(HttpLoggingInterceptor.Level.BODY);
return new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.addNetworkInterceptor(logger)
.build();
}
@Singleton
@Provides
DocApi provideDocumentAPI(Retrofit retrofit) {
return retrofit.create(DocApi.class);
}
}
static class RecyclerItemTouchHelper extends ItemTouchHelper.SimpleCallback {
private RecyclerItemTouchHelperListener listener;
public RecyclerItemTouchHelper(int dragDirs, int swipeDirs, RecyclerItemTouchHelperListener listener) {
super(dragDirs, swipeDirs);
this.listener = listener;
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return true;
}
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
if (viewHolder != null) {
final View foregroundView = ((DocViewHolder) viewHolder).mBinding.rlForeground;
getDefaultUIUtil().onSelected(foregroundView);
}
}
@Override
public void onChildDrawOver(Canvas c, RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder, float dX, float dY,
int actionState, boolean isCurrentlyActive) {
final View foregroundView = ((DocViewHolder) viewHolder).mBinding.rlForeground;
getDefaultUIUtil().onDrawOver(c, recyclerView, foregroundView, dX, dY,
actionState, isCurrentlyActive);
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
final View foregroundView = ((DocViewHolder) viewHolder).mBinding.rlForeground;
getDefaultUIUtil().clearView(foregroundView);
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder, float dX, float dY,
int actionState, boolean isCurrentlyActive) {
final View foregroundView = ((DocViewHolder) viewHolder).mBinding.rlForeground;
getDefaultUIUtil().onDraw(c, recyclerView, foregroundView, dX, dY,
actionState, isCurrentlyActive);
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
listener.onSwiped(viewHolder, direction, viewHolder.getAdapterPosition());
}
@Override
public int convertToAbsoluteDirection(int flags, int layoutDirection) {
return super.convertToAbsoluteDirection(flags, layoutDirection);
}
public interface RecyclerItemTouchHelperListener {
void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int position);
}
}
import androidx.lifecycle.MutableLiveData;
import com.app.myapplication.data.docs.entity.ResponseModel;
import com.app.myapplication.domain.base.UiState;
import com.app.myapplication.domain.docs.repository.DocRepository;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.observers.DisposableObserver;
public class DocRepositoryImpl implements DocRepository {
DocApi mApiEndPoint;
@Inject
public DocRepositoryImpl(DocApi api){
mApiEndPoint = api;
}
@Override
public void getReleaseDocuments(CompositeDisposable compositeDisposable, MutableLiveData<UiState<ResponseModel>> callback) {
Disposable disposable = mApiEndPoint.getReleaseDocument()
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<ResponseModel>() {
@Override
public void onNext(@NotNull ResponseModel responseModel) {
callback.postValue(new UiState<>(false, null, responseModel));
}
@Override
public void onError(@NotNull Throwable e) {
callback.postValue(new UiState<>(false, e.getMessage(), null));
}
@Override
public void onComplete() {
}
});
compositeDisposable.add(disposable);
}
}
@Module
@InstallIn(SingletonComponent.class)
abstract public class RepositoryModule {
@Binds
@Singleton
abstract DocRepository provideDocRepository(DocRepositoryImpl repository);
}
ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new DocAdapter
.RecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, (viewHolder, direction, position) -> {
mAdapter.removeItem(position);
});
new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(mBinding.rvDocument);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment