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

Commit a068f0f2 authored by Gen's avatar Gen
Browse files

Complete DisabledWallpaperManager's stub APIs.

DisabledWallpaperManager is used to guard against inappropriate access
to wallpaper APIs in case the caller didn't check for support using
WallpaperManager#isWallpaperSupported.  New APIs have been added to
WallpaperManager but corresponding stubs were not added to
DisabledWallpaperManager, leading to unguarded crashes.  This CL
completes the stubs and re-arranges the stubs in the order of their
declaration for readability.

Bug: 355307617
Test: Future proofing an unlikely path.  Everything still works.
Flag: EXEMPT bugfix
Change-Id: I40cbe107fb87c6e5cf10550489eaffefc7b66503
parent 28616ea8
Loading
Loading
Loading
Loading
+159 −26
Original line number Diff line number Diff line
@@ -15,11 +15,16 @@
 */
package android.app;

import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
@@ -27,9 +32,12 @@ import android.os.Handler;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.util.Log;
import android.util.SparseArray;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 * A no-op implementation of {@link WallpaperManager}.
@@ -54,29 +62,19 @@ final class DisabledWallpaperManager extends WallpaperManager {
    private DisabledWallpaperManager() {
    }

    @Override
    public boolean isWallpaperSupported() {
        return false;
    @UnsupportedAppUsage
    public IWallpaperManager getIWallpaperManager() {
        return unsupported();
    }

    @Override
    public boolean isSetWallpaperAllowed() {
        return false;
    }

    private static <T> T unsupported() {
        if (DEBUG) Log.w(TAG, "unsupported method called; returning null", new Exception());
        return null;
    }

    private static boolean unsupportedBoolean() {
        if (DEBUG) Log.w(TAG, "unsupported method called; returning false", new Exception());
        return false;
    public boolean isLockscreenLiveWallpaperEnabled() {
        return unsupportedBoolean();
    }

    private static int unsupportedInt() {
        if (DEBUG) Log.w(TAG, "unsupported method called; returning -1", new Exception());
        return -1;
    @Override
    public boolean shouldEnableWideColorGamut() {
        return unsupportedBoolean();
    }

    @Override
@@ -121,6 +119,11 @@ final class DisabledWallpaperManager extends WallpaperManager {
        return unsupported();
    }

    @Override
    public boolean wallpaperSupportsWcg(int which) {
        return unsupportedBoolean();
    }

    @Override
    public Bitmap getBitmap() {
        return unsupported();
@@ -131,11 +134,60 @@ final class DisabledWallpaperManager extends WallpaperManager {
        return unsupported();
    }

    @Nullable
    public Bitmap getBitmap(boolean hardware, @SetWallpaperFlags int which) {
        return unsupported();
    }

    @Override
    public Bitmap getBitmapAsUser(int userId, boolean hardware) {
        return unsupported();
    }

    @Override
    public Bitmap getBitmapAsUser(int userId, boolean hardware, @SetWallpaperFlags int which) {
        return unsupported();
    }

    @Override
    public Bitmap getBitmapAsUser(int userId, boolean hardware,
            @SetWallpaperFlags int which, boolean returnDefault) {
        return unsupported();
    }

    @Override
    public Rect peekBitmapDimensions() {
        return unsupported();
    }

    @Override
    public Rect peekBitmapDimensions(@SetWallpaperFlags int which) {
        return unsupported();
    }

    @Nullable
    public Rect peekBitmapDimensions(@SetWallpaperFlags int which, boolean returnDefault) {
        return unsupported();
    }

    @Override
    public List<Rect> getBitmapCrops(@NonNull List<Point> displaySizes,
            @SetWallpaperFlags int which, boolean originalBitmap) {
        return unsupported();
    }

    @Override
    public List<Rect> getBitmapCrops(@NonNull Point bitmapSize, @NonNull List<Point> displaySizes,
            @Nullable Map<Point, Rect> cropHints) {
        return unsupported();
    }

    @Override
    public WallpaperColors getWallpaperColors(@NonNull Bitmap bitmap,
            @Nullable Map<Point, Rect> cropHints) {
        return unsupported();
    }

    @Override
    public ParcelFileDescriptor getWallpaperFile(int which) {
        return unsupported();
@@ -172,6 +224,17 @@ final class DisabledWallpaperManager extends WallpaperManager {
        return unsupported();
    }

    @Override
    public void addOnColorsChangedListener(@NonNull LocalWallpaperColorConsumer callback,
            List<RectF> regions, int which) throws IllegalArgumentException {
        unsupported();
    }

    @Override
    public void removeOnColorsChangedListener(@NonNull LocalWallpaperColorConsumer callback) {
        unsupported();
    }

    @Override
    public ParcelFileDescriptor getWallpaperFile(int which, int userId) {
        return unsupported();
@@ -192,23 +255,22 @@ final class DisabledWallpaperManager extends WallpaperManager {
        return unsupported();
    }

    @Override
    public ParcelFileDescriptor getWallpaperInfoFile() {
    public WallpaperInfo getWallpaperInfoForUser(int userId) {
        return unsupported();
    }

    @Override
    public WallpaperInfo getWallpaperInfoForUser(int userId) {
    public WallpaperInfo getWallpaperInfo(@SetWallpaperFlags int which) {
        return unsupported();
    }

    @Override
    public WallpaperInfo getWallpaperInfo(@SetWallpaperFlags int which) {
    public WallpaperInfo getWallpaperInfo(@SetWallpaperFlags int which, int userId) {
        return unsupported();
    }

    @Override
    public WallpaperInfo getWallpaperInfo(@SetWallpaperFlags int which, int userId) {
    public ParcelFileDescriptor getWallpaperInfoFile() {
        return unsupported();
    }

@@ -264,6 +326,11 @@ final class DisabledWallpaperManager extends WallpaperManager {
        return 0;
    }

    public int setBitmapWithCrops(@Nullable Bitmap fullImage, @NonNull Map<Point, Rect> cropHints,
            boolean allowBackup, @SetWallpaperFlags int which) throws IOException {
        return unsupportedInt();
    }

    @Override
    public void setStream(InputStream bitmapData) throws IOException {
        unsupported();
@@ -283,6 +350,19 @@ final class DisabledWallpaperManager extends WallpaperManager {
        return 0;
    }

    @Override
    public int setStreamWithCrops(InputStream bitmapData, @NonNull Map<Point, Rect> cropHints,
            boolean allowBackup, @SetWallpaperFlags int which) throws IOException {
        return unsupportedInt();
    }


    @Override
    public int setStreamWithCrops(InputStream bitmapData, @NonNull SparseArray<Rect> cropHints,
            boolean allowBackup, @SetWallpaperFlags int which) throws IOException {
        return unsupportedInt();
    }

    @Override
    public boolean hasResourceWallpaper(int resid) {
        return unsupportedBoolean();
@@ -328,11 +408,39 @@ final class DisabledWallpaperManager extends WallpaperManager {
        return unsupportedBoolean();
    }


    @Override
    public void setWallpaperDimAmount(@FloatRange(from = 0f, to = 1f) float dimAmount) {
        unsupported();
    }

    @Override
    public @FloatRange(from = 0f, to = 1f) float getWallpaperDimAmount() {
        return unsupportedInt();
    }

    @Override
    public boolean lockScreenWallpaperExists() {
        return unsupportedBoolean();
    }

    @Override
    public boolean setWallpaperComponent(ComponentName name, int userId) {
        return unsupportedBoolean();
    }

    @Override
    public boolean setWallpaperComponentWithFlags(@NonNull ComponentName name,
            @SetWallpaperFlags int which) {
        return unsupportedBoolean();
    }

    @Override
    public boolean setWallpaperComponentWithFlags(@NonNull ComponentName name,
            @SetWallpaperFlags int which, int userId) {
        return unsupportedBoolean();
    }

    @Override
    public void setWallpaperOffsets(IBinder windowToken, float xOffset, float yOffset) {
        unsupported();
@@ -349,6 +457,21 @@ final class DisabledWallpaperManager extends WallpaperManager {
        unsupported();
    }

    @Override
    public void setWallpaperZoomOut(@NonNull IBinder windowToken, float zoom) {
        unsupported();
    }

    @Override
    public boolean isWallpaperSupported() {
        return false;
    }

    @Override
    public boolean isSetWallpaperAllowed() {
        return false;
    }

    @Override
    public void clearWallpaperOffsets(IBinder windowToken) {
        unsupported();
@@ -369,8 +492,18 @@ final class DisabledWallpaperManager extends WallpaperManager {
        return unsupportedBoolean();
    }

    @Override
    public boolean wallpaperSupportsWcg(int which) {
        return unsupportedBoolean();
    private static <T> T unsupported() {
        if (DEBUG) Log.w(TAG, "unsupported method called; returning null", new Exception());
        return null;
    }

    private static boolean unsupportedBoolean() {
        if (DEBUG) Log.w(TAG, "unsupported method called; returning false", new Exception());
        return false;
    }

    private static int unsupportedInt() {
        if (DEBUG) Log.w(TAG, "unsupported method called; returning -1", new Exception());
        return -1;
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -123,6 +123,8 @@ import java.util.concurrent.TimeUnit;
 * <p> An app can check whether wallpapers are supported for the current user, by calling
 * {@link #isWallpaperSupported()}, and whether setting of wallpapers is allowed, by calling
 * {@link #isSetWallpaperAllowed()}.
 * Any public APIs added to WallpaperManager should have a corresponding stub in
 * {@link DisabledWallpaperManager}.
 */
@SystemService(Context.WALLPAPER_SERVICE)
public class WallpaperManager {