diff options
| author | 2024-11-27 10:16:46 -0500 | |
|---|---|---|
| committer | 2024-12-02 11:17:22 -0500 | |
| commit | 43e5687f6029894eadeef6b8c18fe4071bdeefa0 (patch) | |
| tree | 07f2df7a05da151a93715745a0a8497129eb3a8e | |
| parent | b80a5aec48acd778cee8e08c12f999cf1483fe77 (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.txt | 9 | ||||
| -rw-r--r-- | core/api/test-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/app/WallpaperManager.java | 4 | ||||
| -rw-r--r-- | core/java/android/app/wallpaper/WallpaperDescription.java | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wallpaper/WallpaperManagerService.java | 25 |
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 |