mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Bottom action menu in library
This commit is contained in:
		| @@ -32,6 +32,7 @@ import eu.kanade.tachiyomi.data.database.models.Manga | ||||
| import eu.kanade.tachiyomi.data.library.LibraryUpdateService | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.data.preference.getOrDefault | ||||
| import eu.kanade.tachiyomi.ui.base.controller.BottomActionMenuController | ||||
| import eu.kanade.tachiyomi.ui.base.controller.NucleusController | ||||
| import eu.kanade.tachiyomi.ui.base.controller.RootController | ||||
| import eu.kanade.tachiyomi.ui.base.controller.SecondaryDrawerController | ||||
| @@ -41,6 +42,7 @@ import eu.kanade.tachiyomi.ui.main.MainActivity | ||||
| import eu.kanade.tachiyomi.ui.manga.MangaController | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import eu.kanade.tachiyomi.util.view.inflate | ||||
| import eu.kanade.tachiyomi.widget.BottomActionMenu | ||||
| import java.io.IOException | ||||
| import kotlinx.android.synthetic.main.library_controller.empty_view | ||||
| import kotlinx.android.synthetic.main.library_controller.library_pager | ||||
| @@ -58,6 +60,7 @@ class LibraryController( | ||||
|         RootController, | ||||
|         TabbedController, | ||||
|         SecondaryDrawerController, | ||||
|         BottomActionMenuController, | ||||
|         ActionMode.Callback, | ||||
|         ChangeMangaCategoriesDialog.Listener, | ||||
|         DeleteLibraryMangasDialog.Listener { | ||||
| @@ -72,6 +75,7 @@ class LibraryController( | ||||
|      * Action mode for selections. | ||||
|      */ | ||||
|     private var actionMode: ActionMode? = null | ||||
|     private var bottomActionMenu: BottomActionMenu? = null | ||||
|  | ||||
|     /** | ||||
|      * Library search query. | ||||
| @@ -179,9 +183,9 @@ class LibraryController( | ||||
|     } | ||||
|  | ||||
|     override fun onDestroyView(view: View) { | ||||
|         destroyActionModeIfNeeded() | ||||
|         adapter?.onDestroy() | ||||
|         adapter = null | ||||
|         actionMode = null | ||||
|         tabsVisibilitySubscription?.unsubscribe() | ||||
|         tabsVisibilitySubscription = null | ||||
|         super.onDestroyView(view) | ||||
| @@ -320,7 +324,7 @@ class LibraryController( | ||||
|     /** | ||||
|      * Destroys the action mode. | ||||
|      */ | ||||
|     fun destroyActionModeIfNeeded() { | ||||
|     private fun destroyActionModeIfNeeded() { | ||||
|         actionMode?.finish() | ||||
|     } | ||||
|  | ||||
| @@ -414,7 +418,7 @@ class LibraryController( | ||||
|     } | ||||
|  | ||||
|     override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { | ||||
|         mode.menuInflater.inflate(R.menu.library_selection, menu) | ||||
|         mode.menuInflater.inflate(R.menu.generic_selection, menu) | ||||
|         return true | ||||
|     } | ||||
|  | ||||
| @@ -425,7 +429,9 @@ class LibraryController( | ||||
|             destroyActionModeIfNeeded() | ||||
|         } else { | ||||
|             mode.title = count.toString() | ||||
|             menu.findItem(R.id.action_edit_cover)?.isVisible = count == 1 | ||||
|  | ||||
|             bottomActionMenu?.show(mode.menuInflater) | ||||
|             bottomActionMenu?.findItem(R.id.action_edit_cover)?.isVisible = count == 1 | ||||
|         } | ||||
|         return false | ||||
|     } | ||||
| @@ -445,12 +451,20 @@ class LibraryController( | ||||
|     } | ||||
|  | ||||
|     override fun onDestroyActionMode(mode: ActionMode?) { | ||||
|         bottomActionMenu?.hide() | ||||
|         // Clear all the manga selections and notify child views. | ||||
|         selectedMangas.clear() | ||||
|         selectionRelay.call(LibrarySelectionEvent.Cleared()) | ||||
|         actionMode = null | ||||
|     } | ||||
|  | ||||
|     override fun configureBottomActionMenu(bottomActionMenu: BottomActionMenu) { | ||||
|         this.bottomActionMenu = bottomActionMenu | ||||
|         bottomActionMenu.configure( | ||||
|                 R.menu.library_selection | ||||
|         ) { onActionItemClicked(actionMode!!, it!!) } | ||||
|     } | ||||
|  | ||||
|     fun openManga(manga: Manga) { | ||||
|         // Notify the presenter a manga is being opened. | ||||
|         presenter.onOpenManga() | ||||
|   | ||||
| @@ -107,8 +107,8 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|     } | ||||
|  | ||||
|     override fun onDestroyView(view: View) { | ||||
|         destroyActionModeIfNeeded() | ||||
|         adapter = null | ||||
|         actionMode = null | ||||
|         super.onDestroyView(view) | ||||
|     } | ||||
|  | ||||
| @@ -116,7 +116,7 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|      * Returns selected chapters | ||||
|      * @return list of selected chapters | ||||
|      */ | ||||
|     fun getSelectedChapters(): List<UpdatesItem> { | ||||
|     private fun getSelectedChapters(): List<UpdatesItem> { | ||||
|         val adapter = adapter ?: return emptyList() | ||||
|         return adapter.selectedPositions.mapNotNull { adapter.getItem(it) as? UpdatesItem } | ||||
|     } | ||||
| @@ -175,7 +175,7 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|      * Download selected items | ||||
|      * @param chapters list of selected [UpdatesItem]s | ||||
|      */ | ||||
|     fun downloadChapters(chapters: List<UpdatesItem>) { | ||||
|     private fun downloadChapters(chapters: List<UpdatesItem>) { | ||||
|         presenter.downloadChapters(chapters) | ||||
|     } | ||||
|  | ||||
| @@ -216,13 +216,21 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|      * Mark chapter as read | ||||
|      * @param chapters list of chapters | ||||
|      */ | ||||
|     fun markAsRead(chapters: List<UpdatesItem>) { | ||||
|     private fun markAsRead(chapters: List<UpdatesItem>) { | ||||
|         presenter.markChapterRead(chapters, true) | ||||
|         if (presenter.preferences.removeAfterMarkedAsRead()) { | ||||
|             deleteChapters(chapters) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Mark chapter as unread | ||||
|      * @param chapters list of selected [UpdatesItem] | ||||
|      */ | ||||
|     private fun markAsUnread(chapters: List<UpdatesItem>) { | ||||
|         presenter.markChapterRead(chapters, false) | ||||
|     } | ||||
|  | ||||
|     override fun deleteChapters(chaptersToDelete: List<UpdatesItem>) { | ||||
|         DeletingChaptersDialog().showDialog(router) | ||||
|         presenter.deleteChapters(chaptersToDelete) | ||||
| @@ -235,20 +243,12 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|         actionMode?.finish() | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Mark chapter as unread | ||||
|      * @param chapters list of selected [UpdatesItem] | ||||
|      */ | ||||
|     fun markAsUnread(chapters: List<UpdatesItem>) { | ||||
|         presenter.markChapterRead(chapters, false) | ||||
|     } | ||||
|  | ||||
|     override fun onCoverClick(position: Int) { | ||||
|         val chapterClicked = adapter?.getItem(position) as? UpdatesItem ?: return | ||||
|         openManga(chapterClicked) | ||||
|     } | ||||
|  | ||||
|     fun openManga(chapter: UpdatesItem) { | ||||
|     private fun openManga(chapter: UpdatesItem) { | ||||
|         router.pushController(MangaController(chapter.manga).withFadeTransaction()) | ||||
|     } | ||||
|  | ||||
| @@ -272,7 +272,7 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|     /** | ||||
|      * Called to dismiss deleting dialog | ||||
|      */ | ||||
|     fun dismissDeletingDialog() { | ||||
|     private fun dismissDeletingDialog() { | ||||
|         router.popControllerWithTag(DeletingChaptersDialog.TAG) | ||||
|     } | ||||
|  | ||||
| @@ -284,7 +284,6 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|     override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { | ||||
|         mode.menuInflater.inflate(R.menu.generic_selection, menu) | ||||
|         adapter?.mode = SelectableAdapter.Mode.MULTI | ||||
|  | ||||
|         return true | ||||
|     } | ||||
|  | ||||
| @@ -331,16 +330,16 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|         actionMode = null | ||||
|     } | ||||
|  | ||||
|     private fun selectAll() { | ||||
|         val adapter = adapter ?: return | ||||
|         adapter.selectAll() | ||||
|         actionMode?.invalidate() | ||||
|     } | ||||
|  | ||||
|     override fun configureBottomActionMenu(bottomActionMenu: BottomActionMenu) { | ||||
|         this.bottomActionMenu = bottomActionMenu | ||||
|         bottomActionMenu.configure( | ||||
|                 R.menu.updates_chapter_selection | ||||
|         ) { onActionItemClicked(actionMode!!, it!!) } | ||||
|     } | ||||
|  | ||||
|     private fun selectAll() { | ||||
|         val adapter = adapter ?: return | ||||
|         adapter.selectAll() | ||||
|         actionMode?.invalidate() | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import android.view.MenuInflater | ||||
| import android.view.MenuItem | ||||
| import android.view.View | ||||
| import android.widget.FrameLayout | ||||
| import androidx.annotation.IdRes | ||||
| import androidx.annotation.MenuRes | ||||
| import eu.kanade.tachiyomi.R | ||||
| import kotlinx.android.synthetic.main.common_bottom_action_menu.view.bottom_menu | ||||
| @@ -31,6 +32,10 @@ class BottomActionMenu @JvmOverloads constructor(context: Context, attrs: Attrib | ||||
|         bottom_menu.setOnMenuItemClickListener(null) | ||||
|     } | ||||
|  | ||||
|     fun findItem(@IdRes itemId: Int): MenuItem? { | ||||
|         return bottom_menu.menu.findItem(itemId) | ||||
|     } | ||||
|  | ||||
|     fun show(menuInflater: MenuInflater) { | ||||
|         // Avoid re-inflating the menu | ||||
|         if (bottom_menu.menu.size() == 0) { | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
|  | ||||
| <menu xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto"> | ||||
|  | ||||
| @@ -7,24 +6,18 @@ | ||||
|         android:id="@+id/action_edit_cover" | ||||
|         android:icon="@drawable/ic_create_white_24dp" | ||||
|         android:title="@string/action_edit_cover" | ||||
|         app:showAsAction="ifRoom" /> | ||||
|         app:showAsAction="always" /> | ||||
|  | ||||
|     <item | ||||
|         android:id="@+id/action_move_to_category" | ||||
|         android:icon="@drawable/ic_label_white_24dp" | ||||
|         android:title="@string/action_move_category" | ||||
|         app:showAsAction="ifRoom" /> | ||||
|         app:showAsAction="always" /> | ||||
|  | ||||
|     <item | ||||
|         android:id="@+id/action_delete" | ||||
|         android:icon="@drawable/ic_delete_white_24dp" | ||||
|         android:title="@string/action_delete" | ||||
|         app:showAsAction="ifRoom" /> | ||||
|  | ||||
|     <item | ||||
|         android:id="@+id/action_select_all" | ||||
|         android:icon="@drawable/ic_select_all_white_24dp" | ||||
|         android:title="@string/action_select_all" | ||||
|         app:showAsAction="ifRoom" /> | ||||
|         app:showAsAction="always" /> | ||||
|  | ||||
| </menu> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user