Add checked mark on the current item

This commit is contained in:
Benoit Marty 2021-05-26 18:17:58 +02:00
parent 4641f77842
commit f30eb4af8a
4 changed files with 35 additions and 5 deletions

View File

@ -16,10 +16,12 @@
package im.vector.app.features.roomdirectory.picker
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import com.airbnb.epoxy.EpoxyAttribute
import com.airbnb.epoxy.EpoxyModelClass
import im.vector.app.R
@ -43,6 +45,9 @@ abstract class RoomDirectoryItem : VectorEpoxyModel<RoomDirectoryItem.Holder>()
@EpoxyAttribute
var includeAllNetworks: Boolean = false
@EpoxyAttribute
var checked: Boolean = false
@EpoxyAttribute
var globalListener: (() -> Unit)? = null
@ -63,6 +68,7 @@ abstract class RoomDirectoryItem : VectorEpoxyModel<RoomDirectoryItem.Holder>()
holder.nameView.text = directoryName
holder.descriptionView.setTextOrHide(directoryDescription)
holder.checkedView.isVisible = checked
}
class Holder : VectorEpoxyHolder() {
@ -71,5 +77,6 @@ abstract class RoomDirectoryItem : VectorEpoxyModel<RoomDirectoryItem.Holder>()
val avatarView by bind<ImageView>(R.id.itemRoomDirectoryAvatar)
val nameView by bind<TextView>(R.id.itemRoomDirectoryName)
val descriptionView by bind<TextView>(R.id.itemRoomDirectoryDescription)
val checkedView by bind<View>(R.id.itemRoomDirectoryChecked)
}
}

View File

@ -39,6 +39,7 @@ class RoomDirectoryPickerController @Inject constructor(
private val roomDirectoryListCreator: RoomDirectoryListCreator
) : TypedEpoxyController<RoomDirectoryPickerViewState>() {
var currentRoomDirectoryData: RoomDirectoryData? = null
var callback: Callback? = null
private val dividerColor = colorProvider.getColorFromAttribute(R.attr.vctr_list_divider_color)
@ -105,7 +106,7 @@ class RoomDirectoryPickerController @Inject constructor(
}
directoryAvatarUrl(roomDirectoryData.avatarUrl)
includeAllNetworks(roomDirectoryData.includeAllNetworks)
checked(roomDirectoryData == host.currentRoomDirectoryData)
globalListener {
host.callback?.onRoomDirectoryClicked(roomDirectoryData)
}

View File

@ -64,6 +64,11 @@ class RoomDirectoryPickerFragment @Inject constructor(val roomDirectoryPickerVie
sharedActionViewModel = activityViewModelProvider.get(RoomDirectorySharedActionViewModel::class.java)
setupRecyclerView()
// Give the current data to our controller. There maybe a better way to do that...
withState(viewModel) {
roomDirectoryPickerController.currentRoomDirectoryData = it.roomDirectoryData
}
}
override fun onDestroyView() {

View File

@ -30,7 +30,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="@dimen/layout_horizontal_margin"
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:lines="1"
android:maxLines="2"
@ -38,10 +38,11 @@
android:textSize="15sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/itemRoomDirectoryDescription"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toStartOf="@+id/itemRoomDirectoryChecked"
app:layout_constraintStart_toEndOf="@id/itemRoomDirectoryAvatar"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
app:layout_goneMarginEnd="@dimen/layout_horizontal_margin"
tools:text="@tools:sample/lorem/random" />
<TextView
@ -49,7 +50,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="@dimen/layout_horizontal_margin"
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:lines="1"
android:maxLines="2"
@ -57,10 +58,26 @@
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toStartOf="@+id/itemRoomDirectoryChecked"
app:layout_constraintStart_toEndOf="@id/itemRoomDirectoryAvatar"
app:layout_constraintTop_toBottomOf="@id/itemRoomDirectoryName"
app:layout_goneMarginEnd="@dimen/layout_horizontal_margin"
tools:text="@string/directory_server_native_rooms"
tools:visibility="visible" />
<ImageView
android:id="@+id/itemRoomDirectoryChecked"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/layout_horizontal_margin"
android:layout_marginEnd="@dimen/layout_horizontal_margin"
android:contentDescription="@string/avatar"
android:padding="8dp"
android:src="@drawable/ic_check_on"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>