From 6c902d04532838f7549506b1c62349e321ac9485 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Thu, 18 Aug 2016 10:44:54 -0700 Subject: [PATCH] Change retail mode wallpaper (1/2) Change-Id: I7ce5711e57bc39edf10fc7151f26168c6183d71e Fixes: 30830249 --- core/java/android/app/IWallpaperManager.aidl | 2 +- core/java/android/app/WallpaperManager.java | 21 ++++++++++++++++--- .../wallpaper/WallpaperManagerService.java | 6 +++--- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/core/java/android/app/IWallpaperManager.aidl b/core/java/android/app/IWallpaperManager.aidl index ec22ff65a5f81..75a5bf7f77a22 100644 --- a/core/java/android/app/IWallpaperManager.aidl +++ b/core/java/android/app/IWallpaperManager.aidl @@ -44,7 +44,7 @@ interface IWallpaperManager { */ ParcelFileDescriptor setWallpaper(String name, in String callingPackage, in Rect cropHint, boolean allowBackup, out Bundle extras, int which, - IWallpaperManagerCallback completion); + IWallpaperManagerCallback completion, int userId); /** * Set the live wallpaper. This only affects the system wallpaper. diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index 6e4466238af23..219afea02c48d 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -48,6 +48,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.ParcelFileDescriptor; +import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemProperties; @@ -939,7 +940,8 @@ public class WallpaperManager { /* Set the wallpaper to the default values */ ParcelFileDescriptor fd = sGlobals.mService.setWallpaper( "res:" + resources.getResourceName(resid), - mContext.getOpPackageName(), null, false, result, which, completion); + mContext.getOpPackageName(), null, false, result, which, completion, + UserHandle.myUserId()); if (fd != null) { FileOutputStream fos = null; boolean ok = false; @@ -1040,6 +1042,19 @@ public class WallpaperManager { public int setBitmap(Bitmap fullImage, Rect visibleCropHint, boolean allowBackup, @SetWallpaperFlags int which) throws IOException { + return setBitmap(fullImage, visibleCropHint, allowBackup, which, + UserHandle.myUserId()); + } + + /** + * Like {@link #setBitmap(Bitmap, Rect, boolean, int)}, but allows to pass in an explicit user + * id. If the user id doesn't match the user id the process is running under, calling this + * requires permission {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL}. + * @hide + */ + public int setBitmap(Bitmap fullImage, Rect visibleCropHint, + boolean allowBackup, @SetWallpaperFlags int which, int userId) + throws IOException { validateRect(visibleCropHint); if (sGlobals.mService == null) { Log.w(TAG, "WallpaperService not running"); @@ -1050,7 +1065,7 @@ public class WallpaperManager { try { ParcelFileDescriptor fd = sGlobals.mService.setWallpaper(null, mContext.getOpPackageName(), visibleCropHint, allowBackup, - result, which, completion); + result, which, completion, userId); if (fd != null) { FileOutputStream fos = null; try { @@ -1176,7 +1191,7 @@ public class WallpaperManager { try { ParcelFileDescriptor fd = sGlobals.mService.setWallpaper(null, mContext.getOpPackageName(), visibleCropHint, allowBackup, - result, which, completion); + result, which, completion, UserHandle.myUserId()); if (fd != null) { FileOutputStream fos = null; try { diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index 64f79e165e754..be25f8552a657 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -1350,7 +1350,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { @Override public ParcelFileDescriptor setWallpaper(String name, String callingPackage, Rect cropHint, boolean allowBackup, Bundle extras, int which, - IWallpaperManagerCallback completion) { + IWallpaperManagerCallback completion, int userId) { + userId = ActivityManager.handleIncomingUser(getCallingPid(), getCallingUid(), userId, + false /* all */, true /* full */, "changing wallpaper", null /* pkg */); checkPermission(android.Manifest.permission.SET_WALLPAPER); if ((which & (FLAG_LOCK|FLAG_SYSTEM)) == 0) { @@ -1374,8 +1376,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { } } - final int userId = UserHandle.getCallingUserId(); - synchronized (mLock) { if (DEBUG) Slog.v(TAG, "setWallpaper which=0x" + Integer.toHexString(which)); WallpaperData wallpaper;