From efb3d857be1232337f64f134c2fc19f590b4fb4f Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Thu, 14 Mar 2024 16:35:27 +0200 Subject: [PATCH] Create list item --- .../filter/FilterTimelinesDialogFragment.kt | 10 ++- .../filter/list/FilterTimelinesViewHolder.kt | 32 ++++++++++ .../res/layout/list_item_timeline_filter.xml | 63 +++++++++++++++++++ 3 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 core/src/main/java/org/futo/circles/core/feature/circles/filter/list/FilterTimelinesViewHolder.kt create mode 100644 core/src/main/res/layout/list_item_timeline_filter.xml diff --git a/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDialogFragment.kt b/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDialogFragment.kt index 8c01da7d9..3ad28e157 100644 --- a/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDialogFragment.kt +++ b/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDialogFragment.kt @@ -30,7 +30,10 @@ class FilterTimelinesDialogFragment : private val filterTimelinesAdapter by lazy { FilterTimelinesAdapter( - onItemSelected = { id -> viewModel.toggleItemSelected(id) } + onItemSelected = { id -> + binding.btnSave.isEnabled = true + viewModel.toggleItemSelected(id) + } ) } @@ -46,7 +49,10 @@ class FilterTimelinesDialogFragment : startLoading(btnSave) viewModel.saveFilter() } - btnSelectAll.setOnClickListener { viewModel.selectAllItems() } + btnSelectAll.setOnClickListener { + binding.btnSave.isEnabled = true + viewModel.selectAllItems() + } rvTimelines.apply { addItemDecoration(DividerItemDecoration(context, DividerItemDecoration.VERTICAL)) adapter = filterTimelinesAdapter diff --git a/core/src/main/java/org/futo/circles/core/feature/circles/filter/list/FilterTimelinesViewHolder.kt b/core/src/main/java/org/futo/circles/core/feature/circles/filter/list/FilterTimelinesViewHolder.kt new file mode 100644 index 000000000..ced137870 --- /dev/null +++ b/core/src/main/java/org/futo/circles/core/feature/circles/filter/list/FilterTimelinesViewHolder.kt @@ -0,0 +1,32 @@ +package org.futo.circles.core.feature.circles.filter.list + +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import org.futo.circles.core.base.list.ViewBindingHolder +import org.futo.circles.core.databinding.ListItemTimelineFilterBinding +import org.futo.circles.core.extensions.loadRoomProfileIcon +import org.futo.circles.core.extensions.onClick +import org.futo.circles.core.model.FilterTimelinesListItem + +class FilterTimelinesViewHolder( + parent: ViewGroup, + onItemClicked: (Int) -> Unit +) : RecyclerView.ViewHolder(inflate(parent, ListItemTimelineFilterBinding::inflate)) { + + private companion object : ViewBindingHolder + + private val binding = baseBinding as ListItemTimelineFilterBinding + + init { + onClick(itemView) { position -> onItemClicked(position) } + } + + fun bind(data: FilterTimelinesListItem) { + with(binding) { + tvRoomName.text = data.name + tvOwnerName.text = data.ownerName + ivRoom.loadRoomProfileIcon(data.avatarUrl, data.name) + vCheck.isChecked = data.isSelected + } + } +} \ No newline at end of file diff --git a/core/src/main/res/layout/list_item_timeline_filter.xml b/core/src/main/res/layout/list_item_timeline_filter.xml new file mode 100644 index 000000000..f51d40d0c --- /dev/null +++ b/core/src/main/res/layout/list_item_timeline_filter.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?selectableItemBackground" + android:clickable="true" + android:focusable="true" + android:padding="8dp"> + + + <com.google.android.material.imageview.ShapeableImageView + android:id="@+id/ivRoom" + android:layout_width="45dp" + android:layout_height="45dp" + android:scaleType="fitCenter" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.App.CornerSize50Percent" + tools:src="@color/blue" /> + + + <TextView + android:id="@+id/tvRoomName" + style="@style/headline" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginEnd="8dp" + android:ellipsize="end" + android:lines="1" + app:layout_constraintBottom_toTopOf="@id/tvOwnerName" + app:layout_constraintEnd_toStartOf="@+id/vCheck" + app:layout_constraintStart_toEndOf="@id/ivRoom" + app:layout_constraintTop_toTopOf="@id/ivRoom" + app:layout_constraintVertical_chainStyle="packed" + tools:text="texsdt" /> + + <TextView + android:id="@+id/tvOwnerName" + style="@style/footNote" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:ellipsize="end" + android:lines="1" + app:layout_constraintBottom_toBottomOf="@id/ivRoom" + app:layout_constraintEnd_toEndOf="@id/tvRoomName" + app:layout_constraintStart_toStartOf="@id/tvRoomName" + app:layout_constraintTop_toBottomOf="@id/tvRoomName" + tools:text="texsdt" /> + + <com.google.android.material.checkbox.MaterialCheckBox + android:id="@+id/vCheck" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file -- GitLab