From 499aa858b2f680f40564e3d7a21664a0efe8783d Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Fri, 2 Apr 2021 18:31:37 -0400 Subject: [PATCH] Issue #18774: Move SelectionInteractor to new package The interactor and holder are useful outside of the `library` package, so let's move it up a package level for other components. --- .../fenix/library/LibrarySiteItemView.kt | 30 ++----------------- .../bookmarks/BookmarkFragmentStore.kt | 2 +- .../fenix/library/bookmarks/BookmarkView.kt | 2 +- .../library/downloads/DownloadAdapter.kt | 2 +- .../fenix/library/downloads/DownloadView.kt | 2 +- .../DownloadsListItemViewHolder.kt | 2 +- .../fenix/library/history/HistoryAdapter.kt | 2 +- .../fenix/library/history/HistoryView.kt | 2 +- .../viewholders/HistoryListItemViewHolder.kt | 2 +- .../fenix/selection/SelectionHolder.kt | 12 ++++++++ .../fenix/selection/SelectionInteractor.kt | 29 ++++++++++++++++++ 11 files changed, 51 insertions(+), 36 deletions(-) create mode 100644 app/src/main/java/org/mozilla/fenix/selection/SelectionHolder.kt create mode 100644 app/src/main/java/org/mozilla/fenix/selection/SelectionInteractor.kt diff --git a/app/src/main/java/org/mozilla/fenix/library/LibrarySiteItemView.kt b/app/src/main/java/org/mozilla/fenix/library/LibrarySiteItemView.kt index c444c0489e..67ade043df 100644 --- a/app/src/main/java/org/mozilla/fenix/library/LibrarySiteItemView.kt +++ b/app/src/main/java/org/mozilla/fenix/library/LibrarySiteItemView.kt @@ -19,34 +19,8 @@ import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.increaseTapArea import org.mozilla.fenix.ext.loadIntoView - -/** - * Interactor for items that can be selected on the bookmarks and history screens. - */ -interface SelectionInteractor { - /** - * Called when an item is tapped to open it. - * @param item the tapped item to open. - */ - fun open(item: T) - - /** - * Called when an item is long pressed and selection mode is started, - * or when selection mode has already started an an item is tapped. - * @param item the item to select. - */ - fun select(item: T) - - /** - * Called when a selected item is tapped in selection mode and should no longer be selected. - * @param item the item to deselect. - */ - fun deselect(item: T) -} - -interface SelectionHolder { - val selectedItems: Set -} +import org.mozilla.fenix.selection.SelectionHolder +import org.mozilla.fenix.selection.SelectionInteractor class LibrarySiteItemView @JvmOverloads constructor( context: Context, diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStore.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStore.kt index da5a14ae28..26901ddebf 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStore.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStore.kt @@ -9,7 +9,7 @@ import mozilla.components.concept.storage.BookmarkNode import mozilla.components.lib.state.Action import mozilla.components.lib.state.State import mozilla.components.lib.state.Store -import org.mozilla.fenix.library.SelectionHolder +import org.mozilla.fenix.selection.SelectionHolder class BookmarkFragmentStore( initialState: BookmarkFragmentState diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkView.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkView.kt index 5887a871d1..6c581a8f8c 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkView.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkView.kt @@ -16,7 +16,7 @@ import mozilla.components.support.base.feature.UserInteractionHandler import org.mozilla.fenix.NavGraphDirections import org.mozilla.fenix.R import org.mozilla.fenix.library.LibraryPageView -import org.mozilla.fenix.library.SelectionInteractor +import org.mozilla.fenix.selection.SelectionInteractor /** * Interface for the Bookmarks view. diff --git a/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadAdapter.kt b/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadAdapter.kt index 0430530495..a24ccef52b 100644 --- a/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadAdapter.kt @@ -8,7 +8,7 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView -import org.mozilla.fenix.library.SelectionHolder +import org.mozilla.fenix.selection.SelectionHolder import org.mozilla.fenix.library.downloads.viewholders.DownloadsListItemViewHolder class DownloadAdapter( diff --git a/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadView.kt b/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadView.kt index 82ad310b19..b122ef8f04 100644 --- a/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadView.kt +++ b/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadView.kt @@ -17,7 +17,7 @@ import kotlinx.android.synthetic.main.component_history.view.swipe_refresh import mozilla.components.support.base.feature.UserInteractionHandler import org.mozilla.fenix.R import org.mozilla.fenix.library.LibraryPageView -import org.mozilla.fenix.library.SelectionInteractor +import org.mozilla.fenix.selection.SelectionInteractor /** * Interface for the DownloadViewInteractor. This interface is implemented by objects that want diff --git a/app/src/main/java/org/mozilla/fenix/library/downloads/viewholders/DownloadsListItemViewHolder.kt b/app/src/main/java/org/mozilla/fenix/library/downloads/viewholders/DownloadsListItemViewHolder.kt index 46e76067dc..5a80e37198 100644 --- a/app/src/main/java/org/mozilla/fenix/library/downloads/viewholders/DownloadsListItemViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/library/downloads/viewholders/DownloadsListItemViewHolder.kt @@ -11,7 +11,7 @@ import kotlinx.android.synthetic.main.download_list_item.view.* import kotlinx.android.synthetic.main.library_site_item.view.* import mozilla.components.feature.downloads.toMegabyteOrKilobyteString import org.mozilla.fenix.R -import org.mozilla.fenix.library.SelectionHolder +import org.mozilla.fenix.selection.SelectionHolder import org.mozilla.fenix.library.downloads.DownloadInteractor import org.mozilla.fenix.library.downloads.DownloadItem import org.mozilla.fenix.ext.getIcon 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 e82bac914e..32b43b2210 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 @@ -11,7 +11,7 @@ import android.view.ViewGroup import androidx.paging.PagedListAdapter import androidx.recyclerview.widget.DiffUtil import org.mozilla.fenix.R -import org.mozilla.fenix.library.SelectionHolder +import org.mozilla.fenix.selection.SelectionHolder import org.mozilla.fenix.library.history.viewholders.HistoryListItemViewHolder import java.util.Calendar import java.util.Date 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 3bfb5076a0..5afbdc3d6e 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 @@ -17,7 +17,7 @@ import mozilla.components.support.base.feature.UserInteractionHandler import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.library.LibraryPageView -import org.mozilla.fenix.library.SelectionInteractor +import org.mozilla.fenix.selection.SelectionInteractor import org.mozilla.fenix.theme.ThemeManager /** 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 82a6e0eaa0..2198713a90 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 @@ -15,7 +15,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.hideAndDisable import org.mozilla.fenix.ext.showAndEnable -import org.mozilla.fenix.library.SelectionHolder +import org.mozilla.fenix.selection.SelectionHolder import org.mozilla.fenix.library.history.HistoryFragmentState import org.mozilla.fenix.library.history.HistoryInteractor import org.mozilla.fenix.library.history.HistoryItem diff --git a/app/src/main/java/org/mozilla/fenix/selection/SelectionHolder.kt b/app/src/main/java/org/mozilla/fenix/selection/SelectionHolder.kt new file mode 100644 index 0000000000..fe2b40d73a --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/selection/SelectionHolder.kt @@ -0,0 +1,12 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.selection + +/** + * Contains the selection of items added or removed using the [SelectionInteractor]. + */ +interface SelectionHolder { + val selectedItems: Set +} diff --git a/app/src/main/java/org/mozilla/fenix/selection/SelectionInteractor.kt b/app/src/main/java/org/mozilla/fenix/selection/SelectionInteractor.kt new file mode 100644 index 0000000000..320bf1e04d --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/selection/SelectionInteractor.kt @@ -0,0 +1,29 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.selection + +/** + * Interactor for items that can be selected on the bookmarks and history screens. + */ +interface SelectionInteractor { + /** + * Called when an item is tapped to open it. + * @param item the tapped item to open. + */ + fun open(item: T) + + /** + * Called when an item is long pressed and selection mode is started, + * or when selection mode has already started an an item is tapped. + * @param item the item to select. + */ + fun select(item: T) + + /** + * Called when a selected item is tapped in selection mode and should no longer be selected. + * @param item the item to deselect. + */ + fun deselect(item: T) +}