Fixes #745: Integrate Browser-Icons component for favicons
parent
77189a00a0
commit
dfd3e93d17
|
@ -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
|
||||
|
|
|
@ -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<TabsAction>) :
|
||||
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
|
||||
lateinit var job: Job
|
||||
|
||||
var sessions = listOf<SessionViewState>()
|
||||
set(value) {
|
||||
val diffResult = DiffUtil.calculateDiff(TabsDiffCallback(field, value), true)
|
||||
|
@ -29,7 +40,17 @@ class TabsAdapter(private val actionEmitter: Observer<TabsAction>) :
|
|||
|
||||
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<TabsAction>) :
|
|||
private class TabViewHolder(
|
||||
val view: View,
|
||||
actionEmitter: Observer<TabsAction>,
|
||||
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<TabsAction>) :
|
|||
|
||||
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) {
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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}"
|
||||
|
|
Loading…
Reference in New Issue