diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryAdapter.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryAdapter.kt index 4f00b6a7c..5f970334a 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryAdapter.kt @@ -31,7 +31,7 @@ class HistoryAdapter( private val historyInteractor: HistoryInteractor ) : PagedListAdapter(historyDiffCallback), SelectionHolder { - private var mode: HistoryState.Mode = HistoryState.Mode.Normal + private var mode: HistoryFragmentState.Mode = HistoryFragmentState.Mode.Normal override val selectedItems get() = mode.selectedItems override fun getItemViewType(position: Int): Int = HistoryListItemViewHolder.LAYOUT_ID @@ -41,7 +41,7 @@ class HistoryAdapter( return HistoryListItemViewHolder(view, historyInteractor, this) } - fun updateMode(mode: HistoryState.Mode) { + fun updateMode(mode: HistoryFragmentState.Mode) { this.mode = mode // Update the delete button alpha that the first item holds if (itemCount > 0) notifyItemChanged(0) diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryController.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryController.kt index 4fd6fd9c0..ebdcea699 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryController.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryController.kt @@ -17,7 +17,7 @@ interface HistoryController { } class DefaultHistoryController( - private val store: HistoryStore, + private val store: HistoryFragmentStore, private val openToBrowser: (item: HistoryItem) -> Unit, private val displayDeleteAll: () -> Unit, private val invalidateOptionsMenu: () -> Unit, @@ -28,16 +28,16 @@ class DefaultHistoryController( } override fun handleSelect(item: HistoryItem) { - store.dispatch(HistoryAction.AddItemForRemoval(item)) + store.dispatch(HistoryFragmentAction.AddItemForRemoval(item)) } override fun handleDeselect(item: HistoryItem) { - store.dispatch(HistoryAction.RemoveItemForRemoval(item)) + store.dispatch(HistoryFragmentAction.RemoveItemForRemoval(item)) } override fun handleBackPressed(): Boolean { - return if (store.state.mode is HistoryState.Mode.Editing) { - store.dispatch(HistoryAction.ExitEditMode) + return if (store.state.mode is HistoryFragmentState.Mode.Editing) { + store.dispatch(HistoryFragmentAction.ExitEditMode) true } else { false diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt index 2aac320ef..7536751b7 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt @@ -42,7 +42,7 @@ import org.mozilla.fenix.share.ShareTab @SuppressWarnings("TooManyFunctions", "LargeClass") class HistoryFragment : LibraryPageFragment(), BackHandler { - private lateinit var historyStore: HistoryStore + private lateinit var historyStore: HistoryFragmentStore private lateinit var historyView: HistoryView private lateinit var historyInteractor: HistoryInteractor private lateinit var viewModel: HistoryViewModel @@ -54,9 +54,9 @@ class HistoryFragment : LibraryPageFragment(), BackHandler { ): View? { val view = inflater.inflate(R.layout.fragment_history, container, false) historyStore = StoreProvider.get(this) { - HistoryStore( - HistoryState( - items = listOf(), mode = HistoryState.Mode.Normal + HistoryFragmentStore( + HistoryFragmentState( + items = listOf(), mode = HistoryFragmentState.Mode.Normal ) ) } @@ -106,7 +106,7 @@ class HistoryFragment : LibraryPageFragment(), BackHandler { } } viewModel.invalidate() - historyStore.dispatch(HistoryAction.ExitDeletionMode) + historyStore.dispatch(HistoryFragmentAction.ExitDeletionMode) } } @@ -135,12 +135,12 @@ class HistoryFragment : LibraryPageFragment(), BackHandler { override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { val mode = historyStore.state.mode when (mode) { - HistoryState.Mode.Normal -> R.menu.library_menu - is HistoryState.Mode.Editing -> R.menu.history_select_multi + HistoryFragmentState.Mode.Normal -> R.menu.library_menu + is HistoryFragmentState.Mode.Editing -> R.menu.history_select_multi else -> null }?.let { inflater.inflate(it, menu) } - if (mode is HistoryState.Mode.Editing) { + if (mode is HistoryFragmentState.Mode.Editing) { menu.findItem(R.id.share_history_multi_select)?.run { isVisible = true icon.colorFilter = PorterDuffColorFilter( @@ -174,7 +174,7 @@ class HistoryFragment : LibraryPageFragment(), BackHandler { lifecycleScope.launch(Main) { deleteSelectedHistory(historyStore.state.mode.selectedItems, components) viewModel.invalidate() - historyStore.dispatch(HistoryAction.ExitDeletionMode) + historyStore.dispatch(HistoryFragmentAction.ExitDeletionMode) } true } @@ -228,13 +228,13 @@ class HistoryFragment : LibraryPageFragment(), BackHandler { dialog.cancel() } setPositiveButton(R.string.delete_browsing_data_prompt_allow) { dialog: DialogInterface, _ -> - historyStore.dispatch(HistoryAction.EnterDeletionMode) + historyStore.dispatch(HistoryFragmentAction.EnterDeletionMode) lifecycleScope.launch { requireComponents.analytics.metrics.track(Event.HistoryAllItemsRemoved) requireComponents.core.historyStorage.deleteEverything() launch(Main) { viewModel.invalidate() - historyStore.dispatch(HistoryAction.ExitDeletionMode) + historyStore.dispatch(HistoryFragmentAction.ExitDeletionMode) } } diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryStore.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragmentStore.kt similarity index 52% rename from app/src/main/java/org/mozilla/fenix/library/history/HistoryStore.kt rename to app/src/main/java/org/mozilla/fenix/library/history/HistoryFragmentStore.kt index 1be5675ee..dd8a4db4f 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryStore.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragmentStore.kt @@ -18,20 +18,20 @@ import mozilla.components.lib.state.Store data class HistoryItem(val id: Int, val title: String, val url: String, val visitedAt: Long) /** - * The [Store] for holding the [HistoryState] and applying [HistoryAction]s. + * The [Store] for holding the [HistoryFragmentState] and applying [HistoryFragmentAction]s. */ -class HistoryStore(initialState: HistoryState) : - Store(initialState, ::historyStateReducer) +class HistoryFragmentStore(initialState: HistoryFragmentState) : + Store(initialState, ::historyStateReducer) /** * Actions to dispatch through the `HistoryStore` to modify `HistoryState` through the reducer. */ -sealed class HistoryAction : Action { - object ExitEditMode : HistoryAction() - data class AddItemForRemoval(val item: HistoryItem) : HistoryAction() - data class RemoveItemForRemoval(val item: HistoryItem) : HistoryAction() - object EnterDeletionMode : HistoryAction() - object ExitDeletionMode : HistoryAction() +sealed class HistoryFragmentAction : Action { + object ExitEditMode : HistoryFragmentAction() + data class AddItemForRemoval(val item: HistoryItem) : HistoryFragmentAction() + data class RemoveItemForRemoval(val item: HistoryItem) : HistoryFragmentAction() + object EnterDeletionMode : HistoryFragmentAction() + object ExitDeletionMode : HistoryFragmentAction() } /** @@ -39,7 +39,7 @@ sealed class HistoryAction : Action { * @property items List of HistoryItem to display * @property mode Current Mode of History */ -data class HistoryState(val items: List, val mode: Mode) : State { +data class HistoryFragmentState(val items: List, val mode: Mode) : State { sealed class Mode { open val selectedItems = emptySet() @@ -52,18 +52,18 @@ data class HistoryState(val items: List, val mode: Mode) : State { /** * The HistoryState Reducer. */ -fun historyStateReducer(state: HistoryState, action: HistoryAction): HistoryState { +private fun historyStateReducer(state: HistoryFragmentState, action: HistoryFragmentAction): HistoryFragmentState { return when (action) { - is HistoryAction.AddItemForRemoval -> - state.copy(mode = HistoryState.Mode.Editing(state.mode.selectedItems + action.item)) - is HistoryAction.RemoveItemForRemoval -> { + is HistoryFragmentAction.AddItemForRemoval -> + state.copy(mode = HistoryFragmentState.Mode.Editing(state.mode.selectedItems + action.item)) + is HistoryFragmentAction.RemoveItemForRemoval -> { val selected = state.mode.selectedItems - action.item state.copy( - mode = if (selected.isEmpty()) HistoryState.Mode.Normal else HistoryState.Mode.Editing(selected) + mode = if (selected.isEmpty()) HistoryFragmentState.Mode.Normal else HistoryFragmentState.Mode.Editing(selected) ) } - is HistoryAction.ExitEditMode -> state.copy(mode = HistoryState.Mode.Normal) - is HistoryAction.EnterDeletionMode -> state.copy(mode = HistoryState.Mode.Deleting) - is HistoryAction.ExitDeletionMode -> state.copy(mode = HistoryState.Mode.Normal) + is HistoryFragmentAction.ExitEditMode -> state.copy(mode = HistoryFragmentState.Mode.Normal) + is HistoryFragmentAction.EnterDeletionMode -> state.copy(mode = HistoryFragmentState.Mode.Deleting) + is HistoryFragmentAction.ExitDeletionMode -> state.copy(mode = HistoryFragmentState.Mode.Normal) } } diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryView.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryView.kt index a9bf6dfc5..b9b983d7d 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryView.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryView.kt @@ -57,7 +57,7 @@ class HistoryView( .inflate(R.layout.component_history, container, true) private var items: List = listOf() - var mode: HistoryState.Mode = HistoryState.Mode.Normal + var mode: HistoryFragmentState.Mode = HistoryFragmentState.Mode.Normal private set val historyAdapter = HistoryAdapter(interactor) @@ -71,10 +71,10 @@ class HistoryView( } } - fun update(state: HistoryState) { + fun update(state: HistoryFragmentState) { val oldMode = mode - view.progress_bar.isVisible = state.mode === HistoryState.Mode.Deleting + view.progress_bar.isVisible = state.mode === HistoryFragmentState.Mode.Deleting items = state.items mode = state.mode @@ -88,7 +88,7 @@ class HistoryView( } } - if (state.mode is HistoryState.Mode.Editing) { + if (state.mode is HistoryFragmentState.Mode.Editing) { val unselectedItems = oldMode.selectedItems - state.mode.selectedItems state.mode.selectedItems.union(unselectedItems).forEach { item -> @@ -97,9 +97,9 @@ class HistoryView( } when (val mode = state.mode) { - is HistoryState.Mode.Normal -> + is HistoryFragmentState.Mode.Normal -> setUiForNormalMode(context.getString(R.string.library_history)) - is HistoryState.Mode.Editing -> + is HistoryFragmentState.Mode.Editing -> setUiForSelectingMode(context.getString(R.string.history_multi_select_title, mode.selectedItems.size)) } } diff --git a/app/src/main/java/org/mozilla/fenix/library/history/viewholders/HistoryListItemViewHolder.kt b/app/src/main/java/org/mozilla/fenix/library/history/viewholders/HistoryListItemViewHolder.kt index 14851dea5..23234b092 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/viewholders/HistoryListItemViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/viewholders/HistoryListItemViewHolder.kt @@ -13,7 +13,7 @@ import org.mozilla.fenix.library.history.HistoryInteractor import org.mozilla.fenix.library.history.HistoryItem import org.mozilla.fenix.library.history.HistoryItemMenu import org.mozilla.fenix.library.history.HistoryItemTimeGroup -import org.mozilla.fenix.library.history.HistoryState +import org.mozilla.fenix.library.history.HistoryFragmentState class HistoryListItemViewHolder( view: View, @@ -40,14 +40,14 @@ class HistoryListItemViewHolder( item: HistoryItem, timeGroup: HistoryItemTimeGroup?, showDeleteButton: Boolean, - mode: HistoryState.Mode + mode: HistoryFragmentState.Mode ) { this.item = item itemView.history_layout.titleView.text = item.title itemView.history_layout.urlView.text = item.url - toggleDeleteButton(showDeleteButton, mode === HistoryState.Mode.Normal) + toggleDeleteButton(showDeleteButton, mode === HistoryFragmentState.Mode.Normal) val headerText = timeGroup?.humanReadable(itemView.context) toggleHeader(headerText) diff --git a/app/src/test/java/org/mozilla/fenix/library/history/HistoryControllerTest.kt b/app/src/test/java/org/mozilla/fenix/library/history/HistoryControllerTest.kt index a6609e1a8..d62f17386 100644 --- a/app/src/test/java/org/mozilla/fenix/library/history/HistoryControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/library/history/HistoryControllerTest.kt @@ -16,8 +16,8 @@ import org.junit.Test class HistoryControllerTest { private val historyItem = HistoryItem(0, "title", "url", 0.toLong()) - private val store: HistoryStore = mockk(relaxed = true) - private val state: HistoryState = mockk(relaxed = true) + private val store: HistoryFragmentStore = mockk(relaxed = true) + private val state: HistoryFragmentState = mockk(relaxed = true) @Before fun setUp() { @@ -28,7 +28,7 @@ class HistoryControllerTest { fun onPressHistoryItemInNormalMode() { var historyItemReceived: HistoryItem? = null - every { state.mode } returns HistoryState.Mode.Normal + every { state.mode } returns HistoryFragmentState.Mode.Normal val controller = DefaultHistoryController( store, @@ -44,7 +44,7 @@ class HistoryControllerTest { @Test fun onPressHistoryItemInEditMode() { - every { state.mode } returns HistoryState.Mode.Editing(setOf()) + every { state.mode } returns HistoryFragmentState.Mode.Editing(setOf()) val controller = DefaultHistoryController( store, @@ -57,13 +57,13 @@ class HistoryControllerTest { controller.handleSelect(historyItem) verify { - store.dispatch(HistoryAction.AddItemForRemoval(historyItem)) + store.dispatch(HistoryFragmentAction.AddItemForRemoval(historyItem)) } } @Test fun onPressSelectedHistoryItemInEditMode() { - every { state.mode } returns HistoryState.Mode.Editing(setOf(historyItem)) + every { state.mode } returns HistoryFragmentState.Mode.Editing(setOf(historyItem)) val controller = DefaultHistoryController( store, @@ -76,13 +76,13 @@ class HistoryControllerTest { controller.handleDeselect(historyItem) verify { - store.dispatch(HistoryAction.RemoveItemForRemoval(historyItem)) + store.dispatch(HistoryFragmentAction.RemoveItemForRemoval(historyItem)) } } @Test fun onBackPressedInNormalMode() { - every { state.mode } returns HistoryState.Mode.Normal + every { state.mode } returns HistoryFragmentState.Mode.Normal val controller = DefaultHistoryController(store, mockk(), mockk(), mockk(), mockk()) assertFalse(controller.handleBackPressed()) @@ -90,13 +90,13 @@ class HistoryControllerTest { @Test fun onBackPressedInEditMode() { - every { state.mode } returns HistoryState.Mode.Editing(setOf()) + every { state.mode } returns HistoryFragmentState.Mode.Editing(setOf()) val controller = DefaultHistoryController(store, mockk(), mockk(), mockk(), mockk()) assertTrue(controller.handleBackPressed()) verify { - store.dispatch(HistoryAction.ExitEditMode) + store.dispatch(HistoryFragmentAction.ExitEditMode) } } diff --git a/app/src/test/java/org/mozilla/fenix/library/history/HistoryStoreTest.kt b/app/src/test/java/org/mozilla/fenix/library/history/HistoryFragmentStoreTest.kt similarity index 51% rename from app/src/test/java/org/mozilla/fenix/library/history/HistoryStoreTest.kt rename to app/src/test/java/org/mozilla/fenix/library/history/HistoryFragmentStoreTest.kt index e696eb484..d1fa987fd 100644 --- a/app/src/test/java/org/mozilla/fenix/library/history/HistoryStoreTest.kt +++ b/app/src/test/java/org/mozilla/fenix/library/history/HistoryFragmentStoreTest.kt @@ -9,55 +9,55 @@ import org.junit.Assert.assertEquals import org.junit.Assert.assertNotSame import org.junit.Test -class HistoryStoreTest { +class HistoryFragmentStoreTest { private val historyItem = HistoryItem(0, "title", "url", 0.toLong()) private val newHistoryItem = HistoryItem(1, "title", "url", 0.toLong()) @Test fun exitEditMode() = runBlocking { val initialState = oneItemEditState() - val store = HistoryStore(initialState) + val store = HistoryFragmentStore(initialState) - store.dispatch(HistoryAction.ExitEditMode).join() + store.dispatch(HistoryFragmentAction.ExitEditMode).join() assertNotSame(initialState, store.state) - assertEquals(store.state.mode, HistoryState.Mode.Normal) + assertEquals(store.state.mode, HistoryFragmentState.Mode.Normal) } @Test fun itemAddedForRemoval() = runBlocking { val initialState = emptyDefaultState() - val store = HistoryStore(initialState) + val store = HistoryFragmentStore(initialState) - store.dispatch(HistoryAction.AddItemForRemoval(newHistoryItem)).join() + store.dispatch(HistoryFragmentAction.AddItemForRemoval(newHistoryItem)).join() assertNotSame(initialState, store.state) assertEquals( store.state.mode, - HistoryState.Mode.Editing(setOf(newHistoryItem)) + HistoryFragmentState.Mode.Editing(setOf(newHistoryItem)) ) } @Test fun removeItemForRemoval() = runBlocking { val initialState = twoItemEditState() - val store = HistoryStore(initialState) + val store = HistoryFragmentStore(initialState) - store.dispatch(HistoryAction.RemoveItemForRemoval(newHistoryItem)).join() + store.dispatch(HistoryFragmentAction.RemoveItemForRemoval(newHistoryItem)).join() assertNotSame(initialState, store.state) - assertEquals(store.state.mode, HistoryState.Mode.Editing(setOf(historyItem))) + assertEquals(store.state.mode, HistoryFragmentState.Mode.Editing(setOf(historyItem))) } - private fun emptyDefaultState(): HistoryState = HistoryState( + private fun emptyDefaultState(): HistoryFragmentState = HistoryFragmentState( items = listOf(), - mode = HistoryState.Mode.Normal + mode = HistoryFragmentState.Mode.Normal ) - private fun oneItemEditState(): HistoryState = HistoryState( + private fun oneItemEditState(): HistoryFragmentState = HistoryFragmentState( items = listOf(), - mode = HistoryState.Mode.Editing(setOf(historyItem)) + mode = HistoryFragmentState.Mode.Editing(setOf(historyItem)) ) - private fun twoItemEditState(): HistoryState = HistoryState( + private fun twoItemEditState(): HistoryFragmentState = HistoryFragmentState( items = listOf(), - mode = HistoryState.Mode.Editing(setOf(historyItem, newHistoryItem)) + mode = HistoryFragmentState.Mode.Editing(setOf(historyItem, newHistoryItem)) ) }