Bug 1822601 - Refactor toolbar related logic into a ToolbarView

fenix/113.0
Gabriel Luong 1 year ago committed by mergify[bot]
parent 71ec45c19c
commit 7d1f2476e7

@ -20,18 +20,11 @@ import android.widget.Button
import android.widget.LinearLayout
import android.widget.PopupWindow
import androidx.annotation.VisibleForTesting
import androidx.appcompat.content.res.AppCompatResources
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import androidx.constraintlayout.widget.ConstraintSet.BOTTOM
import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
import androidx.constraintlayout.widget.ConstraintSet.TOP
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toDrawable
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
@ -76,7 +69,6 @@ import mozilla.components.lib.state.ext.consumeFrom
import mozilla.components.service.glean.private.NoExtras
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import mozilla.components.support.ktx.android.content.getColorFromAttr
import mozilla.components.support.ktx.android.content.res.resolveAttribute
import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged
import org.mozilla.fenix.Config
import org.mozilla.fenix.GleanMetrics.HomeScreen
@ -129,7 +121,6 @@ import org.mozilla.fenix.perf.runBlockingIncrement
import org.mozilla.fenix.search.toolbar.SearchSelectorMenu
import org.mozilla.fenix.tabstray.TabsTrayAccessPoint
import org.mozilla.fenix.utils.Settings.Companion.TOP_SITES_PROVIDER_MAX_THRESHOLD
import org.mozilla.fenix.utils.ToolbarPopupWindow
import org.mozilla.fenix.utils.allowUndo
import org.mozilla.fenix.wallpapers.Wallpaper
import java.lang.ref.WeakReference
@ -189,6 +180,7 @@ class HomeFragment : Fragment() {
private var sessionControlView: SessionControlView? = null
private var tabCounterView: TabCounterView? = null
private var toolbarView: ToolbarView? = null
private var appBarLayout: AppBarLayout? = null
private lateinit var currentMode: CurrentMode
@ -435,7 +427,12 @@ class HomeFragment : Fragment() {
),
)
updateLayout(binding.root)
toolbarView = ToolbarView(
binding = binding,
context = requireContext(),
interactor = sessionControlInteractor,
)
sessionControlView = SessionControlView(
containerView = binding.sessionControlRecyclerView,
viewLifecycleOwner = viewLifecycleOwner,
@ -532,41 +529,6 @@ class HomeFragment : Fragment() {
binding.homeAppBar.setExpanded(true)
}
private fun updateLayout(view: View) {
when (requireContext().settings().toolbarPosition) {
ToolbarPosition.TOP -> {
binding.toolbarLayout.layoutParams = CoordinatorLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT,
ConstraintLayout.LayoutParams.WRAP_CONTENT,
).apply {
gravity = Gravity.TOP
}
ConstraintSet().apply {
clone(binding.toolbarLayout)
clear(binding.bottomBar.id, BOTTOM)
clear(binding.bottomBarShadow.id, BOTTOM)
connect(binding.bottomBar.id, TOP, PARENT_ID, TOP)
connect(binding.bottomBarShadow.id, TOP, binding.bottomBar.id, BOTTOM)
connect(binding.bottomBarShadow.id, BOTTOM, PARENT_ID, BOTTOM)
applyTo(binding.toolbarLayout)
}
binding.bottomBar.background = AppCompatResources.getDrawable(
view.context,
view.context.theme.resolveAttribute(R.attr.bottomBarBackgroundTop),
)
binding.homeAppBar.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin =
resources.getDimensionPixelSize(R.dimen.home_fragment_top_toolbar_header_margin)
}
}
ToolbarPosition.BOTTOM -> {
}
}
}
@Suppress("LongMethod", "ComplexMethod")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// DO NOT ADD ANYTHING ABOVE THIS getProfilerTime CALL!
@ -597,21 +559,7 @@ class HomeFragment : Fragment() {
tabCounter = binding.tabButton,
)
binding.toolbar.compoundDrawablePadding =
view.resources.getDimensionPixelSize(R.dimen.search_bar_search_engine_icon_padding)
binding.toolbarWrapper.setOnClickListener {
sessionControlInteractor.onNavigateSearch()
}
binding.toolbarWrapper.setOnLongClickListener {
ToolbarPopupWindow.show(
WeakReference(it),
handlePasteAndGo = sessionControlInteractor::onPasteAndGo,
handlePaste = sessionControlInteractor::onPaste,
copyVisible = false,
)
true
}
toolbarView?.build()
PrivateBrowsingButtonView(binding.privateBrowsingButton, browsingModeManager) { newMode ->
sessionControlInteractor.onPrivateModeButtonClicked(
@ -801,6 +749,7 @@ class HomeFragment : Fragment() {
_sessionControlInteractor = null
sessionControlView = null
tabCounterView = null
toolbarView = null
appBarLayout = null
_binding = null

@ -0,0 +1,108 @@
/* 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 android.view.Gravity
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.content.res.AppCompatResources
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.view.updateLayoutParams
import mozilla.components.support.ktx.android.content.res.resolveAttribute
import org.mozilla.fenix.R
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.databinding.FragmentHomeBinding
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.home.toolbar.ToolbarInteractor
import org.mozilla.fenix.utils.ToolbarPopupWindow
import java.lang.ref.WeakReference
/**
* View class for setting up the home screen toolbar.
*/
class ToolbarView(
private val binding: FragmentHomeBinding,
private val context: Context,
private val interactor: ToolbarInteractor,
) {
init {
updateLayout(binding.root)
}
/**
* Setups the home screen toolbar.
*/
fun build() {
binding.toolbar.compoundDrawablePadding =
context.resources.getDimensionPixelSize(R.dimen.search_bar_search_engine_icon_padding)
binding.toolbarWrapper.setOnClickListener {
interactor.onNavigateSearch()
}
binding.toolbarWrapper.setOnLongClickListener {
ToolbarPopupWindow.show(
WeakReference(it),
handlePasteAndGo = interactor::onPasteAndGo,
handlePaste = interactor::onPaste,
copyVisible = false,
)
true
}
}
private fun updateLayout(view: View) {
when (context.settings().toolbarPosition) {
ToolbarPosition.TOP -> {
binding.toolbarLayout.layoutParams = CoordinatorLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT,
ConstraintLayout.LayoutParams.WRAP_CONTENT,
).apply {
gravity = Gravity.TOP
}
ConstraintSet().apply {
clone(binding.toolbarLayout)
clear(binding.bottomBar.id, ConstraintSet.BOTTOM)
clear(binding.bottomBarShadow.id, ConstraintSet.BOTTOM)
connect(
binding.bottomBar.id,
ConstraintSet.TOP,
ConstraintSet.PARENT_ID,
ConstraintSet.TOP,
)
connect(
binding.bottomBarShadow.id,
ConstraintSet.TOP,
binding.bottomBar.id,
ConstraintSet.BOTTOM,
)
connect(
binding.bottomBarShadow.id,
ConstraintSet.BOTTOM,
ConstraintSet.PARENT_ID,
ConstraintSet.BOTTOM,
)
applyTo(binding.toolbarLayout)
}
binding.bottomBar.background = AppCompatResources.getDrawable(
view.context,
view.context.theme.resolveAttribute(R.attr.bottomBarBackgroundTop),
)
binding.homeAppBar.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin =
context.resources.getDimensionPixelSize(R.dimen.home_fragment_top_toolbar_header_margin)
}
}
ToolbarPosition.BOTTOM -> {}
}
}
}
Loading…
Cancel
Save