diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index 00234f487..baff4bd40 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -35,6 +35,7 @@ import mozilla.components.browser.session.runWithSessionIdOrSelected import mozilla.components.browser.state.action.ContentAction import mozilla.components.browser.state.state.content.DownloadState import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.browser.thumbnails.BrowserThumbnails import mozilla.components.concept.engine.prompt.ShareData import mozilla.components.feature.accounts.FxaCapability import mozilla.components.feature.accounts.FxaWebChannelFeature @@ -126,6 +127,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session private val appLinksFeature = ViewBoundFeatureWrapper() private val promptsFeature = ViewBoundFeatureWrapper() private val findInPageIntegration = ViewBoundFeatureWrapper() + private val thumbnailsFeature = ViewBoundFeatureWrapper() private val toolbarIntegration = ViewBoundFeatureWrapper() private val sitePermissionsFeature = ViewBoundFeatureWrapper() private val fullScreenFeature = ViewBoundFeatureWrapper() @@ -230,6 +232,12 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session lifecycleOwner = viewLifecycleOwner ) + thumbnailsFeature.set( + feature = BrowserThumbnails(context, view.engineView, store), + owner = this, + view = view + ) + toolbarIntegration.set( feature = browserToolbarView.toolbarIntegration, owner = this, 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 a68041fae..73a54dec8 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Core.kt @@ -22,6 +22,7 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.store.BrowserStore import mozilla.components.browser.storage.sync.PlacesBookmarksStorage import mozilla.components.browser.storage.sync.PlacesHistoryStorage +import mozilla.components.browser.thumbnails.ThumbnailsMiddleware import mozilla.components.browser.thumbnails.storage.ThumbnailStorage import mozilla.components.concept.engine.DefaultSettings import mozilla.components.concept.engine.Engine @@ -107,7 +108,8 @@ class Core(private val context: Context) { middleware = listOf( MediaMiddleware(context, MediaService::class.java), DownloadMiddleware(context, DownloadService::class.java), - ReaderViewMiddleware() + ReaderViewMiddleware(), + ThumbnailsMiddleware(thumbnailStorage) ) ) } diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt index 66c223285..c7f07c465 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt @@ -39,8 +39,11 @@ class TabTrayViewHolder( ) : TabViewHolder(itemView) { private val iconView: ImageView? = itemView.findViewById(R.id.mozac_browser_tabstray_icon) private val titleView: TextView = itemView.findViewById(R.id.mozac_browser_tabstray_title) - private val closeView: AppCompatImageButton = itemView.findViewById(R.id.mozac_browser_tabstray_close) - private val thumbnailView: TabThumbnailView = itemView.findViewById(R.id.mozac_browser_tabstray_thumbnail) + private val closeView: AppCompatImageButton = + itemView.findViewById(R.id.mozac_browser_tabstray_close) + private val thumbnailView: TabThumbnailView = + itemView.findViewById(R.id.mozac_browser_tabstray_thumbnail) + @VisibleForTesting internal val urlView: TextView? = itemView.findViewById(R.id.mozac_browser_tabstray_url) private val playPauseButtonView: ImageButton = itemView.findViewById(R.id.play_pause_button) @@ -63,8 +66,16 @@ class TabTrayViewHolder( // Drawables and theme updateBackgroundColor(isSelected2) - thumbnailView.setImageBitmap(tab.thumbnail) - iconView?.setImageBitmap(tab.icon) + + if (tab.thumbnail != null) { + thumbnailView.setImageBitmap(tab.thumbnail) + thumbnailView.visibility = View.VISIBLE + iconView?.visibility = View.INVISIBLE + } else { + iconView?.setImageBitmap(tab.icon) + thumbnailView.visibility = View.INVISIBLE + iconView?.visibility = View.VISIBLE + } // Media state playPauseButtonView.increaseTapArea(PLAY_PAUSE_BUTTON_EXTRA_DPS) @@ -139,6 +150,7 @@ class TabTrayViewHolder( } titleView.text = title } + private fun updateUrl(tab: Tab) { // Truncate to MAX_URI_LENGTH to prevent the UI from locking up for // extremely large URLs such as data URIs or bookmarklets. The same diff --git a/app/src/main/res/layout/tab_tray_item.xml b/app/src/main/res/layout/tab_tray_item.xml index d3c642678..beb08d314 100644 --- a/app/src/main/res/layout/tab_tray_item.xml +++ b/app/src/main/res/layout/tab_tray_item.xml @@ -12,33 +12,34 @@ android:id="@+id/play_pause_button" android:layout_width="24dp" android:layout_height="24dp" + android:layout_marginStart="80dp" + android:layout_marginTop="4dp" android:background="?attr/selectableItemBackgroundBorderless" android:contentDescription="@string/mozac_feature_media_notification_action_pause" android:elevation="10dp" android:visibility="gone" - android:layout_marginTop="4dp" - app:layout_constraintTop_toTopOf="parent" - android:layout_marginStart="80dp" app:layout_constraintStart_toStartOf="@id/mozac_browser_tabstray_card" + app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/play_with_background" /> + app:layout_constraintTop_toTopOf="parent"> + android:layout_marginTop="20dp" + android:importantForAccessibility="no" + android:visibility="invisible" /> @@ -71,11 +72,11 @@ android:layout_alignParentTop="true" android:ellipsize="end" android:lines="1" - android:textSize="14sp" android:paddingStart="16dp" android:textColor="@color/tab_tray_item_url_normal_theme" - app:layout_constraintHorizontal_bias="0.0" + android:textSize="14sp" app:layout_constraintEnd_toStartOf="@id/mozac_browser_tabstray_close" + app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toEndOf="@id/mozac_browser_tabstray_card" app:layout_constraintTop_toBottomOf="@id/mozac_browser_tabstray_title" /> @@ -83,12 +84,12 @@ android:id="@+id/mozac_browser_tabstray_close" android:layout_width="44dp" android:layout_height="match_parent" - app:layout_constraintHorizontal_bias="0.0" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" - android:tint="@color/tab_tray_item_text_normal_theme" - android:contentDescription="@string/close_tab" android:background="?android:attr/selectableItemBackgroundBorderless" + android:contentDescription="@string/close_tab" + android:tint="@color/tab_tray_item_text_normal_theme" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/mozac_ic_close" />