For #8764: Use list component for items in collections
parent
62bbbd9e37
commit
18533d3434
|
@ -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)
|
||||||
|
|
|
@ -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 -> {
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue