For #673 - Trigger session overflow menu on session item menu
This commit is contained in:
parent
1aa3d7e1ad
commit
22c915b5a4
|
@ -54,6 +54,7 @@ fun SessionBundleStorage.archive(sessionManager: SessionManager) {
|
||||||
new()
|
new()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("TooManyFunctions")
|
||||||
class HomeFragment : Fragment() {
|
class HomeFragment : Fragment() {
|
||||||
private val bus = ActionBusFactory.get(this)
|
private val bus = ActionBusFactory.get(this)
|
||||||
private var sessionObserver: SessionManager.Observer? = null
|
private var sessionObserver: SessionManager.Observer? = null
|
||||||
|
@ -210,6 +211,7 @@ class HomeFragment : Fragment() {
|
||||||
is SessionsAction.Delete -> {
|
is SessionsAction.Delete -> {
|
||||||
requireComponents.core.sessionStorage.remove(it.archivedSession.bundle)
|
requireComponents.core.sessionStorage.remove(it.archivedSession.bundle)
|
||||||
}
|
}
|
||||||
|
is SessionsAction.MenuTapped -> openSessionMenu()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
package org.mozilla.fenix.home.sessions
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import mozilla.components.browser.menu.BrowserMenuBuilder
|
|
||||||
import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
|
|
||||||
import org.mozilla.fenix.R
|
|
||||||
|
|
||||||
class SessionItemMenu(
|
|
||||||
private val context: Context,
|
|
||||||
private val onItemTapped: (Item) -> Unit = {}
|
|
||||||
) {
|
|
||||||
sealed class Item {
|
|
||||||
object Delete : Item()
|
|
||||||
}
|
|
||||||
|
|
||||||
val menuBuilder by lazy { BrowserMenuBuilder(menuItems) }
|
|
||||||
|
|
||||||
private val menuItems by lazy {
|
|
||||||
listOf(
|
|
||||||
SimpleBrowserMenuItem(
|
|
||||||
context.getString(R.string.session_item_delete)
|
|
||||||
) {
|
|
||||||
onItemTapped.invoke(Item.Delete)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -94,17 +94,14 @@ class SessionsAdapter(
|
||||||
override val containerView: View? = view
|
override val containerView: View? = view
|
||||||
) : RecyclerView.ViewHolder(view), LayoutContainer {
|
) : RecyclerView.ViewHolder(view), LayoutContainer {
|
||||||
private var session: ArchivedSession? = null
|
private var session: ArchivedSession? = null
|
||||||
private lateinit var sessionMenu: SessionItemMenu
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
setupMenu()
|
|
||||||
|
|
||||||
session_item.setOnClickListener {
|
session_item.setOnClickListener {
|
||||||
session?.apply { actionEmitter.onNext(SessionsAction.Select(this)) }
|
session?.apply { actionEmitter.onNext(SessionsAction.Select(this)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
session_card_overflow_button.setOnClickListener {
|
session_card_overflow_button.setOnClickListener {
|
||||||
sessionMenu.menuBuilder.build(itemView.context).show(it)
|
session?.apply { actionEmitter.onNext(SessionsAction.MenuTapped(this)) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,16 +119,6 @@ class SessionsAdapter(
|
||||||
} else { "" }
|
} else { "" }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupMenu() {
|
|
||||||
sessionMenu = SessionItemMenu(itemView.context) {
|
|
||||||
if (it is SessionItemMenu.Item.Delete) {
|
|
||||||
session?.apply {
|
|
||||||
actionEmitter.onNext(SessionsAction.Delete(this))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val availableColors = listOf(
|
private val availableColors = listOf(
|
||||||
R.color.photonBlue40, R.color.photonGreen50, R.color.photonYellow50, R.color.photonOrange50,
|
R.color.photonBlue40, R.color.photonGreen50, R.color.photonYellow50, R.color.photonOrange50,
|
||||||
|
|
|
@ -115,6 +115,7 @@ data class SessionsState(val archivedSessions: List<ArchivedSession>) : ViewStat
|
||||||
sealed class SessionsAction : Action {
|
sealed class SessionsAction : Action {
|
||||||
data class Select(val archivedSession: ArchivedSession) : SessionsAction()
|
data class Select(val archivedSession: ArchivedSession) : SessionsAction()
|
||||||
data class Delete(val archivedSession: ArchivedSession) : SessionsAction()
|
data class Delete(val archivedSession: ArchivedSession) : SessionsAction()
|
||||||
|
data class MenuTapped(val archivedSession: ArchivedSession) : SessionsAction()
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed class SessionsChange : Change {
|
sealed class SessionsChange : Change {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user