For #1843 - Adds ability to select all tabs
parent
ff08d0dbb0
commit
dea169dca2
|
@ -19,16 +19,18 @@ data class Tab(
|
|||
val title: String
|
||||
)
|
||||
|
||||
data class CollectionCreationState(val tabs: List<Tab> = listOf(), val selectedTabs: List<Tab> = listOf()) : ViewState
|
||||
data class CollectionCreationState(val tabs: List<Tab> = listOf(), val selectedTabs: Set<Tab> = setOf()) : ViewState
|
||||
|
||||
sealed class CollectionCreationChange : Change {
|
||||
data class TabListChange(val tabs: List<Tab>) : CollectionCreationChange()
|
||||
object AddAllTabs : CollectionCreationChange()
|
||||
data class TabAdded(val tab: Tab) : CollectionCreationChange()
|
||||
data class TabRemoved(val tab: Tab) : CollectionCreationChange()
|
||||
}
|
||||
|
||||
sealed class CollectionCreationAction : Action {
|
||||
object Close : CollectionCreationAction()
|
||||
object SelectAllTapped : CollectionCreationAction()
|
||||
data class AddTabToSelection(val tab: Tab) : CollectionCreationAction()
|
||||
data class RemoveTabFromSelection(val tab: Tab) : CollectionCreationAction()
|
||||
}
|
||||
|
@ -43,13 +45,14 @@ class CollectionCreationComponent(
|
|||
) {
|
||||
override val reducer: Reducer<CollectionCreationState, CollectionCreationChange> = { state, change ->
|
||||
when (change) {
|
||||
is CollectionCreationChange.AddAllTabs -> state.copy(selectedTabs = state.tabs.toSet())
|
||||
is CollectionCreationChange.TabListChange -> state.copy(tabs = change.tabs)
|
||||
is CollectionCreationChange.TabAdded -> {
|
||||
val selectedTabs = listOf(change.tab) + state.selectedTabs
|
||||
val selectedTabs = state.selectedTabs + setOf(change.tab)
|
||||
state.copy(selectedTabs = selectedTabs)
|
||||
}
|
||||
is CollectionCreationChange.TabRemoved -> {
|
||||
val selectedTabs = state.selectedTabs.filter { it.sessionId != change.tab.sessionId }
|
||||
val selectedTabs = state.selectedTabs - setOf(change.tab)
|
||||
state.copy(selectedTabs = selectedTabs)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ class CollectionCreationTabListAdapter(
|
|||
|
||||
|
||||
private var tabs: List<Tab> = listOf()
|
||||
private var selectedTabs: List<Tab> = listOf()
|
||||
private var selectedTabs: Set<Tab> = setOf()
|
||||
private lateinit var job: Job
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TabViewHolder {
|
||||
|
@ -50,8 +50,8 @@ class CollectionCreationTabListAdapter(
|
|||
job.cancel()
|
||||
}
|
||||
|
||||
fun updateData(tabs: List<Tab>, selectedTabs: List<Tab>) {
|
||||
val diffUtil = DiffUtil.calculateDiff(TabDiffUtil(this.tabs, tabs))
|
||||
fun updateData(tabs: List<Tab>, selectedTabs: Set<Tab>) {
|
||||
val diffUtil = DiffUtil.calculateDiff(TabDiffUtil(this.tabs, tabs, this.selectedTabs, selectedTabs))
|
||||
|
||||
this.tabs = tabs
|
||||
this.selectedTabs = selectedTabs
|
||||
|
@ -60,12 +60,20 @@ class CollectionCreationTabListAdapter(
|
|||
}
|
||||
}
|
||||
|
||||
private class TabDiffUtil(val old: List<Tab>, val new: List<Tab>) : DiffUtil.Callback() {
|
||||
private class TabDiffUtil(
|
||||
val old: List<Tab>,
|
||||
val new: List<Tab>,
|
||||
val oldSelected: Set<Tab>,
|
||||
val newSelected: Set<Tab>
|
||||
) : DiffUtil.Callback() {
|
||||
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean =
|
||||
old[oldItemPosition].sessionId == new[newItemPosition].sessionId
|
||||
|
||||
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean =
|
||||
old[oldItemPosition].url == new[newItemPosition].url
|
||||
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
|
||||
val isSameTab = old[oldItemPosition].url == new[newItemPosition].url
|
||||
val sameSelectedState = oldSelected.contains(old[oldItemPosition]) == newSelected.contains(new[newItemPosition])
|
||||
return isSameTab && sameSelectedState
|
||||
}
|
||||
|
||||
override fun getOldListSize(): Int = old.size
|
||||
override fun getNewListSize(): Int = new.size
|
||||
|
|
|
@ -36,7 +36,7 @@ class CollectionCreationUIView(
|
|||
}
|
||||
|
||||
view.select_all_button.setOnClickListener {
|
||||
Log.e("Collection Creation", "Select All Tapped!")
|
||||
actionEmitter.onNext(CollectionCreationAction.SelectAllTapped)
|
||||
}
|
||||
|
||||
view.tab_list.run {
|
||||
|
|
|
@ -54,6 +54,8 @@ class CreateCollectionFragment : DialogFragment() {
|
|||
.onNext(CollectionCreationChange.TabAdded(it.tab))
|
||||
is CollectionCreationAction.RemoveTabFromSelection -> getManagedEmitter<CollectionCreationChange>()
|
||||
.onNext(CollectionCreationChange.TabRemoved(it.tab))
|
||||
is CollectionCreationAction.SelectAllTapped -> getManagedEmitter<CollectionCreationChange>()
|
||||
.onNext(CollectionCreationChange.AddAllTabs)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue