From 9543f38978f90720fb108277e05d59b5a7e1e2e0 Mon Sep 17 00:00:00 2001 From: Sebastian Kaspari Date: Tue, 15 Oct 2019 17:54:04 +0200 Subject: [PATCH] Use new toolbar API of AC 18.0.0. --- .../fenix/browser/BaseBrowserFragment.kt | 4 +- .../mozilla/fenix/browser/BrowserFragment.kt | 2 +- .../components/toolbar/BrowserToolbarView.kt | 52 +++++++++++-------- .../components/toolbar/ToolbarIntegration.kt | 31 ++++++++--- .../fenix/customtabs/CustomTabsIntegration.kt | 24 ++++++--- .../mozilla/fenix/search/SearchFragment.kt | 11 ---- .../fenix/search/toolbar/ToolbarView.kt | 34 +++++++++--- app/src/main/res/layout/fragment_search.xml | 16 ++---- app/src/main/res/values/dimens.xml | 2 +- 9 files changed, 104 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index bca917ac8..28d2f47a1 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -222,11 +222,11 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs view = view ) - browserToolbarView.view.setOnSiteSecurityClickedListener { + browserToolbarView.view.display.setOnSiteSecurityClickedListener { showQuickSettingsDialog() } - browserToolbarView.view.setOnTrackingProtectionClickedListener { + browserToolbarView.view.display.setOnTrackingProtectionClickedListener { context.metrics.track(Event.TrackingProtectionIconPressed) showTrackingProtectionPanel() } diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index 7b69d6794..74339182d 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -379,7 +379,7 @@ class BrowserFragment : BaseBrowserFragment(), BackHandler { val tpIcon = browserToolbarView .view - .findViewById(R.id.mozac_browser_toolbar_tracking_protection_icon_view) + .findViewById(R.id.mozac_browser_toolbar_tracking_protection_indicator) // Measure layout view val spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt index 106756982..87d8139bb 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt @@ -17,8 +17,8 @@ import kotlinx.android.synthetic.main.browser_toolbar_popup_window.view.* import mozilla.components.browser.domains.autocomplete.ShippedDomainsProvider import mozilla.components.browser.session.Session import mozilla.components.browser.toolbar.BrowserToolbar +import mozilla.components.browser.toolbar.display.DisplayToolbar import mozilla.components.support.ktx.android.util.dpToFloat -import mozilla.components.support.ktx.android.util.dpToPx import org.jetbrains.anko.dimen import org.mozilla.fenix.R import org.mozilla.fenix.customtabs.CustomTabToolbarMenu @@ -54,7 +54,7 @@ class BrowserToolbarView( init { val isCustomTabSession = customTabSession != null - view.setOnUrlLongClickListener { + view.display.setOnUrlLongClickListener { val clipboard = view.context.components.clipboardHandler val customView = LayoutInflater.from(view.context) .inflate(R.layout.browser_toolbar_popup_window, null) @@ -109,34 +109,45 @@ class BrowserToolbarView( view.apply { elevation = TOOLBAR_ELEVATION.dpToFloat(resources.displayMetrics) - onUrlClicked = { + if (!isCustomTabSession) { + display.setUrlBackground(getDrawable(R.drawable.search_url_background)) + } + + display.onUrlClicked = { interactor.onBrowserToolbarClicked() false } - browserActionMargin = browserActionMarginDp.dpToPx(resources.displayMetrics) + display.progressGravity = if (isCustomTabSession) { + DisplayToolbar.Gravity.BOTTOM + } else { + DisplayToolbar.Gravity.TOP + } - urlBoxView = if (isCustomTabSession) null else urlBackground - progressBarGravity = if (isCustomTabSession) PROGRESS_BOTTOM else PROGRESS_TOP - - textColor = ContextCompat.getColor(context, R.color.photonGrey30) - - hint = context.getString(R.string.search_hint) - - suggestionBackgroundColor = ContextCompat.getColor( - container.context, - R.color.suggestion_highlight_color - ) - - textColor = ContextCompat.getColor( + val primaryTextColor = ContextCompat.getColor( container.context, ThemeManager.resolveAttribute(R.attr.primaryText, container.context) ) - - hintColor = ContextCompat.getColor( + val secondaryTextColor = ContextCompat.getColor( container.context, ThemeManager.resolveAttribute(R.attr.secondaryText, container.context) ) + val separatorColor = ContextCompat.getColor( + container.context, + ThemeManager.resolveAttribute(R.attr.toolbarDivider, container.context) + ) + + display.colors = display.colors.copy( + text = primaryTextColor, + securityIconSecure = primaryTextColor, + securityIconInsecure = primaryTextColor, + menu = primaryTextColor, + hint = secondaryTextColor, + separator = separatorColor, + trackingProtection = primaryTextColor + ) + + display.hint = context.getString(R.string.search_hint) } val menuToolbar = if (isCustomTabSession) { @@ -180,8 +191,5 @@ class BrowserToolbarView( companion object { private const val TOOLBAR_ELEVATION = 16 - private const val PROGRESS_BOTTOM = 0 - private const val PROGRESS_TOP = 1 - const val browserActionMarginDp = 8 } } diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt index e43737df6..c51eb4a4a 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt @@ -12,6 +12,7 @@ import mozilla.components.browser.domains.autocomplete.DomainAutocompleteProvide import mozilla.components.browser.session.SessionManager import mozilla.components.browser.session.runWithSession import mozilla.components.browser.toolbar.BrowserToolbar +import mozilla.components.browser.toolbar.display.DisplayToolbar import mozilla.components.concept.storage.HistoryStorage import mozilla.components.feature.toolbar.ToolbarAutocompleteFeature import mozilla.components.feature.toolbar.ToolbarFeature @@ -40,7 +41,7 @@ class ToolbarIntegration( private var renderStyle: ToolbarFeature.RenderStyle = ToolbarFeature.RenderStyle.UncoloredUrl init { - toolbar.setMenuBuilder(toolbarMenu.menuBuilder) + toolbar.display.menuBuilder = toolbarMenu.menuBuilder toolbar.private = isPrivate run { @@ -60,18 +61,33 @@ class ToolbarIntegration( task.addListener { result -> val lottieDrawable = LottieDrawable() lottieDrawable.composition = result - toolbar.displayTrackingProtectionIcon = + + toolbar.display.indicators = if ( context.settings().shouldUseTrackingProtection && FeatureFlags.etpCategories - toolbar.displaySeparatorView = + ) { + listOf( + DisplayToolbar.Indicators.TRACKING_PROTECTION, + DisplayToolbar.Indicators.SECURITY, + DisplayToolbar.Indicators.EMPTY) + } else { + listOf(DisplayToolbar.Indicators.SECURITY, DisplayToolbar.Indicators.EMPTY) + } + + toolbar.display.displayIndicatorSeparator = context.settings().shouldUseTrackingProtection && FeatureFlags.etpCategories - toolbar.setTrackingProtectionIcons( - iconOnNoTrackersBlocked = AppCompatResources.getDrawable( + toolbar.display.icons = toolbar.display.icons.copy( + emptyIcon = AppCompatResources.getDrawable( + context, + R.drawable.ic_bookmark_filled + )!!, + trackingProtectionTrackersBlocked = lottieDrawable, + trackingProtectionNothingBlocked = AppCompatResources.getDrawable( context, R.drawable.ic_tracking_protection_enabled + )!!, - iconOnTrackersBlocked = lottieDrawable, - iconDisabledForSite = AppCompatResources.getDrawable( + trackingProtectionException = AppCompatResources.getDrawable( context, R.drawable.ic_tracking_protection_disabled )!! @@ -107,6 +123,7 @@ class ToolbarIntegration( ThemeManager.resolveAttribute(R.attr.primaryText, context), renderStyle = renderStyle ) ) + private var menuPresenter = MenuPresenter(toolbar, context.components.core.sessionManager, sessionId) diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt b/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt index bf001d617..004d1d90f 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt @@ -14,6 +14,7 @@ import com.airbnb.lottie.LottieCompositionFactory import com.airbnb.lottie.LottieDrawable import mozilla.components.browser.session.SessionManager import mozilla.components.browser.toolbar.BrowserToolbar +import mozilla.components.browser.toolbar.display.DisplayToolbar import mozilla.components.feature.customtabs.CustomTabsToolbarFeature import mozilla.components.support.base.feature.BackHandler import mozilla.components.support.base.feature.LifecycleAwareFeature @@ -63,17 +64,26 @@ class CustomTabsIntegration( task.addListener { result -> val lottieDrawable = LottieDrawable() lottieDrawable.composition = result - toolbar.displayTrackingProtectionIcon = - activity.settings().shouldUseTrackingProtection && FeatureFlags.etpCategories - toolbar.displaySeparatorView = false - toolbar.setTrackingProtectionIcons( - iconOnNoTrackersBlocked = AppCompatResources.getDrawable( + toolbar.display.displayIndicatorSeparator = false + if (activity.settings().shouldUseTrackingProtection && FeatureFlags.etpCategories) { + toolbar.display.indicators = listOf( + DisplayToolbar.Indicators.SECURITY, + DisplayToolbar.Indicators.TRACKING_PROTECTION + ) + } else { + toolbar.display.indicators = listOf( + DisplayToolbar.Indicators.SECURITY + ) + } + + toolbar.display.icons = toolbar.display.icons.copy( + trackingProtectionTrackersBlocked = lottieDrawable, + trackingProtectionNothingBlocked = AppCompatResources.getDrawable( activity, R.drawable.ic_tracking_protection_enabled )!!, - iconOnTrackersBlocked = lottieDrawable, - iconDisabledForSite = AppCompatResources.getDrawable( + trackingProtectionException = AppCompatResources.getDrawable( activity, R.drawable.ic_tracking_protection_disabled )!! diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt index cda170d1d..ae9eb4364 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt @@ -9,7 +9,6 @@ import android.content.Context import android.content.DialogInterface import android.graphics.Typeface.BOLD import android.graphics.Typeface.ITALIC -import android.graphics.drawable.BitmapDrawable import android.os.Bundle import android.text.style.StyleSpan import android.view.LayoutInflater @@ -30,7 +29,6 @@ import mozilla.components.support.base.feature.BackHandler import mozilla.components.support.base.feature.ViewBoundFeatureWrapper import mozilla.components.support.ktx.android.content.hasCamera import mozilla.components.support.ktx.android.content.isPermissionGranted -import org.jetbrains.anko.backgroundDrawable import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R @@ -193,7 +191,6 @@ class SearchFragment : Fragment(), BackHandler { consumeFrom(searchStore) { awesomeBarView.update(it) toolbarView.update(it) - updateSearchEngineIcon(it) updateSearchWithLabel(it) updateClipboardSuggestion(it, requireContext().components.clipboardHandler.url) } @@ -245,14 +242,6 @@ class SearchFragment : Fragment(), BackHandler { } } - private fun updateSearchEngineIcon(searchState: SearchFragmentState) { - val searchIcon = searchState.searchEngineSource.searchEngine.icon - val draw = BitmapDrawable(resources, searchIcon) - val iconSize = resources.getDimension(R.dimen.preference_icon_drawable_size).toInt() - draw.setBounds(0, 0, iconSize, iconSize) - searchEngineIcon?.backgroundDrawable = draw - } - private fun updateSearchWithLabel(searchState: SearchFragmentState) { search_with_shortcuts.visibility = if (searchState.showSearchShortcuts) View.VISIBLE else View.GONE diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt index 453d0dea4..1d4cd214a 100644 --- a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt +++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt @@ -4,6 +4,8 @@ package org.mozilla.fenix.search.toolbar +import android.graphics.Bitmap +import android.graphics.drawable.BitmapDrawable import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -77,17 +79,21 @@ class ToolbarView( layoutParams.height = CoordinatorLayout.LayoutParams.MATCH_PARENT - hint = context.getString(R.string.search_hint) + edit.hint = context.getString(R.string.search_hint) - textColor = container.context.getColorFromAttr(R.attr.primaryText) - - hintColor = container.context.getColorFromAttr(R.attr.secondaryText) - - suggestionBackgroundColor = ContextCompat.getColor( - container.context, - R.color.suggestion_highlight_color + edit.colors = edit.colors.copy( + text = container.context.getColorFromAttr(R.attr.primaryText), + hint = container.context.getColorFromAttr(R.attr.secondaryText), + suggestionBackground = ContextCompat.getColor( + container.context, + R.color.suggestion_highlight_color + ), + clear = container.context.getColorFromAttr(R.attr.primaryText) ) + edit.setUrlBackground( + ContextCompat.getDrawable(container.context, R.drawable.search_url_background)) + private = isPrivate setOnEditListener(object : mozilla.components.concept.toolbar.Toolbar.OnEditListener { @@ -122,6 +128,18 @@ class ToolbarView( view.editMode() isInitialized = true } + + val iconSize = container.resources.getDimensionPixelSize(R.dimen.preference_icon_drawable_size) + + val scaledIcon = Bitmap.createScaledBitmap( + searchState.searchEngineSource.searchEngine.icon, + iconSize, + iconSize, + true) + + val icon = BitmapDrawable(container.resources, scaledIcon) + + view.edit.setIcon(icon, searchState.searchEngineSource.searchEngine.name) } companion object { diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 8bbf36237..f8f13bdb1 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -14,31 +14,21 @@ - - diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 60ebe966d..b25bbd249 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -52,7 +52,7 @@ 8dp - 57dp + 56dp 67dp