summaryrefslogtreecommitdiffstats
path: root/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/bookmarks/BookmarksFeature.kt
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/bookmarks/BookmarksFeature.kt')
-rw-r--r--mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/bookmarks/BookmarksFeature.kt59
1 files changed, 59 insertions, 0 deletions
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/bookmarks/BookmarksFeature.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/bookmarks/BookmarksFeature.kt
new file mode 100644
index 0000000000..79af88ea7e
--- /dev/null
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/bookmarks/BookmarksFeature.kt
@@ -0,0 +1,59 @@
+/* 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.bookmarks
+
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.launch
+import mozilla.components.concept.storage.BookmarkNode
+import mozilla.components.support.base.feature.LifecycleAwareFeature
+import org.mozilla.fenix.components.AppStore
+import org.mozilla.fenix.components.appstate.AppAction
+import org.mozilla.fenix.components.bookmarks.BookmarksUseCase
+import org.mozilla.fenix.home.HomeFragment
+
+/**
+ * View-bound feature that retrieves a list of [BookmarkNode]s and dispatches
+ * updates to the [AppStore].
+ *
+ * @param appStore the [AppStore] that holds the state of the [HomeFragment].
+ * @param bookmarksUseCase the [BookmarksUseCase] for retrieving the list of bookmarks from storage.
+ * @param scope the [CoroutineScope] used to fetch the bookmarks list
+ * @param ioDispatcher the [CoroutineDispatcher] for performing read/write operations.
+ */
+class BookmarksFeature(
+ private val appStore: AppStore,
+ private val bookmarksUseCase: BookmarksUseCase,
+ private val scope: CoroutineScope,
+ private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO,
+) : LifecycleAwareFeature {
+ private var job: Job? = null
+
+ override fun start() {
+ job = scope.launch(ioDispatcher) {
+ val bookmarks = bookmarksUseCase.retrieveRecentBookmarks()
+ appStore.dispatch(AppAction.BookmarksChange(bookmarks))
+ }
+ }
+
+ override fun stop() {
+ job?.cancel()
+ }
+}
+
+/**
+ * The simple metadata of a bookmark.
+ *
+ * @property title The title of the bookmark.
+ * @property url The url of the bookmark.
+ * @property previewImageUrl A preview image of the page (a.k.a. the hero image), if available.
+ */
+data class Bookmark(
+ val title: String? = null,
+ val url: String? = null,
+ val previewImageUrl: String? = null,
+)