[fenix] For https://github.com/mozilla-mobile/fenix/issues/16132 - Revise multiselect mode UI
parent
80eea00a90
commit
a197281092
@ -0,0 +1,44 @@
|
|||||||
|
/* 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.tabtray
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import mozilla.components.browser.menu.BrowserMenuBuilder
|
||||||
|
import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
|
||||||
|
import org.mozilla.fenix.R
|
||||||
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
|
import org.mozilla.fenix.ext.components
|
||||||
|
|
||||||
|
class MultiselectSelectionMenu(
|
||||||
|
private val context: Context,
|
||||||
|
private val onItemTapped: (Item) -> Unit = {}
|
||||||
|
) {
|
||||||
|
sealed class Item {
|
||||||
|
object BookmarkTabs : Item()
|
||||||
|
object DeleteTabs : Item()
|
||||||
|
}
|
||||||
|
|
||||||
|
val menuBuilder by lazy { BrowserMenuBuilder(menuItems) }
|
||||||
|
|
||||||
|
private val menuItems by lazy {
|
||||||
|
listOf(
|
||||||
|
SimpleBrowserMenuItem(
|
||||||
|
context.getString(R.string.tab_tray_multiselect_menu_item_bookmark),
|
||||||
|
textColorResource = R.color.primary_text_normal_theme
|
||||||
|
) {
|
||||||
|
context.components.analytics.metrics.track(Event.TabsTraySaveToCollectionPressed)
|
||||||
|
onItemTapped.invoke(Item.BookmarkTabs)
|
||||||
|
},
|
||||||
|
|
||||||
|
SimpleBrowserMenuItem(
|
||||||
|
context.getString(R.string.tab_tray_multiselect_menu_item_close),
|
||||||
|
textColorResource = R.color.primary_text_normal_theme
|
||||||
|
) {
|
||||||
|
context.components.analytics.metrics.track(Event.TabsTrayShareAllTabsPressed)
|
||||||
|
onItemTapped.invoke(Item.DeleteTabs)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,72 @@
|
|||||||
|
/* 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.tabtray
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import mozilla.components.browser.menu.BrowserMenuBuilder
|
||||||
|
import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
|
||||||
|
import org.mozilla.fenix.R
|
||||||
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
|
import org.mozilla.fenix.ext.components
|
||||||
|
|
||||||
|
class TabTrayItemMenu(
|
||||||
|
private val context: Context,
|
||||||
|
private val shouldShowSaveToCollection: () -> Boolean,
|
||||||
|
private val hasOpenTabs: () -> Boolean,
|
||||||
|
private val onItemTapped: (Item) -> Unit = {}
|
||||||
|
) {
|
||||||
|
|
||||||
|
sealed class Item {
|
||||||
|
object ShareAllTabs : Item()
|
||||||
|
object OpenTabSettings : Item()
|
||||||
|
object SaveToCollection : Item()
|
||||||
|
object CloseAllTabs : Item()
|
||||||
|
object OpenRecentlyClosed : Item()
|
||||||
|
}
|
||||||
|
|
||||||
|
val menuBuilder by lazy { BrowserMenuBuilder(menuItems) }
|
||||||
|
|
||||||
|
private val menuItems by lazy {
|
||||||
|
listOf(
|
||||||
|
SimpleBrowserMenuItem(
|
||||||
|
context.getString(R.string.tab_tray_menu_item_save),
|
||||||
|
textColorResource = R.color.primary_text_normal_theme
|
||||||
|
) {
|
||||||
|
context.components.analytics.metrics.track(Event.TabsTraySaveToCollectionPressed)
|
||||||
|
onItemTapped.invoke(Item.SaveToCollection)
|
||||||
|
}.apply { visible = shouldShowSaveToCollection },
|
||||||
|
|
||||||
|
SimpleBrowserMenuItem(
|
||||||
|
context.getString(R.string.tab_tray_menu_item_share),
|
||||||
|
textColorResource = R.color.primary_text_normal_theme
|
||||||
|
) {
|
||||||
|
context.components.analytics.metrics.track(Event.TabsTrayShareAllTabsPressed)
|
||||||
|
onItemTapped.invoke(Item.ShareAllTabs)
|
||||||
|
}.apply { visible = hasOpenTabs },
|
||||||
|
|
||||||
|
SimpleBrowserMenuItem(
|
||||||
|
context.getString(R.string.tab_tray_menu_tab_settings),
|
||||||
|
textColorResource = R.color.primary_text_normal_theme
|
||||||
|
) {
|
||||||
|
onItemTapped.invoke(Item.OpenTabSettings)
|
||||||
|
},
|
||||||
|
|
||||||
|
SimpleBrowserMenuItem(
|
||||||
|
context.getString(R.string.tab_tray_menu_recently_closed),
|
||||||
|
textColorResource = R.color.primary_text_normal_theme
|
||||||
|
) {
|
||||||
|
onItemTapped.invoke(Item.OpenRecentlyClosed)
|
||||||
|
},
|
||||||
|
|
||||||
|
SimpleBrowserMenuItem(
|
||||||
|
context.getString(R.string.tab_tray_menu_item_close),
|
||||||
|
textColorResource = R.color.primary_text_normal_theme
|
||||||
|
) {
|
||||||
|
context.components.analytics.metrics.track(Event.TabsTrayCloseAllTabsPressed)
|
||||||
|
onItemTapped.invoke(Item.CloseAllTabs)
|
||||||
|
}.apply { visible = hasOpenTabs }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- 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/. -->
|
||||||
|
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/collect_multi_select"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:contentDescription="@string/tab_tray_collection_button_multiselect_content_description"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/share_multi_select"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:srcCompat="@drawable/ic_tab_collection"
|
||||||
|
app:tint="@color/contrast_text_normal_theme" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/share_multi_select"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:contentDescription="@string/tab_tray_multiselect_share_content_description"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/menu_multi_select"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:srcCompat="@drawable/ic_hollow_share"
|
||||||
|
app:tint="@color/contrast_text_normal_theme" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/menu_multi_select"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:contentDescription="@string/tab_tray_multiselect_menu_content_description"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:srcCompat="@drawable/ic_menu"
|
||||||
|
app:tint="@color/contrast_text_normal_theme" />
|
||||||
|
</merge>
|
Loading…
Reference in New Issue