mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Action toolbar code cleanup
This commit is contained in:
		| @@ -1,8 +0,0 @@ | ||||
| package eu.kanade.tachiyomi.ui.base.controller | ||||
|  | ||||
| import eu.kanade.tachiyomi.widget.BottomActionMenu | ||||
|  | ||||
| interface BottomActionMenuController { | ||||
|  | ||||
|     fun configureBottomActionMenu(bottomActionMenu: BottomActionMenu) | ||||
| } | ||||
| @@ -32,7 +32,6 @@ 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 | ||||
| @@ -42,8 +41,8 @@ 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.action_toolbar | ||||
| import kotlinx.android.synthetic.main.library_controller.empty_view | ||||
| import kotlinx.android.synthetic.main.library_controller.library_pager | ||||
| import kotlinx.android.synthetic.main.main_activity.drawer | ||||
| @@ -60,7 +59,6 @@ class LibraryController( | ||||
|         RootController, | ||||
|         TabbedController, | ||||
|         SecondaryDrawerController, | ||||
|         BottomActionMenuController, | ||||
|         ActionMode.Callback, | ||||
|         ChangeMangaCategoriesDialog.Listener, | ||||
|         DeleteLibraryMangasDialog.Listener { | ||||
| @@ -75,7 +73,6 @@ class LibraryController( | ||||
|      * Action mode for selections. | ||||
|      */ | ||||
|     private var actionMode: ActionMode? = null | ||||
|     private var bottomActionMenu: BottomActionMenu? = null | ||||
|  | ||||
|     /** | ||||
|      * Library search query. | ||||
| @@ -184,6 +181,7 @@ class LibraryController( | ||||
|  | ||||
|     override fun onDestroyView(view: View) { | ||||
|         destroyActionModeIfNeeded() | ||||
|         action_toolbar.destroy() | ||||
|         adapter?.onDestroy() | ||||
|         adapter = null | ||||
|         tabsVisibilitySubscription?.unsubscribe() | ||||
| @@ -318,6 +316,10 @@ class LibraryController( | ||||
|     fun createActionModeIfNeeded() { | ||||
|         if (actionMode == null) { | ||||
|             actionMode = (activity as AppCompatActivity).startSupportActionMode(this) | ||||
|             action_toolbar.show( | ||||
|                     actionMode!!, | ||||
|                     R.menu.library_selection | ||||
|             ) { onActionItemClicked(actionMode!!, it!!) } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -430,8 +432,7 @@ class LibraryController( | ||||
|         } else { | ||||
|             mode.title = count.toString() | ||||
|  | ||||
|             bottomActionMenu?.show(mode.menuInflater) | ||||
|             bottomActionMenu?.findItem(R.id.action_edit_cover)?.isVisible = count == 1 | ||||
|             action_toolbar.findItem(R.id.action_edit_cover)?.isVisible = count == 1 | ||||
|         } | ||||
|         return false | ||||
|     } | ||||
| @@ -451,20 +452,13 @@ class LibraryController( | ||||
|     } | ||||
|  | ||||
|     override fun onDestroyActionMode(mode: ActionMode?) { | ||||
|         bottomActionMenu?.hide() | ||||
|         action_toolbar.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() | ||||
|   | ||||
| @@ -14,7 +14,6 @@ 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 | ||||
| @@ -30,7 +29,6 @@ import eu.kanade.tachiyomi.ui.more.MoreController | ||||
| import eu.kanade.tachiyomi.ui.recent.history.HistoryController | ||||
| import eu.kanade.tachiyomi.ui.recent.updates.UpdatesController | ||||
| import kotlinx.android.synthetic.main.main_activity.appbar | ||||
| import kotlinx.android.synthetic.main.main_activity.bottom_action_menu | ||||
| import kotlinx.android.synthetic.main.main_activity.bottom_nav | ||||
| import kotlinx.android.synthetic.main.main_activity.drawer | ||||
| import kotlinx.android.synthetic.main.main_activity.tabs | ||||
| @@ -259,13 +257,6 @@ 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 { | ||||
|   | ||||
| @@ -18,7 +18,6 @@ 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 | ||||
| @@ -28,7 +27,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaController | ||||
| import eu.kanade.tachiyomi.ui.reader.ReaderActivity | ||||
| import eu.kanade.tachiyomi.util.system.notificationManager | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import eu.kanade.tachiyomi.widget.BottomActionMenu | ||||
| import kotlinx.android.synthetic.main.updates_controller.action_toolbar | ||||
| import kotlinx.android.synthetic.main.updates_controller.empty_view | ||||
| import kotlinx.android.synthetic.main.updates_controller.recycler | ||||
| import kotlinx.android.synthetic.main.updates_controller.swipe_refresh | ||||
| @@ -42,7 +41,6 @@ import timber.log.Timber | ||||
| class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|         RootController, | ||||
|         NoToolbarElevationController, | ||||
|         BottomActionMenuController, | ||||
|         ActionMode.Callback, | ||||
|         FlexibleAdapter.OnItemClickListener, | ||||
|         FlexibleAdapter.OnItemLongClickListener, | ||||
| @@ -54,7 +52,6 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|      * Action mode for multiple selection. | ||||
|      */ | ||||
|     private var actionMode: ActionMode? = null | ||||
|     private var bottomActionMenu: BottomActionMenu? = null | ||||
|  | ||||
|     /** | ||||
|      * Adapter containing the recent chapters. | ||||
| @@ -108,6 +105,7 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|  | ||||
|     override fun onDestroyView(view: View) { | ||||
|         destroyActionModeIfNeeded() | ||||
|         action_toolbar.destroy() | ||||
|         adapter = null | ||||
|         super.onDestroyView(view) | ||||
|     } | ||||
| @@ -146,6 +144,10 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|     override fun onItemLongClick(position: Int) { | ||||
|         if (actionMode == null) { | ||||
|             actionMode = (activity as AppCompatActivity).startSupportActionMode(this) | ||||
|             action_toolbar.show( | ||||
|                     actionMode!!, | ||||
|                     R.menu.updates_chapter_selection | ||||
|             ) { onActionItemClicked(actionMode!!, it!!) } | ||||
|         } | ||||
|  | ||||
|         toggleSelection(position) | ||||
| @@ -294,8 +296,6 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|             destroyActionModeIfNeeded() | ||||
|         } else { | ||||
|             mode.title = count.toString() | ||||
|  | ||||
|             bottomActionMenu?.show(mode.menuInflater) | ||||
|         } | ||||
|  | ||||
|         return false | ||||
| @@ -324,19 +324,12 @@ class UpdatesController : NucleusController<UpdatesPresenter>(), | ||||
|      * @param mode the ActionMode object | ||||
|      */ | ||||
|     override fun onDestroyActionMode(mode: ActionMode?) { | ||||
|         bottomActionMenu?.hide() | ||||
|         action_toolbar.hide() | ||||
|         adapter?.mode = SelectableAdapter.Mode.IDLE | ||||
|         adapter?.clearSelection() | ||||
|         actionMode = null | ||||
|     } | ||||
|  | ||||
|     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() | ||||
|   | ||||
| @@ -0,0 +1,59 @@ | ||||
| package eu.kanade.tachiyomi.widget | ||||
|  | ||||
| import android.content.Context | ||||
| import android.util.AttributeSet | ||||
| import android.view.MenuItem | ||||
| import android.view.View | ||||
| import android.widget.FrameLayout | ||||
| import androidx.annotation.IdRes | ||||
| import androidx.annotation.MenuRes | ||||
| import androidx.appcompat.view.ActionMode | ||||
| import eu.kanade.tachiyomi.R | ||||
| import kotlinx.android.synthetic.main.common_action_toolbar.view.common_action_menu | ||||
| import kotlinx.android.synthetic.main.common_action_toolbar.view.common_action_toolbar | ||||
|  | ||||
| /** | ||||
|  * A toolbar holding only menu items. | ||||
|  */ | ||||
| class ActionToolbar @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : | ||||
|         FrameLayout(context, attrs) { | ||||
|  | ||||
|     init { | ||||
|         inflate(context, R.layout.common_action_toolbar, this) | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Remove menu items and remove listener. | ||||
|      */ | ||||
|     fun destroy() { | ||||
|         common_action_menu.menu.clear() | ||||
|         common_action_menu.setOnMenuItemClickListener(null) | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets a menu item if found. | ||||
|      */ | ||||
|     fun findItem(@IdRes itemId: Int): MenuItem? { | ||||
|         return common_action_menu.menu.findItem(itemId) | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Show the menu toolbar using the provided ActionMode's context to inflate the items. | ||||
|      */ | ||||
|     fun show(mode: ActionMode, @MenuRes menuRes: Int, listener: (item: MenuItem?) -> Boolean) { | ||||
|         // Avoid re-inflating the menu | ||||
|         if (common_action_menu.menu.size() == 0) { | ||||
|             mode.menuInflater.inflate(menuRes, common_action_menu.menu) | ||||
|             common_action_menu.setOnMenuItemClickListener { listener(it) } | ||||
|         } | ||||
|  | ||||
|         common_action_toolbar.visibility = View.VISIBLE | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Hide the menu toolbar. | ||||
|      */ | ||||
|     fun hide() { | ||||
|         common_action_toolbar.visibility = View.GONE | ||||
|     } | ||||
| } | ||||
| @@ -1,51 +0,0 @@ | ||||
| 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.IdRes | ||||
| import androidx.annotation.MenuRes | ||||
| 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 | ||||
|  | ||||
| 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 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 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) { | ||||
|             menuInflater.inflate(menuRes, bottom_menu.menu) | ||||
|         } | ||||
|  | ||||
|         bottom_menu_bar.visibility = View.VISIBLE | ||||
|     } | ||||
|  | ||||
|     fun hide() { | ||||
|         bottom_menu_bar.visibility = View.GONE | ||||
|     } | ||||
| } | ||||
| @@ -5,7 +5,7 @@ | ||||
|     android:layout_height="wrap_content"> | ||||
| 
 | ||||
|     <androidx.appcompat.widget.Toolbar | ||||
|         android:id="@+id/bottom_menu_bar" | ||||
|         android:id="@+id/common_action_toolbar" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="?attr/actionBarSize" | ||||
|         android:layout_gravity="bottom" | ||||
| @@ -16,7 +16,7 @@ | ||||
|         app:contentInsetEnd="8dp"> | ||||
| 
 | ||||
|         <androidx.appcompat.widget.ActionMenuView | ||||
|             android:id="@+id/bottom_menu" | ||||
|             android:id="@+id/common_action_menu" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="match_parent" /> | ||||
| 
 | ||||
| @@ -1,12 +1,20 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent"> | ||||
|     android:layout_height="match_parent" | ||||
|     android:orientation="vertical"> | ||||
|  | ||||
|     <androidx.viewpager.widget.ViewPager | ||||
|         android:id="@+id/library_pager" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="match_parent" /> | ||||
|         android:layout_height="0dp" | ||||
|         android:layout_weight="1" /> | ||||
|  | ||||
|     <eu.kanade.tachiyomi.widget.ActionToolbar | ||||
|         android:id="@+id/action_toolbar" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_gravity="bottom" /> | ||||
|  | ||||
|     <eu.kanade.tachiyomi.widget.EmptyView | ||||
|         android:id="@+id/empty_view" | ||||
| @@ -15,4 +23,4 @@ | ||||
|         android:layout_gravity="center" | ||||
|         android:visibility="gone" /> | ||||
|  | ||||
| </FrameLayout> | ||||
| </LinearLayout> | ||||
|   | ||||
| @@ -42,11 +42,6 @@ | ||||
|             android:layout_height="0dp" | ||||
|             android:layout_weight="1" /> | ||||
|  | ||||
|         <eu.kanade.tachiyomi.widget.BottomActionMenu | ||||
|             android:id="@+id/bottom_action_menu" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" /> | ||||
|  | ||||
|         <com.google.android.material.bottomnavigation.BottomNavigationView | ||||
|             android:id="@+id/bottom_nav" | ||||
|             android:layout_width="match_parent" | ||||
|   | ||||
| @@ -1,7 +1,6 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     android:id="@+id/swipe_refresh" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent"> | ||||
| @@ -15,8 +14,16 @@ | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="match_parent" | ||||
|             android:descendantFocusability="blocksDescendants" | ||||
|             android:paddingBottom="?attr/actionBarSize" | ||||
|             android:clipToPadding="false" | ||||
|             tools:listitem="@layout/updates_item" /> | ||||
|  | ||||
|         <eu.kanade.tachiyomi.widget.ActionToolbar | ||||
|             android:id="@+id/action_toolbar" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_gravity="bottom" /> | ||||
|  | ||||
|         <eu.kanade.tachiyomi.widget.EmptyView | ||||
|             android:id="@+id/empty_view" | ||||
|             android:layout_width="wrap_content" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user