From dfd3e93d17d6b01994ddc3c8f8bb0b66ee9413ac Mon Sep 17 00:00:00 2001 From: Colin Lee Date: Thu, 28 Feb 2019 14:46:39 -0600 Subject: [PATCH] Fixes #745: Integrate Browser-Icons component for favicons --- app/build.gradle | 1 + .../mozilla/fenix/home/tabs/TabsAdapter.kt | 36 +++++++++++++++++-- app/src/main/res/layout/tab_list_row.xml | 2 +- buildSrc/src/main/java/Dependencies.kt | 1 + 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9cd45aa86..4368b5351 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -173,6 +173,7 @@ dependencies { implementation Deps.mozilla_browser_awesomebar implementation Deps.mozilla_feature_downloads implementation Deps.mozilla_browser_domains + implementation Deps.mozilla_browser_icons implementation Deps.mozilla_browser_engine_gecko_nightly implementation Deps.mozilla_browser_session implementation Deps.mozilla_browser_storage_sync diff --git a/app/src/main/java/org/mozilla/fenix/home/tabs/TabsAdapter.kt b/app/src/main/java/org/mozilla/fenix/home/tabs/TabsAdapter.kt index 2d8468a0d..5ab73e411 100644 --- a/app/src/main/java/org/mozilla/fenix/home/tabs/TabsAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/home/tabs/TabsAdapter.kt @@ -13,13 +13,24 @@ import androidx.recyclerview.widget.RecyclerView import io.reactivex.Observer import kotlinx.android.extensions.LayoutContainer import kotlinx.android.synthetic.main.tab_list_row.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Dispatchers.IO +import kotlinx.coroutines.Dispatchers.Main +import kotlinx.coroutines.Job +import kotlinx.coroutines.launch +import mozilla.components.browser.icons.BrowserIcons +import mozilla.components.browser.icons.IconRequest import org.mozilla.fenix.DefaultThemeManager import org.mozilla.fenix.R import org.mozilla.fenix.ext.increaseTapArea +import kotlin.coroutines.CoroutineContext class TabsAdapter(private val actionEmitter: Observer) : RecyclerView.Adapter() { + lateinit var job: Job + var sessions = listOf() set(value) { val diffResult = DiffUtil.calculateDiff(TabsDiffCallback(field, value), true) @@ -29,7 +40,17 @@ class TabsAdapter(private val actionEmitter: Observer) : override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val view = LayoutInflater.from(parent.context).inflate(viewType, parent, false) - return TabViewHolder(view, actionEmitter) + return TabViewHolder(view, actionEmitter, job) + } + + override fun onAttachedToRecyclerView(recyclerView: RecyclerView) { + super.onAttachedToRecyclerView(recyclerView) + job = Job() + } + + override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) { + super.onDetachedFromRecyclerView(recyclerView) + job.cancel() } override fun getItemViewType(position: Int) = TabViewHolder.LAYOUT_ID @@ -56,9 +77,13 @@ class TabsAdapter(private val actionEmitter: Observer) : private class TabViewHolder( val view: View, actionEmitter: Observer, + val job: Job, override val containerView: View? = view ) : - RecyclerView.ViewHolder(view), LayoutContainer { + RecyclerView.ViewHolder(view), LayoutContainer, CoroutineScope { + + override val coroutineContext: CoroutineContext + get() = Dispatchers.IO + job var session: SessionViewState? = null @@ -83,6 +108,13 @@ class TabsAdapter(private val actionEmitter: Observer) : fun updateUrl(url: String) { text_url.text = url + launch(IO) { + val bitmap = BrowserIcons(favicon_image.context) + .loadIcon(IconRequest(url)).await().bitmap + launch(Main) { + favicon_image.setImageBitmap(bitmap) + } + } } fun updateSelected(selected: Boolean) { diff --git a/app/src/main/res/layout/tab_list_row.xml b/app/src/main/res/layout/tab_list_row.xml index e81646e7f..0caaba7b3 100644 --- a/app/src/main/res/layout/tab_list_row.xml +++ b/app/src/main/res/layout/tab_list_row.xml @@ -63,7 +63,7 @@ android:layout_width="0dp" android:layout_height="100dp" android:background="@drawable/session_background" - android:contentDescription="TODO" + android:focusable="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index ecc2cf201..04abbbfce 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -66,6 +66,7 @@ object Deps { const val mozilla_browser_awesomebar = "org.mozilla.components:browser-awesomebar:${Versions.mozilla_android_components}" const val mozilla_browser_engine_gecko_nightly = "org.mozilla.components:browser-engine-gecko-nightly:${Versions.mozilla_android_components}" const val mozilla_browser_domains = "org.mozilla.components:browser-domains:${Versions.mozilla_android_components}" + const val mozilla_browser_icons = "org.mozilla.components:browser-icons:${Versions.mozilla_android_components}" const val mozilla_browser_search = "org.mozilla.components:browser-search:${Versions.mozilla_android_components}" const val mozilla_browser_session = "org.mozilla.components:browser-session:${Versions.mozilla_android_components}" const val mozilla_browser_tabstray = "org.mozilla.components:browser-tabstray:${Versions.mozilla_android_components}"