You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iceraven-browser/app/src/main/java/org/mozilla/fenix/home/TabCounterBuilder.kt

82 lines
2.8 KiB
Kotlin

/* 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
import android.content.Context
import androidx.core.content.ContextCompat
import androidx.navigation.NavController
import mozilla.components.ui.tabcounter.TabCounter
import mozilla.components.ui.tabcounter.TabCounterMenu
import mozilla.telemetry.glean.private.NoExtras
import org.mozilla.fenix.GleanMetrics.StartOnHome
import org.mozilla.fenix.R
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
import org.mozilla.fenix.components.toolbar.FenixTabCounterMenu
import org.mozilla.fenix.ext.nav
/**
* Helper class for building the [FenixTabCounterMenu].
*
* @property context An Android [Context].
* @property browsingModeManager [BrowsingModeManager] used for fetching the current browsing mode.
* @property navController [NavController] used for navigation.
* @property tabCounter The [TabCounter] that will be setup with event handlers.
*/
class TabCounterBuilder(
private val context: Context,
private val browsingModeManager: BrowsingModeManager,
private val navController: NavController,
private val tabCounter: TabCounter,
) {
/**
* Builds the [FenixTabCounterMenu].
*/
fun build() {
val tabCounterMenu = FenixTabCounterMenu(
context = context,
onItemTapped = ::onItemTapped,
iconColor = if (browsingModeManager.mode == BrowsingMode.Private) {
ContextCompat.getColor(context, R.color.fx_mobile_private_text_color_primary)
} else {
null
},
)
tabCounterMenu.updateMenu(
showOnly = when (browsingModeManager.mode) {
BrowsingMode.Normal -> BrowsingMode.Private
BrowsingMode.Private -> BrowsingMode.Normal
},
)
tabCounter.setOnLongClickListener {
tabCounterMenu.menuController.show(anchor = it)
true
}
tabCounter.setOnClickListener {
StartOnHome.openTabsTray.record(NoExtras())
navController.nav(
R.id.homeFragment,
HomeFragmentDirections.actionGlobalTabsTrayFragment(),
)
}
}
/**
* Callback invoked when a menu item is tapped on.
*/
internal fun onItemTapped(item: TabCounterMenu.Item) {
if (item is TabCounterMenu.Item.NewTab) {
browsingModeManager.mode = BrowsingMode.Normal
} else if (item is TabCounterMenu.Item.NewPrivateTab) {
browsingModeManager.mode = BrowsingMode.Private
}
}
}