1
0
Fork 0

For #1843 - Adds ability to select all tabs

master
Jeff Boek 2019-04-23 10:50:24 -07:00 committed by Emily Kager
parent ff08d0dbb0
commit dea169dca2
4 changed files with 23 additions and 10 deletions

View File

@ -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)
}
}

View File

@ -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

View File

@ -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 {

View File

@ -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)
}
}
}