Add composite subscriptions

This commit is contained in:
inorichi 2015-10-01 16:52:08 +02:00
parent e386257d34
commit 90b0948968
7 changed files with 35 additions and 46 deletions

View file

@ -57,15 +57,13 @@ dependencies {
compile "com.android.support:design:$SUPPORT_LIBRARY_VERSION" compile "com.android.support:design:$SUPPORT_LIBRARY_VERSION"
compile "com.android.support:recyclerview-v7:$SUPPORT_LIBRARY_VERSION" compile "com.android.support:recyclerview-v7:$SUPPORT_LIBRARY_VERSION"
compile "com.android.support:support-annotations:$SUPPORT_LIBRARY_VERSION" compile "com.android.support:support-annotations:$SUPPORT_LIBRARY_VERSION"
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'
compile 'com.squareup.okhttp:okhttp:2.4.0' compile 'com.squareup.okhttp:okhttp:2.4.0'
compile 'io.reactivex:rxandroid:1.0.1'
compile "com.pushtorefresh.storio:sqlite:$STORIO_VERSION" compile "com.pushtorefresh.storio:sqlite:$STORIO_VERSION"
compile "com.pushtorefresh.storio:sqlite-annotations:$STORIO_VERSION" compile "com.pushtorefresh.storio:sqlite-annotations:$STORIO_VERSION"
compile 'de.greenrobot:eventbus:2.4.0' compile 'de.greenrobot:eventbus:2.4.0'
compile 'com.github.bumptech.glide:glide:3.6.1' compile 'com.github.bumptech.glide:glide:3.6.1'
compile 'de.hdodenhof:circleimageview:1.3.0'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.jakewharton:butterknife:7.0.1' compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.jakewharton.timber:timber:3.1.0' compile 'com.jakewharton.timber:timber:3.1.0'
compile 'uk.co.ribot:easyadapter:1.5.0@aar' compile 'uk.co.ribot:easyadapter:1.5.0@aar'

View file

@ -1,6 +1,7 @@
package eu.kanade.mangafeed.presenter; package eu.kanade.mangafeed.presenter;
import de.greenrobot.event.EventBus; import de.greenrobot.event.EventBus;
import rx.subscriptions.CompositeSubscription;
public class BasePresenter { public class BasePresenter {
@ -15,4 +16,11 @@ public class BasePresenter {
public void unregisterForEvents() { public void unregisterForEvents() {
EventBus.getDefault().unregister(this); EventBus.getDefault().unregister(this);
} }
protected CompositeSubscription subscriptions = new CompositeSubscription();
public void destroySubscriptions() {
subscriptions.unsubscribe();
}
} }

View file

@ -11,7 +11,6 @@ import eu.kanade.mangafeed.data.models.Manga;
import eu.kanade.mangafeed.ui.activity.MangaDetailActivity; import eu.kanade.mangafeed.ui.activity.MangaDetailActivity;
import eu.kanade.mangafeed.ui.adapter.LibraryAdapter; import eu.kanade.mangafeed.ui.adapter.LibraryAdapter;
import eu.kanade.mangafeed.view.LibraryView; import eu.kanade.mangafeed.view.LibraryView;
import rx.Subscription;
import static rx.android.schedulers.AndroidSchedulers.mainThread; import static rx.android.schedulers.AndroidSchedulers.mainThread;
@ -23,7 +22,6 @@ public class LibraryPresenter extends BasePresenter {
@Inject PreferencesHelper prefs; @Inject PreferencesHelper prefs;
LibraryAdapter<Manga> adapter; LibraryAdapter<Manga> adapter;
private Subscription mangaListSubscription;
public LibraryPresenter(LibraryView view) { public LibraryPresenter(LibraryView view) {
this.view = view; this.view = view;
@ -47,22 +45,18 @@ public class LibraryPresenter extends BasePresenter {
} }
public void initializeMangas() { public void initializeMangas() {
mangaListSubscription = db.manga.getWithUnread() adapter = new LibraryAdapter<>(view.getActivity());
.observeOn(mainThread())
.subscribe(mangas -> {
adapter = new LibraryAdapter<>(view.getActivity(), mangas);
view.setAdapter(adapter); view.setAdapter(adapter);
}); view.setMangaClickListener();
subscriptions.add(db.manga.getWithUnread()
.observeOn(mainThread())
.subscribe(adapter::setNewItems)
);
} }
public void onQueryTextChange(String query) { public void onQueryTextChange(String query) {
adapter.getFilter().filter(query); adapter.getFilter().filter(query);
} }
public void destroySubscriptions() {
if (mangaListSubscription != null) {
mangaListSubscription.unsubscribe();
}
}
} }

View file

@ -4,6 +4,7 @@ import android.content.Context;
import android.widget.Filter; import android.widget.Filter;
import android.widget.Filterable; import android.widget.Filterable;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import eu.kanade.mangafeed.data.models.Manga; import eu.kanade.mangafeed.data.models.Manga;
@ -15,12 +16,16 @@ public class LibraryAdapter<T> extends EasyAdapter<T> implements Filterable {
List<Manga> mangas; List<Manga> mangas;
Filter filter; Filter filter;
public LibraryAdapter(Context context, List<T> listItems) { public LibraryAdapter(Context context) {
super(context, MangaLibraryHolder.class, listItems); super(context, MangaLibraryHolder.class);
mangas = (List<Manga>)getItems();
filter = new CatalogueFilter(); filter = new CatalogueFilter();
} }
public void setNewItems(List<T> list) {
super.setItems(list);
mangas = (List<Manga>)list;
}
@Override @Override
public Filter getFilter() { public Filter getFilter() {
return filter; return filter;

View file

@ -48,21 +48,14 @@ public class LibraryFragment extends BaseFragment implements LibraryView {
activity.setToolbarTitle(getString(R.string.library_title)); activity.setToolbarTitle(getString(R.string.library_title));
ButterKnife.bind(this, view); ButterKnife.bind(this, view);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setMangaClickListener();
presenter.initializeMangas(); presenter.initializeMangas();
return view;
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
presenter.destroySubscriptions(); presenter.destroySubscriptions();
} }
@ -88,12 +81,6 @@ public class LibraryFragment extends BaseFragment implements LibraryView {
}); });
} }
private void setMangaClickListener() {
grid.setOnItemClickListener(
(parent, view, position, id) ->
presenter.onMangaClick(position)
);
}
// LibraryView // LibraryView
@ -101,4 +88,11 @@ public class LibraryFragment extends BaseFragment implements LibraryView {
grid.setAdapter(adapter); grid.setAdapter(adapter);
} }
public void setMangaClickListener() {
grid.setOnItemClickListener(
(parent, view, position, id) ->
presenter.onMangaClick(position)
);
}
} }

View file

@ -4,19 +4,8 @@ import android.content.Context;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import retrofit.HttpException;
public class NetworkUtil { public class NetworkUtil {
/**
* Returns true if the Throwable is an instance of RetrofitError with an
* http status code equals to the given one.
*/
public static boolean isHttpStatusCode(Throwable throwable, int statusCode) {
return throwable instanceof HttpException
&& ((HttpException) throwable).code() == statusCode;
}
public static boolean isNetworkConnected(Context context) { public static boolean isNetworkConnected(Context context) {
ConnectivityManager cm = ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

View file

@ -5,4 +5,5 @@ import uk.co.ribot.easyadapter.EasyAdapter;
public interface LibraryView extends BaseView { public interface LibraryView extends BaseView {
void setAdapter(EasyAdapter mangas); void setAdapter(EasyAdapter mangas);
void setMangaClickListener();
} }