Merge changes Ic5c02548,I9c38e90a into main

* changes:
  Remove unnecessary vertical parallax
  Add parallax to cropHints for multi-crop
diff --git a/src/com/android/wallpaper/model/StaticWallpaperPrefMetadata.kt b/src/com/android/wallpaper/model/StaticWallpaperPrefMetadata.kt
index 2468b8d..8a29b27 100755
--- a/src/com/android/wallpaper/model/StaticWallpaperPrefMetadata.kt
+++ b/src/com/android/wallpaper/model/StaticWallpaperPrefMetadata.kt
@@ -15,9 +15,6 @@
  */
 package com.android.wallpaper.model
 
-import android.graphics.Point
-import android.graphics.Rect
-
 /** Metadata for the static image wallpaper to be saved to the system preferences. */
 data class StaticWallpaperPrefMetadata(
     val attributions: List<String?>?,
@@ -26,5 +23,4 @@
     val hashCode: Long?,
     val managerId: Int,
     val remoteId: String,
-    val cropHints: Map<Point, Rect>?,
 )
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
index fc5c40a..6a43253 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
+++ b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
@@ -745,9 +745,7 @@
                             mWallpaper.getCollectionId(mAppContext),
                             bitmapHash,
                             wallpaperId,
-                            mWallpaper.getWallpaperId(),
-                            // Always null cropHints as this path doesn't support multi-crop
-                            /* cropHints= */ null));
+                            mWallpaper.getWallpaperId()));
 
             if (destination == DEST_HOME_SCREEN || destination == DEST_BOTH) {
                 mWallpaperPreferences.storeLatestWallpaper(
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPreferences.kt b/src/com/android/wallpaper/module/DefaultWallpaperPreferences.kt
index 76bd2bf..f6c55f9 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperPreferences.kt
+++ b/src/com/android/wallpaper/module/DefaultWallpaperPreferences.kt
@@ -26,7 +26,6 @@
 import android.graphics.Point
 import android.graphics.Rect
 import android.util.Log
-import androidx.core.content.edit
 import com.android.wallpaper.model.LiveWallpaperInfo
 import com.android.wallpaper.model.LiveWallpaperPrefMetadata
 import com.android.wallpaper.model.StaticWallpaperPrefMetadata
@@ -282,7 +281,6 @@
             .remove(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID)
             .remove(NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL)
             .remove(NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE)
-            .remove(NoBackupKeys.KEY_CROP_HINTS)
             .apply()
     }
 
@@ -500,7 +498,6 @@
             .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID)
             .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID)
             .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE)
-            .remove(NoBackupKeys.KEY_CROP_HINTS)
             .apply()
     }
 
@@ -908,31 +905,6 @@
         wallpaperModel: LiveWallpaperModel
     ) {}
 
-    override fun storeWallpaperCropHints(cropHints: Map<Point, Rect?>) {
-        noBackupPrefs.edit {
-            putStringSet(
-                NoBackupKeys.KEY_CROP_HINTS,
-                cropHints
-                    .map { (point, rect) ->
-                        "${point.flattenToString()}$KEY_VALUE_DIVIDER${rect?.flattenToString()}"
-                    }
-                    .toSet()
-            )
-        }
-    }
-
-    override fun getWallpaperCropHints(): Map<Point, Rect?> {
-        val stringSet = noBackupPrefs.getStringSet(NoBackupKeys.KEY_CROP_HINTS, null)
-        val map =
-            stringSet?.associate {
-                val (key, value) = it.split(KEY_VALUE_DIVIDER)
-                val displaySize = Point.unflattenFromString(key)!!
-                val cropRect = Rect.unflattenFromString(value)
-                displaySize to cropRect
-            }
-        return map ?: emptyMap()
-    }
-
     override fun setHasPreviewTooltipBeenShown(hasTooltipBeenShown: Boolean) {
         sharedPrefs
             .edit()
diff --git a/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java b/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java
index 2a4a021..20e8dee 100755
--- a/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java
+++ b/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java
@@ -78,6 +78,5 @@
         String KEY_PREVIEW_WALLPAPER_COLOR_ID = "preview_wallpaper_color_id";
         String KEY_HOME_WALLPAPER_EFFECTS = "home_wallpaper_effects";
         String KEY_LOCK_WALLPAPER_EFFECTS = "lock_wallpaper_effects";
-        String KEY_CROP_HINTS = "crop_hints";
     }
 }
diff --git a/src/com/android/wallpaper/module/WallpaperPreferences.kt b/src/com/android/wallpaper/module/WallpaperPreferences.kt
index 1acf11f..e45cbf3 100755
--- a/src/com/android/wallpaper/module/WallpaperPreferences.kt
+++ b/src/com/android/wallpaper/module/WallpaperPreferences.kt
@@ -406,12 +406,6 @@
         wallpaperModel: LiveWallpaperModel,
     )
 
-    /** Stores wallpaper crop hints for each dimensions. */
-    fun storeWallpaperCropHints(cropHints: Map<Point, Rect?>)
-
-    /** Gets wallpaper crop hints for each dimensions. */
-    fun getWallpaperCropHints(): Map<Point, Rect?>
-
     /** Sets whether the preview tooltip should be shown. */
     fun setHasPreviewTooltipBeenShown(hasTooltipBeenShown: Boolean)
 
diff --git a/src/com/android/wallpaper/picker/customization/data/content/WallpaperClient.kt b/src/com/android/wallpaper/picker/customization/data/content/WallpaperClient.kt
index 2b241bd..7ca9791 100644
--- a/src/com/android/wallpaper/picker/customization/data/content/WallpaperClient.kt
+++ b/src/com/android/wallpaper/picker/customization/data/content/WallpaperClient.kt
@@ -96,7 +96,7 @@
     fun areRecentsAvailable(): Boolean
 
     fun getCurrentCropHints(
-        displaySizes: MutableList<Point>,
+        displaySizes: List<Point>,
         @WallpaperManager.SetWallpaperFlags which: Int
     ): Map<Point, Rect>?
 }
diff --git a/src/com/android/wallpaper/picker/customization/data/content/WallpaperClientImpl.kt b/src/com/android/wallpaper/picker/customization/data/content/WallpaperClientImpl.kt
index f3b1eee..b40b083 100644
--- a/src/com/android/wallpaper/picker/customization/data/content/WallpaperClientImpl.kt
+++ b/src/com/android/wallpaper/picker/customization/data/content/WallpaperClientImpl.kt
@@ -18,6 +18,9 @@
 package com.android.wallpaper.picker.customization.data.content
 
 import android.app.WallpaperManager
+import android.app.WallpaperManager.FLAG_LOCK
+import android.app.WallpaperManager.FLAG_SYSTEM
+import android.app.WallpaperManager.SetWallpaperFlags
 import android.content.ComponentName
 import android.content.ContentResolver
 import android.content.ContentValues
@@ -41,6 +44,9 @@
 import com.android.wallpaper.module.WallpaperPreferences
 import com.android.wallpaper.module.logging.UserEventLogger.SetWallpaperEntryPoint
 import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
+import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination.BOTH
+import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination.HOME
+import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination.LOCK
 import com.android.wallpaper.picker.customization.shared.model.WallpaperModel
 import com.android.wallpaper.picker.data.WallpaperModel.LiveWallpaperModel
 import com.android.wallpaper.picker.data.WallpaperModel.StaticWallpaperModel
@@ -128,7 +134,7 @@
         wallpaperSize: Point,
         fullPreviewCropModels: Map<Point, FullPreviewCropModel>?,
     ) {
-        if (destination == WallpaperDestination.HOME || destination == WallpaperDestination.BOTH) {
+        if (destination == HOME || destination == BOTH) {
             // Disable rotation wallpaper when setting to home screen. Daily rotation rotates both
             // home and lock screen wallpaper when lock screen is not set; otherwise daily rotation
             // only rotates home screen while lock screen wallpaper stays as what it's set to.
@@ -201,7 +207,7 @@
 
     private fun StaticWallpaperModel.getMetadata(
         bitmap: Bitmap,
-        managerId: Int
+        managerId: Int,
     ): StaticWallpaperPrefMetadata {
         val bitmapHash = BitmapUtils.generateHashCode(bitmap)
         return StaticWallpaperPrefMetadata(
@@ -211,8 +217,6 @@
             bitmapHash,
             managerId,
             commonWallpaperData.id.uniqueId,
-            // TODO (b/309139122): Introduce crop hints to StaticWallpaperMetadata
-            cropHints = null,
         )
     }
 
@@ -226,15 +230,15 @@
         destination: WallpaperDestination
     ) {
         when (destination) {
-            WallpaperDestination.HOME -> {
+            HOME -> {
                 clearHomeWallpaperMetadata()
                 setHomeStaticImageWallpaperMetadata(metadata)
             }
-            WallpaperDestination.LOCK -> {
+            LOCK -> {
                 clearLockWallpaperMetadata()
                 setLockStaticImageWallpaperMetadata(metadata)
             }
-            WallpaperDestination.BOTH -> {
+            BOTH -> {
                 clearHomeWallpaperMetadata()
                 setHomeStaticImageWallpaperMetadata(metadata)
                 clearLockWallpaperMetadata()
@@ -248,7 +252,7 @@
         destination: WallpaperDestination,
         wallpaperModel: LiveWallpaperModel,
     ) {
-        if (destination == WallpaperDestination.HOME || destination == WallpaperDestination.BOTH) {
+        if (destination == HOME || destination == BOTH) {
             // Disable rotation wallpaper when setting to home screen. Daily rotation rotates both
             // home and lock screen wallpaper when lock screen is not set; otherwise daily rotation
             // only rotates home screen while lock screen wallpaper stays as what it's set to.
@@ -317,11 +321,7 @@
         // WallpaperManager.FLAG_SYSTEM or WallpaperManager.FLAG_LOCK.
         // If destination is BOTH, either flag should return the same wallpaper manager ID.
         return getWallpaperId(
-            if (
-                destination == WallpaperDestination.BOTH || destination == WallpaperDestination.HOME
-            )
-                WallpaperManager.FLAG_SYSTEM
-            else WallpaperManager.FLAG_LOCK
+            if (destination == BOTH || destination == HOME) FLAG_SYSTEM else FLAG_LOCK
         )
     }
 
@@ -345,15 +345,15 @@
         destination: WallpaperDestination
     ) {
         when (destination) {
-            WallpaperDestination.HOME -> {
+            HOME -> {
                 clearHomeWallpaperMetadata()
                 setHomeLiveWallpaperMetadata(metadata)
             }
-            WallpaperDestination.LOCK -> {
+            LOCK -> {
                 clearLockWallpaperMetadata()
                 setLockLiveWallpaperMetadata(metadata)
             }
-            WallpaperDestination.BOTH -> {
+            BOTH -> {
                 clearHomeWallpaperMetadata()
                 setHomeLiveWallpaperMetadata(metadata)
                 clearLockWallpaperMetadata()
@@ -459,7 +459,7 @@
     ): WallpaperModel {
         val currentWallpapers = getCurrentWallpapers()
         val wallpaper: WallpaperInfo =
-            if (destination == WallpaperDestination.LOCK) {
+            if (destination == LOCK) {
                 currentWallpapers.second ?: currentWallpapers.first
             } else {
                 currentWallpapers.first
@@ -551,8 +551,8 @@
     }
 
     override fun getCurrentCropHints(
-        displaySizes: MutableList<Point>,
-        @WallpaperManager.SetWallpaperFlags which: Int
+        displaySizes: List<Point>,
+        @SetWallpaperFlags which: Int
     ): Map<Point, Rect>? {
         val flags = InjectorProvider.getInjector().getFlags()
         val isMultiCropEnabled = flags.isMultiCropPreviewUiEnabled() && flags.isMultiCropEnabled()
@@ -572,17 +572,17 @@
 
     fun WallpaperDestination.asString(): String {
         return when (this) {
-            WallpaperDestination.BOTH -> SCREEN_ALL
-            WallpaperDestination.HOME -> SCREEN_HOME
-            WallpaperDestination.LOCK -> SCREEN_LOCK
+            BOTH -> SCREEN_ALL
+            HOME -> SCREEN_HOME
+            LOCK -> SCREEN_LOCK
         }
     }
 
     private fun WallpaperDestination.toFlags(): Int {
         return when (this) {
-            WallpaperDestination.BOTH -> WallpaperManager.FLAG_LOCK or WallpaperManager.FLAG_SYSTEM
-            WallpaperDestination.HOME -> WallpaperManager.FLAG_SYSTEM
-            WallpaperDestination.LOCK -> WallpaperManager.FLAG_LOCK
+            BOTH -> FLAG_LOCK or FLAG_SYSTEM
+            HOME -> FLAG_SYSTEM
+            LOCK -> FLAG_LOCK
         }
     }
 
diff --git a/src/com/android/wallpaper/picker/preview/ui/viewmodel/PreviewActionsViewModel.kt b/src/com/android/wallpaper/picker/preview/ui/viewmodel/PreviewActionsViewModel.kt
index c13f19b..463182f 100644
--- a/src/com/android/wallpaper/picker/preview/ui/viewmodel/PreviewActionsViewModel.kt
+++ b/src/com/android/wallpaper/picker/preview/ui/viewmodel/PreviewActionsViewModel.kt
@@ -46,7 +46,6 @@
 import kotlinx.coroutines.flow.asStateFlow
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.distinctUntilChanged
-import kotlinx.coroutines.flow.filterNotNull
 import kotlinx.coroutines.flow.map
 
 /** View model for the preview action buttons */
@@ -212,12 +211,13 @@
 
     /** [EFFECTS] */
     private val _effectFloatingSheetViewModel: Flow<EffectFloatingSheetViewModel?> =
-        combine(
-            interactor.wallpaperModel,
-            interactor.effectsStatus,
-            interactor.effect.filterNotNull()
-        ) { wallpaper, status, effect ->
+        combine(interactor.wallpaperModel, interactor.effectsStatus, interactor.effect) {
+            wallpaper,
+            status,
+            effect ->
             (wallpaper as? WallpaperModel.StaticWallpaperModel)?.imageWallpaperData?.uri
+                ?: return@combine null
+            effect ?: return@combine null
             when (status) {
                 EffectsRepository.EffectStatus.EFFECT_DISABLE -> {
                     null
diff --git a/src/com/android/wallpaper/util/converter/WallpaperModelFactory.kt b/src/com/android/wallpaper/util/converter/WallpaperModelFactory.kt
index 168fed7..7bd24e2 100644
--- a/src/com/android/wallpaper/util/converter/WallpaperModelFactory.kt
+++ b/src/com/android/wallpaper/util/converter/WallpaperModelFactory.kt
@@ -79,7 +79,8 @@
                 WallpaperId(
                     componentName = componentName,
                     uniqueId =
-                        if (this is ImageWallpaperInfo && getWallpaperId() == null) uri.toString()
+                        if (this is ImageWallpaperInfo && getWallpaperId() == null)
+                            "${uri.hashCode()}"
                         else wallpaperId,
                     // TODO(b/308800470): Figure out the use of collection ID
                     collectionId = getCollectionId(context) ?: UNKNOWN_COLLECTION_ID,
diff --git a/tests/common/src/com/android/wallpaper/testing/FakeWallpaperClient.kt b/tests/common/src/com/android/wallpaper/testing/FakeWallpaperClient.kt
index 5994cbb..7999a5c 100644
--- a/tests/common/src/com/android/wallpaper/testing/FakeWallpaperClient.kt
+++ b/tests/common/src/com/android/wallpaper/testing/FakeWallpaperClient.kt
@@ -138,10 +138,7 @@
         return true
     }
 
-    override fun getCurrentCropHints(
-        displaySizes: MutableList<Point>,
-        which: Int
-    ): Map<Point, Rect>? {
+    override fun getCurrentCropHints(displaySizes: List<Point>, which: Int): Map<Point, Rect>? {
         return emptyMap()
     }
 
diff --git a/tests/common/src/com/android/wallpaper/testing/TestStaticWallpaperInfo.java b/tests/common/src/com/android/wallpaper/testing/TestStaticWallpaperInfo.java
index 9a040dc..28ef6d5 100644
--- a/tests/common/src/com/android/wallpaper/testing/TestStaticWallpaperInfo.java
+++ b/tests/common/src/com/android/wallpaper/testing/TestStaticWallpaperInfo.java
@@ -33,6 +33,7 @@
  */
 public class TestStaticWallpaperInfo extends WallpaperInfo {
     public static final int COLOR_DEFAULT = 0xff000000;
+    public static final int COLOR_2 = 0xffff0000;
     public static final Parcelable.Creator<TestStaticWallpaperInfo> CREATOR =
             new Parcelable.Creator<TestStaticWallpaperInfo>() {
                 @Override
diff --git a/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt b/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt
index 4dca1d6..8d4f91b 100644
--- a/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt
+++ b/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt
@@ -31,7 +31,6 @@
 import com.android.wallpaper.module.WallpaperPreferences.PresentationMode
 import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
 import com.android.wallpaper.picker.data.WallpaperModel
-import com.google.common.collect.ImmutableMap
 import java.text.SimpleDateFormat
 import java.util.Calendar
 import java.util.Locale
@@ -85,8 +84,6 @@
     private var mLockLiveWallpaperPrefMetadata: LiveWallpaperPrefMetadata? = null
     private val mWallStoredColor: HashMap<String, String> = HashMap()
 
-    private val wallpaperCropHints: MutableMap<Point, Rect?>
-
     private var hasPreviewTooltipBeenShown = true
 
     init {
@@ -98,7 +95,6 @@
         lastDailyLogTimestamp = -1
         lastDailyWallpaperRotationStatus = -1
         mPendingWallpaperSetStatus = WallpaperPreferences.WALLPAPER_SET_NOT_PENDING
-        wallpaperCropHints = mutableMapOf()
     }
 
     override fun getWallpaperPresentationMode(): Int {
@@ -489,14 +485,6 @@
         wallpaperModel: WallpaperModel.LiveWallpaperModel
     ) {}
 
-    override fun getWallpaperCropHints(): Map<Point, Rect?> {
-        return ImmutableMap.copyOf(wallpaperCropHints)
-    }
-
-    override fun storeWallpaperCropHints(cropHints: Map<Point, Rect?>) {
-        wallpaperCropHints.putAll(cropHints)
-    }
-
     override fun setHasPreviewTooltipBeenShown(hasTooltipBeenShown: Boolean) {
         this.hasPreviewTooltipBeenShown = hasTooltipBeenShown
     }
diff --git a/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPreferencesTest.kt b/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPreferencesTest.kt
index b2e5979..d825d26 100644
--- a/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPreferencesTest.kt
+++ b/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPreferencesTest.kt
@@ -16,8 +16,6 @@
 package com.android.wallpaper.module
 
 import android.content.Context
-import android.graphics.Point
-import android.graphics.Rect
 import androidx.test.core.app.ApplicationProvider
 import com.android.wallpaper.model.LiveWallpaperPrefMetadata
 import com.android.wallpaper.model.StaticWallpaperPrefMetadata
@@ -43,7 +41,6 @@
                 hashCode = 10013L,
                 managerId = 3,
                 remoteId = "ocean",
-                cropHints = null,
             )
         )
 
@@ -124,7 +121,6 @@
                 hashCode = 10013L,
                 managerId = 3,
                 remoteId = "ocean",
-                cropHints = null,
             )
         )
 
@@ -194,26 +190,4 @@
             .isEqualTo(null)
         assertThat(noBackupPref.getInt(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, 0)).isEqualTo(2)
     }
-
-    @Test
-    fun getWallpaperCropHints_noPreferencesStored() {
-        assertThat(wallpaperPreferences.getWallpaperCropHints()).isEmpty()
-    }
-
-    @Test
-    fun storeWallpaperCropHints_shouldBeSavedToNoBackupPrefs() {
-        val cropHintsMap =
-            mapOf(
-                Point(100, 200) to Rect(1, 2, 3, 4),
-                Point(300, 400) to Rect(5, 6, 7, 8),
-            )
-        wallpaperPreferences.storeWallpaperCropHints(cropHintsMap)
-        val noBackupPref =
-            (ApplicationProvider.getApplicationContext() as Context).getSharedPreferences(
-                DefaultWallpaperPreferences.NO_BACKUP_PREFS_NAME,
-                Context.MODE_PRIVATE
-            )
-        assertThat(noBackupPref.getStringSet(NoBackupKeys.KEY_CROP_HINTS, null)?.size).isEqualTo(2)
-        assertThat(wallpaperPreferences.getWallpaperCropHints()).isEqualTo(cropHintsMap)
-    }
 }