diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/base/activity/BaseActivity.java b/app/src/main/java/eu/kanade/mangafeed/ui/base/activity/BaseActivity.java index a887156af8..37dced98c3 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/base/activity/BaseActivity.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/base/activity/BaseActivity.java @@ -59,11 +59,19 @@ public class BaseActivity extends AppCompatActivity { } public void registerForStickyEvents() { - EventBus.getDefault().registerSticky(this); + registerForStickyEvents(0); + } + + public void registerForStickyEvents(int priority) { + EventBus.getDefault().registerSticky(this, priority); } public void registerForEvents() { - EventBus.getDefault().register(this); + registerForEvents(0); + } + + public void registerForEvents(int priority) { + EventBus.getDefault().register(this, priority); } public void unregisterForEvents() { diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/base/fragment/BaseFragment.java b/app/src/main/java/eu/kanade/mangafeed/ui/base/fragment/BaseFragment.java index b4c7ae02ac..c6f070cb92 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/base/fragment/BaseFragment.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/base/fragment/BaseFragment.java @@ -20,11 +20,19 @@ public class BaseFragment extends Fragment { } public void registerForStickyEvents() { - EventBus.getDefault().registerSticky(this); + registerForStickyEvents(0); + } + + public void registerForStickyEvents(int priority) { + EventBus.getDefault().registerSticky(this, priority); } public void registerForEvents() { - EventBus.getDefault().register(this); + registerForEvents(0); + } + + public void registerForEvents(int priority) { + EventBus.getDefault().register(this, priority); } public void unregisterForEvents() { diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryAdapter.java b/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryAdapter.java index 688b3c0ea4..39d8fdc6ad 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryAdapter.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryAdapter.java @@ -42,4 +42,8 @@ public class LibraryAdapter extends SmartFragmentStatePagerAdapter { } } + public boolean hasDefaultCategory() { + return categories.get(0).id == 0; + } + } \ No newline at end of file diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryFragment.java b/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryFragment.java index c0f55f46e0..0aa125c4b5 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryFragment.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryFragment.java @@ -27,10 +27,12 @@ import eu.kanade.mangafeed.R; import eu.kanade.mangafeed.data.database.models.Category; import eu.kanade.mangafeed.data.database.models.Manga; import eu.kanade.mangafeed.data.sync.LibraryUpdateService; +import eu.kanade.mangafeed.event.LibraryMangasEvent; import eu.kanade.mangafeed.ui.base.activity.BaseActivity; import eu.kanade.mangafeed.ui.base.fragment.BaseRxFragment; import eu.kanade.mangafeed.ui.library.category.CategoryFragment; import eu.kanade.mangafeed.ui.main.MainActivity; +import eu.kanade.mangafeed.util.EventBusHook; import nucleus.factory.RequiresPresenter; @RequiresPresenter(LibraryPresenter.class) @@ -40,7 +42,7 @@ public class LibraryFragment extends BaseRxFragment TabLayout tabs; AppBarLayout appBar; - @Bind(R.id.view_pager) ViewPager categoriesPager; + @Bind(R.id.view_pager) ViewPager viewPager; protected LibraryAdapter adapter; private ActionMode actionMode; @@ -69,7 +71,7 @@ public class LibraryFragment extends BaseRxFragment adapter = new LibraryAdapter(getChildFragmentManager()); - categoriesPager.setAdapter(adapter); + viewPager.setAdapter(adapter); return view; } @@ -80,6 +82,18 @@ public class LibraryFragment extends BaseRxFragment super.onDestroyView(); } + @Override + public void onResume() { + super.onResume(); + registerForStickyEvents(1); + } + + @Override + public void onPause() { + unregisterForEvents(); + super.onPause(); + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.library, menu); @@ -107,7 +121,23 @@ public class LibraryFragment extends BaseRxFragment ((MainActivity) getActivity()).pushFragment(fragment); } - public void onNextCategories(List categories) { + @EventBusHook + public void onEventMainThread(LibraryMangasEvent event) { + List mangasInDefaultCategory = event.getMangas().get(0); + boolean hasDefaultCategory = adapter.hasDefaultCategory(); + // If there are mangas in the default category and the adapter doesn't have it, + // create the default category + if (mangasInDefaultCategory != null && !hasDefaultCategory) { + setCategoriesWithDefault(getPresenter().categories); + } + // If there aren't mangas in the default category and the adapter have it, + // remove the default category + else if (mangasInDefaultCategory == null && hasDefaultCategory) { + setCategories(getPresenter().categories); + } + } + + public void setCategoriesWithDefault(List categories) { List actualCategories = new ArrayList<>(); Category defaultCat = Category.create("Default"); @@ -115,10 +145,13 @@ public class LibraryFragment extends BaseRxFragment actualCategories.add(defaultCat); actualCategories.addAll(categories); - adapter.setCategories(actualCategories); - tabs.setupWithViewPager(categoriesPager); + setCategories(actualCategories); + } - tabs.setVisibility(actualCategories.size() == 1 ? View.GONE : View.VISIBLE); + private void setCategories(List categories) { + adapter.setCategories(categories); + tabs.setupWithViewPager(viewPager); + tabs.setVisibility(categories.size() == 1 ? View.GONE : View.VISIBLE); } public void setContextTitle(int count) { @@ -143,6 +176,10 @@ public class LibraryFragment extends BaseRxFragment case R.id.action_move_to_category: moveMangasToCategories(getPresenter().selectedMangas); return true; + case R.id.action_delete: + getPresenter().deleteMangas(); + destroyActionModeIfNeeded(); + return true; } return false; } @@ -172,7 +209,6 @@ public class LibraryFragment extends BaseRxFragment .positiveText(R.string.button_ok) .negativeText(R.string.button_cancel) .show(); - } @Nullable diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryPresenter.java b/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryPresenter.java index 03181be116..cc13a8a4c6 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryPresenter.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/library/LibraryPresenter.java @@ -20,8 +20,8 @@ import eu.kanade.mangafeed.data.source.SourceManager; import eu.kanade.mangafeed.event.LibraryMangasEvent; import eu.kanade.mangafeed.ui.base.presenter.BasePresenter; import rx.Observable; +import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; public class LibraryPresenter extends BasePresenter { @@ -33,6 +33,8 @@ public class LibraryPresenter extends BasePresenter { protected List categories; protected List selectedMangas; + private Subscription librarySubscription; + private static final int GET_CATEGORIES = 1; @Override @@ -43,14 +45,9 @@ public class LibraryPresenter extends BasePresenter { restartableLatestCache(GET_CATEGORIES, this::getCategoriesObservable, - LibraryFragment::onNextCategories); + LibraryFragment::setCategoriesWithDefault); start(GET_CATEGORIES); - - add(getLibraryMangasObservable() - .subscribe(mangas -> - EventBus.getDefault().postSticky(new LibraryMangasEvent(mangas)))); - } @Override @@ -61,7 +58,10 @@ public class LibraryPresenter extends BasePresenter { public Observable> getCategoriesObservable() { return db.getCategories().createObservable() - .doOnNext(categories -> this.categories = categories) + .doOnNext(categories -> { + this.categories = categories; + subscribeToLibrary(); + }) .observeOn(AndroidSchedulers.mainThread()); } @@ -74,13 +74,12 @@ public class LibraryPresenter extends BasePresenter { .toMap(pair -> pair.first, pair -> pair.second)); } - public void deleteMangas(Observable selectedMangas) { - add(selectedMangas - .subscribeOn(Schedulers.io()) - .doOnNext(manga -> manga.favorite = false) - .toList() - .flatMap(mangas -> db.insertMangas(mangas).createObservable()) - .subscribe()); + private void subscribeToLibrary() { + if (librarySubscription != null && !librarySubscription.isUnsubscribed()) + return; + + add(librarySubscription = getLibraryMangasObservable().subscribe( + mangas -> EventBus.getDefault().postSticky(new LibraryMangasEvent(mangas)))); } public void setSelection(Manga manga, boolean selected) { @@ -102,6 +101,14 @@ public class LibraryPresenter extends BasePresenter { return names; } + public void deleteMangas() { + for (Manga manga : selectedMangas) { + manga.favorite = false; + } + + db.insertMangas(selectedMangas).executeAsBlocking(); + } + public void moveMangasToCategories(Integer[] positions, List mangas) { List categoriesToAdd = new ArrayList<>(); for (Integer index : positions) {