From 291df48c4e4b166582d49e5a5af43cea29a69f09 Mon Sep 17 00:00:00 2001 From: Sebastian Kaspari Date: Wed, 15 May 2019 10:59:07 -0400 Subject: [PATCH] Install the "icons" WebExtension to automatically load icons for every visited website. --- .../CollectionCreationTabListAdapter.kt | 2 +- .../java/org/mozilla/fenix/components/Core.kt | 45 +++++++++---------- .../org/mozilla/fenix/components/Utilities.kt | 6 --- .../ExceptionsListItemViewHolder.kt | 2 +- .../viewholders/TabInCollectionViewHolder.kt | 2 +- .../viewholders/TabViewHolder.kt | 2 +- .../library/bookmarks/BookmarkAdapter.kt | 3 +- .../viewholders/HistoryListItemViewHolder.kt | 2 +- .../search/awesomebar/AwesomeBarUIView.kt | 6 +-- .../SitePermissionsExceptionsFragment.kt | 4 +- 10 files changed, 32 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationTabListAdapter.kt b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationTabListAdapter.kt index be864892b..80c6fed86 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationTabListAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationTabListAdapter.kt @@ -140,7 +140,7 @@ class TabViewHolder( checkbox.setOnCheckedChangeListener(checkboxListener) launch(Dispatchers.IO) { - val bitmap = view.favicon_image.context.components.utils.icons + val bitmap = view.favicon_image.context.components.core.icons .loadIcon(IconRequest(tab.url)).await().bitmap launch(Dispatchers.Main) { view.favicon_image.setImageBitmap(bitmap) diff --git a/app/src/main/java/org/mozilla/fenix/components/Core.kt b/app/src/main/java/org/mozilla/fenix/components/Core.kt index 0e4169a6d..a8e775ab4 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Core.kt @@ -9,10 +9,11 @@ import android.content.res.Configuration import android.os.Bundle import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.async import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import mozilla.components.browser.engine.gecko.GeckoEngine import mozilla.components.browser.engine.gecko.fetch.GeckoViewFetchClient +import mozilla.components.browser.icons.BrowserIcons import mozilla.components.browser.session.SessionManager import mozilla.components.browser.session.storage.SessionStorage import mozilla.components.browser.storage.sync.PlacesBookmarksStorage @@ -25,6 +26,7 @@ import mozilla.components.concept.fetch.Client import mozilla.components.feature.session.HistoryDelegate import mozilla.components.lib.crash.handler.CrashHandlerService import org.mozilla.fenix.AppRequestInterceptor +import org.mozilla.fenix.ext.components import org.mozilla.fenix.test.Mockable import org.mozilla.fenix.utils.Settings import org.mozilla.geckoview.GeckoRuntime @@ -97,37 +99,34 @@ class Core(private val context: Context) { */ val sessionManager by lazy { SessionManager(engine).also { sessionManager -> - // Restore a previous, still active bundle. - GlobalScope.launch(Dispatchers.Main) { - val snapshot = async(Dispatchers.IO) { - sessionStorage.restore() - } + // Install the "icons" WebExtension to automatically load icons for every visited website. + icons.install(engine, sessionManager) - // There's an active bundle with a snapshot: Feed it into the SessionManager. - snapshot.await()?.let { - try { - val selected = sessionManager.selectedSession - sessionManager.restore(it) - selected?.let { - sessionManager.select(selected) - } - } catch (_: IllegalArgumentException) { - return@let - } + // Restore the previous state. + GlobalScope.launch(Dispatchers.Main) { + withContext(Dispatchers.IO) { + sessionStorage.restore() + }?.let { snapshot -> + sessionManager.restore(snapshot, updateSelection = (sessionManager.selectedSession == null)) } // Now that we have restored our previous state (if there's one) let's setup auto saving the state while // the app is used. - sessionStorage.apply { - autoSave(sessionManager) - .periodicallyInForeground(interval = 30, unit = TimeUnit.SECONDS) - .whenGoingToBackground() - .whenSessionsChange() - } + sessionStorage.autoSave(sessionManager) + .periodicallyInForeground(interval = 30, unit = TimeUnit.SECONDS) + .whenGoingToBackground() + .whenSessionsChange() } } } + /** + * Icons component for loading, caching and processing website icons. + */ + val icons by lazy { + BrowserIcons(context, context.components.core.client) + } + /** * The storage component to persist browsing history (with the exception of * private sessions). diff --git a/app/src/main/java/org/mozilla/fenix/components/Utilities.kt b/app/src/main/java/org/mozilla/fenix/components/Utilities.kt index f7051c6e0..01e58b075 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Utilities.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Utilities.kt @@ -5,12 +5,10 @@ package org.mozilla.fenix.components import android.content.Context -import mozilla.components.browser.icons.BrowserIcons import mozilla.components.browser.session.SessionManager import mozilla.components.feature.intent.IntentProcessor import mozilla.components.feature.search.SearchUseCases import mozilla.components.feature.session.SessionUseCases -import org.mozilla.fenix.ext.components import org.mozilla.fenix.test.Mockable /** @@ -34,8 +32,4 @@ class Utilities( val privateIntentProcessor by lazy { IntentProcessor(sessionUseCases, sessionManager, searchUseCases, context, isPrivate = true) } - - val icons by lazy { - BrowserIcons(context, context.components.core.client) - } } diff --git a/app/src/main/java/org/mozilla/fenix/exceptions/viewholders/ExceptionsListItemViewHolder.kt b/app/src/main/java/org/mozilla/fenix/exceptions/viewholders/ExceptionsListItemViewHolder.kt index 5a79a0a16..ff18e6db2 100644 --- a/app/src/main/java/org/mozilla/fenix/exceptions/viewholders/ExceptionsListItemViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/exceptions/viewholders/ExceptionsListItemViewHolder.kt @@ -50,7 +50,7 @@ class ExceptionsListItemViewHolder( private fun updateFavIcon(url: String) { launch(Dispatchers.IO) { - val bitmap = favicon.context.components.utils.icons + val bitmap = favicon.context.components.core.icons .loadIcon(IconRequest(url)).await().bitmap launch(Dispatchers.Main) { favicon.setImageBitmap(bitmap) diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabInCollectionViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabInCollectionViewHolder.kt index 9406b016c..700dbbb73 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabInCollectionViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabInCollectionViewHolder.kt @@ -78,7 +78,7 @@ class TabInCollectionViewHolder( collection_tab_hostname.text = tab.url.urlToTrimmedHost() collection_tab_title.text = tab.title launch(Dispatchers.IO) { - val bitmap = collection_tab_icon.context.components.utils.icons + val bitmap = collection_tab_icon.context.components.core.icons .loadIcon(IconRequest(tab.url)).await().bitmap launch(Dispatchers.Main) { collection_tab_icon.setImageBitmap(bitmap) diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt index 643475534..2cd21bd36 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt @@ -92,7 +92,7 @@ class TabViewHolder( hostname.text = tab.hostname tab_title.text = tab.title launch(Dispatchers.IO) { - val bitmap = favicon_image.context.components.utils.icons + val bitmap = favicon_image.context.components.core.icons .loadIcon(IconRequest(tab.url)).await().bitmap launch(Dispatchers.Main) { favicon_image.setImageBitmap(bitmap) diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt index 77edc7464..025568c79 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt @@ -17,7 +17,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch import mozilla.appservices.places.BookmarkRoot -import mozilla.components.browser.icons.BrowserIcons import mozilla.components.browser.icons.IconRequest import mozilla.components.browser.menu.BrowserMenu import mozilla.components.concept.storage.BookmarkNode @@ -196,7 +195,7 @@ class BookmarkAdapter(val emptyView: View, val actionEmitter: Observer