/* 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.components.appstate import mozilla.components.feature.tab.collections.TabCollection import mozilla.components.feature.top.sites.TopSite import mozilla.components.lib.crash.Crash.NativeCodeCrash import mozilla.components.lib.state.Action import mozilla.components.service.pocket.PocketStory import mozilla.components.service.pocket.PocketStory.PocketSponsoredStory import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.gleanplumb.Message import org.mozilla.fenix.gleanplumb.MessagingState import org.mozilla.fenix.home.Mode import org.mozilla.fenix.home.pocket.PocketRecommendedStoriesCategory import org.mozilla.fenix.home.pocket.PocketRecommendedStoriesSelectedCategory import org.mozilla.fenix.home.recentbookmarks.RecentBookmark import org.mozilla.fenix.home.recentsyncedtabs.RecentSyncedTab import org.mozilla.fenix.home.recentsyncedtabs.RecentSyncedTabState import org.mozilla.fenix.home.recenttabs.RecentTab import org.mozilla.fenix.home.recentvisits.RecentlyVisitedItem import org.mozilla.fenix.library.history.PendingDeletionHistory import org.mozilla.fenix.wallpapers.Wallpaper /** * [Action] implementation related to [AppStore]. */ sealed class AppAction : Action { data class UpdateInactiveExpanded(val expanded: Boolean) : AppAction() /** * Updates whether the first frame of the homescreen has been [drawn]. */ data class UpdateFirstFrameDrawn(val drawn: Boolean) : AppAction() data class AddNonFatalCrash(val crash: NativeCodeCrash) : AppAction() data class RemoveNonFatalCrash(val crash: NativeCodeCrash) : AppAction() object RemoveAllNonFatalCrashes : AppAction() data class Change( val topSites: List, val mode: Mode, val collections: List, val showCollectionPlaceholder: Boolean, val recentTabs: List, val recentBookmarks: List, val recentHistory: List, val recentSyncedTabState: RecentSyncedTabState, ) : AppAction() data class CollectionExpanded(val collection: TabCollection, val expand: Boolean) : AppAction() data class CollectionsChange(val collections: List) : AppAction() data class ModeChange(val mode: Mode) : AppAction() data class TopSitesChange(val topSites: List) : AppAction() data class RecentTabsChange(val recentTabs: List) : AppAction() data class RemoveRecentTab(val recentTab: RecentTab) : AppAction() data class RecentBookmarksChange(val recentBookmarks: List) : AppAction() data class RemoveRecentBookmark(val recentBookmark: RecentBookmark) : AppAction() data class RecentHistoryChange(val recentHistory: List) : AppAction() data class RemoveRecentHistoryHighlight(val highlightUrl: String) : AppAction() data class DisbandSearchGroupAction(val searchTerm: String) : AppAction() /** * Indicates the given [categoryName] was selected by the user. */ data class SelectPocketStoriesCategory(val categoryName: String) : AppAction() /** * Indicates the given [categoryName] was deselected by the user. */ data class DeselectPocketStoriesCategory(val categoryName: String) : AppAction() /** * Indicates the given [storiesShown] were seen by the user. */ data class PocketStoriesShown(val storiesShown: List) : AppAction() /** * Cleans all in-memory data about Pocket stories and categories. */ object PocketStoriesClean : AppAction() /** * Replaces the current list of Pocket sponsored stories. */ data class PocketSponsoredStoriesChange(val sponsoredStories: List) : AppAction() /** * Adds a set of items marked for removal to the app state, to be hidden in the UI. */ data class AddPendingDeletionSet(val historyItems: Set) : AppAction() /** * Removes a set of items, previously marked for removal, to be displayed again in the UI. */ data class UndoPendingDeletionSet(val historyItems: Set) : AppAction() /** * Replaces the list of available Pocket recommended stories categories. */ data class PocketStoriesCategoriesChange(val storiesCategories: List) : AppAction() /** * Restores the list of Pocket recommended stories categories selections. */ data class PocketStoriesCategoriesSelectionsChange( val storiesCategories: List, val categoriesSelected: List, ) : AppAction() object RemoveCollectionsPlaceholder : AppAction() /** * Updates the [RecentSyncedTabState] with the given [state]. */ data class RecentSyncedTabStateChange(val state: RecentSyncedTabState) : AppAction() /** * Add a [RecentSyncedTab] url to the homescreen blocklist and remove it * from the recent synced tabs list. */ data class RemoveRecentSyncedTab(val syncedTab: RecentSyncedTab) : AppAction() /** * [Action]s related to interactions with the Messaging Framework. */ sealed class MessagingAction : AppAction() { /** * Restores the [Message] state from the storage. */ object Restore : MessagingAction() /** * Evaluates if a new messages should be shown to users. */ object Evaluate : MessagingAction() /** * Updates [MessagingState.messageToShow] with the given [message]. */ data class UpdateMessageToShow(val message: Message) : MessagingAction() /** * Updates [MessagingState.messageToShow] with the given [message]. */ object ConsumeMessageToShow : MessagingAction() /** * Updates [MessagingState.messages] with the given [messages]. */ data class UpdateMessages(val messages: List) : MessagingAction() /** * Indicates the given [message] was clicked. */ data class MessageClicked(val message: Message) : MessagingAction() /** * Indicates the given [message] was dismissed. */ data class MessageDismissed(val message: Message) : MessagingAction() } /** * [Action]s related to interactions with the wallpapers feature. */ sealed class WallpaperAction : AppAction() { /** * Indicates that a different [wallpaper] was selected. */ data class UpdateCurrentWallpaper(val wallpaper: Wallpaper) : WallpaperAction() /** * Indicates that the list of potential wallpapers has changed. */ data class UpdateAvailableWallpapers(val wallpapers: List) : WallpaperAction() /** * Indicates a change in the download state of a wallpaper. Note that this is meant to be * used for full size images, not thumbnails. * * @property wallpaper The wallpaper that is being updated. * @property imageState The updated image state for the wallpaper. */ data class UpdateWallpaperDownloadState( val wallpaper: Wallpaper, val imageState: Wallpaper.ImageFileState, ) : WallpaperAction() } }