Multicrop: adds crop hints to recents

Applying crop hints when selecting from recents will be done in a
follow-up change

Bug: 309139122
Flag: ACONFIG com.android.wallpaper.multi_crop_preview_ui_flag DEVELOPMENT
Test: manually verified recents still work
Test: added unit tests
Change-Id: I878d6b5a91351057ac3e5eb1163cad435a33544b
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
index 6a43253..9683857 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
+++ b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
@@ -59,6 +59,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Concrete implementation of WallpaperPersister which actually sets wallpapers to the system via
@@ -395,7 +396,7 @@
     }
 
     @Override
-    public int setStreamToWallpaperManager(InputStream inputStream, Rect cropHint,
+    public int setStreamToWallpaperManager(InputStream inputStream, @Nullable Rect cropHint,
             boolean allowBackup, int whichWallpaper) {
         try {
             return mWallpaperManager.setStream(inputStream, cropHint, allowBackup,
@@ -406,6 +407,17 @@
     }
 
     @Override
+    public int setStreamWithCropsToWallpaperManager(InputStream inputStream,
+            @NonNull Map<Point, Rect> cropHints, boolean allowBackup, int whichWallpaper) {
+        try {
+            return mWallpaperManager.setStreamWithCrops(inputStream, cropHints, allowBackup,
+                whichWallpaper);
+        } catch (IOException e) {
+            return 0;
+        }
+    }
+
+    @Override
     public void setWallpaperInfoInPreview(WallpaperInfo wallpaper) {
         mWallpaperInfoInPreview = wallpaper;
     }
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPreferences.kt b/src/com/android/wallpaper/module/DefaultWallpaperPreferences.kt
index f6c55f9..a59b0a3 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperPreferences.kt
+++ b/src/com/android/wallpaper/module/DefaultWallpaperPreferences.kt
@@ -897,7 +897,7 @@
         destination: WallpaperDestination,
         wallpaperModel: StaticWallpaperModel,
         bitmap: Bitmap,
-        cropHints: Map<Point, Rect?>,
+        cropHints: Map<Point, Rect>?,
     ) {}
 
     override suspend fun addLiveWallpaperToRecentWallpapers(
diff --git a/src/com/android/wallpaper/module/WallpaperPersister.java b/src/com/android/wallpaper/module/WallpaperPersister.java
index 0940d81..585aa13 100755
--- a/src/com/android/wallpaper/module/WallpaperPersister.java
+++ b/src/com/android/wallpaper/module/WallpaperPersister.java
@@ -20,9 +20,11 @@
 import static android.app.WallpaperManager.SetWallpaperFlags;
 
 import android.graphics.Bitmap;
+import android.graphics.Point;
 import android.graphics.Rect;
 
 import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.android.wallpaper.asset.Asset;
@@ -31,6 +33,7 @@
 
 import java.io.InputStream;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Interface for classes which persist wallpapers to the system.
@@ -159,7 +162,18 @@
      * Android, otherwise on pre-N versions of Android will return a positive integer when the
      * operation was successful and zero if the operation encountered an error.
      */
-    int setStreamToWallpaperManager(InputStream inputStream, Rect cropHint,
+    int setStreamToWallpaperManager(InputStream inputStream, @Nullable Rect cropHint,
+            boolean allowBackup, int whichWallpaper);
+
+    /**
+     * Sets a wallpaper stream to the {@link android.app.WallpaperManager}.
+     *
+     * @return an integer wallpaper ID. This is an actual wallpaper ID on N and later versions of
+     * Android, otherwise on pre-N versions of Android will return a positive integer when the
+     * operation was successful and zero if the operation encountered an error.
+     */
+    int setStreamWithCropsToWallpaperManager(InputStream inputStream,
+            @NonNull Map<Point, Rect> cropModel,
             boolean allowBackup, int whichWallpaper);
 
     /**
diff --git a/src/com/android/wallpaper/module/WallpaperPreferences.kt b/src/com/android/wallpaper/module/WallpaperPreferences.kt
index e45cbf3..6fbb34a 100755
--- a/src/com/android/wallpaper/module/WallpaperPreferences.kt
+++ b/src/com/android/wallpaper/module/WallpaperPreferences.kt
@@ -392,7 +392,7 @@
         destination: WallpaperDestination,
         wallpaperModel: StaticWallpaperModel,
         bitmap: Bitmap,
-        cropHints: Map<Point, Rect?>,
+        cropHints: 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 e9f97b0..7edc234 100644
--- a/src/com/android/wallpaper/picker/customization/data/content/WallpaperClientImpl.kt
+++ b/src/com/android/wallpaper/picker/customization/data/content/WallpaperClientImpl.kt
@@ -167,8 +167,7 @@
             destination,
             wallpaperModel,
             bitmap,
-            // TODO (b/309139122): Introduce crop hints to recent wallpapers
-            emptyMap(),
+            cropHintsWithParallax,
         )
     }
 
diff --git a/tests/common/src/com/android/wallpaper/testing/TestWallpaperPersister.java b/tests/common/src/com/android/wallpaper/testing/TestWallpaperPersister.java
index e1be186..7d36852 100644
--- a/tests/common/src/com/android/wallpaper/testing/TestWallpaperPersister.java
+++ b/tests/common/src/com/android/wallpaper/testing/TestWallpaperPersister.java
@@ -17,8 +17,10 @@
 
 import android.content.Context;
 import android.graphics.Bitmap;
+import android.graphics.Point;
 import android.graphics.Rect;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.android.wallpaper.asset.Asset;
@@ -31,6 +33,7 @@
 
 import java.io.InputStream;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Test double for {@link WallpaperPersister}.
@@ -43,6 +46,7 @@
     private Bitmap mCurrentHomeWallpaper;
     private Bitmap mCurrentLockWallpaper;
     private Bitmap mPendingHomeWallpaper;
+
     private Bitmap mPendingLockWallpaper;
     private List<String> mHomeAttributions;
     private String mHomeActionUrl;
@@ -239,4 +243,10 @@
             boolean allowBackup, int whichWallpaper) {
         return 1;
     }
+
+    @Override
+    public int setStreamWithCropsToWallpaperManager(InputStream inputStream,
+            @NonNull Map<Point, Rect> cropHints, boolean allowBackup, int whichWallpaper) {
+        return 1;
+    }
 }
diff --git a/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt b/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt
index 8d4f91b..e7480cf 100644
--- a/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt
+++ b/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt
@@ -477,7 +477,7 @@
         destination: WallpaperDestination,
         wallpaperModel: WallpaperModel.StaticWallpaperModel,
         bitmap: Bitmap,
-        cropHints: Map<Point, Rect?>
+        cropHints: Map<Point, Rect>?,
     ) {}
 
     override suspend fun addLiveWallpaperToRecentWallpapers(