1
0
Fork 0
fenix/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt

269 lines
8.4 KiB
Kotlin

/* 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.home.sessioncontrol
import mozilla.components.feature.tab.collections.Tab
import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.feature.top.sites.TopSite
import org.mozilla.fenix.components.tips.Tip
/**
* Interface for tab related actions in the [SessionControlInteractor].
*/
interface TabSessionInteractor {
/**
* Shows the Private Browsing Learn More page in a new tab. Called when a user clicks on the
* "Common myths about private browsing" link in private mode.
*/
fun onPrivateBrowsingLearnMoreClicked()
}
/**
* Interface for collection related actions in the [SessionControlInteractor].
*/
interface CollectionInteractor {
/**
* Shows the Collection Creation fragment for selecting the tabs to add to the given tab
* collection. Called when a user taps on the "Add tab" collection menu item.
*
* @param collection The collection of tabs that will be modified.
*/
fun onCollectionAddTabTapped(collection: TabCollection)
/**
* Opens the given tab. Called when a user clicks on a tab in the tab collection.
*
* @param tab The tab to open from the tab collection.
*/
fun onCollectionOpenTabClicked(tab: Tab)
/**
* Opens all the tabs in a given tab collection. Called when a user taps on the "Open tabs"
* collection menu item.
*
* @param collection The collection of tabs to open.
*/
fun onCollectionOpenTabsTapped(collection: TabCollection)
/**
* Removes the given tab from the given tab collection. Called when a user swipes to remove a
* tab or clicks on the tab close button.
*
* @param collection The collection of tabs that will be modified.
* @param tab The tab to remove from the tab collection.
*/
fun onCollectionRemoveTab(collection: TabCollection, tab: Tab, wasSwiped: Boolean)
/**
* Shares the tabs in the given tab collection. Called when a user clicks on the Collection
* Share button.
*
* @param collection The collection of tabs to share.
*/
fun onCollectionShareTabsClicked(collection: TabCollection)
/**
* Shows a prompt for deleting the given tab collection. Called when a user taps on the
* "Delete collection" collection menu item.
*
* @param collection The collection of tabs to delete.
*/
fun onDeleteCollectionTapped(collection: TabCollection)
/**
* Shows the Collection Creation fragment for renaming the given tab collection. Called when a
* user taps on the "Rename collection" collection menu item.
*
* @param collection The collection of tabs to rename.
*/
fun onRenameCollectionTapped(collection: TabCollection)
/**
* Toggles expanding or collapsing the given tab collection. Called when a user clicks on a
* [CollectionViewHolder].
*
* @param collection The collection of tabs that will be collapsed.
* @param expand True if the given tab collection should be expanded or collapse if false.
*/
fun onToggleCollectionExpanded(collection: TabCollection, expand: Boolean)
/**
* Opens the collection creator
*/
fun onAddTabsToCollectionTapped()
/**
* User has removed the collections placeholder from home.
*/
fun onRemoveCollectionsPlaceholder()
}
interface ToolbarInteractor {
/**
* Navigates to browser with clipboard text.
*/
fun onPasteAndGo(clipboardText: String)
/**
* Navigates to search with clipboard text.
*/
fun onPaste(clipboardText: String)
}
/**
* Interface for onboarding related actions in the [SessionControlInteractor].
*/
interface OnboardingInteractor {
/**
* Hides the onboarding and navigates to Search. Called when a user clicks on the "Start Browsing" button.
*/
fun onStartBrowsingClicked()
/**
* Hides the onboarding and navigates to Settings. Called when a user clicks on the "Open settings" button.
*/
fun onOpenSettingsClicked()
/**
* Opens a custom tab to what's new url. Called when a user clicks on the "Get answers here" link.
*/
fun onWhatsNewGetAnswersClicked()
/**
* Opens a custom tab to privacy notice url. Called when a user clicks on the "read our privacy notice" button.
*/
fun onReadPrivacyNoticeClicked()
}
interface TipInteractor {
/**
* Dismisses the tip view adapter
*/
fun onCloseTip(tip: Tip)
}
/**
* Interface for top site related actions in the [SessionControlInteractor].
*/
interface TopSiteInteractor {
/**
* Opens the given top site in private mode. Called when an user clicks on the "Open in private
* tab" top site menu item.
*
* @param topSite The top site that will be open in private mode.
*/
fun onOpenInPrivateTabClicked(topSite: TopSite)
/**
* Removes the given top site. Called when an user clicks on the "Remove" top site menu item.
*
* @param topSite The top site that will be removed.
*/
fun onRemoveTopSiteClicked(topSite: TopSite)
/**
* Selects the given top site. Called when a user clicks on a top site.
*
* @param url The URL of the top site.
* @param isDefault Whether or not the top site is a default one.
*/
fun onSelectTopSite(url: String, isDefault: Boolean)
}
/**
* Interactor for the Home screen.
* Provides implementations for the CollectionInteractor, OnboardingInteractor,
* TabSessionInteractor and TopSiteInteractor.
*/
@SuppressWarnings("TooManyFunctions")
class SessionControlInteractor(
private val controller: SessionControlController
) : CollectionInteractor, OnboardingInteractor, TopSiteInteractor, TipInteractor,
TabSessionInteractor, ToolbarInteractor {
override fun onCollectionAddTabTapped(collection: TabCollection) {
controller.handleCollectionAddTabTapped(collection)
}
override fun onCollectionOpenTabClicked(tab: Tab) {
controller.handleCollectionOpenTabClicked(tab)
}
override fun onCollectionOpenTabsTapped(collection: TabCollection) {
controller.handleCollectionOpenTabsTapped(collection)
}
override fun onCollectionRemoveTab(collection: TabCollection, tab: Tab, wasSwiped: Boolean) {
controller.handleCollectionRemoveTab(collection, tab, wasSwiped)
}
override fun onCollectionShareTabsClicked(collection: TabCollection) {
controller.handleCollectionShareTabsClicked(collection)
}
override fun onDeleteCollectionTapped(collection: TabCollection) {
controller.handleDeleteCollectionTapped(collection)
}
override fun onOpenInPrivateTabClicked(topSite: TopSite) {
controller.handleOpenInPrivateTabClicked(topSite)
}
override fun onRemoveTopSiteClicked(topSite: TopSite) {
controller.handleRemoveTopSiteClicked(topSite)
}
override fun onRenameCollectionTapped(collection: TabCollection) {
controller.handleRenameCollectionTapped(collection)
}
override fun onSelectTopSite(url: String, isDefault: Boolean) {
controller.handleSelectTopSite(url, isDefault)
}
override fun onStartBrowsingClicked() {
controller.handleStartBrowsingClicked()
}
override fun onOpenSettingsClicked() {
controller.handleOpenSettingsClicked()
}
override fun onWhatsNewGetAnswersClicked() {
controller.handleWhatsNewGetAnswersClicked()
}
override fun onReadPrivacyNoticeClicked() {
controller.handleReadPrivacyNoticeClicked()
}
override fun onToggleCollectionExpanded(collection: TabCollection, expand: Boolean) {
controller.handleToggleCollectionExpanded(collection, expand)
}
override fun onAddTabsToCollectionTapped() {
controller.handleCreateCollection()
}
override fun onCloseTip(tip: Tip) {
controller.handleCloseTip(tip)
}
override fun onPrivateBrowsingLearnMoreClicked() {
controller.handlePrivateBrowsingLearnMoreClicked()
}
override fun onPasteAndGo(clipboardText: String) {
controller.handlePasteAndGo(clipboardText)
}
override fun onPaste(clipboardText: String) {
controller.handlePaste(clipboardText)
}
override fun onRemoveCollectionsPlaceholder() {
controller.handleRemoveCollectionsPlaceholder()
}
}