summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chris Poultney <poultney@google.com> 2024-11-27 10:16:46 -0500
committer Chris Poultney <poultney@google.com> 2024-12-02 11:17:22 -0500
commit43e5687f6029894eadeef6b8c18fe4071bdeefa0 (patch)
tree07f2df7a05da151a93715745a0a8497129eb3a8e
parentb80a5aec48acd778cee8e08c12f999cf1483fe77 (diff)
Add cropping-related methods to WallpaperData
Change visibility of cropping methods using WallpaperDescription to match the existing ones without WallpaperDescription, and populate description crop hints from WallpaperData Bug: 380245309 Bug: 380244842 Flag: android.app.live_wallpaper_content_handling Test: CTS test included with change Change-Id: Ia12d73ad4013f724b9c7d839b0d2aee6d9e82fb5
-rw-r--r--core/api/system-current.txt9
-rw-r--r--core/api/test-current.txt1
-rw-r--r--core/java/android/app/WallpaperManager.java4
-rw-r--r--core/java/android/app/wallpaper/WallpaperDescription.java2
-rw-r--r--services/core/java/com/android/server/wallpaper/WallpaperManagerService.java25
5 files changed, 26 insertions, 15 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 7bfa878a7c0b..eebd41bd72a9 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -1289,6 +1289,7 @@ package android.app {
method @FlaggedApi("android.app.live_wallpaper_content_handling") @Nullable @RequiresPermission(android.Manifest.permission.READ_WALLPAPER_INTERNAL) public android.app.wallpaper.WallpaperInstance getWallpaperInstance(int);
method public void setDisplayOffset(android.os.IBinder, int, int);
method @FlaggedApi("com.android.window.flags.multi_crop") @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setStreamWithCrops(@NonNull java.io.InputStream, @NonNull android.util.SparseArray<android.graphics.Rect>, boolean, int) throws java.io.IOException;
+ method @FlaggedApi("android.app.live_wallpaper_content_handling") @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setStreamWithDescription(@NonNull java.io.InputStream, @NonNull android.app.wallpaper.WallpaperDescription, boolean, int) throws java.io.IOException;
method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT) public boolean setWallpaperComponent(android.content.ComponentName);
method @FlaggedApi("android.app.live_wallpaper_content_handling") @RequiresPermission(allOf={android.Manifest.permission.SET_WALLPAPER_COMPONENT, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}, conditional=true) public boolean setWallpaperComponentWithDescription(@NonNull android.app.wallpaper.WallpaperDescription, int);
method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT) public boolean setWallpaperComponentWithFlags(@NonNull android.content.ComponentName, int);
@@ -3300,6 +3301,14 @@ package android.app.usage {
}
+package android.app.wallpaper {
+
+ @FlaggedApi("android.app.live_wallpaper_content_handling") public final class WallpaperDescription implements android.os.Parcelable {
+ method @NonNull public android.util.SparseArray<android.graphics.Rect> getCropHints();
+ }
+
+}
+
package android.app.wallpapereffectsgeneration {
public final class CameraAttributes implements android.os.Parcelable {
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 3a62ac9e3c62..13b1eb89024d 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -543,7 +543,6 @@ package android.app {
method @FlaggedApi("com.android.window.flags.multi_crop") @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setBitmapWithCrops(@Nullable android.graphics.Bitmap, @NonNull java.util.Map<android.graphics.Point,android.graphics.Rect>, boolean, int) throws java.io.IOException;
method @FlaggedApi("android.app.live_wallpaper_content_handling") @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setBitmapWithDescription(@Nullable android.graphics.Bitmap, @NonNull android.app.wallpaper.WallpaperDescription, boolean, int) throws java.io.IOException;
method @FlaggedApi("com.android.window.flags.multi_crop") @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setStreamWithCrops(@NonNull java.io.InputStream, @NonNull java.util.Map<android.graphics.Point,android.graphics.Rect>, boolean, int) throws java.io.IOException;
- method @FlaggedApi("android.app.live_wallpaper_content_handling") @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setStreamWithDescription(@NonNull java.io.InputStream, @NonNull android.app.wallpaper.WallpaperDescription, boolean, int) throws java.io.IOException;
method public void setWallpaperZoomOut(@NonNull android.os.IBinder, float);
method public boolean shouldEnableWideColorGamut();
method public boolean wallpaperSupportsWcg(int);
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index a8671cf74619..89e25e7d1b4f 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -2092,7 +2092,7 @@ public class WallpaperManager {
/**
* Returns the description of the designated wallpaper. Returns null if the lock screen
- * wallpaper is requested lock screen wallpaper is not set.
+ * wallpaper is requested and lock screen wallpaper is not set.
* @param which Specifies wallpaper to request (home or lock).
* @throws IllegalArgumentException if {@code which} is not exactly one of
@@ -2733,7 +2733,7 @@ public class WallpaperManager {
* @hide
*/
@FlaggedApi(FLAG_LIVE_WALLPAPER_CONTENT_HANDLING)
- @TestApi
+ @SystemApi
@RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
public int setStreamWithDescription(@NonNull InputStream bitmapData,
@NonNull WallpaperDescription description, boolean allowBackup,
diff --git a/core/java/android/app/wallpaper/WallpaperDescription.java b/core/java/android/app/wallpaper/WallpaperDescription.java
index 3ee00ca3d941..ca2d9e676a02 100644
--- a/core/java/android/app/wallpaper/WallpaperDescription.java
+++ b/core/java/android/app/wallpaper/WallpaperDescription.java
@@ -20,6 +20,7 @@ import static android.app.Flags.FLAG_LIVE_WALLPAPER_CONTENT_HANDLING;
import android.annotation.FlaggedApi;
import android.annotation.SuppressLint;
+import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.app.WallpaperInfo;
import android.app.WallpaperManager;
@@ -153,6 +154,7 @@ public final class WallpaperDescription implements Parcelable {
* {@link Builder#setCropHints(SparseArray)}
* @hide
*/
+ @SystemApi
@NonNull
public SparseArray<Rect> getCropHints() {
return mCropHints;
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index bbef5785dfcb..415896b6230f 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -50,6 +50,7 @@ import static com.android.window.flags.Flags.multiCrop;
import static com.android.window.flags.Flags.offloadColorExtraction;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.AppGlobals;
@@ -2487,7 +2488,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
@Override
public WallpaperInfo getWallpaperInfoWithFlags(@SetWallpaperFlags int which, int userId) {
if (liveWallpaperContentHandling()) {
- return getWallpaperInstance(which, userId, false).getInfo();
+ WallpaperInstance instance = getWallpaperInstance(which, userId, false);
+ return (instance != null) ? instance.getInfo() : null;
}
userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
@@ -2509,7 +2511,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
return null;
}
- @NonNull
+ @Nullable
@Override
public WallpaperInstance getWallpaperInstance(@SetWallpaperFlags int which, int userId) {
return getWallpaperInstance(which, userId, true);
@@ -2517,28 +2519,27 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
private WallpaperInstance getWallpaperInstance(@SetWallpaperFlags int which, int userId,
boolean requireReadWallpaper) {
- final WallpaperInstance defaultInstance = new WallpaperInstance(null,
- new WallpaperDescription.Builder().build());
userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
Binder.getCallingUid(), userId, false, true, "getWallpaperInfo", null);
synchronized (mLock) {
WallpaperData wallpaper = (which == FLAG_LOCK) ? mLockWallpaperMap.get(userId)
: mWallpaperMap.get(userId);
- if (wallpaper == null
- || wallpaper.connection == null
- || wallpaper.connection.mInfo == null) {
- return defaultInstance;
- }
+ if (wallpaper == null || wallpaper.connection == null) return null;
WallpaperInfo info = wallpaper.connection.mInfo;
- boolean canQueryPackage = mPackageManagerInternal.canQueryPackage(
+ boolean canQueryPackage = (info == null) || mPackageManagerInternal.canQueryPackage(
Binder.getCallingUid(), info.getComponent().getPackageName());
if (hasPermission(READ_WALLPAPER_INTERNAL)
|| (canQueryPackage && !requireReadWallpaper)) {
- return new WallpaperInstance(info, wallpaper.getDescription());
+ // TODO(b/380245309) Remove this when crops are part of the description.
+ WallpaperDescription description =
+ wallpaper.getDescription().toBuilder().setCropHints(
+ wallpaper.mCropHints).build();
+ return new WallpaperInstance(info, description);
+ } else {
+ return null;
}
}
- return defaultInstance;
}
@Override