From 5faa22d611633dd0cfe1570011d404d5b02fc76d Mon Sep 17 00:00:00 2001 From: Tiger Oakes Date: Thu, 6 Feb 2020 11:18:08 -0800 Subject: [PATCH] Use createBlendModeColorFilterCompat (#8129) --- .../collections/SaveCollectionListAdapter.kt | 10 +- .../java/org/mozilla/fenix/ext/Toolbar.kt | 8 +- .../viewholders/CollectionViewHolder.kt | 5 +- .../fenix/search/awesomebar/AwesomeBarView.kt | 135 +++++++++--------- .../viewholders/AccountDeviceViewHolder.kt | 9 +- .../mozilla/fenix/utils/ClearableEditText.kt | 7 +- 6 files changed, 86 insertions(+), 88 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/collections/SaveCollectionListAdapter.kt b/app/src/main/java/org/mozilla/fenix/collections/SaveCollectionListAdapter.kt index fdc4e952d..fa35f442c 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/SaveCollectionListAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/SaveCollectionListAdapter.kt @@ -4,10 +4,11 @@ package org.mozilla.fenix.collections -import android.graphics.PorterDuff.Mode.SRC_IN import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat +import androidx.core.graphics.BlendModeCompat.SRC_IN import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.collections_list_item.view.* import mozilla.components.feature.tab.collections.TabCollection @@ -52,11 +53,8 @@ class CollectionViewHolder(view: View) : RecyclerView.ViewHolder(view) { fun bind(collection: TabCollection) { itemView.collection_item.text = collection.title itemView.collection_description.text = collection.description(itemView.context) - - itemView.collection_icon.setColorFilter( - collection.getIconColor(itemView.context), - SRC_IN - ) + itemView.collection_icon.colorFilter = + createBlendModeColorFilterCompat(collection.getIconColor(itemView.context), SRC_IN) } companion object { diff --git a/app/src/main/java/org/mozilla/fenix/ext/Toolbar.kt b/app/src/main/java/org/mozilla/fenix/ext/Toolbar.kt index f10a071e2..b7e9b953b 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Toolbar.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Toolbar.kt @@ -5,13 +5,13 @@ package org.mozilla.fenix.ext import android.graphics.ColorFilter -import android.graphics.PorterDuff -import android.graphics.PorterDuffColorFilter import android.widget.ActionMenuView import android.widget.ImageButton import androidx.annotation.ColorInt import androidx.appcompat.view.menu.ActionMenuItemView import androidx.appcompat.widget.Toolbar +import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat +import androidx.core.graphics.BlendModeCompat.SRC_IN import androidx.core.view.forEach /** @@ -22,7 +22,7 @@ fun Toolbar.setToolbarColors(@ColorInt foreground: Int, @ColorInt background: In setBackgroundColor(background) setTitleTextColor(foreground) - val colorFilter = PorterDuffColorFilter(foreground, PorterDuff.Mode.SRC_IN) + val colorFilter = createBlendModeColorFilterCompat(foreground, SRC_IN) overflowIcon?.colorFilter = colorFilter forEach { child -> when (child) { @@ -33,7 +33,7 @@ fun Toolbar.setToolbarColors(@ColorInt foreground: Int, @ColorInt background: In } } -private fun themeActionMenuView(item: ActionMenuView, colorFilter: ColorFilter) { +private fun themeActionMenuView(item: ActionMenuView, colorFilter: ColorFilter?) { item.forEach { innerChild -> if (innerChild is ActionMenuItemView) { innerChild.compoundDrawables.forEach { drawable -> diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/CollectionViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/CollectionViewHolder.kt index d24e826a6..e556c55e1 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/CollectionViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/CollectionViewHolder.kt @@ -5,9 +5,10 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders import android.content.Context -import android.graphics.PorterDuff.Mode.SRC_IN import android.view.View import android.view.ViewGroup +import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat +import androidx.core.graphics.BlendModeCompat.SRC_IN import androidx.recyclerview.widget.RecyclerView import kotlinx.android.extensions.LayoutContainer import kotlinx.android.synthetic.main.collection_home_list_row.* @@ -89,7 +90,7 @@ class CollectionViewHolder( view.collection_description.visibility = View.VISIBLE } - view.collection_icon.setColorFilter( + view.collection_icon.colorFilter = createBlendModeColorFilterCompat( collection.getIconColor(view.context), SRC_IN ) diff --git a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt index 24e88d35e..301fbdfbb 100644 --- a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt +++ b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt @@ -1,14 +1,15 @@ +/* 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.search.awesomebar -/* 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/. */ - -import android.graphics.PorterDuff.Mode.SRC_IN -import android.graphics.PorterDuffColorFilter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.appcompat.content.res.AppCompatResources.getDrawable +import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat +import androidx.core.graphics.BlendModeCompat.SRC_IN import androidx.core.graphics.drawable.toBitmap import androidx.recyclerview.widget.RecyclerView import kotlinx.android.extensions.LayoutContainer @@ -25,12 +26,12 @@ import mozilla.components.feature.awesomebar.provider.SessionSuggestionProvider import mozilla.components.feature.search.SearchUseCases import mozilla.components.feature.session.SessionUseCases import mozilla.components.feature.tabs.TabsUseCases +import mozilla.components.support.ktx.android.content.getColorFromAttr import mozilla.components.support.ktx.android.view.hideKeyboard import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.ext.asActivity import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.getColorFromAttr import org.mozilla.fenix.search.SearchEngineSource import org.mozilla.fenix.search.SearchFragmentState @@ -124,56 +125,56 @@ class AwesomeBarView( init { view.itemAnimator = null - with(container.context) { - val primaryTextColor = getColorFromAttr(R.attr.primaryText) + val context = container.context + val components = context.components + val primaryTextColor = context.getColorFromAttr(R.attr.primaryText) - val draw = getDrawable(R.drawable.ic_link)!! - draw.setColorFilter(primaryTextColor, SRC_IN) + val draw = getDrawable(context, R.drawable.ic_link)!! + draw.colorFilter = createBlendModeColorFilterCompat(primaryTextColor, SRC_IN) - sessionProvider = - SessionSuggestionProvider( - components.core.sessionManager, - selectTabUseCase, - components.core.icons, - excludeSelectedSession = true - ) + sessionProvider = + SessionSuggestionProvider( + components.core.sessionManager, + selectTabUseCase, + components.core.icons, + excludeSelectedSession = true + ) - historyStorageProvider = - HistoryStorageSuggestionProvider( - components.core.historyStorage, - loadUrlUseCase, - components.core.icons - ) + historyStorageProvider = + HistoryStorageSuggestionProvider( + components.core.historyStorage, + loadUrlUseCase, + components.core.icons + ) - bookmarksStorageSuggestionProvider = - BookmarksStorageSuggestionProvider( - components.core.bookmarksStorage, - loadUrlUseCase, - components.core.icons - ) + bookmarksStorageSuggestionProvider = + BookmarksStorageSuggestionProvider( + components.core.bookmarksStorage, + loadUrlUseCase, + components.core.icons + ) - val searchDrawable = getDrawable(R.drawable.ic_search)!! - searchDrawable.setColorFilter(primaryTextColor, SRC_IN) + val searchDrawable = getDrawable(context, R.drawable.ic_search)!! + searchDrawable.colorFilter = createBlendModeColorFilterCompat(primaryTextColor, SRC_IN) - defaultSearchSuggestionProvider = - SearchSuggestionProvider( - context = this, - searchEngineManager = components.search.searchEngineManager, - searchUseCase = searchUseCase, - fetchClient = components.core.client, - mode = SearchSuggestionProvider.Mode.MULTIPLE_SUGGESTIONS, - limit = 3, - icon = searchDrawable.toBitmap() - ) + defaultSearchSuggestionProvider = + SearchSuggestionProvider( + context = context, + searchEngineManager = components.search.searchEngineManager, + searchUseCase = searchUseCase, + fetchClient = components.core.client, + mode = SearchSuggestionProvider.Mode.MULTIPLE_SUGGESTIONS, + limit = 3, + icon = searchDrawable.toBitmap() + ) - shortcutsEnginePickerProvider = - ShortcutsSuggestionProvider( - components.search.provider, - this, - interactor::onSearchShortcutEngineSelected, - interactor::onClickSearchEngineSettings - ) - } + shortcutsEnginePickerProvider = + ShortcutsSuggestionProvider( + searchEngineProvider = components.search.provider, + context = context, + selectShortcutEngine = interactor::onSearchShortcutEngineSelected, + selectShortcutEngineSettings = interactor::onClickSearchEngineSettings + ) searchSuggestionProviderMap = HashMap() search_shortcuts_button.setOnClickListener { @@ -324,25 +325,23 @@ class AwesomeBarView( } private fun getSuggestionProviderForEngine(engine: SearchEngine): SearchSuggestionProvider? { - if (!searchSuggestionProviderMap.containsKey(engine)) { - with(container.context) { - val draw = getDrawable(R.drawable.ic_search) - draw?.colorFilter = - PorterDuffColorFilter(getColorFromAttr(R.attr.primaryText), SRC_IN) + return searchSuggestionProviderMap.getOrPut(engine) { + val context = container.context + val components = context.components + val primaryTextColor = context.getColorFromAttr(R.attr.primaryText) - searchSuggestionProviderMap.put( - engine, SearchSuggestionProvider( - components.search.provider.installedSearchEngines(this).list.find { it.name == engine.name } - ?: components.search.provider.getDefaultEngine(this), - shortcutSearchUseCase, - components.core.client, - limit = 3, - mode = SearchSuggestionProvider.Mode.MULTIPLE_SUGGESTIONS, - icon = draw?.toBitmap() - ) - ) - } + val draw = getDrawable(context, R.drawable.ic_search) + draw?.colorFilter = createBlendModeColorFilterCompat(primaryTextColor, SRC_IN) + + SearchSuggestionProvider( + components.search.provider.installedSearchEngines(context).list.find { it.name == engine.name } + ?: components.search.provider.getDefaultEngine(context), + shortcutSearchUseCase, + components.core.client, + limit = 3, + mode = SearchSuggestionProvider.Mode.MULTIPLE_SUGGESTIONS, + icon = draw?.toBitmap() + ) } - return searchSuggestionProviderMap[engine] } } diff --git a/app/src/main/java/org/mozilla/fenix/share/viewholders/AccountDeviceViewHolder.kt b/app/src/main/java/org/mozilla/fenix/share/viewholders/AccountDeviceViewHolder.kt index 6a751d753..49c3f4dbb 100644 --- a/app/src/main/java/org/mozilla/fenix/share/viewholders/AccountDeviceViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/share/viewholders/AccountDeviceViewHolder.kt @@ -5,10 +5,11 @@ package org.mozilla.fenix.share.viewholders import android.content.Context -import android.graphics.PorterDuff import android.view.View import androidx.annotation.VisibleForTesting -import androidx.core.content.ContextCompat +import androidx.core.content.ContextCompat.getColor +import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat +import androidx.core.graphics.BlendModeCompat.SRC_IN import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.account_share_list_item.view.* import mozilla.components.concept.sync.DeviceType @@ -51,8 +52,8 @@ class AccountDeviceViewHolder( itemView.deviceIcon.apply { setImageResource(drawableRes) - background.setColorFilter(ContextCompat.getColor(context, colorRes), PorterDuff.Mode.SRC_IN) - drawable.setTint(ContextCompat.getColor(context, R.color.device_foreground)) + background.colorFilter = createBlendModeColorFilterCompat(getColor(context, colorRes), SRC_IN) + drawable.setTint(getColor(context, R.color.device_foreground)) } itemView.isClickable = option != SyncShareOption.Offline itemView.deviceName.text = name diff --git a/app/src/main/java/org/mozilla/fenix/utils/ClearableEditText.kt b/app/src/main/java/org/mozilla/fenix/utils/ClearableEditText.kt index 9e6228fda..fcf35d13c 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/ClearableEditText.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/ClearableEditText.kt @@ -6,13 +6,13 @@ package org.mozilla.fenix.utils import android.annotation.SuppressLint import android.content.Context -import android.graphics.PorterDuff.Mode.SRC_IN -import android.graphics.PorterDuffColorFilter import android.util.AttributeSet import android.view.MotionEvent import android.view.MotionEvent.ACTION_UP import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.widget.AppCompatEditText +import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat +import androidx.core.graphics.BlendModeCompat.SRC_IN import mozilla.components.support.ktx.android.view.putCompoundDrawablesRelativeWithIntrinsicBounds import org.mozilla.fenix.R import org.mozilla.fenix.ext.getColorFromAttr @@ -46,10 +46,9 @@ class ClearableEditText @JvmOverloads constructor( * Displays a clear icon if text has been entered. */ override fun onTextChanged(text: CharSequence?, start: Int, lengthBefore: Int, lengthAfter: Int) { - super.onTextChanged(text, start, lengthBefore, lengthAfter) val drawable = if (shouldShowClearButton(lengthAfter)) { AppCompatResources.getDrawable(context, R.drawable.ic_clear)?.apply { - colorFilter = PorterDuffColorFilter(context.getColorFromAttr(R.attr.primaryText), SRC_IN) + colorFilter = createBlendModeColorFilterCompat(context.getColorFromAttr(R.attr.primaryText), SRC_IN) } } else { null