diff --git a/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDataSource.kt b/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDataSource.kt index e8bfab5106bafc4204b5ce4029805a293601c15a..dd7d02755cfef783ea7868668ece6b31ee396fcc 100644 --- a/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDataSource.kt +++ b/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDataSource.kt @@ -29,13 +29,9 @@ class FilterTimelinesDataSource @Inject constructor( val timelinesLiveData = combine( circleSummaryLiveData.asFlow(), selectedTimelinesIds - ) { circle, selectedIds -> - val children = circle.getOrNull()?.spaceChildren ?: emptyList() - val myTimelineId = getTimelineRoomFor(circleId)?.roomId - children.mapNotNull { - session.getRoom(it.childRoomId)?.roomSummary()?.takeIf { summary -> - summary.membership.isActive() && summary.roomId != myTimelineId - }?.toFilterTimelinesListItem(isTimelineSelected(selectedIds, it.childRoomId)) + ) { _, selectedIds -> + getAllTimelinesIds().mapNotNull { + session.getRoom(it)?.roomSummary()?.toFilterTimelinesListItem(selectedIds.contains(it)) } }.flowOn(Dispatchers.IO).asLiveData() @@ -48,7 +44,7 @@ class FilterTimelinesDataSource @Inject constructor( } fun toggleItemSelected(roomId: String) { - val isItemSelected = isTimelineSelected(selectedTimelinesIds.value, roomId) + val isItemSelected = selectedTimelinesIds.value.contains(roomId) selectedTimelinesIds.update { value -> val newSet = value.toMutableSet() if (isItemSelected) newSet.remove(roomId) @@ -58,18 +54,26 @@ class FilterTimelinesDataSource @Inject constructor( } fun selectAllTimelines() { - val ids = timelinesLiveData.value?.map { it.id }?.toSet() ?: emptySet() - selectedTimelinesIds.update { ids } + selectedTimelinesIds.update { getAllTimelinesIds() } } - private fun isTimelineSelected(selectedIds: Set<String>, roomId: String): Boolean = - if (selectedIds.isEmpty()) true - else selectedIds.contains(roomId) - private fun getCircleFilter(): Set<String> { val content = session.getRoom(circleId)?.roomAccountDataService() - ?.getAccountDataEvent(CIRCLE_FILTER_EVENT_TYPE)?.content ?: return emptySet() - return (content[TIMELINES_KEY] as? List<*>)?.map { it.toString() }?.toSet() ?: emptySet() + ?.getAccountDataEvent(CIRCLE_FILTER_EVENT_TYPE)?.content ?: return getAllTimelinesIds() + return (content[TIMELINES_KEY] as? List<*>)?.map { it.toString() }?.toSet() + ?: getAllTimelinesIds() + } + + private fun getAllTimelinesIds(): Set<String> { + val children = session.getRoom(circleId)?.roomSummary()?.spaceChildren ?: emptyList() + val myTimelineId = getTimelineRoomFor(circleId)?.roomId + return children.mapNotNull { + val timelineSummary = + session.getRoom(it.childRoomId)?.roomSummary()?.takeIf { summary -> + summary.membership.isActive() && summary.roomId != myTimelineId + } + timelineSummary?.roomId + }.toSet() } companion object { 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 index ced1378708b2fe80918d7873712c99021431ac55..23487542d5464ef2f8d4cf3fe9608a0481e34391 100644 --- 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 @@ -18,7 +18,10 @@ class FilterTimelinesViewHolder( private val binding = baseBinding as ListItemTimelineFilterBinding init { - onClick(itemView) { position -> onItemClicked(position) } + onClick(itemView) { position -> + binding.vCheck.isChecked = !binding.vCheck.isChecked + onItemClicked(position) + } } fun bind(data: FilterTimelinesListItem) { diff --git a/core/src/main/res/layout/dialog_fragment_filter_timeline.xml b/core/src/main/res/layout/dialog_fragment_filter_timeline.xml index 0a24f4d0f77ab839b3a3e7693f822e19e9d3f5c7..36e9ca78fe3568349d380017ff84a76c84b58c32 100644 --- a/core/src/main/res/layout/dialog_fragment_filter_timeline.xml +++ b/core/src/main/res/layout/dialog_fragment_filter_timeline.xml @@ -61,8 +61,7 @@ android:id="@+id/rvTimelines" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginTop="8dp" - android:paddingHorizontal="8dp" /> + android:layout_marginTop="8dp" /> </LinearLayout> \ 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 index f51d40d0cba4a21ca1cfaa05125c920ee51c22a7..94346abdb7269a20092cccb639d26326e1db4ad8 100644 --- a/core/src/main/res/layout/list_item_timeline_filter.xml +++ b/core/src/main/res/layout/list_item_timeline_filter.xml @@ -14,11 +14,14 @@ android:id="@+id/ivRoom" android:layout_width="45dp" android:layout_height="45dp" + android:padding="2dp" android:scaleType="fitCenter" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.App.CornerSize50Percent" + app:strokeColor="@color/black" + app:strokeWidth="1dp" tools:src="@color/blue" /> @@ -55,6 +58,8 @@ android:id="@+id/vCheck" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:clickable="false" + android:focusable="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" />