Hide default category if it doesn't have any manga
This commit is contained in:
parent
1360a90bf9
commit
62535c77ae
5 changed files with 89 additions and 26 deletions
|
@ -59,11 +59,19 @@ public class BaseActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerForStickyEvents() {
|
public void registerForStickyEvents() {
|
||||||
EventBus.getDefault().registerSticky(this);
|
registerForStickyEvents(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForStickyEvents(int priority) {
|
||||||
|
EventBus.getDefault().registerSticky(this, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerForEvents() {
|
public void registerForEvents() {
|
||||||
EventBus.getDefault().register(this);
|
registerForEvents(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForEvents(int priority) {
|
||||||
|
EventBus.getDefault().register(this, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unregisterForEvents() {
|
public void unregisterForEvents() {
|
||||||
|
|
|
@ -20,11 +20,19 @@ public class BaseFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerForStickyEvents() {
|
public void registerForStickyEvents() {
|
||||||
EventBus.getDefault().registerSticky(this);
|
registerForStickyEvents(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForStickyEvents(int priority) {
|
||||||
|
EventBus.getDefault().registerSticky(this, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerForEvents() {
|
public void registerForEvents() {
|
||||||
EventBus.getDefault().register(this);
|
registerForEvents(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForEvents(int priority) {
|
||||||
|
EventBus.getDefault().register(this, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unregisterForEvents() {
|
public void unregisterForEvents() {
|
||||||
|
|
|
@ -42,4 +42,8 @@ public class LibraryAdapter extends SmartFragmentStatePagerAdapter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasDefaultCategory() {
|
||||||
|
return categories.get(0).id == 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -27,10 +27,12 @@ import eu.kanade.mangafeed.R;
|
||||||
import eu.kanade.mangafeed.data.database.models.Category;
|
import eu.kanade.mangafeed.data.database.models.Category;
|
||||||
import eu.kanade.mangafeed.data.database.models.Manga;
|
import eu.kanade.mangafeed.data.database.models.Manga;
|
||||||
import eu.kanade.mangafeed.data.sync.LibraryUpdateService;
|
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.activity.BaseActivity;
|
||||||
import eu.kanade.mangafeed.ui.base.fragment.BaseRxFragment;
|
import eu.kanade.mangafeed.ui.base.fragment.BaseRxFragment;
|
||||||
import eu.kanade.mangafeed.ui.library.category.CategoryFragment;
|
import eu.kanade.mangafeed.ui.library.category.CategoryFragment;
|
||||||
import eu.kanade.mangafeed.ui.main.MainActivity;
|
import eu.kanade.mangafeed.ui.main.MainActivity;
|
||||||
|
import eu.kanade.mangafeed.util.EventBusHook;
|
||||||
import nucleus.factory.RequiresPresenter;
|
import nucleus.factory.RequiresPresenter;
|
||||||
|
|
||||||
@RequiresPresenter(LibraryPresenter.class)
|
@RequiresPresenter(LibraryPresenter.class)
|
||||||
|
@ -40,7 +42,7 @@ public class LibraryFragment extends BaseRxFragment<LibraryPresenter>
|
||||||
TabLayout tabs;
|
TabLayout tabs;
|
||||||
AppBarLayout appBar;
|
AppBarLayout appBar;
|
||||||
|
|
||||||
@Bind(R.id.view_pager) ViewPager categoriesPager;
|
@Bind(R.id.view_pager) ViewPager viewPager;
|
||||||
protected LibraryAdapter adapter;
|
protected LibraryAdapter adapter;
|
||||||
|
|
||||||
private ActionMode actionMode;
|
private ActionMode actionMode;
|
||||||
|
@ -69,7 +71,7 @@ public class LibraryFragment extends BaseRxFragment<LibraryPresenter>
|
||||||
|
|
||||||
|
|
||||||
adapter = new LibraryAdapter(getChildFragmentManager());
|
adapter = new LibraryAdapter(getChildFragmentManager());
|
||||||
categoriesPager.setAdapter(adapter);
|
viewPager.setAdapter(adapter);
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
@ -80,6 +82,18 @@ public class LibraryFragment extends BaseRxFragment<LibraryPresenter>
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
registerForStickyEvents(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
unregisterForEvents();
|
||||||
|
super.onPause();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
inflater.inflate(R.menu.library, menu);
|
inflater.inflate(R.menu.library, menu);
|
||||||
|
@ -107,7 +121,23 @@ public class LibraryFragment extends BaseRxFragment<LibraryPresenter>
|
||||||
((MainActivity) getActivity()).pushFragment(fragment);
|
((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<>();
|
List<Category> actualCategories = new ArrayList<>();
|
||||||
|
|
||||||
Category defaultCat = Category.create("Default");
|
Category defaultCat = Category.create("Default");
|
||||||
|
@ -115,10 +145,13 @@ public class LibraryFragment extends BaseRxFragment<LibraryPresenter>
|
||||||
actualCategories.add(defaultCat);
|
actualCategories.add(defaultCat);
|
||||||
|
|
||||||
actualCategories.addAll(categories);
|
actualCategories.addAll(categories);
|
||||||
adapter.setCategories(actualCategories);
|
setCategories(actualCategories);
|
||||||
tabs.setupWithViewPager(categoriesPager);
|
}
|
||||||
|
|
||||||
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) {
|
public void setContextTitle(int count) {
|
||||||
|
@ -143,6 +176,10 @@ public class LibraryFragment extends BaseRxFragment<LibraryPresenter>
|
||||||
case R.id.action_move_to_category:
|
case R.id.action_move_to_category:
|
||||||
moveMangasToCategories(getPresenter().selectedMangas);
|
moveMangasToCategories(getPresenter().selectedMangas);
|
||||||
return true;
|
return true;
|
||||||
|
case R.id.action_delete:
|
||||||
|
getPresenter().deleteMangas();
|
||||||
|
destroyActionModeIfNeeded();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -172,7 +209,6 @@ public class LibraryFragment extends BaseRxFragment<LibraryPresenter>
|
||||||
.positiveText(R.string.button_ok)
|
.positiveText(R.string.button_ok)
|
||||||
.negativeText(R.string.button_cancel)
|
.negativeText(R.string.button_cancel)
|
||||||
.show();
|
.show();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
|
@ -20,8 +20,8 @@ import eu.kanade.mangafeed.data.source.SourceManager;
|
||||||
import eu.kanade.mangafeed.event.LibraryMangasEvent;
|
import eu.kanade.mangafeed.event.LibraryMangasEvent;
|
||||||
import eu.kanade.mangafeed.ui.base.presenter.BasePresenter;
|
import eu.kanade.mangafeed.ui.base.presenter.BasePresenter;
|
||||||
import rx.Observable;
|
import rx.Observable;
|
||||||
|
import rx.Subscription;
|
||||||
import rx.android.schedulers.AndroidSchedulers;
|
import rx.android.schedulers.AndroidSchedulers;
|
||||||
import rx.schedulers.Schedulers;
|
|
||||||
|
|
||||||
public class LibraryPresenter extends BasePresenter<LibraryFragment> {
|
public class LibraryPresenter extends BasePresenter<LibraryFragment> {
|
||||||
|
|
||||||
|
@ -33,6 +33,8 @@ public class LibraryPresenter extends BasePresenter<LibraryFragment> {
|
||||||
protected List<Category> categories;
|
protected List<Category> categories;
|
||||||
protected List<Manga> selectedMangas;
|
protected List<Manga> selectedMangas;
|
||||||
|
|
||||||
|
private Subscription librarySubscription;
|
||||||
|
|
||||||
private static final int GET_CATEGORIES = 1;
|
private static final int GET_CATEGORIES = 1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -43,14 +45,9 @@ public class LibraryPresenter extends BasePresenter<LibraryFragment> {
|
||||||
|
|
||||||
restartableLatestCache(GET_CATEGORIES,
|
restartableLatestCache(GET_CATEGORIES,
|
||||||
this::getCategoriesObservable,
|
this::getCategoriesObservable,
|
||||||
LibraryFragment::onNextCategories);
|
LibraryFragment::setCategoriesWithDefault);
|
||||||
|
|
||||||
start(GET_CATEGORIES);
|
start(GET_CATEGORIES);
|
||||||
|
|
||||||
add(getLibraryMangasObservable()
|
|
||||||
.subscribe(mangas ->
|
|
||||||
EventBus.getDefault().postSticky(new LibraryMangasEvent(mangas))));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -61,7 +58,10 @@ public class LibraryPresenter extends BasePresenter<LibraryFragment> {
|
||||||
|
|
||||||
public Observable<List<Category>> getCategoriesObservable() {
|
public Observable<List<Category>> getCategoriesObservable() {
|
||||||
return db.getCategories().createObservable()
|
return db.getCategories().createObservable()
|
||||||
.doOnNext(categories -> this.categories = categories)
|
.doOnNext(categories -> {
|
||||||
|
this.categories = categories;
|
||||||
|
subscribeToLibrary();
|
||||||
|
})
|
||||||
.observeOn(AndroidSchedulers.mainThread());
|
.observeOn(AndroidSchedulers.mainThread());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,13 +74,12 @@ public class LibraryPresenter extends BasePresenter<LibraryFragment> {
|
||||||
.toMap(pair -> pair.first, pair -> pair.second));
|
.toMap(pair -> pair.first, pair -> pair.second));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteMangas(Observable<Manga> selectedMangas) {
|
private void subscribeToLibrary() {
|
||||||
add(selectedMangas
|
if (librarySubscription != null && !librarySubscription.isUnsubscribed())
|
||||||
.subscribeOn(Schedulers.io())
|
return;
|
||||||
.doOnNext(manga -> manga.favorite = false)
|
|
||||||
.toList()
|
add(librarySubscription = getLibraryMangasObservable().subscribe(
|
||||||
.flatMap(mangas -> db.insertMangas(mangas).createObservable())
|
mangas -> EventBus.getDefault().postSticky(new LibraryMangasEvent(mangas))));
|
||||||
.subscribe());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSelection(Manga manga, boolean selected) {
|
public void setSelection(Manga manga, boolean selected) {
|
||||||
|
@ -102,6 +101,14 @@ public class LibraryPresenter extends BasePresenter<LibraryFragment> {
|
||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deleteMangas() {
|
||||||
|
for (Manga manga : selectedMangas) {
|
||||||
|
manga.favorite = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
db.insertMangas(selectedMangas).executeAsBlocking();
|
||||||
|
}
|
||||||
|
|
||||||
public void moveMangasToCategories(Integer[] positions, List<Manga> mangas) {
|
public void moveMangasToCategories(Integer[] positions, List<Manga> mangas) {
|
||||||
List<Category> categoriesToAdd = new ArrayList<>();
|
List<Category> categoriesToAdd = new ArrayList<>();
|
||||||
for (Integer index : positions) {
|
for (Integer index : positions) {
|
||||||
|
|
Reference in a new issue