Browse Source

Hide default category if it doesn't have any manga

inorichi 9 years ago
parent
commit
62535c77ae

+ 10 - 2
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() {

+ 10 - 2
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() {

+ 4 - 0
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;
+    }
+
 }

+ 43 - 7
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<LibraryPresenter>
     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<LibraryPresenter>
 
 
         adapter = new LibraryAdapter(getChildFragmentManager());
-        categoriesPager.setAdapter(adapter);
+        viewPager.setAdapter(adapter);
 
         return view;
     }
@@ -80,6 +82,18 @@ public class LibraryFragment extends BaseRxFragment<LibraryPresenter>
         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<LibraryPresenter>
         ((MainActivity) getActivity()).pushFragment(fragment);
     }
 
-    public void onNextCategories(List<Category> categories) {
+    @EventBusHook
+    public void onEventMainThread(LibraryMangasEvent event) {
+        List<Manga> 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<Category> categories) {
         List<Category> actualCategories = new ArrayList<>();
 
         Category defaultCat = Category.create("Default");
@@ -115,10 +145,13 @@ public class LibraryFragment extends BaseRxFragment<LibraryPresenter>
         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<Category> 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<LibraryPresenter>
             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<LibraryPresenter>
                 .positiveText(R.string.button_ok)
                 .negativeText(R.string.button_cancel)
                 .show();
-
     }
 
     @Nullable

+ 22 - 15
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<LibraryFragment> {
 
@@ -33,6 +33,8 @@ public class LibraryPresenter extends BasePresenter<LibraryFragment> {
     protected List<Category> categories;
     protected List<Manga> selectedMangas;
 
+    private Subscription librarySubscription;
+
     private static final int GET_CATEGORIES = 1;
 
     @Override
@@ -43,14 +45,9 @@ public class LibraryPresenter extends BasePresenter<LibraryFragment> {
 
         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<LibraryFragment> {
 
     public Observable<List<Category>> 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<LibraryFragment> {
                         .toMap(pair -> pair.first, pair -> pair.second));
     }
 
-    public void deleteMangas(Observable<Manga> 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<LibraryFragment> {
         return names;
     }
 
+    public void deleteMangas() {
+        for (Manga manga : selectedMangas) {
+            manga.favorite = false;
+        }
+
+        db.insertMangas(selectedMangas).executeAsBlocking();
+    }
+
     public void moveMangasToCategories(Integer[] positions, List<Manga> mangas) {
         List<Category> categoriesToAdd = new ArrayList<>();
         for (Integer index : positions) {