Skip to content

Commit f80c7ce

Browse files
committed
Fix the favicon and preview loading
1 parent 270dd69 commit f80c7ce

File tree

2 files changed

+48
-24
lines changed

2 files changed

+48
-24
lines changed

app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherAdapter.kt

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ package com.duckduckgo.app.tabs.ui
1818

1919
import android.annotation.SuppressLint
2020
import android.content.Context
21+
import android.graphics.Bitmap
2122
import android.os.Bundle
2223
import android.view.LayoutInflater
2324
import android.view.View
2425
import android.view.ViewGroup
2526
import android.widget.ImageView
26-
import android.widget.ImageView.ScaleType
2727
import android.widget.TextView
2828
import androidx.annotation.VisibleForTesting
2929
import androidx.lifecycle.LifecycleOwner
@@ -34,6 +34,8 @@ import androidx.recyclerview.widget.RecyclerView.Adapter
3434
import androidx.recyclerview.widget.RecyclerView.ViewHolder
3535
import com.bumptech.glide.Glide
3636
import com.bumptech.glide.RequestManager
37+
import com.bumptech.glide.load.Transformation
38+
import com.bumptech.glide.load.engine.Resource
3739
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
3840
import com.duckduckgo.app.browser.databinding.ItemTabGridBinding
3941
import com.duckduckgo.app.browser.databinding.ItemTabListBinding
@@ -50,14 +52,18 @@ import com.duckduckgo.app.tabs.ui.TabSwitcherAdapter.TabSwitcherViewHolder.Compa
5052
import com.duckduckgo.app.tabs.ui.TabSwitcherAdapter.TabSwitcherViewHolder.Companion.LIST_TAB
5153
import com.duckduckgo.app.tabs.ui.TabSwitcherAdapter.TabSwitcherViewHolder.TabViewHolder
5254
import com.duckduckgo.common.ui.view.show
55+
import com.duckduckgo.common.ui.view.toPx
5356
import com.duckduckgo.common.utils.DispatcherProvider
5457
import com.duckduckgo.common.utils.swap
5558
import com.duckduckgo.mobile.android.R as AndroidR
5659
import java.io.File
60+
import java.security.MessageDigest
5761
import kotlinx.coroutines.launch
5862
import kotlinx.coroutines.withContext
5963
import timber.log.Timber
6064

65+
private const val GRID_ITEM_HEIGHT_DP = 170
66+
6167
class TabSwitcherAdapter(
6268
private val itemClickListener: TabSwitcherListener,
6369
private val webViewPreviewPersister: WebViewPreviewPersister,
@@ -205,6 +211,10 @@ class TabSwitcherAdapter(
205211
loadTabPreviewImage(tab.tabEntity, Glide.with(viewHolder.rootView), viewHolder.tabPreview)
206212
}
207213

214+
bundle.getString(DIFF_KEY_URL)?.let {
215+
loadFavicon(tab.tabEntity, Glide.with(viewHolder.rootView), viewHolder.favicon)
216+
}
217+
208218
bundle.getString(DIFF_KEY_TITLE)?.let {
209219
viewHolder.title.text = it
210220
}
@@ -229,6 +239,7 @@ class TabSwitcherAdapter(
229239
bundle.getString(DIFF_KEY_URL)?.let {
230240
viewHolder.url.show()
231241
viewHolder.url.text = it
242+
loadFavicon(tab.tabEntity, Glide.with(viewHolder.rootView), viewHolder.favicon)
232243
}
233244

234245
bundle.getString(DIFF_KEY_TITLE)?.let {
@@ -242,42 +253,55 @@ class TabSwitcherAdapter(
242253
}
243254

244255
private fun loadFavicon(tab: TabEntity, glide: RequestManager, view: ImageView) {
245-
if (tab.url == null) {
256+
val url = tab.url
257+
if (url == null) {
258+
glide.clear(view)
246259
glide.load(AndroidR.drawable.ic_dax_icon).into(view)
247260
} else {
248261
lifecycleOwner.lifecycleScope.launch {
249-
faviconManager.loadToViewFromLocalWithPlaceholder(tab.tabId, tab.url!!, view)
262+
faviconManager.loadToViewFromLocalWithPlaceholder(tab.tabId, url, view)
250263
}
251264
}
252265
}
253266

254267
private fun loadTabPreviewImage(tab: TabEntity, glide: RequestManager, tabPreview: ImageView) {
255-
if (tab.url == null) {
256-
tabPreview.scaleType = ScaleType.CENTER
257-
glide.load(AndroidR.drawable.ic_dax_icon_72)
258-
.into(tabPreview)
259-
return
260-
} else {
261-
tabPreview.scaleType = ScaleType.MATRIX
262-
}
263-
264-
val previewFile = tab.tabPreviewFile ?: return glide.clear(tabPreview)
265-
266-
lifecycleOwner.lifecycleScope.launch {
267-
val cachedWebViewPreview = withContext(dispatchers.io()) {
268-
File(webViewPreviewPersister.fullPathForFile(tab.tabId, previewFile)).takeIf { it.exists() }
268+
fun fitAndClipBottom() = object : Transformation<Bitmap> {
269+
override fun transform(
270+
context: Context,
271+
resource: Resource<Bitmap>,
272+
outWidth: Int,
273+
outHeight: Int,
274+
): Resource<Bitmap> {
275+
resource.get().height = GRID_ITEM_HEIGHT_DP.toPx()
276+
return resource
269277
}
270278

271-
if (cachedWebViewPreview == null) {
272-
glide.clear(tabPreview)
273-
return@launch
279+
override fun updateDiskCacheKey(messageDigest: MessageDigest) {
274280
}
281+
}
275282

276-
glide.load(cachedWebViewPreview)
277-
.transition(DrawableTransitionOptions.withCrossFade())
283+
val previewFile = tab.tabPreviewFile
284+
if (tab.url == null) {
285+
glide.load(AndroidR.drawable.ic_dax_icon_72)
278286
.into(tabPreview)
287+
} else if (previewFile != null) {
288+
lifecycleOwner.lifecycleScope.launch {
289+
val cachedWebViewPreview = withContext(dispatchers.io()) {
290+
File(webViewPreviewPersister.fullPathForFile(tab.tabId, previewFile)).takeIf { it.exists() }
291+
}
292+
293+
if (cachedWebViewPreview == null) {
294+
glide.clear(tabPreview)
295+
return@launch
296+
}
279297

280-
tabPreview.show()
298+
glide.load(cachedWebViewPreview)
299+
.transition(DrawableTransitionOptions.withCrossFade())
300+
.optionalTransform(fitAndClipBottom())
301+
.into(tabPreview)
302+
}
303+
} else {
304+
glide.clear(tabPreview)
281305
}
282306
}
283307

app/src/main/res/layout/item_tab_grid.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
android:layout_width="match_parent"
8585
android:layout_height="@dimen/gridItemPreviewHeight"
8686
android:importantForAccessibility="no"
87-
android:scaleType="matrix"
87+
android:scaleType="center"
8888
app:layout_constraintBottom_toBottomOf="parent"
8989
app:layout_constraintEnd_toEndOf="parent"
9090
app:layout_constraintStart_toStartOf="parent"

0 commit comments

Comments
 (0)