Kaynağa Gözat

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

Co-authored-by: arkon <[email protected]>
Hunter Nickel 3 yıl önce
ebeveyn
işleme
459759bfe5

+ 3 - 0
app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt

@@ -291,6 +291,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 }
@@ -354,6 +355,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)
             }

+ 2 - 0
app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt

@@ -133,6 +133,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"
 

+ 3 - 0
app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt

@@ -238,6 +238,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())
 

+ 14 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt

@@ -68,6 +68,7 @@ import eu.kanade.tachiyomi.util.view.setNavigationBarTransparentCompat
 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
 
@@ -227,6 +228,10 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
             }
         }
 
+        merge(preferences.libraryUpdateShowTabBadge().asFlow(), preferences.libraryUnreadUpdatesCount().asFlow())
+            .onEach { setUnreadUpdatesBadge() }
+            .launchIn(lifecycleScope)
+
         preferences.extensionUpdatesCount()
             .asImmediateFlow { setExtensionsBadge() }
             .launchIn(lifecycleScope)
@@ -349,6 +354,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) {

+ 3 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesPresenter.kt

@@ -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 })
             }
     }
 

+ 5 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsLibraryController.kt

@@ -199,6 +199,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

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -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>