From e9ba0468a3aef0a466eb26e30e150dd710e6670b Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 30 Oct 2024 15:48:11 +0000 Subject: [PATCH] Bug 1927778 - Adjust margins for display toolbar. r=android-reviewers,jonalmeida, a=dmeehan Differential Revision: https://phabricator.services.mozilla.com/D227319 --- .../browser/toolbar/display/DisplayToolbar.kt | 29 +++++++++++++++++++ .../toolbar/display/DisplayToolbarTest.kt | 17 +++++++++++ .../android-components/docs/changelog.md | 4 +++ .../focus/input/InputToolbarIntegration.kt | 6 ++++ 4 files changed, 56 insertions(+) diff --git a/mobile/android/android-components/components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/DisplayToolbar.kt b/mobile/android/android-components/components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/DisplayToolbar.kt index ea870b671d3a..ff2afa5c2176 100644 --- a/mobile/android/android-components/components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/DisplayToolbar.kt +++ b/mobile/android/android-components/components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/DisplayToolbar.kt @@ -142,6 +142,17 @@ class DisplayToolbar internal constructor( BOTTOM, } + /** + * Data class holding the customizable margins for views in "display mode". + * + * @property goneStartMargin The start margin to be applied when the constraint target is gone. + * @property goneEndMargin The end margin to be applied when the constraint target is gone. + */ + data class DisplayMargins( + val goneStartMargin: Int?, + val goneEndMargin: Int?, + ) + internal val views = DisplayToolbarViews( browserActions = rootView.findViewById(R.id.mozac_browser_toolbar_browser_actions), pageActions = rootView.findViewById(R.id.mozac_browser_toolbar_page_actions), @@ -309,6 +320,24 @@ class DisplayToolbar internal constructor( views.background.setImageDrawable(background) } + /** + * Sets the margins for the background view using the provided DisplayMargins. + * + * @param margins The DisplayMargins containing the start and end margins to be applied. + */ + fun setUrlBackgroundMargins(margins: DisplayMargins) { + val layoutParams = views.background.layoutParams as? ConstraintLayout.LayoutParams + layoutParams?.let { + margins.goneStartMargin?.let { goneStartMargin -> + it.goneStartMargin = goneStartMargin + } + + margins.goneEndMargin?.let { goneEndMargin -> + it.goneEndMargin = goneEndMargin + } + } + } + /** * Whether the progress bar should be drawn at the top or bottom of the toolbar. */ diff --git a/mobile/android/android-components/components/browser/toolbar/src/test/java/mozilla/components/browser/toolbar/display/DisplayToolbarTest.kt b/mobile/android/android-components/components/browser/toolbar/src/test/java/mozilla/components/browser/toolbar/display/DisplayToolbarTest.kt index d344e7c676a4..8036269dc8d5 100644 --- a/mobile/android/android-components/components/browser/toolbar/src/test/java/mozilla/components/browser/toolbar/display/DisplayToolbarTest.kt +++ b/mobile/android/android-components/components/browser/toolbar/src/test/java/mozilla/components/browser/toolbar/display/DisplayToolbarTest.kt @@ -7,6 +7,7 @@ package mozilla.components.browser.toolbar.display import android.graphics.Color import android.os.Build import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.core.view.isGone import androidx.core.view.isVisible @@ -570,6 +571,22 @@ class DisplayToolbarTest { assertNull(displayToolbar.views.background.drawable) } + @Test + fun `setUrlBackgroundMargins sets the correct margins`() { + val (_, displayToolbar) = createDisplayToolbar() + + val margins = DisplayToolbar.DisplayMargins( + goneStartMargin = 16, + goneEndMargin = 8, + ) + displayToolbar.setUrlBackgroundMargins(margins) + + val layoutParams = displayToolbar.views.background.layoutParams as? ConstraintLayout.LayoutParams + assertNotNull(layoutParams) + assertEquals(margins.goneStartMargin, layoutParams?.goneStartMargin) + assertEquals(margins.goneEndMargin, layoutParams?.goneEndMargin) + } + @Test fun `titleView does not display when there is no title text`() { val (_, displayToolbar) = createDisplayToolbar() diff --git a/mobile/android/android-components/docs/changelog.md b/mobile/android/android-components/docs/changelog.md index b89492920303..872b8d0d661b 100644 --- a/mobile/android/android-components/docs/changelog.md +++ b/mobile/android/android-components/docs/changelog.md @@ -22,6 +22,10 @@ permalink: /changelog/ * **ui-widgets** * 🆕 New `mozac_material_ripple_minimum_interaction_size` drawable for a 48dp ripple to be used when `selectableItemBackgroundBorderless` is too big and `selectableItemBackground` is too small. [Bug 1920554](https://bugzilla.mozilla.org/show_bug.cgi?id=1920554). +* **browser-toolbar** + * Added internal data class `DisplayMargins` in `DisplayToolbar` class that can be used to specify margins for `DisplayToolbar`'s views + * Added `setUrlBackgroundMargins` method in `DisplayToolbar` class that client apps can use to specify custom `DisplayMargins` for the `background` view. [Bug 1927778](https://bugzilla.mozilla.org/show_bug.cgi?id=1927778) + # 132.0 * **feature-awesomebar** * The `onCancelEditing` now returns a result based on the `onStartEditing` and `onStopEditing` callback. [Bug 1917496](https://bugzilla.mozilla.org/show_bug.cgi?id=1917496) diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/input/InputToolbarIntegration.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/input/InputToolbarIntegration.kt index a360f6813144..0e2b89952098 100644 --- a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/input/InputToolbarIntegration.kt +++ b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/input/InputToolbarIntegration.kt @@ -18,12 +18,14 @@ import kotlinx.coroutines.flow.mapNotNull import mozilla.components.browser.domains.autocomplete.CustomDomainsProvider import mozilla.components.browser.domains.autocomplete.ShippedDomainsProvider import mozilla.components.browser.toolbar.BrowserToolbar +import mozilla.components.browser.toolbar.display.DisplayToolbar.DisplayMargins import mozilla.components.compose.cfr.CFRPopup import mozilla.components.compose.cfr.CFRPopupProperties import mozilla.components.concept.toolbar.AutocompleteResult import mozilla.components.concept.toolbar.Toolbar import mozilla.components.lib.state.ext.flowScoped import mozilla.components.support.base.feature.LifecycleAwareFeature +import mozilla.components.support.ktx.android.util.dpToPx import org.mozilla.focus.R import org.mozilla.focus.ext.components import org.mozilla.focus.ext.settings @@ -118,6 +120,10 @@ class InputToolbarIntegration( ) toolbar.display.setUrlBackground(urlBackground) + toolbar.display.setUrlBackgroundMargins( + DisplayMargins(8.dpToPx(toolbar.resources.displayMetrics), 0), + ) + toolbar.edit.setUrlBackground(urlBackground) }