浏览代码

Add update library menu item

arkon 5 年之前
父节点
当前提交
859e9ca653

+ 6 - 1
app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt

@@ -146,8 +146,9 @@ class LibraryUpdateService(
          * @param context the application context.
          * @param category a specific category to update, or null for global update.
          * @param target defines what should be updated.
+         * @return true if service newly started, false otherwise
          */
-        fun start(context: Context, category: Category? = null, target: Target = Target.CHAPTERS) {
+        fun start(context: Context, category: Category? = null, target: Target = Target.CHAPTERS): Boolean {
             if (!isRunning(context)) {
                 val intent = Intent(context, LibraryUpdateService::class.java).apply {
                     putExtra(KEY_TARGET, target)
@@ -158,7 +159,11 @@ class LibraryUpdateService(
                 } else {
                     context.startForegroundService(intent)
                 }
+
+                return true
             }
+
+            return false
         }
 
         /**

+ 2 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt

@@ -96,10 +96,10 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att
         // Double the distance required to trigger sync
         swipe_refresh.setDistanceToTriggerSync((2 * 64 * resources.displayMetrics.density).toInt())
         swipe_refresh.setOnRefreshListener {
-            if (!LibraryUpdateService.isRunning(context)) {
-                LibraryUpdateService.start(context, category)
+            if (LibraryUpdateService.start(context, category)) {
                 context.toast(R.string.updating_category)
             }
+
             // It can be a very long operation, so we disable swipe refresh and show a toast.
             swipe_refresh.isRefreshing = false
         }

+ 5 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt

@@ -362,7 +362,11 @@ class LibraryController(
             R.id.action_search -> expandActionViewFromInteraction = true
             R.id.action_filter -> showSettingsSheet()
             R.id.action_update_library -> {
-                activity?.let { LibraryUpdateService.start(it) }
+                activity?.let {
+                    if (LibraryUpdateService.start(it)) {
+                        it.toast(R.string.updating_library)
+                    }
+                }
             }
         }
 

+ 27 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesController.kt

@@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.recent.updates
 
 import android.view.LayoutInflater
 import android.view.Menu
+import android.view.MenuInflater
 import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
@@ -59,6 +60,10 @@ class UpdatesController : NucleusController<UpdatesPresenter>(),
     var adapter: UpdatesAdapter? = null
         private set
 
+    init {
+        setHasOptionsMenu(true)
+    }
+
     override fun getTitle(): String? {
         return resources?.getString(R.string.label_recent_updates)
     }
@@ -94,10 +99,8 @@ class UpdatesController : NucleusController<UpdatesPresenter>(),
 
         swipe_refresh.setDistanceToTriggerSync((2 * 64 * view.resources.displayMetrics.density).toInt())
         swipe_refresh.refreshes().subscribeUntilDestroy {
-            if (!LibraryUpdateService.isRunning(view.context)) {
-                LibraryUpdateService.start(view.context)
-                view.context.toast(R.string.action_update_library)
-            }
+            updateLibrary()
+
             // It can be a very long operation, so we disable swipe refresh and show a toast.
             swipe_refresh.isRefreshing = false
         }
@@ -110,6 +113,26 @@ class UpdatesController : NucleusController<UpdatesPresenter>(),
         super.onDestroyView(view)
     }
 
+    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
+        inflater.inflate(R.menu.updates, menu)
+    }
+
+    override fun onOptionsItemSelected(item: MenuItem): Boolean {
+        when (item.itemId) {
+            R.id.action_update_library -> updateLibrary()
+        }
+
+        return super.onOptionsItemSelected(item)
+    }
+
+    private fun updateLibrary() {
+        activity?.let {
+            if (LibraryUpdateService.start(it)) {
+                it.toast(R.string.updating_library)
+            }
+        }
+    }
+
     /**
      * Returns selected chapters
      * @return list of selected chapters

+ 13 - 0
app/src/main/res/menu/updates.xml

@@ -0,0 +1,13 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:context=".MainActivity">
+
+    <item
+        android:id="@+id/action_update_library"
+        android:icon="@drawable/ic_refresh_24dp"
+        android:title="@string/action_update_library"
+        app:iconTint="?attr/colorOnPrimary"
+        app:showAsAction="ifRoom" />
+
+</menu>

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

@@ -504,6 +504,9 @@
     <string name="transition_pages_loading">Loading pages…</string>
     <string name="transition_pages_error">Failed to load pages: %1$s</string>
 
+    <!-- Updates fragment -->
+    <string name="updating_library">Updating library</string>
+
     <!-- History fragment -->
     <string name="recent_manga_source">%1$s - Ch.%2$s</string>