Use createBlendModeColorFilterCompat (#8129)
parent
5515f1ba5e
commit
5faa22d611
|
@ -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 {
|
||||||
|
|
|
@ -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 ->
|
||||||
|
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
|
@ -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]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue