Cache findViewById calls in session control (#10575)
parent
9a30d57db9
commit
f7b4f1c959
|
@ -0,0 +1,13 @@
|
||||||
|
package org.mozilla.fenix.ext
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import kotlinx.android.extensions.LayoutContainer
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A base class for all recycler view holders supporting Android Extensions-style view access.
|
||||||
|
* This allows views to be used without an `itemView.<id>` prefix, and additionally caches them.
|
||||||
|
*/
|
||||||
|
abstract class ViewHolder(
|
||||||
|
override val containerView: View
|
||||||
|
) : RecyclerView.ViewHolder(containerView), LayoutContainer
|
|
@ -904,7 +904,7 @@ class HomeFragment : Fragment() {
|
||||||
val viewHolder =
|
val viewHolder =
|
||||||
sessionControlView!!.view.findViewHolderForAdapterPosition(indexOfCollection)
|
sessionControlView!!.view.findViewHolderForAdapterPosition(indexOfCollection)
|
||||||
val border =
|
val border =
|
||||||
(viewHolder as? CollectionViewHolder)?.view?.findViewById<View>(R.id.selected_border)
|
(viewHolder as? CollectionViewHolder)?.itemView?.findViewById<View>(R.id.selected_border)
|
||||||
val listener = object : Animator.AnimatorListener {
|
val listener = object : Animator.AnimatorListener {
|
||||||
override fun onAnimationCancel(animation: Animator?) {
|
override fun onAnimationCancel(animation: Animator?) {
|
||||||
border?.visibility = View.GONE
|
border?.visibility = View.GONE
|
||||||
|
|
|
@ -8,14 +8,12 @@ import android.content.Context
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat
|
import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat
|
||||||
import androidx.core.graphics.BlendModeCompat.SRC_IN
|
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.*
|
import kotlinx.android.synthetic.main.collection_home_list_row.*
|
||||||
import kotlinx.android.synthetic.main.collection_home_list_row.view.*
|
|
||||||
import mozilla.components.browser.menu.BrowserMenuBuilder
|
import mozilla.components.browser.menu.BrowserMenuBuilder
|
||||||
import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
|
import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
|
||||||
import mozilla.components.feature.tab.collections.TabCollection
|
import mozilla.components.feature.tab.collections.TabCollection
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
import org.mozilla.fenix.ext.ViewHolder
|
||||||
import org.mozilla.fenix.ext.getIconColor
|
import org.mozilla.fenix.ext.getIconColor
|
||||||
import org.mozilla.fenix.ext.increaseTapArea
|
import org.mozilla.fenix.ext.increaseTapArea
|
||||||
import org.mozilla.fenix.ext.removeAndDisable
|
import org.mozilla.fenix.ext.removeAndDisable
|
||||||
|
@ -25,11 +23,9 @@ import org.mozilla.fenix.home.sessioncontrol.CollectionInteractor
|
||||||
import org.mozilla.fenix.theme.ThemeManager
|
import org.mozilla.fenix.theme.ThemeManager
|
||||||
|
|
||||||
class CollectionViewHolder(
|
class CollectionViewHolder(
|
||||||
val view: View,
|
view: View,
|
||||||
val interactor: CollectionInteractor,
|
val interactor: CollectionInteractor
|
||||||
override val containerView: View? = view
|
) : ViewHolder(view) {
|
||||||
) :
|
|
||||||
RecyclerView.ViewHolder(view), LayoutContainer {
|
|
||||||
|
|
||||||
private lateinit var collection: TabCollection
|
private lateinit var collection: TabCollection
|
||||||
private var expanded = false
|
private var expanded = false
|
||||||
|
@ -71,32 +67,32 @@ class CollectionViewHolder(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateCollectionUI() {
|
private fun updateCollectionUI() {
|
||||||
view.collection_title.text = collection.title
|
collection_title.text = collection.title
|
||||||
|
|
||||||
view.isActivated = expanded
|
itemView.isActivated = expanded
|
||||||
if (expanded) {
|
if (expanded) {
|
||||||
view.collection_share_button.apply {
|
collection_share_button.apply {
|
||||||
showAndEnable()
|
showAndEnable()
|
||||||
increaseTapArea(buttonIncreaseDps)
|
increaseTapArea(buttonIncreaseDps)
|
||||||
}
|
}
|
||||||
view.collection_overflow_button.apply {
|
collection_overflow_button.apply {
|
||||||
showAndEnable()
|
showAndEnable()
|
||||||
increaseTapArea(buttonIncreaseDps)
|
increaseTapArea(buttonIncreaseDps)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
view.collection_share_button.apply {
|
collection_share_button.apply {
|
||||||
removeAndDisable()
|
removeAndDisable()
|
||||||
removeTouchDelegate()
|
removeTouchDelegate()
|
||||||
}
|
}
|
||||||
view.collection_overflow_button.apply {
|
collection_overflow_button.apply {
|
||||||
removeAndDisable()
|
removeAndDisable()
|
||||||
removeTouchDelegate()
|
removeTouchDelegate()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
view.collection_icon.colorFilter = createBlendModeColorFilterCompat(
|
collection_icon.colorFilter = createBlendModeColorFilterCompat(
|
||||||
collection.getIconColor(view.context),
|
collection.getIconColor(itemView.context),
|
||||||
SRC_IN
|
SRC_IN
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,19 +6,19 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import kotlinx.android.synthetic.main.no_content_message.*
|
||||||
import kotlinx.android.synthetic.main.no_content_message.view.*
|
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
import org.mozilla.fenix.ext.ViewHolder
|
||||||
|
|
||||||
open class NoContentMessageViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
|
open class NoContentMessageViewHolder(view: View) : ViewHolder(view) {
|
||||||
|
|
||||||
fun bind(
|
fun bind(
|
||||||
@StringRes header: Int,
|
@StringRes header: Int,
|
||||||
@StringRes description: Int
|
@StringRes description: Int
|
||||||
) {
|
) {
|
||||||
with(view.context) {
|
with(itemView.context) {
|
||||||
view.no_content_header.text = getString(header)
|
no_content_header.text = getString(header)
|
||||||
view.no_content_description.text = getString(description)
|
no_content_description.text = getString(description)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,10 @@ import android.view.View
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import kotlinx.android.synthetic.main.no_content_message_with_action.view.*
|
import kotlinx.android.synthetic.main.no_content_message_with_action.*
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
|
||||||
class NoContentMessageWithActionViewHolder(
|
class NoContentMessageWithActionViewHolder(view: View) : NoContentMessageViewHolder(view) {
|
||||||
private val view: View
|
|
||||||
) : NoContentMessageViewHolder(view) {
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param header ID of string resource for title text.
|
* @param header ID of string resource for title text.
|
||||||
|
@ -31,12 +29,12 @@ class NoContentMessageWithActionViewHolder(
|
||||||
listener: (() -> Unit)? = null
|
listener: (() -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
super.bind(header, description)
|
super.bind(header, description)
|
||||||
with(view.context) {
|
with(itemView.context) {
|
||||||
|
|
||||||
if (buttonIcon != 0 || buttonText != 0) {
|
if (buttonIcon != 0 || buttonText != 0) {
|
||||||
view.add_new_tab_button.apply {
|
add_new_tab_button.apply {
|
||||||
isVisible = true
|
isVisible = true
|
||||||
setIcon(getDrawable(buttonIcon))
|
icon = getDrawable(buttonIcon)
|
||||||
text = getString(buttonText)
|
text = getString(buttonText)
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
listener?.invoke()
|
listener?.invoke()
|
||||||
|
|
|
@ -9,20 +9,20 @@ import android.view.View
|
||||||
import android.widget.PopupWindow
|
import android.widget.PopupWindow
|
||||||
import androidx.core.view.isInvisible
|
import androidx.core.view.isInvisible
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import kotlinx.android.synthetic.main.tab_header.*
|
||||||
import kotlinx.android.synthetic.main.tab_header.view.*
|
|
||||||
import mozilla.components.browser.menu.BrowserMenu
|
import mozilla.components.browser.menu.BrowserMenu
|
||||||
import mozilla.components.browser.menu.BrowserMenuBuilder
|
import mozilla.components.browser.menu.BrowserMenuBuilder
|
||||||
import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
|
import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.components.metrics.Event
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
|
import org.mozilla.fenix.ext.ViewHolder
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.home.sessioncontrol.SessionControlInteractor
|
import org.mozilla.fenix.home.sessioncontrol.SessionControlInteractor
|
||||||
|
|
||||||
class TabHeaderViewHolder(
|
class TabHeaderViewHolder(
|
||||||
private val view: View,
|
view: View,
|
||||||
private val interactor: SessionControlInteractor
|
private val interactor: SessionControlInteractor
|
||||||
) : RecyclerView.ViewHolder(view) {
|
) : ViewHolder(view) {
|
||||||
private var isPrivate = false
|
private var isPrivate = false
|
||||||
private var tabsMenu: TabHeaderMenu
|
private var tabsMenu: TabHeaderMenu
|
||||||
|
|
||||||
|
@ -39,34 +39,28 @@ class TabHeaderViewHolder(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
view.apply {
|
share_tabs_button.setOnClickListener {
|
||||||
share_tabs_button.run {
|
interactor.onShareTabs()
|
||||||
setOnClickListener {
|
}
|
||||||
interactor.onShareTabs()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_tabs_button.run {
|
close_tabs_button.setOnClickListener {
|
||||||
setOnClickListener {
|
it.context.components.analytics.metrics.track(Event.PrivateBrowsingGarbageIconTapped)
|
||||||
view.context.components.analytics.metrics.track(Event.PrivateBrowsingGarbageIconTapped)
|
interactor.onCloseAllTabs(true)
|
||||||
interactor.onCloseAllTabs(true)
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tabs_overflow_button.run {
|
tabs_overflow_button.run {
|
||||||
var menu: PopupWindow? = null
|
var menu: PopupWindow? = null
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
if (menu == null) {
|
if (menu == null) {
|
||||||
menu = tabsMenu.menuBuilder
|
menu = tabsMenu.menuBuilder
|
||||||
.build(view.context)
|
.build(it.context)
|
||||||
.show(
|
.show(
|
||||||
anchor = it,
|
anchor = it,
|
||||||
orientation = BrowserMenu.Orientation.DOWN,
|
orientation = BrowserMenu.Orientation.DOWN,
|
||||||
onDismiss = { menu = null }
|
onDismiss = { menu = null }
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
menu?.dismiss()
|
menu?.dismiss()
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,10 +72,10 @@ class TabHeaderViewHolder(
|
||||||
|
|
||||||
val headerTextResourceId =
|
val headerTextResourceId =
|
||||||
if (isPrivate) R.string.tabs_header_private_tabs_title else R.string.tab_header_label
|
if (isPrivate) R.string.tabs_header_private_tabs_title else R.string.tab_header_label
|
||||||
view.header_text.text = view.context.getString(headerTextResourceId)
|
header_text.text = itemView.context.getString(headerTextResourceId)
|
||||||
view.share_tabs_button.isInvisible = !isPrivate || !hasTabs
|
share_tabs_button.isInvisible = !isPrivate || !hasTabs
|
||||||
view.close_tabs_button.isInvisible = !isPrivate || !hasTabs
|
close_tabs_button.isInvisible = !isPrivate || !hasTabs
|
||||||
view.tabs_overflow_button.isVisible = !isPrivate && hasTabs
|
tabs_overflow_button.isVisible = !isPrivate && hasTabs
|
||||||
}
|
}
|
||||||
|
|
||||||
class TabHeaderMenu(
|
class TabHeaderMenu(
|
||||||
|
|
|
@ -8,16 +8,12 @@ import android.graphics.Outline
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewOutlineProvider
|
import android.view.ViewOutlineProvider
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
import androidx.appcompat.content.res.AppCompatResources
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import kotlinx.android.synthetic.main.list_element.*
|
||||||
import kotlinx.android.extensions.LayoutContainer
|
|
||||||
import kotlinx.android.synthetic.main.list_element.list_element_title
|
|
||||||
import kotlinx.android.synthetic.main.list_element.list_item_action_button
|
|
||||||
import kotlinx.android.synthetic.main.list_element.list_item_favicon
|
|
||||||
import kotlinx.android.synthetic.main.list_element.list_item_url
|
|
||||||
import mozilla.components.feature.tab.collections.TabCollection
|
import mozilla.components.feature.tab.collections.TabCollection
|
||||||
import mozilla.components.support.ktx.android.content.getColorFromAttr
|
import mozilla.components.support.ktx.android.content.getColorFromAttr
|
||||||
import mozilla.components.support.ktx.android.util.dpToFloat
|
import mozilla.components.support.ktx.android.util.dpToFloat
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
import org.mozilla.fenix.ext.ViewHolder
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.ext.increaseTapArea
|
import org.mozilla.fenix.ext.increaseTapArea
|
||||||
import org.mozilla.fenix.ext.loadIntoView
|
import org.mozilla.fenix.ext.loadIntoView
|
||||||
|
@ -26,11 +22,10 @@ import org.mozilla.fenix.home.sessioncontrol.CollectionInteractor
|
||||||
import mozilla.components.feature.tab.collections.Tab as ComponentTab
|
import mozilla.components.feature.tab.collections.Tab as ComponentTab
|
||||||
|
|
||||||
class TabInCollectionViewHolder(
|
class TabInCollectionViewHolder(
|
||||||
val view: View,
|
view: View,
|
||||||
val interactor: CollectionInteractor,
|
val interactor: CollectionInteractor,
|
||||||
private val differentLastItem: Boolean = false,
|
private val differentLastItem: Boolean = false
|
||||||
override val containerView: View? = view
|
) : ViewHolder(view) {
|
||||||
) : RecyclerView.ViewHolder(view), LayoutContainer {
|
|
||||||
|
|
||||||
lateinit var collection: TabCollection
|
lateinit var collection: TabCollection
|
||||||
private set
|
private set
|
||||||
|
@ -52,7 +47,7 @@ class TabInCollectionViewHolder(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
view.setOnClickListener {
|
itemView.setOnClickListener {
|
||||||
interactor.onCollectionOpenTabClicked(tab)
|
interactor.onCollectionOpenTabClicked(tab)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,16 +65,17 @@ class TabInCollectionViewHolder(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateTabUI() {
|
private fun updateTabUI() {
|
||||||
list_item_url.text = tab.url.toShortUrl(view.context.components.publicSuffixList)
|
val context = itemView.context
|
||||||
|
list_item_url.text = tab.url.toShortUrl(context.components.publicSuffixList)
|
||||||
|
|
||||||
list_element_title.text = tab.title
|
list_element_title.text = tab.title
|
||||||
list_item_favicon.context.components.core.icons.loadIntoView(list_item_favicon, tab.url)
|
list_item_favicon.context.components.core.icons.loadIntoView(list_item_favicon, tab.url)
|
||||||
|
|
||||||
// If last item and we want to change UI for it
|
// If last item and we want to change UI for it
|
||||||
if (isLastItem && differentLastItem) {
|
if (isLastItem && differentLastItem) {
|
||||||
view.background = AppCompatResources.getDrawable(view.context, R.drawable.rounded_bottom_corners)
|
itemView.background = AppCompatResources.getDrawable(context, R.drawable.rounded_bottom_corners)
|
||||||
} else {
|
} else {
|
||||||
view.setBackgroundColor(view.context.getColorFromAttr(R.attr.above))
|
itemView.setBackgroundColor(context.getColorFromAttr(R.attr.above))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,13 +9,12 @@ import android.graphics.Outline
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewOutlineProvider
|
import android.view.ViewOutlineProvider
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
import androidx.appcompat.content.res.AppCompatResources
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import kotlinx.android.extensions.LayoutContainer
|
|
||||||
import kotlinx.android.synthetic.main.tab_list_row.*
|
import kotlinx.android.synthetic.main.tab_list_row.*
|
||||||
import mozilla.components.browser.state.state.MediaState
|
import mozilla.components.browser.state.state.MediaState
|
||||||
import mozilla.components.support.ktx.android.util.dpToFloat
|
import mozilla.components.support.ktx.android.util.dpToFloat
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.components.metrics.Event
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
|
import org.mozilla.fenix.ext.ViewHolder
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.ext.increaseTapArea
|
import org.mozilla.fenix.ext.increaseTapArea
|
||||||
import org.mozilla.fenix.ext.loadIntoView
|
import org.mozilla.fenix.ext.loadIntoView
|
||||||
|
@ -27,10 +26,8 @@ import org.mozilla.fenix.home.sessioncontrol.TabSessionInteractor
|
||||||
|
|
||||||
class TabViewHolder(
|
class TabViewHolder(
|
||||||
view: View,
|
view: View,
|
||||||
interactor: TabSessionInteractor,
|
interactor: TabSessionInteractor
|
||||||
override val containerView: View? = view
|
) : ViewHolder(view) {
|
||||||
) :
|
|
||||||
RecyclerView.ViewHolder(view), LayoutContainer {
|
|
||||||
|
|
||||||
internal var tab: Tab? = null
|
internal var tab: Tab? = null
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.google.android.flexbox.FlexboxLayoutManager
|
import com.google.android.flexbox.FlexboxLayoutManager
|
||||||
import kotlinx.android.extensions.LayoutContainer
|
|
||||||
import kotlinx.android.synthetic.main.component_top_sites.view.*
|
import kotlinx.android.synthetic.main.component_top_sites.view.*
|
||||||
import mozilla.components.feature.top.sites.TopSite
|
import mozilla.components.feature.top.sites.TopSite
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
@ -16,9 +15,9 @@ import org.mozilla.fenix.home.sessioncontrol.viewholders.topsites.TopSitesAdapte
|
||||||
|
|
||||||
class TopSiteViewHolder(
|
class TopSiteViewHolder(
|
||||||
view: View,
|
view: View,
|
||||||
interactor: TopSiteInteractor,
|
interactor: TopSiteInteractor
|
||||||
override val containerView: View? = view
|
) : RecyclerView.ViewHolder(view) {
|
||||||
) : RecyclerView.ViewHolder(view), LayoutContainer {
|
|
||||||
private val topSitesAdapter = TopSitesAdapter(interactor)
|
private val topSitesAdapter = TopSitesAdapter(interactor)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding
|
package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
import androidx.appcompat.content.res.AppCompatResources.getDrawable
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import kotlinx.android.synthetic.main.onboarding_automatic_signin.view.*
|
import kotlinx.android.synthetic.main.onboarding_automatic_signin.view.*
|
||||||
|
@ -19,8 +19,10 @@ import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.components.FenixSnackbar
|
import org.mozilla.fenix.components.FenixSnackbar
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
|
|
||||||
class OnboardingAutomaticSignInViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
|
class OnboardingAutomaticSignInViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
||||||
|
|
||||||
private lateinit var shareableAccount: ShareableAccount
|
private lateinit var shareableAccount: ShareableAccount
|
||||||
|
private val headerText = view.header_text
|
||||||
|
|
||||||
init {
|
init {
|
||||||
view.turn_on_sync_button.setOnClickListener {
|
view.turn_on_sync_button.setOnClickListener {
|
||||||
|
@ -57,11 +59,11 @@ class OnboardingAutomaticSignInViewHolder(private val view: View) : RecyclerView
|
||||||
|
|
||||||
fun bind(account: ShareableAccount) {
|
fun bind(account: ShareableAccount) {
|
||||||
shareableAccount = account
|
shareableAccount = account
|
||||||
view.header_text.text = view.context.getString(
|
headerText.text = itemView.context.getString(
|
||||||
R.string.onboarding_firefox_account_auto_signin_header_2, account.email
|
R.string.onboarding_firefox_account_auto_signin_header_2, account.email
|
||||||
)
|
)
|
||||||
val icon = AppCompatResources.getDrawable(view.context, R.drawable.ic_onboarding_avatar_anonymous)
|
val icon = getDrawable(itemView.context, R.drawable.ic_onboarding_avatar_anonymous)
|
||||||
view.header_text.putCompoundDrawablesRelativeWithIntrinsicBounds(start = icon)
|
headerText.putCompoundDrawablesRelativeWithIntrinsicBounds(start = icon)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -14,7 +14,10 @@ import mozilla.components.support.ktx.android.view.putCompoundDrawablesRelativeW
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.home.HomeFragmentDirections
|
import org.mozilla.fenix.home.HomeFragmentDirections
|
||||||
|
|
||||||
class OnboardingManualSignInViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
|
class OnboardingManualSignInViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
||||||
|
|
||||||
|
private val headerText = view.header_text
|
||||||
|
|
||||||
init {
|
init {
|
||||||
view.turn_on_sync_button.setOnClickListener {
|
view.turn_on_sync_button.setOnClickListener {
|
||||||
val directions = HomeFragmentDirections.actionGlobalTurnOnSync()
|
val directions = HomeFragmentDirections.actionGlobalTurnOnSync()
|
||||||
|
@ -23,11 +26,13 @@ class OnboardingManualSignInViewHolder(private val view: View) : RecyclerView.Vi
|
||||||
}
|
}
|
||||||
|
|
||||||
fun bind() {
|
fun bind() {
|
||||||
val appName = view.context.getString(R.string.app_name)
|
val context = itemView.context
|
||||||
view.header_text.text = view.context.getString(R.string.onboarding_firefox_account_header, appName)
|
|
||||||
val icon = AppCompatResources.getDrawable(view.context, R.drawable.ic_onboarding_firefox_accounts)
|
val appName = context.getString(R.string.app_name)
|
||||||
icon?.setTint(ContextCompat.getColor(view.context, R.color.white_color))
|
headerText.text = context.getString(R.string.onboarding_firefox_account_header, appName)
|
||||||
view.header_text.putCompoundDrawablesRelativeWithIntrinsicBounds(start = icon)
|
val icon = AppCompatResources.getDrawable(context, R.drawable.ic_onboarding_firefox_accounts)
|
||||||
|
icon?.setTint(ContextCompat.getColor(context, R.color.white_color))
|
||||||
|
headerText.putCompoundDrawablesRelativeWithIntrinsicBounds(start = icon)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -10,10 +10,12 @@ import androidx.recyclerview.widget.RecyclerView
|
||||||
import kotlinx.android.synthetic.main.onboarding_section_header.view.*
|
import kotlinx.android.synthetic.main.onboarding_section_header.view.*
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
|
||||||
class OnboardingSectionHeaderViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
|
class OnboardingSectionHeaderViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
||||||
|
|
||||||
|
private val sectionHeader = view.section_header_text
|
||||||
|
|
||||||
fun bind(labelBuilder: (Context) -> String) {
|
fun bind(labelBuilder: (Context) -> String) {
|
||||||
view.section_header_text.text = labelBuilder(view.context)
|
sectionHeader.text = labelBuilder(itemView.context)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -6,21 +6,22 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.topsites
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import kotlinx.android.synthetic.main.top_site_item.*
|
||||||
import kotlinx.android.synthetic.main.top_site_item.view.*
|
import kotlinx.android.synthetic.main.top_site_item.view.*
|
||||||
import mozilla.components.browser.menu.BrowserMenuBuilder
|
import mozilla.components.browser.menu.BrowserMenuBuilder
|
||||||
import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
|
import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
|
||||||
import mozilla.components.feature.top.sites.TopSite
|
import mozilla.components.feature.top.sites.TopSite
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
import org.mozilla.fenix.ext.ViewHolder
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.ext.loadIntoView
|
import org.mozilla.fenix.ext.loadIntoView
|
||||||
import org.mozilla.fenix.home.sessioncontrol.TopSiteInteractor
|
import org.mozilla.fenix.home.sessioncontrol.TopSiteInteractor
|
||||||
import org.mozilla.fenix.settings.SupportUtils
|
import org.mozilla.fenix.settings.SupportUtils
|
||||||
|
|
||||||
class TopSiteItemViewHolder(
|
class TopSiteItemViewHolder(
|
||||||
private val view: View,
|
view: View,
|
||||||
private val interactor: TopSiteInteractor
|
private val interactor: TopSiteInteractor
|
||||||
) : RecyclerView.ViewHolder(view) {
|
) : ViewHolder(view) {
|
||||||
private lateinit var topSite: TopSite
|
private lateinit var topSite: TopSite
|
||||||
private var topSiteMenu: TopSiteItemMenu
|
private var topSiteMenu: TopSiteItemMenu
|
||||||
|
|
||||||
|
@ -34,11 +35,11 @@ class TopSiteItemViewHolder(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
view.top_site_item.setOnClickListener {
|
top_site_item.setOnClickListener {
|
||||||
interactor.onSelectTopSite(topSite.url)
|
interactor.onSelectTopSite(topSite.url)
|
||||||
}
|
}
|
||||||
|
|
||||||
view.top_site_item.setOnLongClickListener() {
|
top_site_item.setOnLongClickListener() {
|
||||||
topSiteMenu.menuBuilder.build(view.context).show(anchor = it.top_site_title)
|
topSiteMenu.menuBuilder.build(view.context).show(anchor = it.top_site_title)
|
||||||
return@setOnLongClickListener true
|
return@setOnLongClickListener true
|
||||||
}
|
}
|
||||||
|
@ -46,13 +47,13 @@ class TopSiteItemViewHolder(
|
||||||
|
|
||||||
fun bind(topSite: TopSite) {
|
fun bind(topSite: TopSite) {
|
||||||
this.topSite = topSite
|
this.topSite = topSite
|
||||||
view.top_site_title.text = topSite.title
|
top_site_title.text = topSite.title
|
||||||
when {
|
when (topSite.url) {
|
||||||
topSite.url == SupportUtils.POCKET_TRENDING_URL -> {
|
SupportUtils.POCKET_TRENDING_URL -> {
|
||||||
view.favicon_image.setImageDrawable(view.context.getDrawable(R.drawable.ic_pocket))
|
favicon_image.setImageDrawable(itemView.context.getDrawable(R.drawable.ic_pocket))
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
view.context.components.core.icons.loadIntoView(view.favicon_image, topSite.url)
|
itemView.context.components.core.icons.loadIntoView(favicon_image, topSite.url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue