For #12797: Use measured height/width for loading a thumbnail
Using `onNextLayout` has the side-effect of showing the thumbnail with the tab.id from a recycled view. The root cause of needing that call is to retrieve the measured height/width from the view first before requesting. A simpler solution to avoid the complexity is to retrieve these values from the dimen resources. Co-authored-by: Gabriel Luong <gabriel.luong@gmail.com>master
parent
b483067bd9
commit
99354174a9
|
@ -7,11 +7,11 @@ package org.mozilla.fenix.tabtray
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.accessibility.AccessibilityNodeInfo
|
import android.view.accessibility.AccessibilityNodeInfo
|
||||||
import android.widget.ImageButton
|
import android.widget.ImageButton
|
||||||
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.annotation.VisibleForTesting
|
import androidx.annotation.VisibleForTesting
|
||||||
import androidx.appcompat.widget.AppCompatImageButton
|
import androidx.appcompat.widget.AppCompatImageButton
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.view.doOnNextLayout
|
|
||||||
import mozilla.components.browser.state.state.MediaState
|
import mozilla.components.browser.state.state.MediaState
|
||||||
import mozilla.components.browser.tabstray.TabViewHolder
|
import mozilla.components.browser.tabstray.TabViewHolder
|
||||||
import mozilla.components.browser.tabstray.thumbnail.TabThumbnailView
|
import mozilla.components.browser.tabstray.thumbnail.TabThumbnailView
|
||||||
|
@ -21,7 +21,7 @@ import mozilla.components.concept.tabstray.TabsTray
|
||||||
import mozilla.components.feature.media.ext.pauseIfPlaying
|
import mozilla.components.feature.media.ext.pauseIfPlaying
|
||||||
import mozilla.components.feature.media.ext.playIfPaused
|
import mozilla.components.feature.media.ext.playIfPaused
|
||||||
import mozilla.components.support.base.observer.Observable
|
import mozilla.components.support.base.observer.Observable
|
||||||
import mozilla.components.support.images.ext.loadIntoView
|
import mozilla.components.support.images.ImageLoadRequest
|
||||||
import mozilla.components.support.images.loader.ImageLoader
|
import mozilla.components.support.images.loader.ImageLoader
|
||||||
import mozilla.components.support.ktx.kotlin.tryGetHostFromUrl
|
import mozilla.components.support.ktx.kotlin.tryGetHostFromUrl
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
@ -32,6 +32,7 @@ import org.mozilla.fenix.ext.removeAndDisable
|
||||||
import org.mozilla.fenix.ext.removeTouchDelegate
|
import org.mozilla.fenix.ext.removeTouchDelegate
|
||||||
import org.mozilla.fenix.ext.showAndEnable
|
import org.mozilla.fenix.ext.showAndEnable
|
||||||
import org.mozilla.fenix.ext.toTab
|
import org.mozilla.fenix.ext.toTab
|
||||||
|
import kotlin.math.max
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A RecyclerView ViewHolder implementation for "tab" items.
|
* A RecyclerView ViewHolder implementation for "tab" items.
|
||||||
|
@ -73,10 +74,7 @@ class TabTrayViewHolder(
|
||||||
if (tab.thumbnail != null) {
|
if (tab.thumbnail != null) {
|
||||||
thumbnailView.setImageBitmap(tab.thumbnail)
|
thumbnailView.setImageBitmap(tab.thumbnail)
|
||||||
} else {
|
} else {
|
||||||
// Make sure we have the view's dimensions so we can load the image at the correct size
|
loadIntoThumbnailView(thumbnailView, tab.id)
|
||||||
thumbnailView.doOnNextLayout {
|
|
||||||
imageLoader.loadIntoView(thumbnailView, tab.id)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Media state
|
// Media state
|
||||||
|
@ -182,6 +180,14 @@ class TabTrayViewHolder(
|
||||||
closeView.context.getString(R.string.close_tab_title, title)
|
closeView.context.getString(R.string.close_tab_title, title)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun loadIntoThumbnailView(thumbnailView: ImageView, id: String) {
|
||||||
|
val thumbnailSize = max(
|
||||||
|
itemView.resources.getDimensionPixelSize(R.dimen.tab_tray_thumbnail_height),
|
||||||
|
itemView.resources.getDimensionPixelSize(R.dimen.tab_tray_thumbnail_width)
|
||||||
|
)
|
||||||
|
imageLoader.loadIntoView(thumbnailView, ImageLoadRequest(id, thumbnailSize))
|
||||||
|
}
|
||||||
|
|
||||||
internal fun updateAccessibilityRowIndex(item: View, newIndex: Int) {
|
internal fun updateAccessibilityRowIndex(item: View, newIndex: Int) {
|
||||||
item.setAccessibilityDelegate(object : View.AccessibilityDelegate() {
|
item.setAccessibilityDelegate(object : View.AccessibilityDelegate() {
|
||||||
override fun onInitializeAccessibilityNodeInfo(
|
override fun onInitializeAccessibilityNodeInfo(
|
||||||
|
|
|
@ -25,8 +25,8 @@
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
android:id="@+id/mozac_browser_tabstray_card"
|
android:id="@+id/mozac_browser_tabstray_card"
|
||||||
android:layout_width="92dp"
|
android:layout_width="@dimen/tab_tray_thumbnail_width"
|
||||||
android:layout_height="69dp"
|
android:layout_height="@dimen/tab_tray_thumbnail_height"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
android:backgroundTint="?tabTrayThumbnailItemBackground"
|
android:backgroundTint="?tabTrayThumbnailItemBackground"
|
||||||
|
|
|
@ -156,6 +156,8 @@
|
||||||
|
|
||||||
<!-- Tabs Tray -->
|
<!-- Tabs Tray -->
|
||||||
<dimen name="tab_tray_top_offset">40dp</dimen>
|
<dimen name="tab_tray_top_offset">40dp</dimen>
|
||||||
|
<dimen name="tab_tray_thumbnail_width">92dp</dimen>
|
||||||
|
<dimen name="tab_tray_thumbnail_height">69dp</dimen>
|
||||||
|
|
||||||
<!-- Saved Logins Fragment -->
|
<!-- Saved Logins Fragment -->
|
||||||
<dimen name="saved_logins_sort_menu_dropdown_chevron_icon_margin_start">10dp</dimen>
|
<dimen name="saved_logins_sort_menu_dropdown_chevron_icon_margin_start">10dp</dimen>
|
||||||
|
|
Loading…
Reference in New Issue