mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	Abstract bottom action menu code to main activity
This commit is contained in:
		@@ -29,6 +29,7 @@ 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
 | 
			
		||||
@@ -49,7 +50,7 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    lateinit var tabAnimator: ViewHeightAnimator
 | 
			
		||||
    lateinit var bottomNavAnimator: ViewHeightAnimator
 | 
			
		||||
    private lateinit var bottomNavAnimator: ViewHeightAnimator
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedInstanceState: Bundle?) {
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
@@ -75,7 +76,7 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
            if (currentRoot?.tag()?.toIntOrNull() != id) {
 | 
			
		||||
                when (id) {
 | 
			
		||||
                    R.id.nav_library -> setRoot(LibraryController(), id)
 | 
			
		||||
                    R.id.nav_updates -> setRoot(UpdatesController(), id)
 | 
			
		||||
                    R.id.nav_updates -> setRoot(UpdatesController(bottom_action_menu), id)
 | 
			
		||||
                    R.id.nav_history -> setRoot(HistoryController(), id)
 | 
			
		||||
                    R.id.nav_catalogues -> setRoot(CatalogueController(), id)
 | 
			
		||||
                    R.id.nav_more -> setRoot(MoreController(), id)
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ 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
 | 
			
		||||
@@ -27,8 +28,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 kotlinx.android.synthetic.main.updates_controller.bottom_menu
 | 
			
		||||
import kotlinx.android.synthetic.main.updates_controller.bottom_menu_bar
 | 
			
		||||
import eu.kanade.tachiyomi.widget.BottomActionMenu
 | 
			
		||||
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
 | 
			
		||||
@@ -39,7 +39,7 @@ 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,
 | 
			
		||||
        ActionMode.Callback,
 | 
			
		||||
@@ -49,10 +49,15 @@ class UpdatesController : NucleusController<UpdatesPresenter>(),
 | 
			
		||||
        ConfirmDeleteChaptersDialog.Listener,
 | 
			
		||||
        UpdatesAdapter.OnCoverClickListener {
 | 
			
		||||
 | 
			
		||||
    constructor(bottomActionMenu: BottomActionMenu) : this() {
 | 
			
		||||
        this.bottomActionMenu = bottomActionMenu
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Action mode for multiple selection.
 | 
			
		||||
     */
 | 
			
		||||
    private var actionMode: ActionMode? = null
 | 
			
		||||
    private var bottomActionMenu: BottomActionMenu? = null
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Adapter containing the recent chapters.
 | 
			
		||||
@@ -102,14 +107,11 @@ class UpdatesController : NucleusController<UpdatesPresenter>(),
 | 
			
		||||
            // It can be a very long operation, so we disable swipe refresh and show a toast.
 | 
			
		||||
            swipe_refresh.isRefreshing = false
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        bottom_menu.setOnMenuItemClickListener { onActionItemClicked(actionMode!!, it) }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onDestroyView(view: View) {
 | 
			
		||||
        adapter = null
 | 
			
		||||
        actionMode = null
 | 
			
		||||
        bottom_menu.setOnMenuItemClickListener(null)
 | 
			
		||||
        super.onDestroyView(view)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -145,8 +147,9 @@ class UpdatesController : NucleusController<UpdatesPresenter>(),
 | 
			
		||||
     * @param position position of clicked item
 | 
			
		||||
     */
 | 
			
		||||
    override fun onItemLongClick(position: Int) {
 | 
			
		||||
        if (actionMode == null)
 | 
			
		||||
        if (actionMode == null) {
 | 
			
		||||
            actionMode = (activity as AppCompatActivity).startSupportActionMode(this)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        toggleSelection(position)
 | 
			
		||||
    }
 | 
			
		||||
@@ -285,11 +288,6 @@ class UpdatesController : NucleusController<UpdatesPresenter>(),
 | 
			
		||||
        mode.menuInflater.inflate(R.menu.generic_selection, menu)
 | 
			
		||||
        adapter?.mode = SelectableAdapter.Mode.MULTI
 | 
			
		||||
 | 
			
		||||
        // Avoid reinflating the menu multiple times
 | 
			
		||||
        if (bottom_menu.menu.size() == 0) {
 | 
			
		||||
            mode.menuInflater.inflate(R.menu.updates_chapter_selection, bottom_menu.menu)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -301,7 +299,11 @@ class UpdatesController : NucleusController<UpdatesPresenter>(),
 | 
			
		||||
        } else {
 | 
			
		||||
            mode.title = count.toString()
 | 
			
		||||
 | 
			
		||||
            bottom_menu_bar.visibility = View.VISIBLE
 | 
			
		||||
            bottomActionMenu?.show(
 | 
			
		||||
                    mode.menuInflater,
 | 
			
		||||
                    R.menu.updates_chapter_selection,
 | 
			
		||||
                    ActionMenuView.OnMenuItemClickListener { onActionItemClicked(actionMode!!, it) }
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false
 | 
			
		||||
@@ -330,7 +332,7 @@ class UpdatesController : NucleusController<UpdatesPresenter>(),
 | 
			
		||||
     * @param mode the ActionMode object
 | 
			
		||||
     */
 | 
			
		||||
    override fun onDestroyActionMode(mode: ActionMode?) {
 | 
			
		||||
        bottom_menu_bar.visibility = View.GONE
 | 
			
		||||
        bottomActionMenu?.hide()
 | 
			
		||||
        adapter?.mode = SelectableAdapter.Mode.IDLE
 | 
			
		||||
        adapter?.clearSelection()
 | 
			
		||||
        actionMode = null
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,37 @@
 | 
			
		||||
package eu.kanade.tachiyomi.widget
 | 
			
		||||
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.util.AttributeSet
 | 
			
		||||
import android.view.MenuInflater
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
class BottomActionMenu @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
 | 
			
		||||
        FrameLayout(context, attrs) {
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        inflate(context, R.layout.common_bottom_action_menu, this)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun show(menuInflater: MenuInflater, @MenuRes menuRes: Int, listener: ActionMenuView.OnMenuItemClickListener) {
 | 
			
		||||
        // 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
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun hide() {
 | 
			
		||||
        bottom_menu_bar.visibility = View.GONE
 | 
			
		||||
 | 
			
		||||
        bottom_menu.setOnMenuItemClickListener(null)
 | 
			
		||||
        bottom_menu.menu.clear()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user