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 b8f769479381f1dd9ca6466fd0038923d45435d5..749a8669c7aa05574e2cd6c5054cc94c6af64426 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 814b968babe84c89511c65389c1ecd30d20dbdaf..da67e284a7ae5b2b0ef281af569bf03fff8cd06f 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 7c4dbf0a9cf9d8eba8e1791a30b3cb4e180e5986..d2681f79d8f449bc7a032494f6a06dc1ddc68928 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) ->