Add badge to bottom bar Updates tab indicating how many unread chapter updates are available (#5620)

Co-authored-by: arkon <arkon@users.noreply.github.com>
(cherry picked from commit 459759bfe5950db2e7203f5675e422c2014b083d)
This commit is contained in:
Hunter Nickel 2021-10-30 10:32:51 -06:00 committed by Jobobby04
parent 29801d4dd0
commit 951418b576
7 changed files with 31 additions and 0 deletions

View File

@ -370,6 +370,7 @@ class LibraryUpdateService(
val failedUpdates = CopyOnWriteArrayList<Pair<Manga, String?>>()
val hasDownloads = AtomicBoolean(false)
val loggedServices by lazy { trackManager.services.filter { it.isLogged } }
val currentUnreadUpdatesCount = preferences.libraryUnreadUpdatesCount().get()
withIOContext {
mangaToUpdate.groupBy { it.source }
@ -434,6 +435,8 @@ class LibraryUpdateService(
if (newUpdates.isNotEmpty()) {
notifier.showUpdateNotifications(newUpdates)
val newChapterCount = newUpdates.sumOf { it.second.size }
preferences.libraryUnreadUpdatesCount().set(currentUnreadUpdatesCount + newChapterCount)
if (hasDownloads.get()) {
DownloadService.start(this)
}

View File

@ -135,6 +135,8 @@ object PreferenceKeys {
const val libraryUpdateRestriction = "library_update_restriction"
const val libraryUpdateShowTabBadge = "library_update_show_tab_badge"
const val libraryUpdateCategories = "library_update_categories"
const val libraryUpdateCategoriesExclude = "library_update_categories_exclude"

View File

@ -242,6 +242,9 @@ class PreferencesHelper(val context: Context) {
fun libraryUpdateRestriction() = flowPrefs.getStringSet(Keys.libraryUpdateRestriction, setOf(ONLY_ON_WIFI))
fun libraryUpdateShowTabBadge() = flowPrefs.getBoolean(Keys.libraryUpdateShowTabBadge, true)
fun libraryUnreadUpdatesCount() = flowPrefs.getInt("library_unread_updates_count", 0)
fun libraryUpdateCategories() = flowPrefs.getStringSet(Keys.libraryUpdateCategories, emptySet())
fun libraryUpdateCategoriesExclude() = flowPrefs.getStringSet(Keys.libraryUpdateCategoriesExclude, emptySet())

View File

@ -75,6 +75,7 @@ import exh.uconfig.WarnConfigureDialogController
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onEach
import logcat.LogPriority
import java.util.Date
@ -277,6 +278,10 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
}
// SY -->
merge(preferences.libraryUpdateShowTabBadge().asFlow(), preferences.libraryUnreadUpdatesCount().asFlow())
.onEach { setUnreadUpdatesBadge() }
.launchIn(lifecycleScope)
preferences.extensionUpdatesCount()
.asImmediateFlow { setExtensionsBadge() }
.launchIn(lifecycleScope)
@ -405,6 +410,15 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
}
}
private fun setUnreadUpdatesBadge() {
val updates = if (preferences.libraryUpdateShowTabBadge().get()) preferences.libraryUnreadUpdatesCount().get() else 0
if (updates > 0) {
nav.getOrCreateBadge(R.id.nav_updates).number = updates
} else {
nav.removeBadge(R.id.nav_updates)
}
}
private fun setExtensionsBadge() {
val updates = preferences.extensionUpdatesCount().get()
if (updates > 0) {

View File

@ -105,6 +105,9 @@ class UpdatesPresenter : BasePresenter<UpdatesController>() {
}
setDownloadedChapters(list)
chapters = list
//Set unread chapter count for bottom bar badge
preferences.libraryUnreadUpdatesCount().set(list.count { !it.read })
}
}

View File

@ -225,6 +225,11 @@ class SettingsLibraryController : SettingsController() {
titleRes = R.string.pref_update_only_non_completed
defaultValue = false
}
switchPreference {
key = Keys.libraryUpdateShowTabBadge
titleRes = R.string.pref_library_update_show_tab_badge
defaultValue = true
}
preference {
key = Keys.libraryUpdateCategories
titleRes = R.string.categories

View File

@ -223,6 +223,7 @@
<string name="charging">Charging</string>
<string name="restrictions">Restrictions: %s</string>
<string name="pref_update_only_non_completed">Only update ongoing manga</string>
<string name="pref_library_update_show_tab_badge">Show update count on bottom bar</string>
<string name="pref_library_update_refresh_metadata">Automatically refresh metadata</string>
<string name="pref_library_update_refresh_metadata_summary">Check for new cover and details when updating library</string>
<string name="pref_library_update_refresh_trackers">Automatically refresh trackers</string>