1
0
Fork 0

For #8764: Use list component for items in collections

master
mcarare 2020-03-12 15:16:23 +02:00 committed by Emily Kager
parent 62bbbd9e37
commit 18533d3434
4 changed files with 20 additions and 30 deletions

View File

@ -22,12 +22,12 @@ import org.mozilla.fenix.home.OnboardingState
import org.mozilla.fenix.home.Tab import org.mozilla.fenix.home.Tab
import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionHeaderViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionHeaderViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.TabInCollectionViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.NoContentMessageViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.NoContentMessageViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.NoContentMessageWithActionViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.NoContentMessageWithActionViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.PrivateBrowsingDescriptionViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.PrivateBrowsingDescriptionViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.SaveTabGroupViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.SaveTabGroupViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.TabHeaderViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.TabHeaderViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.TabInCollectionViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.TabViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.TabViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.TopSiteViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.TopSiteViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding.OnboardingAutomaticSignInViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding.OnboardingAutomaticSignInViewHolder
@ -172,7 +172,7 @@ class SessionControlAdapter(
NoContentMessageWithActionViewHolder.LAYOUT_ID -> NoContentMessageWithActionViewHolder(view) NoContentMessageWithActionViewHolder.LAYOUT_ID -> NoContentMessageWithActionViewHolder(view)
CollectionHeaderViewHolder.LAYOUT_ID -> CollectionHeaderViewHolder(view) CollectionHeaderViewHolder.LAYOUT_ID -> CollectionHeaderViewHolder(view)
CollectionViewHolder.LAYOUT_ID -> CollectionViewHolder(view, interactor) CollectionViewHolder.LAYOUT_ID -> CollectionViewHolder(view, interactor)
TabInCollectionViewHolder.LAYOUT_ID -> TabInCollectionViewHolder(view, interactor) TabInCollectionViewHolder.LAYOUT_ID -> TabInCollectionViewHolder(view, interactor, differentLastItem = true)
OnboardingHeaderViewHolder.LAYOUT_ID -> OnboardingHeaderViewHolder(view) OnboardingHeaderViewHolder.LAYOUT_ID -> OnboardingHeaderViewHolder(view)
OnboardingSectionHeaderViewHolder.LAYOUT_ID -> OnboardingSectionHeaderViewHolder(view) OnboardingSectionHeaderViewHolder.LAYOUT_ID -> OnboardingSectionHeaderViewHolder(view)
OnboardingAutomaticSignInViewHolder.LAYOUT_ID -> OnboardingAutomaticSignInViewHolder(view) OnboardingAutomaticSignInViewHolder.LAYOUT_ID -> OnboardingAutomaticSignInViewHolder(view)

View File

@ -50,7 +50,7 @@ class SwipeToDeleteCallback(
icon?.setTint(recyclerView.context.getColorFromAttr(R.attr.destructive)) icon?.setTint(recyclerView.context.getColorFromAttr(R.attr.destructive))
val backgroundDrawable = when { val backgroundDrawable = when {
viewHolder is TabInCollectionViewHolder && viewHolder.isLastTab -> { viewHolder is TabInCollectionViewHolder && viewHolder.isLastItem -> {
R.drawable.tab_in_collection_last_swipe_background R.drawable.tab_in_collection_last_swipe_background
} }
viewHolder is TabInCollectionViewHolder -> { viewHolder is TabInCollectionViewHolder -> {

View File

@ -10,10 +10,9 @@ import android.view.ViewOutlineProvider
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
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.list_element.divider_line
import kotlinx.android.synthetic.main.list_element.list_element_title import kotlinx.android.synthetic.main.list_element.list_element_title
import kotlinx.android.synthetic.main.list_element.list_item_close_button import kotlinx.android.synthetic.main.list_element.list_item_action_button
import kotlinx.android.synthetic.main.list_element.list_item_icon import kotlinx.android.synthetic.main.list_element.list_item_favicon
import kotlinx.android.synthetic.main.list_element.list_item_url 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
@ -29,6 +28,7 @@ import mozilla.components.feature.tab.collections.Tab as ComponentTab
class TabInCollectionViewHolder( class TabInCollectionViewHolder(
val view: View, val view: View,
val interactor: CollectionInteractor, val interactor: CollectionInteractor,
private val differentLastItem: Boolean = false,
override val containerView: View? = view override val containerView: View? = view
) : RecyclerView.ViewHolder(view), LayoutContainer { ) : RecyclerView.ViewHolder(view), LayoutContainer {
@ -36,11 +36,11 @@ class TabInCollectionViewHolder(
private set private set
lateinit var tab: ComponentTab lateinit var tab: ComponentTab
private set private set
var isLastTab = false var isLastItem = false
init { init {
list_item_icon.clipToOutline = true list_item_favicon.clipToOutline = true
list_item_icon.outlineProvider = object : ViewOutlineProvider() { list_item_favicon.outlineProvider = object : ViewOutlineProvider() {
override fun getOutline(view: View, outline: Outline?) { override fun getOutline(view: View, outline: Outline?) {
outline?.setRoundRect( outline?.setRoundRect(
0, 0,
@ -56,8 +56,8 @@ class TabInCollectionViewHolder(
interactor.onCollectionOpenTabClicked(tab) interactor.onCollectionOpenTabClicked(tab)
} }
list_item_close_button.increaseTapArea(buttonIncreaseDps) list_item_action_button.increaseTapArea(buttonIncreaseDps)
list_item_close_button.setOnClickListener { list_item_action_button.setOnClickListener {
interactor.onCollectionRemoveTab(collection, tab) interactor.onCollectionRemoveTab(collection, tab)
} }
} }
@ -65,7 +65,7 @@ class TabInCollectionViewHolder(
fun bindSession(collection: TabCollection, tab: ComponentTab, isLastTab: Boolean) { fun bindSession(collection: TabCollection, tab: ComponentTab, isLastTab: Boolean) {
this.collection = collection this.collection = collection
this.tab = tab this.tab = tab
this.isLastTab = isLastTab this.isLastItem = isLastTab
updateTabUI() updateTabUI()
} }
@ -73,15 +73,13 @@ class TabInCollectionViewHolder(
list_item_url.text = tab.url.toShortUrl(view.context.components.publicSuffixList) list_item_url.text = tab.url.toShortUrl(view.context.components.publicSuffixList)
list_element_title.text = tab.title list_element_title.text = tab.title
list_item_icon.context.components.core.icons.loadIntoView(list_item_icon, tab.url) list_item_favicon.context.components.core.icons.loadIntoView(list_item_favicon, tab.url)
// If I'm the last one... // If last item and we want to change UI for it
if (isLastTab) { if (isLastItem && differentLastItem) {
view.background = AppCompatResources.getDrawable(view.context, R.drawable.rounded_bottom_corners) view.background = AppCompatResources.getDrawable(view.context, R.drawable.rounded_bottom_corners)
divider_line.visibility = View.GONE
} else { } else {
view.setBackgroundColor(view.context.getColorFromAttr(R.attr.above)) view.setBackgroundColor(view.context.getColorFromAttr(R.attr.above))
divider_line.visibility = View.VISIBLE
} }
} }

View File

@ -16,12 +16,12 @@
android:foreground="?android:attr/selectableItemBackground"> android:foreground="?android:attr/selectableItemBackground">
<ImageView <ImageView
android:id="@+id/list_item_icon" android:id="@+id/list_item_favicon"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:background="@drawable/rounded_grey_corners_transparent_center" android:background="@drawable/rounded_grey_corners_transparent_center"
android:padding="8dp" android:padding="8dp"
android:layout_marginStart="16dp" android:layout_marginStart="8dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:importantForAccessibility="no" android:importantForAccessibility="no"
@ -41,8 +41,8 @@
android:ellipsize="end" android:ellipsize="end"
android:singleLine="true" android:singleLine="true"
android:textAppearance="@style/Body14TextStyle" android:textAppearance="@style/Body14TextStyle"
app:layout_constraintEnd_toStartOf="@id/list_item_close_button" app:layout_constraintEnd_toStartOf="@id/list_item_action_button"
app:layout_constraintStart_toEndOf="@id/list_item_icon" app:layout_constraintStart_toEndOf="@id/list_item_favicon"
app:layout_constraintBottom_toTopOf="@id/list_item_url" app:layout_constraintBottom_toTopOf="@id/list_item_url"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -61,7 +61,7 @@
app:layout_constraintTop_toBottomOf="@id/list_element_title" /> app:layout_constraintTop_toBottomOf="@id/list_element_title" />
<ImageButton <ImageButton
android:id="@+id/list_item_close_button" android:id="@+id/list_item_action_button"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
android:alpha="0.8" android:alpha="0.8"
@ -72,12 +72,4 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/> app:layout_constraintBottom_toBottomOf="parent"/>
<View
android:id="@+id/divider_line"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="?neutralFaded"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>