1
0
Fork 0

Create ToolbarPosition enum (#12747)

master
Tiger Oakes 2020-07-22 19:23:38 -07:00 committed by GitHub
parent c143f95819
commit 8f5a37733d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 141 additions and 121 deletions

View File

@ -93,6 +93,7 @@ import org.mozilla.fenix.components.toolbar.BrowserToolbarViewInteractor
import org.mozilla.fenix.components.toolbar.DefaultBrowserToolbarController import org.mozilla.fenix.components.toolbar.DefaultBrowserToolbarController
import org.mozilla.fenix.components.toolbar.SwipeRefreshScrollingViewBehavior import org.mozilla.fenix.components.toolbar.SwipeRefreshScrollingViewBehavior
import org.mozilla.fenix.components.toolbar.ToolbarIntegration import org.mozilla.fenix.components.toolbar.ToolbarIntegration
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.downloads.DownloadService import org.mozilla.fenix.downloads.DownloadService
import org.mozilla.fenix.downloads.DynamicDownloadDialog import org.mozilla.fenix.downloads.DynamicDownloadDialog
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
@ -264,7 +265,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
_browserToolbarView = BrowserToolbarView( _browserToolbarView = BrowserToolbarView(
container = view.browserLayout, container = view.browserLayout,
shouldUseBottomToolbar = context.settings().shouldUseBottomToolbar, toolbarPosition = context.settings().toolbarPosition,
interactor = browserInteractor, interactor = browserInteractor,
customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) }, customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) },
lifecycleOwner = viewLifecycleOwner lifecycleOwner = viewLifecycleOwner
@ -677,10 +678,10 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
private fun initializeEngineView(toolbarHeight: Int) { private fun initializeEngineView(toolbarHeight: Int) {
engineView.setDynamicToolbarMaxHeight(toolbarHeight) engineView.setDynamicToolbarMaxHeight(toolbarHeight)
val behavior = if (requireContext().settings().shouldUseBottomToolbar) { val context = requireContext()
EngineViewBottomBehavior(context, null) val behavior = when (context.settings().toolbarPosition) {
} else { ToolbarPosition.BOTTOM -> EngineViewBottomBehavior(context, null)
SwipeRefreshScrollingViewBehavior(requireContext(), null, engineView, browserToolbarView) ToolbarPosition.TOP -> SwipeRefreshScrollingViewBehavior(context, null, engineView, browserToolbarView)
} }
(swipeRefresh.layoutParams as CoordinatorLayout.LayoutParams).behavior = behavior (swipeRefresh.layoutParams as CoordinatorLayout.LayoutParams).behavior = behavior
@ -843,7 +844,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
* Returns the layout [android.view.Gravity] for the quick settings and ETP dialog. * Returns the layout [android.view.Gravity] for the quick settings and ETP dialog.
*/ */
protected fun getAppropriateLayoutGravity(): Int = protected fun getAppropriateLayoutGravity(): Int =
if (context?.settings()?.shouldUseBottomToolbar == true) Gravity.BOTTOM else Gravity.TOP context?.settings()?.toolbarPosition?.androidGravity ?: Gravity.BOTTOM
/** /**
* Updates the site permissions rules based on user settings. * Updates the site permissions rules based on user settings.

View File

@ -21,6 +21,7 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import mozilla.components.concept.engine.EngineView import mozilla.components.concept.engine.EngineView
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.settings
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
@ -155,12 +156,15 @@ class BrowserAnimator(
fun getToolbarNavOptions(context: Context): NavOptions { fun getToolbarNavOptions(context: Context): NavOptions {
val navOptions = NavOptions.Builder() val navOptions = NavOptions.Builder()
if (!context.settings().shouldUseBottomToolbar) { when (context.settings().toolbarPosition) {
navOptions.setEnterAnim(R.anim.fade_in) ToolbarPosition.TOP -> {
navOptions.setExitAnim(R.anim.fade_out) navOptions.setEnterAnim(R.anim.fade_in)
} else { navOptions.setExitAnim(R.anim.fade_out)
navOptions.setEnterAnim(R.anim.fade_in_up) }
navOptions.setExitAnim(R.anim.fade_out_down) ToolbarPosition.BOTTOM -> {
navOptions.setEnterAnim(R.anim.fade_in_up)
navOptions.setExitAnim(R.anim.fade_out_down)
}
} }
return navOptions.build() return navOptions.build()

View File

@ -11,7 +11,6 @@ import android.graphics.drawable.ColorDrawable
import android.view.Gravity import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import androidx.core.view.isGone
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.marginTop import androidx.core.view.marginTop
import kotlinx.android.synthetic.main.search_widget_cfr.view.* import kotlinx.android.synthetic.main.search_widget_cfr.view.*
@ -21,6 +20,7 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.components.SearchWidgetCreator import org.mozilla.fenix.components.SearchWidgetCreator
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
/** /**
@ -50,18 +50,14 @@ class SearchWidgetCFR(
val searchWidgetCFRDialog = Dialog(context) val searchWidgetCFRDialog = Dialog(context)
val layout = LayoutInflater.from(context) val layout = LayoutInflater.from(context)
.inflate(R.layout.search_widget_cfr, null) .inflate(R.layout.search_widget_cfr, null)
val isBottomToolbar = settings.shouldUseBottomToolbar val toolbarPosition = settings.toolbarPosition
layout.drop_down_triangle.isGone = isBottomToolbar layout.drop_down_triangle.isVisible = toolbarPosition == ToolbarPosition.TOP
layout.pop_up_triangle.isVisible = isBottomToolbar layout.pop_up_triangle.isVisible = toolbarPosition == ToolbarPosition.BOTTOM
val toolbar = getToolbar() val toolbar = getToolbar()
val gravity = if (isBottomToolbar) { val gravity = Gravity.CENTER_HORIZONTAL or toolbarPosition.androidGravity
Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
} else {
Gravity.CENTER_HORIZONTAL or Gravity.TOP
}
layout.cfr_neg_button.setOnClickListener { layout.cfr_neg_button.setOnClickListener {
metrics.track(Event.SearchWidgetCFRNotNowPressed) metrics.track(Event.SearchWidgetCFRNotNowPressed)

View File

@ -50,6 +50,7 @@ import org.mozilla.fenix.GleanMetrics.TopSites
import org.mozilla.fenix.GleanMetrics.TrackingProtection import org.mozilla.fenix.GleanMetrics.TrackingProtection
import org.mozilla.fenix.GleanMetrics.UserSpecifiedSearchEngines import org.mozilla.fenix.GleanMetrics.UserSpecifiedSearchEngines
import org.mozilla.fenix.GleanMetrics.VoiceSearch import org.mozilla.fenix.GleanMetrics.VoiceSearch
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.utils.BrowsersCache import org.mozilla.fenix.utils.BrowsersCache
@ -724,10 +725,9 @@ class GleanMetricsService(private val context: Context) : MetricsService {
} }
toolbarPosition.set( toolbarPosition.set(
if (context.settings().shouldUseBottomToolbar) { when (context.settings().toolbarPosition) {
Event.ToolbarPositionChanged.Position.BOTTOM.name ToolbarPosition.BOTTOM -> Event.ToolbarPositionChanged.Position.BOTTOM.name
} else { ToolbarPosition.TOP -> Event.ToolbarPositionChanged.Position.TOP.name
Event.ToolbarPositionChanged.Position.TOP.name
} }
) )
} }

View File

@ -17,6 +17,7 @@ import androidx.annotation.VisibleForTesting
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS import com.google.android.material.appbar.AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS
@ -59,7 +60,7 @@ interface BrowserToolbarViewInteractor {
@SuppressWarnings("LargeClass") @SuppressWarnings("LargeClass")
class BrowserToolbarView( class BrowserToolbarView(
private val container: ViewGroup, private val container: ViewGroup,
private val shouldUseBottomToolbar: Boolean, private val toolbarPosition: ToolbarPosition,
private val interactor: BrowserToolbarViewInteractor, private val interactor: BrowserToolbarViewInteractor,
private val customTabSession: Session?, private val customTabSession: Session?,
private val lifecycleOwner: LifecycleOwner private val lifecycleOwner: LifecycleOwner
@ -71,9 +72,9 @@ class BrowserToolbarView(
private val settings = container.context.settings() private val settings = container.context.settings()
@LayoutRes @LayoutRes
private val toolbarLayout = when { private val toolbarLayout = when (settings.toolbarPosition) {
settings.shouldUseBottomToolbar -> R.layout.component_bottom_browser_toolbar ToolbarPosition.BOTTOM -> R.layout.component_bottom_browser_toolbar
else -> R.layout.component_browser_top_toolbar ToolbarPosition.TOP -> R.layout.component_browser_top_toolbar
} }
private val layout = LayoutInflater.from(container.context) private val layout = LayoutInflater.from(container.context)
@ -144,7 +145,7 @@ class BrowserToolbarView(
with(container.context) { with(container.context) {
val sessionManager = components.core.sessionManager val sessionManager = components.core.sessionManager
if (!shouldUseBottomToolbar) { if (toolbarPosition == ToolbarPosition.TOP) {
val offsetChangedListener = val offsetChangedListener =
AppBarLayout.OnOffsetChangedListener { _: AppBarLayout?, verticalOffset: Int -> AppBarLayout.OnOffsetChangedListener { _: AppBarLayout?, verticalOffset: Int ->
interactor.onScrolled(verticalOffset) interactor.onScrolled(verticalOffset)
@ -167,10 +168,9 @@ class BrowserToolbarView(
false false
} }
display.progressGravity = if (shouldUseBottomToolbar) { display.progressGravity = when (toolbarPosition) {
DisplayToolbar.Gravity.TOP ToolbarPosition.BOTTOM -> DisplayToolbar.Gravity.TOP
} else { ToolbarPosition.TOP -> DisplayToolbar.Gravity.BOTTOM
DisplayToolbar.Gravity.BOTTOM
} }
val primaryTextColor = ContextCompat.getColor( val primaryTextColor = ContextCompat.getColor(
@ -207,7 +207,7 @@ class BrowserToolbarView(
this, this,
sessionManager, sessionManager,
customTabSession?.id, customTabSession?.id,
shouldReverseItems = !shouldUseBottomToolbar, shouldReverseItems = toolbarPosition == ToolbarPosition.TOP,
onItemTapped = { onItemTapped = {
interactor.onBrowserToolbarMenuItemTapped(it) interactor.onBrowserToolbarMenuItemTapped(it)
} }
@ -216,7 +216,7 @@ class BrowserToolbarView(
menuToolbar = DefaultToolbarMenu( menuToolbar = DefaultToolbarMenu(
context = this, context = this,
hasAccountProblem = components.backgroundServices.accountManager.accountNeedsReauth(), hasAccountProblem = components.backgroundServices.accountManager.accountNeedsReauth(),
shouldReverseItems = !shouldUseBottomToolbar, shouldReverseItems = toolbarPosition == ToolbarPosition.TOP,
onItemTapped = { interactor.onBrowserToolbarMenuItemTapped(it) }, onItemTapped = { interactor.onBrowserToolbarMenuItemTapped(it) },
lifecycleOwner = lifecycleOwner, lifecycleOwner = lifecycleOwner,
sessionManager = sessionManager, sessionManager = sessionManager,
@ -254,12 +254,15 @@ class BrowserToolbarView(
} }
fun expand() { fun expand() {
if (settings.shouldUseBottomToolbar) { when (settings.toolbarPosition) {
(view.layoutParams as CoordinatorLayout.LayoutParams).apply { ToolbarPosition.BOTTOM -> {
(behavior as BrowserToolbarBottomBehavior).forceExpand(view) (view.layoutParams as CoordinatorLayout.LayoutParams).apply {
(behavior as BrowserToolbarBottomBehavior).forceExpand(view)
}
}
ToolbarPosition.TOP -> {
layout.app_bar?.setExpanded(true)
} }
} else if (!settings.shouldUseBottomToolbar) {
layout.app_bar?.setExpanded(true)
} }
} }
@ -268,30 +271,27 @@ class BrowserToolbarView(
* Note that the bottom toolbar has a feature flag for being dynamic, so it may not get flags set. * Note that the bottom toolbar has a feature flag for being dynamic, so it may not get flags set.
*/ */
fun setScrollFlags(shouldDisableScroll: Boolean = false) { fun setScrollFlags(shouldDisableScroll: Boolean = false) {
if (view.context.settings().shouldUseBottomToolbar) { when (settings.toolbarPosition) {
if (view.layoutParams is CoordinatorLayout.LayoutParams) { ToolbarPosition.BOTTOM -> {
(view.layoutParams as CoordinatorLayout.LayoutParams).apply { (view.layoutParams as? CoordinatorLayout.LayoutParams)?.apply {
behavior = BrowserToolbarBottomBehavior(view.context, null) behavior = BrowserToolbarBottomBehavior(view.context, null)
} }
} }
ToolbarPosition.TOP -> {
return view.updateLayoutParams<AppBarLayout.LayoutParams> {
} scrollFlags = if (settings.shouldUseFixedTopToolbar || shouldDisableScroll) {
// Force expand the toolbar so the user is not stuck with a hidden toolbar
val params = view.layoutParams as AppBarLayout.LayoutParams expand()
0
params.scrollFlags = when (view.context.settings().shouldUseFixedTopToolbar || shouldDisableScroll) { } else {
true -> { SCROLL_FLAG_SCROLL or
// Force expand the toolbar so the user is not stuck with a hidden toolbar SCROLL_FLAG_ENTER_ALWAYS or
expand() SCROLL_FLAG_SNAP or
0 SCROLL_FLAG_EXIT_UNTIL_COLLAPSED
} }
false -> { }
SCROLL_FLAG_SCROLL or SCROLL_FLAG_ENTER_ALWAYS or SCROLL_FLAG_SNAP or SCROLL_FLAG_EXIT_UNTIL_COLLAPSED
} }
} }
view.layoutParams = params
} }
companion object { companion object {

View File

@ -113,10 +113,9 @@ class TabCounterToolbarButton(
) )
return BrowserMenuBuilder( return BrowserMenuBuilder(
if (context.settings().shouldUseBottomToolbar) { when (context.settings().toolbarPosition) {
menuItems.reversed() ToolbarPosition.BOTTOM -> menuItems.reversed()
} else { ToolbarPosition.TOP -> menuItems
menuItems
} }
).build(context) ).build(context)
} }

View File

@ -0,0 +1,19 @@
/* 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.components.toolbar
import android.view.Gravity
/**
* Fenix lets the browser toolbar be placed at either the top or the bottom of the screen.
* This enum represents the posible positions.
*
* @property androidGravity [Gravity] value corresponding to the position.
* Used to position related elements such as a CFR tooltip.
*/
enum class ToolbarPosition(val androidGravity: Int) {
BOTTOM(Gravity.BOTTOM),
TOP(Gravity.TOP)
}

View File

@ -83,6 +83,7 @@ import org.mozilla.fenix.components.TabCollectionStorage
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.tips.FenixTipManager import org.mozilla.fenix.components.tips.FenixTipManager
import org.mozilla.fenix.components.tips.providers.MigrationTipProvider import org.mozilla.fenix.components.tips.providers.MigrationTipProvider
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.hideToolbar import org.mozilla.fenix.ext.hideToolbar
import org.mozilla.fenix.ext.metrics import org.mozilla.fenix.ext.metrics
@ -120,12 +121,9 @@ class HomeFragment : Fragment() {
} }
private val snackbarAnchorView: View? private val snackbarAnchorView: View?
get() { get() = when (requireContext().settings().toolbarPosition) {
return if (requireContext().settings().shouldUseBottomToolbar) { ToolbarPosition.BOTTOM -> toolbarLayout
toolbarLayout ToolbarPosition.TOP -> null
} else {
null
}
} }
private val browsingModeManager get() = (activity as HomeActivity).browsingModeManager private val browsingModeManager get() = (activity as HomeActivity).browsingModeManager
@ -253,45 +251,45 @@ class HomeFragment : Fragment() {
} }
private fun updateLayout(view: View) { private fun updateLayout(view: View) {
val shouldUseBottomToolbar = view.context.settings().shouldUseBottomToolbar when (view.context.settings().toolbarPosition) {
ToolbarPosition.TOP -> {
if (!shouldUseBottomToolbar) { view.toolbarLayout.layoutParams = CoordinatorLayout.LayoutParams(
view.toolbarLayout.layoutParams = CoordinatorLayout.LayoutParams( ConstraintLayout.LayoutParams.MATCH_PARENT,
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT
ConstraintLayout.LayoutParams.WRAP_CONTENT ).apply {
)
.apply {
gravity = Gravity.TOP gravity = Gravity.TOP
} }
ConstraintSet().apply { ConstraintSet().apply {
clone(view.toolbarLayout) clone(view.toolbarLayout)
clear(view.bottom_bar.id, BOTTOM) clear(view.bottom_bar.id, BOTTOM)
clear(view.bottomBarShadow.id, BOTTOM) clear(view.bottomBarShadow.id, BOTTOM)
connect(view.bottom_bar.id, TOP, PARENT_ID, TOP) connect(view.bottom_bar.id, TOP, PARENT_ID, TOP)
connect(view.bottomBarShadow.id, TOP, view.bottom_bar.id, BOTTOM) connect(view.bottomBarShadow.id, TOP, view.bottom_bar.id, BOTTOM)
connect(view.bottomBarShadow.id, BOTTOM, PARENT_ID, BOTTOM) connect(view.bottomBarShadow.id, BOTTOM, PARENT_ID, BOTTOM)
applyTo(view.toolbarLayout) applyTo(view.toolbarLayout)
}
view.bottom_bar.background = resources.getDrawable(
ThemeManager.resolveAttribute(R.attr.bottomBarBackgroundTop, requireContext()),
null
)
view.homeAppBar.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin = HEADER_MARGIN.dpToPx(resources.displayMetrics)
}
createNewAppBarListener(HEADER_MARGIN.dpToPx(resources.displayMetrics).toFloat())
view.homeAppBar.addOnOffsetChangedListener(
homeAppBarOffSetListener
)
} }
ToolbarPosition.BOTTOM -> {
view.bottom_bar.background = resources.getDrawable( createNewAppBarListener(0F)
ThemeManager.resolveAttribute(R.attr.bottomBarBackgroundTop, requireContext()), view.homeAppBar.addOnOffsetChangedListener(
null homeAppBarOffSetListener
) )
view.homeAppBar.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin = HEADER_MARGIN.dpToPx(resources.displayMetrics)
} }
createNewAppBarListener(HEADER_MARGIN.dpToPx(resources.displayMetrics).toFloat())
view.homeAppBar.addOnOffsetChangedListener(
homeAppBarOffSetListener
)
} else {
createNewAppBarListener(0F)
view.homeAppBar.addOnOffsetChangedListener(
homeAppBarOffSetListener
)
} }
} }

View File

@ -10,6 +10,7 @@ import kotlinx.android.synthetic.main.onboarding_toolbar_position_picker.view.*
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.Event.OnboardingToolbarPosition.Position import org.mozilla.fenix.components.metrics.Event.OnboardingToolbarPosition.Position
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.ext.asActivity import org.mozilla.fenix.ext.asActivity
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.onboarding.OnboardingRadioButton import org.mozilla.fenix.onboarding.OnboardingRadioButton
@ -29,10 +30,9 @@ class OnboardingToolbarPositionPickerViewHolder(view: View) : RecyclerView.ViewH
radioBottomToolbar.addIllustration(view.toolbar_bottom_image) radioBottomToolbar.addIllustration(view.toolbar_bottom_image)
val settings = view.context.components.settings val settings = view.context.components.settings
radio = if (settings.shouldUseBottomToolbar) { radio = when (settings.toolbarPosition) {
radioBottomToolbar ToolbarPosition.BOTTOM -> radioBottomToolbar
} else { ToolbarPosition.TOP -> radioTopToolbar
radioTopToolbar
} }
radio.updateRadioValue(true) radio.updateRadioValue(true)

View File

@ -12,6 +12,7 @@ import androidx.appcompat.app.AppCompatDelegate
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.settings
@ -122,8 +123,9 @@ class CustomizationFragment : PreferenceFragmentCompat() {
)) ))
} }
topPreference.setCheckedWithoutClickListener(!requireContext().settings().shouldUseBottomToolbar) val toolbarPosition = requireContext().settings().toolbarPosition
bottomPreference.setCheckedWithoutClickListener(requireContext().settings().shouldUseBottomToolbar) topPreference.setCheckedWithoutClickListener(toolbarPosition == ToolbarPosition.TOP)
bottomPreference.setCheckedWithoutClickListener(toolbarPosition == ToolbarPosition.BOTTOM)
addToRadioGroup(topPreference, bottomPreference) addToRadioGroup(topPreference, bottomPreference)
} }

View File

@ -13,7 +13,6 @@ import android.view.LayoutInflater
import android.view.MotionEvent import android.view.MotionEvent
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import androidx.core.view.isGone
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.marginTop import androidx.core.view.marginTop
import kotlinx.android.synthetic.main.tracking_protection_onboarding_popup.* import kotlinx.android.synthetic.main.tracking_protection_onboarding_popup.*
@ -22,6 +21,7 @@ import mozilla.components.browser.session.Session
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.ext.increaseTapArea import org.mozilla.fenix.ext.increaseTapArea
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
@ -63,10 +63,10 @@ class TrackingProtectionOverlay(
val layout = LayoutInflater.from(context) val layout = LayoutInflater.from(context)
.inflate(R.layout.tracking_protection_onboarding_popup, null) .inflate(R.layout.tracking_protection_onboarding_popup, null)
val isBottomToolbar = settings.shouldUseBottomToolbar val toolbarPosition = settings.toolbarPosition
layout.drop_down_triangle.isGone = isBottomToolbar layout.drop_down_triangle.isVisible = toolbarPosition == ToolbarPosition.TOP
layout.pop_up_triangle.isVisible = isBottomToolbar layout.pop_up_triangle.isVisible = toolbarPosition == ToolbarPosition.BOTTOM
layout.onboarding_message.text = layout.onboarding_message.text =
context.getString( context.getString(
@ -91,11 +91,7 @@ class TrackingProtectionOverlay(
val xOffset = triangleMarginStartPx + triangleWidthPx / 2 val xOffset = triangleMarginStartPx + triangleWidthPx / 2
val gravity = if (isBottomToolbar) { val gravity = Gravity.START or toolbarPosition.androidGravity
Gravity.START or Gravity.BOTTOM
} else {
Gravity.START or Gravity.TOP
}
trackingOnboardingDialog.apply { trackingOnboardingDialog.apply {
setContentView(layout) setContentView(layout)

View File

@ -29,6 +29,7 @@ import org.mozilla.fenix.Config
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.components.metrics.MozillaProductDetector import org.mozilla.fenix.components.metrics.MozillaProductDetector
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.ext.getPreferenceKey
import org.mozilla.fenix.settings.PhoneFeature import org.mozilla.fenix.settings.PhoneFeature
@ -463,6 +464,9 @@ class Settings(private val appContext: Context) : PreferencesHolder {
default = !touchExplorationIsEnabled && !switchServiceIsEnabled default = !touchExplorationIsEnabled && !switchServiceIsEnabled
) )
val toolbarPosition: ToolbarPosition
get() = if (shouldUseBottomToolbar) ToolbarPosition.BOTTOM else ToolbarPosition.TOP
/** /**
* Check each active accessibility service to see if it can perform gestures, if any can, * Check each active accessibility service to see if it can perform gestures, if any can,
* then it is *likely* a switch service is enabled. We are assuming this to be the case based on #7486 * then it is *likely* a switch service is enabled. We are assuming this to be the case based on #7486

View File

@ -15,6 +15,7 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
@ -34,7 +35,7 @@ class OnboardingToolbarPositionPickerViewHolderTest {
@Test @Test
fun `bottom illustration should select corresponding radio button`() { fun `bottom illustration should select corresponding radio button`() {
every { settings.shouldUseBottomToolbar } returns false every { settings.toolbarPosition } returns ToolbarPosition.TOP
OnboardingToolbarPositionPickerViewHolder(view) OnboardingToolbarPositionPickerViewHolder(view)
assertTrue(view.toolbar_top_radio_button.isChecked) assertTrue(view.toolbar_top_radio_button.isChecked)
assertFalse(view.toolbar_bottom_radio_button.isChecked) assertFalse(view.toolbar_bottom_radio_button.isChecked)
@ -46,7 +47,7 @@ class OnboardingToolbarPositionPickerViewHolderTest {
@Test @Test
fun `top illustration should select corresponding radio button`() { fun `top illustration should select corresponding radio button`() {
every { settings.shouldUseBottomToolbar } returns true every { settings.toolbarPosition } returns ToolbarPosition.BOTTOM
OnboardingToolbarPositionPickerViewHolder(view) OnboardingToolbarPositionPickerViewHolder(view)
assertFalse(view.toolbar_top_radio_button.isChecked) assertFalse(view.toolbar_top_radio_button.isChecked)
assertTrue(view.toolbar_bottom_radio_button.isChecked) assertTrue(view.toolbar_bottom_radio_button.isChecked)