From 1a8f94b657d08d9da6d6186151e6ba078aa2b017 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Wed, 20 Dec 2023 17:56:23 +0200
Subject: [PATCH] Remove ignored users section from people tab

---
 .../feature/people/PeopleDataSource.kt        | 14 ++----------
 .../circles/feature/people/PeopleFragment.kt  |  4 +---
 .../circles/feature/people/PeopleViewModel.kt | 11 +---------
 .../feature/people/list/PeopleAdapter.kt      |  5 -----
 .../feature/people/list/PeopleViewHolder.kt   | 22 -------------------
 .../org/futo/circles/model/PeopleListItem.kt  |  3 +--
 app/src/main/res/values/strings.xml           |  1 +
 .../circles/core/model/CirclesUserSummary.kt  |  6 +++--
 8 files changed, 10 insertions(+), 56 deletions(-)

diff --git a/app/src/main/java/org/futo/circles/feature/people/PeopleDataSource.kt b/app/src/main/java/org/futo/circles/feature/people/PeopleDataSource.kt
index 73333a296..7fec6884b 100644
--- a/app/src/main/java/org/futo/circles/feature/people/PeopleDataSource.kt
+++ b/app/src/main/java/org/futo/circles/feature/people/PeopleDataSource.kt
@@ -45,27 +45,21 @@ class PeopleDataSource @Inject constructor(
     suspend fun getPeopleList(query: String) = combine(
         searchUserDataSource.searchKnownUsers(query),
         searchUserDataSource.searchSuggestions(query),
-        getIgnoredUserFlow(),
         getProfileRoomMembersKnockFlow()
-    ) { knowUsers, suggestions, ignoredUsers, requests ->
-        withContext(Dispatchers.IO) { buildList(knowUsers, suggestions, ignoredUsers, requests) }
+    ) { knowUsers, suggestions, requests ->
+        withContext(Dispatchers.IO) { buildList(knowUsers, suggestions, requests) }
     }.distinctUntilChanged()
 
     suspend fun refreshRoomMembers() {
         searchUserDataSource.loadAllRoomMembersIfNeeded()
     }
 
-    private fun getIgnoredUserFlow() =
-        session?.userService()?.getIgnoredUsersLive()?.asFlow() ?: flowOf()
-
     private fun buildList(
         knowUsers: List<User>,
         suggestions: List<User>,
-        ignoredUsers: List<User>,
         requests: List<KnockRequestListItem>
     ): List<PeopleListItem> {
         val uniqueItemsList = mutableListOf<PeopleListItem>().apply {
-            addAll(ignoredUsers.map { it.toPeopleUserListItem(PeopleItemType.Ignored) })
             addAll(requests.map { it.toPeopleRequestListItem() })
             addAll(knowUsers.map { it.toPeopleUserListItem(getKnownUserItemType(it.userId)) })
             addAll(suggestions.map { it.toPeopleUserListItem(PeopleItemType.Suggestion) })
@@ -96,10 +90,6 @@ class PeopleDataSource @Inject constructor(
                 PeopleHeaderItem.suggestions,
                 uniqueItemsList.filter { it.type == PeopleItemType.Suggestion }
             )
-            addSection(
-                PeopleHeaderItem.ignoredUsers,
-                uniqueItemsList.filter { it.type == PeopleItemType.Ignored }
-            )
         }
     }
 
diff --git a/app/src/main/java/org/futo/circles/feature/people/PeopleFragment.kt b/app/src/main/java/org/futo/circles/feature/people/PeopleFragment.kt
index 8668bf14d..e7f00d0dc 100644
--- a/app/src/main/java/org/futo/circles/feature/people/PeopleFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/people/PeopleFragment.kt
@@ -38,8 +38,7 @@ class PeopleFragment : Fragment(R.layout.fragment_people), MenuProvider {
             onRequestClicked = { userId, isAccepted ->
                 if (showNoInternetConnection()) return@PeopleAdapter
                 viewModel.onFollowRequestAnswered(userId, isAccepted)
-            },
-            onUnIgnore = { userId -> viewModel.unIgnoreUser(userId) }
+            }
         )
     }
 
@@ -78,7 +77,6 @@ class PeopleFragment : Fragment(R.layout.fragment_people), MenuProvider {
         }
         viewModel.followUserLiveData.observeResponse(this,
             success = { showSuccess(getString(R.string.request_sent)) })
-        viewModel.unIgnoreUserLiveData.observeResponse(this)
         viewModel.followUserRequestLiveData.observeResponse(this)
     }
 
diff --git a/app/src/main/java/org/futo/circles/feature/people/PeopleViewModel.kt b/app/src/main/java/org/futo/circles/feature/people/PeopleViewModel.kt
index d1e1650ba..05778b561 100644
--- a/app/src/main/java/org/futo/circles/feature/people/PeopleViewModel.kt
+++ b/app/src/main/java/org/futo/circles/feature/people/PeopleViewModel.kt
@@ -15,13 +15,11 @@ import javax.inject.Inject
 
 @HiltViewModel
 class PeopleViewModel @Inject constructor(
-    private val peopleDataSource: PeopleDataSource,
-    private val userOptionsDataSource: UserOptionsDataSource
+    private val peopleDataSource: PeopleDataSource
 ) : ViewModel() {
 
     val peopleLiveData = MutableLiveData<List<PeopleListItem>>()
     val followUserLiveData = SingleEventLiveData<Response<Unit?>>()
-    val unIgnoreUserLiveData = SingleEventLiveData<Response<Unit?>>()
     val followUserRequestLiveData = SingleEventLiveData<Response<Unit?>>()
 
     init {
@@ -36,18 +34,11 @@ class PeopleViewModel @Inject constructor(
         }
     }
 
-    fun unIgnoreUser(userId: String) {
-        launchBg {
-            unIgnoreUserLiveData.postValue(userOptionsDataSource.unIgnoreSender(userId))
-        }
-    }
-
     fun onFollowRequestAnswered(userId: String, accepted: Boolean) {
         launchBg {
             val result = if (accepted) peopleDataSource.acceptFollowRequest(userId)
             else peopleDataSource.declineFollowRequest(userId)
             followUserRequestLiveData.postValue(result)
         }
-
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/org/futo/circles/feature/people/list/PeopleAdapter.kt b/app/src/main/java/org/futo/circles/feature/people/list/PeopleAdapter.kt
index 96b8393fb..85dd3d510 100644
--- a/app/src/main/java/org/futo/circles/feature/people/list/PeopleAdapter.kt
+++ b/app/src/main/java/org/futo/circles/feature/people/list/PeopleAdapter.kt
@@ -9,7 +9,6 @@ import org.futo.circles.model.PeopleUserListItemPayload
 
 class PeopleAdapter(
     private val onUserClicked: (String) -> Unit,
-    private val onUnIgnore: (String) -> Unit,
     private val onRequestClicked: (String, Boolean) -> Unit
 ) : BaseRvAdapter<PeopleListItem, PeopleViewHolder>(PayloadIdEntityCallback { old, new ->
     if (new is PeopleUserListItem && old is PeopleUserListItem) {
@@ -28,10 +27,6 @@ class PeopleAdapter(
                     onRequestClicked(getItem(position).id, isAccepted)
                 }
             )
-            PeopleItemType.Ignored -> PeopleIgnoredUserViewHolder(
-                parent,
-                onUnIgnore = { position -> onUnIgnore(getItem(position).id) }
-            )
             else -> PeopleDefaultUserViewHolder(
                 parent,
                 onUserClicked = { position -> onUserClicked(getItem(position).id) }
diff --git a/app/src/main/java/org/futo/circles/feature/people/list/PeopleViewHolder.kt b/app/src/main/java/org/futo/circles/feature/people/list/PeopleViewHolder.kt
index 22a0645f6..3103bbda4 100644
--- a/app/src/main/java/org/futo/circles/feature/people/list/PeopleViewHolder.kt
+++ b/app/src/main/java/org/futo/circles/feature/people/list/PeopleViewHolder.kt
@@ -24,28 +24,6 @@ abstract class PeopleViewHolder(view: View) : RecyclerView.ViewHolder(view) {
     open fun bindPayload(data: PeopleUserListItemPayload) {}
 }
 
-class PeopleIgnoredUserViewHolder(
-    parent: ViewGroup,
-    private val onUnIgnore: (Int) -> Unit
-) : PeopleViewHolder(inflate(parent, ListItemPeopleIgnoredBinding::inflate)) {
-
-    private companion object : ViewBindingHolder
-
-    private val binding = baseBinding as ListItemPeopleIgnoredBinding
-
-    init {
-        onClick(binding.btnUnIgnore) { position -> onUnIgnore(position) }
-    }
-
-    override fun bind(data: PeopleListItem) {
-        (data as? PeopleUserListItem)?.let { binding.userItem.bind(it.user) }
-    }
-
-    override fun bindPayload(data: PeopleUserListItemPayload) {
-        data.user?.let { binding.userItem.bind(it) }
-    }
-}
-
 class PeopleDefaultUserViewHolder(
     parent: ViewGroup,
     private val onUserClicked: (Int) -> Unit
diff --git a/app/src/main/java/org/futo/circles/model/PeopleListItem.kt b/app/src/main/java/org/futo/circles/model/PeopleListItem.kt
index fc79e221d..1f0874b7d 100644
--- a/app/src/main/java/org/futo/circles/model/PeopleListItem.kt
+++ b/app/src/main/java/org/futo/circles/model/PeopleListItem.kt
@@ -6,7 +6,7 @@ import org.futo.circles.core.model.CirclesUserSummary
 import org.futo.circles.core.model.KnockRequestListItem
 import org.futo.circles.core.model.toCircleUser
 
-enum class PeopleItemType { Header, Friend, Following, Follower, Request, Known, Suggestion, Ignored }
+enum class PeopleItemType { Header, Friend, Following, Follower, Request, Known, Suggestion }
 sealed class PeopleListItem(
     open val type: PeopleItemType
 ) : IdEntity<String>
@@ -23,7 +23,6 @@ data class PeopleHeaderItem(
         val knownUsersHeader = PeopleHeaderItem(R.string.known_users)
         val suggestions = PeopleHeaderItem(R.string.suggestions)
         val requests = PeopleHeaderItem(R.string.requests)
-        val ignoredUsers = PeopleHeaderItem(R.string.ignored_users)
     }
 }
 
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5dfcf491c..d0abb5e2f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -204,6 +204,7 @@
     <string name="groups_empty_message">Create your first Group</string>
     <string name="circles_empty_message">Create your first Circle</string>
     <string name="people_empty_message">Members of Circles and Groups you are joined will be shown here</string>
+    <string name="ignored_users_empty_message">Ignored users will be shown here</string>
     <string name="creating_timeline">Creating timeline</string>
     <string name="group_topic_optional">Group topic (optional)</string>
     <string name="session">Session</string>
diff --git a/core/src/main/java/org/futo/circles/core/model/CirclesUserSummary.kt b/core/src/main/java/org/futo/circles/core/model/CirclesUserSummary.kt
index 807e84f64..4ab5db57c 100644
--- a/core/src/main/java/org/futo/circles/core/model/CirclesUserSummary.kt
+++ b/core/src/main/java/org/futo/circles/core/model/CirclesUserSummary.kt
@@ -1,7 +1,9 @@
 package org.futo.circles.core.model
 
+import org.futo.circles.core.base.list.IdEntity
+
 data class CirclesUserSummary(
-    val id: String,
+    override val id: String,
     val name: String,
     val avatarUrl: String
-)
\ No newline at end of file
+) : IdEntity<String>
\ No newline at end of file
-- 
GitLab