From 2f9bc03af0c16dea5040605924e0e24321c79fcd Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Wed, 6 Jun 2018 20:24:48 +0200
Subject: [PATCH] Fixes #116

---
 .../ui/chat/buffers/BufferListAdapter.kt        | 17 +++++++++--------
 .../ui/chat/buffers/BufferViewConfigFragment.kt |  9 +++++----
 .../quasseldroid/viewmodel/QuasselViewModel.kt  |  2 +-
 3 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
index b8f769479..749a8669c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
@@ -49,7 +49,7 @@ import io.reactivex.subjects.BehaviorSubject
 
 class BufferListAdapter(
   private val selectedBuffer: BehaviorSubject<BufferId>,
-  private val collapsedNetworks: BehaviorSubject<Set<NetworkId>>
+  private val expandedNetworks: BehaviorSubject<Map<NetworkId, Boolean>>
 ) : ListAdapter<BufferListItem, BufferListAdapter.BufferViewHolder>(
   object : DiffUtil.ItemCallback<BufferListItem>() {
     override fun areItemsTheSame(oldItem: BufferListItem, newItem: BufferListItem) =
@@ -80,11 +80,8 @@ class BufferListAdapter(
     this.updateFinishedListener?.invoke(list)
   }
 
-  fun expandListener(networkId: NetworkId) {
-    if (collapsedNetworks.value.orEmpty().contains(networkId))
-      collapsedNetworks.onNext(collapsedNetworks.value.orEmpty() - networkId)
-    else
-      collapsedNetworks.onNext(collapsedNetworks.value.orEmpty() + networkId)
+  fun expandListener(networkId: NetworkId, expand: Boolean) {
+    expandedNetworks.onNext(expandedNetworks.value.orEmpty() + Pair(networkId, expand))
   }
 
   fun toggleSelection(buffer: BufferId): Boolean {
@@ -143,7 +140,7 @@ class BufferListAdapter(
       itemView: View,
       private val clickListener: ((BufferId) -> Unit)? = null,
       private val longClickListener: ((BufferId) -> Unit)? = null,
-      private val expansionListener: ((NetworkId) -> Unit)? = null
+      private val expansionListener: ((NetworkId, Boolean) -> Unit)? = null
     ) : BufferViewHolder(itemView) {
       @BindView(R.id.status)
       lateinit var status: ImageView
@@ -159,6 +156,8 @@ class BufferListAdapter(
       private var message: Int = 0
       private var highlight: Int = 0
 
+      private var expanded: Boolean = false
+
       init {
         ButterKnife.bind(this, itemView)
         itemView.setOnClickListener {
@@ -180,7 +179,7 @@ class BufferListAdapter(
         status.setOnClickListener {
           val network = networkId
           if (network != null)
-            expansionListener?.invoke(network)
+            expansionListener?.invoke(network, !expanded)
         }
 
         itemView.context.theme.styledAttributes(
@@ -208,6 +207,8 @@ class BufferListAdapter(
           }
         )
 
+        this.expanded = state.networkExpanded
+
         itemView.isSelected = state.selected
 
         if (state.networkExpanded) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
index 814b968ba..da67e284a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
@@ -246,14 +246,14 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
 
     listAdapter = BufferListAdapter(
       viewModel.selectedBufferId,
-      viewModel.collapsedNetworks
+      viewModel.expandedNetworks
     )
-    combineLatest(viewModel.bufferList, viewModel.collapsedNetworks, viewModel.selectedBuffer)
+    combineLatest(viewModel.bufferList, viewModel.expandedNetworks, viewModel.selectedBuffer)
       .toLiveData().zip(database.filtered().listen(accountId))
       .observe(this, Observer { it ->
         it?.let { (data, activityList) ->
           runInBackground {
-            val (info, collapsedNetworks, selected) = data
+            val (info, expandedNetworks, selected) = data
             val (config, list) = info ?: Pair(null, emptyList())
             val minimumActivity = config?.minimumActivity() ?: Buffer_Activity.NONE
             val activities = activityList.associate { it.bufferId to it.filtered }
@@ -282,7 +282,8 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
                   )
                 ),
                 BufferState(
-                  networkExpanded = !collapsedNetworks.contains(props.network.networkId),
+                  networkExpanded = expandedNetworks[props.network.networkId]
+                                    ?: (props.networkConnectionState == INetwork.ConnectionState.Initialized),
                   selected = selected.info?.bufferId == props.info.bufferId
                 )
               )
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
index 7c4dbf0a9..d2681f79d 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
@@ -261,7 +261,7 @@ class QuasselViewModel : ViewModel() {
   }
 
   val showHidden = BehaviorSubject.createDefault(false)
-  val collapsedNetworks = BehaviorSubject.createDefault(emptySet<NetworkId>())
+  val expandedNetworks = BehaviorSubject.createDefault(emptyMap<NetworkId, Boolean>())
   val selectedBufferId = BehaviorSubject.createDefault(Int.MAX_VALUE)
   val selectedBuffer = combineLatest(session, selectedBufferId, bufferViewConfig)
     .switchMap { (sessionOptional, buffer, bufferViewConfigOptional) ->
-- 
GitLab