Merge "Reload wallpapers if changed onResume" into tm-qpr-dev
diff --git a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment2.kt b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment2.kt
index 198b3fd..3186eb5 100644
--- a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment2.kt
+++ b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment2.kt
@@ -43,6 +43,7 @@
import androidx.cardview.widget.CardView
import androidx.core.widget.ContentLoadingProgressBar
import androidx.fragment.app.DialogFragment
+import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.android.wallpaper.R
@@ -72,6 +73,8 @@
import com.bumptech.glide.Glide
import com.bumptech.glide.MemoryCategory
import java.util.Date
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.launch
/** Displays the Main UI for picking an individual wallpaper image. */
class IndividualPickerFragment2 :
@@ -123,6 +126,7 @@
private var loading: ContentLoadingProgressBar? = null
private var shouldReloadWallpapers = false
private lateinit var categoryProvider: CategoryProvider
+ private var appliedWallpaperIds: Set<String> = setOf()
/**
* Staged error dialog fragments that were unable to be shown when the activity didn't allow
@@ -216,7 +220,7 @@
isWallpapersReceived = true
updateLoading()
val byGroup = fetchedWallpapers.groupBy { it.getGroupName(context) }
- val appliedWallpaperIds = getAppliedWallpaperIds()
+ appliedWallpaperIds = getAppliedWallpaperIds()
byGroup.forEach { (groupName, wallpapers) ->
if (!TextUtils.isEmpty(groupName)) {
items.add(
@@ -230,7 +234,7 @@
val currentWallpaper = WallpaperManager.getInstance(context).wallpaperInfo
items.addAll(
wallpapers.map {
- var isApplied =
+ val isApplied =
if (it is LiveWallpaperInfo) {
it.isApplied(currentWallpaper)
} else {
@@ -449,6 +453,14 @@
imageGrid.layoutManager = gridLayoutManager
}
+ private suspend fun fetchWallpapersIfNeeded() {
+ coroutineScope {
+ if (isWallpapersReceived && (shouldReloadWallpapers || isAppliedWallpaperChanged())) {
+ fetchWallpapers(true)
+ }
+ }
+ }
+
override fun onResume() {
super.onResume()
val preferences = InjectorProvider.getInjector().getPreferences(requireActivity())
@@ -466,9 +478,7 @@
parentFragmentManager,
TAG_START_ROTATION_ERROR_DIALOG
)
- if (isWallpapersReceived && shouldReloadWallpapers) {
- fetchWallpapers(true)
- }
+ lifecycleScope.launch { fetchWallpapersIfNeeded() }
}
stagedStartRotationErrorDialogFragment = null
}
@@ -650,6 +660,17 @@
return appliedWallpaperIds
}
+ // TODO(b/277180178): Extract the check to another class for unit testing
+ private fun isAppliedWallpaperChanged(): Boolean {
+ // Reload wallpapers if the current wallpapers have changed
+ getAppliedWallpaperIds().let {
+ if (appliedWallpaperIds.isEmpty() || appliedWallpaperIds != it) {
+ return true
+ }
+ }
+ return false
+ }
+
sealed class PickerItem(val title: CharSequence = "") {
class WallpaperItem(val wallpaperInfo: WallpaperInfo, val isApplied: Boolean) :
PickerItem()