Update bottom navigation inbox badge when inbox changes (#7398)
This commit is contained in:
parent
4f10efee7a
commit
b776e44717
|
@ -37,6 +37,7 @@ import androidx.work.WorkInfo;
|
||||||
import androidx.work.WorkManager;
|
import androidx.work.WorkManager;
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
import com.google.android.material.appbar.MaterialToolbar;
|
import com.google.android.material.appbar.MaterialToolbar;
|
||||||
|
import com.google.android.material.badge.BadgeDrawable;
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
||||||
import com.google.android.material.navigation.NavigationBarView;
|
import com.google.android.material.navigation.NavigationBarView;
|
||||||
|
@ -45,6 +46,7 @@ import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.event.EpisodeDownloadEvent;
|
import de.danoeh.antennapod.event.EpisodeDownloadEvent;
|
||||||
import de.danoeh.antennapod.event.FeedUpdateRunningEvent;
|
import de.danoeh.antennapod.event.FeedUpdateRunningEvent;
|
||||||
import de.danoeh.antennapod.event.MessageEvent;
|
import de.danoeh.antennapod.event.MessageEvent;
|
||||||
|
import de.danoeh.antennapod.event.UnreadItemsUpdateEvent;
|
||||||
import de.danoeh.antennapod.model.download.DownloadStatus;
|
import de.danoeh.antennapod.model.download.DownloadStatus;
|
||||||
import de.danoeh.antennapod.model.feed.FeedItemFilter;
|
import de.danoeh.antennapod.model.feed.FeedItemFilter;
|
||||||
import de.danoeh.antennapod.net.download.service.feed.FeedUpdateManagerImpl;
|
import de.danoeh.antennapod.net.download.service.feed.FeedUpdateManagerImpl;
|
||||||
|
@ -83,6 +85,7 @@ import de.danoeh.antennapod.ui.screen.subscriptions.SubscriptionFragment;
|
||||||
import de.danoeh.antennapod.ui.view.LockableBottomSheetBehavior;
|
import de.danoeh.antennapod.ui.view.LockableBottomSheetBehavior;
|
||||||
import io.reactivex.Observable;
|
import io.reactivex.Observable;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.disposables.Disposable;
|
||||||
import io.reactivex.schedulers.Schedulers;
|
import io.reactivex.schedulers.Schedulers;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import org.apache.commons.lang3.Validate;
|
import org.apache.commons.lang3.Validate;
|
||||||
|
@ -114,6 +117,7 @@ public class MainActivity extends CastEnabledActivity {
|
||||||
private @Nullable DrawerLayout drawerLayout;
|
private @Nullable DrawerLayout drawerLayout;
|
||||||
private @Nullable ActionBarDrawerToggle drawerToggle;
|
private @Nullable ActionBarDrawerToggle drawerToggle;
|
||||||
private BottomNavigationView bottomNavigationView;
|
private BottomNavigationView bottomNavigationView;
|
||||||
|
private Disposable bottomNavigationBadgeLoader = null;
|
||||||
private View navDrawer;
|
private View navDrawer;
|
||||||
private LockableBottomSheetBehavior sheetBehavior;
|
private LockableBottomSheetBehavior sheetBehavior;
|
||||||
private RecyclerView.RecycledViewPool recycledViewPool = new RecyclerView.RecycledViewPool();
|
private RecyclerView.RecycledViewPool recycledViewPool = new RecyclerView.RecycledViewPool();
|
||||||
|
@ -330,6 +334,10 @@ public class MainActivity extends CastEnabledActivity {
|
||||||
if (drawerLayout != null && drawerToggle != null) {
|
if (drawerLayout != null && drawerToggle != null) {
|
||||||
drawerLayout.removeDrawerListener(drawerToggle);
|
drawerLayout.removeDrawerListener(drawerToggle);
|
||||||
}
|
}
|
||||||
|
if (bottomNavigationBadgeLoader != null) {
|
||||||
|
bottomNavigationBadgeLoader.dispose();
|
||||||
|
bottomNavigationBadgeLoader = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkFirstLaunch() {
|
private void checkFirstLaunch() {
|
||||||
|
@ -516,15 +524,28 @@ public class MainActivity extends CastEnabledActivity {
|
||||||
MenuItem moreItem = menu.add(0, R.id.bottom_navigation_more, 0, getString(R.string.searchpreference_more));
|
MenuItem moreItem = menu.add(0, R.id.bottom_navigation_more, 0, getString(R.string.searchpreference_more));
|
||||||
moreItem.setIcon(R.drawable.dots_vertical);
|
moreItem.setIcon(R.drawable.dots_vertical);
|
||||||
bottomNavigationView.setOnItemSelectedListener(bottomItemSelectedListener);
|
bottomNavigationView.setOnItemSelectedListener(bottomItemSelectedListener);
|
||||||
|
updateBottomNavigationBadgeIfNeeded(null);
|
||||||
|
}
|
||||||
|
|
||||||
if (bottomNavigationView.getMenu().findItem(R.id.bottom_navigation_inbox) != null) {
|
@Subscribe
|
||||||
Observable.fromCallable(() -> DBReader.getTotalEpisodeCount(new FeedItemFilter(FeedItemFilter.NEW)))
|
public void updateBottomNavigationBadgeIfNeeded(@Nullable UnreadItemsUpdateEvent ignore) {
|
||||||
|
if (bottomNavigationView == null) {
|
||||||
|
return;
|
||||||
|
} else if (bottomNavigationView.getMenu().findItem(R.id.bottom_navigation_inbox) == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (bottomNavigationBadgeLoader != null) {
|
||||||
|
bottomNavigationBadgeLoader.dispose();
|
||||||
|
}
|
||||||
|
bottomNavigationBadgeLoader = Observable.fromCallable(
|
||||||
|
() -> DBReader.getTotalEpisodeCount(new FeedItemFilter(FeedItemFilter.NEW)))
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe(result ->
|
.subscribe(result -> {
|
||||||
bottomNavigationView.getOrCreateBadge(R.id.bottom_navigation_inbox).setNumber(result),
|
BadgeDrawable badge = bottomNavigationView.getOrCreateBadge(R.id.bottom_navigation_inbox);
|
||||||
error -> Log.e(TAG, Log.getStackTraceString(error)));
|
badge.setVisible(result > 0);
|
||||||
}
|
badge.setNumber(result);
|
||||||
|
}, error -> Log.e(TAG, Log.getStackTraceString(error)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private final NavigationBarView.OnItemSelectedListener bottomItemSelectedListener = item -> {
|
private final NavigationBarView.OnItemSelectedListener bottomItemSelectedListener = item -> {
|
||||||
|
|
Loading…
Reference in New Issue