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