From 3e7c1bd85521a9e51987778ef9cc6f85cc655e7e Mon Sep 17 00:00:00 2001 From: Vania Desmonda Date: Thu, 3 Feb 2022 15:00:09 +0000 Subject: [PATCH] Add ADB shell command to set dim amount using an arbitrary UID Bug: 217718160 Test: manual, atest WallpaperManagerTest Change-Id: Ie006b8d3acb5e6513ad4523080a695c286f32742 --- .../wallpaper/WallpaperManagerService.java | 14 +++++++++++++- .../WallpaperManagerShellCommand.java | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index ee2cc7bd74868..56985af9ef9f8 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -2591,8 +2591,20 @@ public class WallpaperManagerService extends IWallpaperManager.Stub */ @Override public void setWallpaperDimAmount(float dimAmount) throws RemoteException { + setWallpaperDimAmountForUid(Binder.getCallingUid(), dimAmount); + } + + /** + * Sets wallpaper dim amount for a given UID. This only applies to FLAG_SYSTEM wallpaper as the + * lock screen does not have a wallpaper component, so we use mWallpaperMap. + * + * @param uid Caller UID that wants to set the wallpaper dim amount + * @param dimAmount Dim amount where 0f reverts any dimming applied by the caller (fully bright) + * and 1f is fully black + * @throws RemoteException + */ + public void setWallpaperDimAmountForUid(int uid, float dimAmount) { checkPermission(android.Manifest.permission.SET_WALLPAPER_DIM_AMOUNT); - int uid = Binder.getCallingUid(); final long ident = Binder.clearCallingIdentity(); try { synchronized (mLock) { diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerShellCommand.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerShellCommand.java index fc827b40f3a13..458bf20877f61 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerShellCommand.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerShellCommand.java @@ -43,6 +43,8 @@ public class WallpaperManagerShellCommand extends ShellCommand { switch(cmd) { case "set-dim-amount": return setWallpaperDimAmount(); + case "dim-with-uid": + return setDimmingWithUid(); case "get-dim-amount": return getWallpaperDimAmount(); case "-h": @@ -64,6 +66,10 @@ public class WallpaperManagerShellCommand extends ShellCommand { pw.println(" set-dim-amount DIMMING"); pw.println(" Sets the current dimming value to DIMMING (a number between 0 and 1)."); pw.println(); + pw.println(" dim-with-uid UID DIMMING"); + pw.println(" Sets the wallpaper dim amount to DIMMING as if an app with uid, UID, " + + "called it."); + pw.println(); pw.println(" get-dim-amount"); pw.println(" Get the current wallpaper dim amount."); } @@ -92,4 +98,17 @@ public class WallpaperManagerShellCommand extends ShellCommand { getOutPrintWriter().println("The current wallpaper dim amount is: " + dimAmount); return 0; } + + /** + * Sets the wallpaper dim amount for an arbitrary UID to simulate multiple applications setting + * a dim amount on the wallpaper. + */ + private int setDimmingWithUid() { + int mockUid = Integer.parseInt(getNextArgRequired()); + float mockDimAmount = Float.parseFloat(getNextArgRequired()); + mService.setWallpaperDimAmountForUid(mockUid, mockDimAmount); + getOutPrintWriter().println("Dimming the wallpaper for UID: " + mockUid + " to: " + + mockDimAmount); + return 0; + } }