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