瀏覽代碼

Tweak how bottom action menu is configured

arkon 5 年之前
父節點
當前提交
316211372c

+ 8 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/BottomActionMenuController.kt

@@ -0,0 +1,8 @@
+package eu.kanade.tachiyomi.ui.base.controller
+
+import eu.kanade.tachiyomi.widget.BottomActionMenu
+
+interface BottomActionMenuController {
+
+    fun configureBottomActionMenu(bottomActionMenu: BottomActionMenu)
+}

+ 9 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt

@@ -14,6 +14,7 @@ import eu.kanade.tachiyomi.Migrations
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.notification.NotificationReceiver
 import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
+import eu.kanade.tachiyomi.ui.base.controller.BottomActionMenuController
 import eu.kanade.tachiyomi.ui.base.controller.DialogController
 import eu.kanade.tachiyomi.ui.base.controller.NoToolbarElevationController
 import eu.kanade.tachiyomi.ui.base.controller.RootController
@@ -76,7 +77,7 @@ class MainActivity : BaseActivity() {
             if (currentRoot?.tag()?.toIntOrNull() != id) {
                 when (id) {
                     R.id.nav_library -> setRoot(LibraryController(), id)
-                    R.id.nav_updates -> setRoot(UpdatesController(bottom_action_menu), id)
+                    R.id.nav_updates -> setRoot(UpdatesController(), id)
                     R.id.nav_history -> setRoot(HistoryController(), id)
                     R.id.nav_catalogues -> setRoot(CatalogueController(), id)
                     R.id.nav_more -> setRoot(MoreController(), id)
@@ -258,6 +259,13 @@ class MainActivity : BaseActivity() {
         } else {
             appbar.enableElevation()
         }
+
+        if (from is BottomActionMenuController) {
+            bottom_action_menu.cleanup()
+        }
+        if (to is BottomActionMenuController) {
+            to.configureBottomActionMenu(bottom_action_menu)
+        }
     }
 
     companion object {

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

@@ -7,7 +7,6 @@ import android.view.View
 import android.view.ViewGroup
 import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.view.ActionMode
-import androidx.appcompat.widget.ActionMenuView
 import androidx.recyclerview.widget.DividerItemDecoration
 import androidx.recyclerview.widget.LinearLayoutManager
 import com.jakewharton.rxbinding.support.v4.widget.refreshes
@@ -19,6 +18,7 @@ import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.download.model.Download
 import eu.kanade.tachiyomi.data.library.LibraryUpdateService
 import eu.kanade.tachiyomi.data.notification.Notifications
+import eu.kanade.tachiyomi.ui.base.controller.BottomActionMenuController
 import eu.kanade.tachiyomi.ui.base.controller.NoToolbarElevationController
 import eu.kanade.tachiyomi.ui.base.controller.NucleusController
 import eu.kanade.tachiyomi.ui.base.controller.RootController
@@ -39,9 +39,10 @@ import timber.log.Timber
  * Uses [R.layout.updates_controller].
  * UI related actions should be called from here.
  */
-class UpdatesController() : NucleusController<UpdatesPresenter>(),
+class UpdatesController : NucleusController<UpdatesPresenter>(),
         RootController,
         NoToolbarElevationController,
+        BottomActionMenuController,
         ActionMode.Callback,
         FlexibleAdapter.OnItemClickListener,
         FlexibleAdapter.OnItemLongClickListener,
@@ -49,10 +50,6 @@ class UpdatesController() : NucleusController<UpdatesPresenter>(),
         ConfirmDeleteChaptersDialog.Listener,
         UpdatesAdapter.OnCoverClickListener {
 
-    constructor(bottomActionMenu: BottomActionMenu) : this() {
-        this.bottomActionMenu = bottomActionMenu
-    }
-
     /**
      * Action mode for multiple selection.
      */
@@ -299,11 +296,7 @@ class UpdatesController() : NucleusController<UpdatesPresenter>(),
         } else {
             mode.title = count.toString()
 
-            bottomActionMenu?.show(
-                    mode.menuInflater,
-                    R.menu.updates_chapter_selection,
-                    ActionMenuView.OnMenuItemClickListener { onActionItemClicked(actionMode!!, it) }
-            )
+            bottomActionMenu?.show(mode.menuInflater)
         }
 
         return false
@@ -343,4 +336,11 @@ class UpdatesController() : NucleusController<UpdatesPresenter>(),
         adapter.selectAll()
         actionMode?.invalidate()
     }
+
+    override fun configureBottomActionMenu(bottomActionMenu: BottomActionMenu) {
+        this.bottomActionMenu = bottomActionMenu
+        bottomActionMenu.configure(
+                R.menu.updates_chapter_selection
+        ) { onActionItemClicked(actionMode!!, it!!) }
+    }
 }

+ 15 - 6
app/src/main/java/eu/kanade/tachiyomi/widget/BottomActionMenu.kt

@@ -3,10 +3,10 @@ package eu.kanade.tachiyomi.widget
 import android.content.Context
 import android.util.AttributeSet
 import android.view.MenuInflater
+import android.view.MenuItem
 import android.view.View
 import android.widget.FrameLayout
 import androidx.annotation.MenuRes
-import androidx.appcompat.widget.ActionMenuView
 import eu.kanade.tachiyomi.R
 import kotlinx.android.synthetic.main.common_bottom_action_menu.view.bottom_menu
 import kotlinx.android.synthetic.main.common_bottom_action_menu.view.bottom_menu_bar
@@ -14,15 +14,27 @@ import kotlinx.android.synthetic.main.common_bottom_action_menu.view.bottom_menu
 class BottomActionMenu @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
         FrameLayout(context, attrs) {
 
+    @MenuRes
+    private var menuRes: Int = 0
+
     init {
         inflate(context, R.layout.common_bottom_action_menu, this)
     }
 
-    fun show(menuInflater: MenuInflater, @MenuRes menuRes: Int, listener: ActionMenuView.OnMenuItemClickListener) {
+    fun configure(@MenuRes menuRes: Int, listener: (item: MenuItem?) -> Boolean) {
+        this.menuRes = menuRes
+        bottom_menu.setOnMenuItemClickListener { listener(it) }
+    }
+
+    fun cleanup() {
+        bottom_menu.menu.clear()
+        bottom_menu.setOnMenuItemClickListener(null)
+    }
+
+    fun show(menuInflater: MenuInflater) {
         // Avoid re-inflating the menu
         if (bottom_menu.menu.size() == 0) {
             menuInflater.inflate(menuRes, bottom_menu.menu)
-            bottom_menu.setOnMenuItemClickListener(listener)
         }
 
         bottom_menu_bar.visibility = View.VISIBLE
@@ -30,8 +42,5 @@ class BottomActionMenu @JvmOverloads constructor(context: Context, attrs: Attrib
 
     fun hide() {
         bottom_menu_bar.visibility = View.GONE
-
-        bottom_menu.setOnMenuItemClickListener(null)
-        bottom_menu.menu.clear()
     }
 }