Skip to content

Instantly share code, notes, and snippets.

View EfeBudak's full-sized avatar
learn->work->learn->work

Efe Budak EfeBudak

learn->work->learn->work
View GitHub Profile
@EfeBudak
EfeBudak / Presenter.java
Last active May 30, 2017 08:30
Android Pagination with MVP
@Override
public void onLoadNextPage() {
mCurrentPage++;
mView.setRefreshing(true);
getPage();
}
@Override
public void onRefresh() {
mCurrentPage = 0;
mView.setRefreshing(true);
@EfeBudak
EfeBudak / Fragment.java
Created May 30, 2017 08:31
Android Pagination with MVP
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int visibleItemCount = recyclerView.getLayoutManager().getChildCount();
int totalItemCount = recyclerView.getLayoutManager().getItemCount();
int firstVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
if (!mSwipeRefreshLayout.isRefreshing() && !mEndOfList) {
if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount - Constants.PAGINATION_MARGIN
@EfeBudak
EfeBudak / Presenter.java getPage()
Created May 30, 2017 08:33
Android Pagination with MVP
private void getPage() {
mCompositeDisposable.add(mRepository.getPage(mCurrentPage)
.observeOn(mSchedulerProvider.ui())
.subscribeOn(mSchedulerProvider.io())
.subscribeWith(new DisposableSingleObserver<Products>(){
@Override
public void onSuccess( @io.reactivex.annotations.NonNull Products products) {
mView.setRefreshing(false);
mView.refreshPageItems(products.getProducts());
@EfeBudak
EfeBudak / Activity.java
Created May 30, 2017 08:35
Android Pagination with MVP
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mPresenter = new Presenter(
fragment,
SchedulerProvider.getInstance(),
Repository.getInstance(
LocalDataSource.getInstance(),
@EfeBudak
EfeBudak / ActivityModule.java
Created July 3, 2017 13:57
Dagger 2.11 ActivityModule
@ActivityScope
@Module
public abstract class ActivityModule {
@ActivityScope
@ContributesAndroidInjector(modules = MovieListFragmentProvider.class)
abstract MovieListActivity contributesMovieListActivity();
@ActivityScope
@ContributesAndroidInjector(modules = MovieDetailFragmentProvider.class)
@EfeBudak
EfeBudak / AppComponent.java
Created July 3, 2017 13:59
Dagger 2.11 AppComponent
@Singleton
@Component(modules = {
AndroidInjectionModule.class,
AppModule.class,
ApiModule.class,
ActivityModule.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
@EfeBudak
EfeBudak / MovieDetailFragmentProvider.java
Created July 3, 2017 14:09
Dagger 2.11 MovieDetailFragmentProvider
@FragmentScope
@Module
public abstract class MovieDetailFragmentProvider {
@FragmentScope
@ContributesAndroidInjector(modules = MovieDetailFragmentModule.class)
abstract MovieDetailFragment contributesMovieDetailFragment();
}
@EfeBudak
EfeBudak / MovieDetailFragmentModule.java
Created July 3, 2017 14:10
Dagger 2.11 MovieDetailFragmentModule
@FragmentScope
@Module
public class MovieDetailFragmentModule {
@FragmentScope
@Provides
MovieDetailContract.View provideDetailView(MovieDetailFragment movieDetailFragment) {
return movieDetailFragment;
}
@EfeBudak
EfeBudak / FragmentModule.java
Last active July 4, 2017 11:20
Dagger 2.11 FragmentModule
@Module
public abstract class FragmentModule {
@FragmentScope
@ContributesAndroidInjector(modules = MovieListFragmentModule.class)
abstract MovieListFragment contributesMovieListFragment();
@FragmentScope
@ContributesAndroidInjector(modules = MovieDetailFragmentModule.class)
abstract MovieDetailFragment contributesMovieDetailFragment();
@EfeBudak
EfeBudak / secret.properties
Created July 8, 2017 12:09
Sample secret.properties file for popular-movies-with-dagger
BASE_URL="https://api.themoviedb.org/"
BASE_IMAGE_URL="https://image.tmdb.org/t/p/"
API_VERSION="3/"
API_KEY="TODO_GO_GET_YOUR_API_KEY_FROM_https://www.themoviedb.org/settings/api"