Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 43e5687f authored by Chris Poultney's avatar Chris Poultney
Browse files

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
parent b80a5aec
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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 {
+0 −1
Original line number Diff line number Diff line
@@ -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);
+2 −2
Original line number Diff line number Diff line
@@ -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,
+2 −0
Original line number Diff line number Diff line
@@ -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;
+13 −12
Original line number Diff line number Diff line
@@ -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