1
0
Fork 0

Use createBlendModeColorFilterCompat (#8129)

master
Tiger Oakes 2020-02-06 11:18:08 -08:00 committed by GitHub
parent 5515f1ba5e
commit 5faa22d611
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 86 additions and 88 deletions

View File

@ -4,10 +4,11 @@
package org.mozilla.fenix.collections package org.mozilla.fenix.collections
import android.graphics.PorterDuff.Mode.SRC_IN
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat
import androidx.core.graphics.BlendModeCompat.SRC_IN
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.collections_list_item.view.* import kotlinx.android.synthetic.main.collections_list_item.view.*
import mozilla.components.feature.tab.collections.TabCollection import mozilla.components.feature.tab.collections.TabCollection
@ -52,11 +53,8 @@ class CollectionViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun bind(collection: TabCollection) { fun bind(collection: TabCollection) {
itemView.collection_item.text = collection.title itemView.collection_item.text = collection.title
itemView.collection_description.text = collection.description(itemView.context) itemView.collection_description.text = collection.description(itemView.context)
itemView.collection_icon.colorFilter =
itemView.collection_icon.setColorFilter( createBlendModeColorFilterCompat(collection.getIconColor(itemView.context), SRC_IN)
collection.getIconColor(itemView.context),
SRC_IN
)
} }
companion object { companion object {

View File

@ -5,13 +5,13 @@
package org.mozilla.fenix.ext package org.mozilla.fenix.ext
import android.graphics.ColorFilter import android.graphics.ColorFilter
import android.graphics.PorterDuff
import android.graphics.PorterDuffColorFilter
import android.widget.ActionMenuView import android.widget.ActionMenuView
import android.widget.ImageButton import android.widget.ImageButton
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.appcompat.view.menu.ActionMenuItemView import androidx.appcompat.view.menu.ActionMenuItemView
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat
import androidx.core.graphics.BlendModeCompat.SRC_IN
import androidx.core.view.forEach import androidx.core.view.forEach
/** /**
@ -22,7 +22,7 @@ fun Toolbar.setToolbarColors(@ColorInt foreground: Int, @ColorInt background: In
setBackgroundColor(background) setBackgroundColor(background)
setTitleTextColor(foreground) setTitleTextColor(foreground)
val colorFilter = PorterDuffColorFilter(foreground, PorterDuff.Mode.SRC_IN) val colorFilter = createBlendModeColorFilterCompat(foreground, SRC_IN)
overflowIcon?.colorFilter = colorFilter overflowIcon?.colorFilter = colorFilter
forEach { child -> forEach { child ->
when (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 -> item.forEach { innerChild ->
if (innerChild is ActionMenuItemView) { if (innerChild is ActionMenuItemView) {
innerChild.compoundDrawables.forEach { drawable -> innerChild.compoundDrawables.forEach { drawable ->

View File

@ -5,9 +5,10 @@
package org.mozilla.fenix.home.sessioncontrol.viewholders package org.mozilla.fenix.home.sessioncontrol.viewholders
import android.content.Context import android.content.Context
import android.graphics.PorterDuff.Mode.SRC_IN
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat
import androidx.core.graphics.BlendModeCompat.SRC_IN
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.extensions.LayoutContainer import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.collection_home_list_row.* import kotlinx.android.synthetic.main.collection_home_list_row.*
@ -89,7 +90,7 @@ class CollectionViewHolder(
view.collection_description.visibility = View.VISIBLE view.collection_description.visibility = View.VISIBLE
} }
view.collection_icon.setColorFilter( view.collection_icon.colorFilter = createBlendModeColorFilterCompat(
collection.getIconColor(view.context), collection.getIconColor(view.context),
SRC_IN SRC_IN
) )

View File

@ -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 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.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup 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.core.graphics.drawable.toBitmap
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.extensions.LayoutContainer 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.search.SearchUseCases
import mozilla.components.feature.session.SessionUseCases import mozilla.components.feature.session.SessionUseCases
import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.feature.tabs.TabsUseCases
import mozilla.components.support.ktx.android.content.getColorFromAttr
import mozilla.components.support.ktx.android.view.hideKeyboard import mozilla.components.support.ktx.android.view.hideKeyboard
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
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.ext.getColorFromAttr
import org.mozilla.fenix.search.SearchEngineSource import org.mozilla.fenix.search.SearchEngineSource
import org.mozilla.fenix.search.SearchFragmentState import org.mozilla.fenix.search.SearchFragmentState
@ -124,56 +125,56 @@ class AwesomeBarView(
init { init {
view.itemAnimator = null view.itemAnimator = null
with(container.context) { val context = container.context
val primaryTextColor = getColorFromAttr(R.attr.primaryText) val components = context.components
val primaryTextColor = context.getColorFromAttr(R.attr.primaryText)
val draw = getDrawable(R.drawable.ic_link)!! val draw = getDrawable(context, R.drawable.ic_link)!!
draw.setColorFilter(primaryTextColor, SRC_IN) draw.colorFilter = createBlendModeColorFilterCompat(primaryTextColor, SRC_IN)
sessionProvider = sessionProvider =
SessionSuggestionProvider( SessionSuggestionProvider(
components.core.sessionManager, components.core.sessionManager,
selectTabUseCase, selectTabUseCase,
components.core.icons, components.core.icons,
excludeSelectedSession = true excludeSelectedSession = true
) )
historyStorageProvider = historyStorageProvider =
HistoryStorageSuggestionProvider( HistoryStorageSuggestionProvider(
components.core.historyStorage, components.core.historyStorage,
loadUrlUseCase, loadUrlUseCase,
components.core.icons components.core.icons
) )
bookmarksStorageSuggestionProvider = bookmarksStorageSuggestionProvider =
BookmarksStorageSuggestionProvider( BookmarksStorageSuggestionProvider(
components.core.bookmarksStorage, components.core.bookmarksStorage,
loadUrlUseCase, loadUrlUseCase,
components.core.icons components.core.icons
) )
val searchDrawable = getDrawable(R.drawable.ic_search)!! val searchDrawable = getDrawable(context, R.drawable.ic_search)!!
searchDrawable.setColorFilter(primaryTextColor, SRC_IN) searchDrawable.colorFilter = createBlendModeColorFilterCompat(primaryTextColor, SRC_IN)
defaultSearchSuggestionProvider = defaultSearchSuggestionProvider =
SearchSuggestionProvider( SearchSuggestionProvider(
context = this, context = context,
searchEngineManager = components.search.searchEngineManager, searchEngineManager = components.search.searchEngineManager,
searchUseCase = searchUseCase, searchUseCase = searchUseCase,
fetchClient = components.core.client, fetchClient = components.core.client,
mode = SearchSuggestionProvider.Mode.MULTIPLE_SUGGESTIONS, mode = SearchSuggestionProvider.Mode.MULTIPLE_SUGGESTIONS,
limit = 3, limit = 3,
icon = searchDrawable.toBitmap() icon = searchDrawable.toBitmap()
) )
shortcutsEnginePickerProvider = shortcutsEnginePickerProvider =
ShortcutsSuggestionProvider( ShortcutsSuggestionProvider(
components.search.provider, searchEngineProvider = components.search.provider,
this, context = context,
interactor::onSearchShortcutEngineSelected, selectShortcutEngine = interactor::onSearchShortcutEngineSelected,
interactor::onClickSearchEngineSettings selectShortcutEngineSettings = interactor::onClickSearchEngineSettings
) )
}
searchSuggestionProviderMap = HashMap() searchSuggestionProviderMap = HashMap()
search_shortcuts_button.setOnClickListener { search_shortcuts_button.setOnClickListener {
@ -324,25 +325,23 @@ class AwesomeBarView(
} }
private fun getSuggestionProviderForEngine(engine: SearchEngine): SearchSuggestionProvider? { private fun getSuggestionProviderForEngine(engine: SearchEngine): SearchSuggestionProvider? {
if (!searchSuggestionProviderMap.containsKey(engine)) { return searchSuggestionProviderMap.getOrPut(engine) {
with(container.context) { val context = container.context
val draw = getDrawable(R.drawable.ic_search) val components = context.components
draw?.colorFilter = val primaryTextColor = context.getColorFromAttr(R.attr.primaryText)
PorterDuffColorFilter(getColorFromAttr(R.attr.primaryText), SRC_IN)
searchSuggestionProviderMap.put( val draw = getDrawable(context, R.drawable.ic_search)
engine, SearchSuggestionProvider( draw?.colorFilter = createBlendModeColorFilterCompat(primaryTextColor, SRC_IN)
components.search.provider.installedSearchEngines(this).list.find { it.name == engine.name }
?: components.search.provider.getDefaultEngine(this), SearchSuggestionProvider(
shortcutSearchUseCase, components.search.provider.installedSearchEngines(context).list.find { it.name == engine.name }
components.core.client, ?: components.search.provider.getDefaultEngine(context),
limit = 3, shortcutSearchUseCase,
mode = SearchSuggestionProvider.Mode.MULTIPLE_SUGGESTIONS, components.core.client,
icon = draw?.toBitmap() limit = 3,
) mode = SearchSuggestionProvider.Mode.MULTIPLE_SUGGESTIONS,
) icon = draw?.toBitmap()
} )
} }
return searchSuggestionProviderMap[engine]
} }
} }

View File

@ -5,10 +5,11 @@
package org.mozilla.fenix.share.viewholders package org.mozilla.fenix.share.viewholders
import android.content.Context import android.content.Context
import android.graphics.PorterDuff
import android.view.View import android.view.View
import androidx.annotation.VisibleForTesting 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 androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.account_share_list_item.view.* import kotlinx.android.synthetic.main.account_share_list_item.view.*
import mozilla.components.concept.sync.DeviceType import mozilla.components.concept.sync.DeviceType
@ -51,8 +52,8 @@ class AccountDeviceViewHolder(
itemView.deviceIcon.apply { itemView.deviceIcon.apply {
setImageResource(drawableRes) setImageResource(drawableRes)
background.setColorFilter(ContextCompat.getColor(context, colorRes), PorterDuff.Mode.SRC_IN) background.colorFilter = createBlendModeColorFilterCompat(getColor(context, colorRes), SRC_IN)
drawable.setTint(ContextCompat.getColor(context, R.color.device_foreground)) drawable.setTint(getColor(context, R.color.device_foreground))
} }
itemView.isClickable = option != SyncShareOption.Offline itemView.isClickable = option != SyncShareOption.Offline
itemView.deviceName.text = name itemView.deviceName.text = name

View File

@ -6,13 +6,13 @@ package org.mozilla.fenix.utils
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.graphics.PorterDuff.Mode.SRC_IN
import android.graphics.PorterDuffColorFilter
import android.util.AttributeSet import android.util.AttributeSet
import android.view.MotionEvent import android.view.MotionEvent
import android.view.MotionEvent.ACTION_UP import android.view.MotionEvent.ACTION_UP
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.appcompat.widget.AppCompatEditText 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 mozilla.components.support.ktx.android.view.putCompoundDrawablesRelativeWithIntrinsicBounds
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.ext.getColorFromAttr import org.mozilla.fenix.ext.getColorFromAttr
@ -46,10 +46,9 @@ class ClearableEditText @JvmOverloads constructor(
* Displays a clear icon if text has been entered. * Displays a clear icon if text has been entered.
*/ */
override fun onTextChanged(text: CharSequence?, start: Int, lengthBefore: Int, lengthAfter: Int) { override fun onTextChanged(text: CharSequence?, start: Int, lengthBefore: Int, lengthAfter: Int) {
super.onTextChanged(text, start, lengthBefore, lengthAfter)
val drawable = if (shouldShowClearButton(lengthAfter)) { val drawable = if (shouldShowClearButton(lengthAfter)) {
AppCompatResources.getDrawable(context, R.drawable.ic_clear)?.apply { 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 { } else {
null null