From 8a71c48d1cf159fe9da0bc60db68cc2d3a5243dc Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Mon, 14 Aug 2017 16:45:03 -0700 Subject: [PATCH] Add privileged permission for reading the current wallpaper image OEMs can therefore arrange factory-default access to have access prior to setup or user interaction. Bug: 30770233 Bug: 64029450 Test: manual Change-Id: I2cb30721f2a64ef50275b711ca10ca571248504a --- api/system-current.txt | 1 + core/res/AndroidManifest.xml | 9 +++++++++ .../server/wallpaper/WallpaperManagerService.java | 8 ++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index e249a213b6462..4220b075b1c11 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -201,6 +201,7 @@ package android { field public static final java.lang.String READ_SYNC_SETTINGS = "android.permission.READ_SYNC_SETTINGS"; field public static final java.lang.String READ_SYNC_STATS = "android.permission.READ_SYNC_STATS"; field public static final java.lang.String READ_VOICEMAIL = "com.android.voicemail.permission.READ_VOICEMAIL"; + field public static final java.lang.String READ_WALLPAPER_INTERNAL = "android.permission.READ_WALLPAPER_INTERNAL"; field public static final java.lang.String READ_WIFI_CREDENTIAL = "android.permission.READ_WIFI_CREDENTIAL"; field public static final java.lang.String REAL_GET_TASKS = "android.permission.REAL_GET_TASKS"; field public static final java.lang.String REBOOT = "android.permission.REBOOT"; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 5b0f8d53c0274..267e5d5c01dc9 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -1984,6 +1984,15 @@ android:description="@string/permdesc_setWallpaperHints" android:protectionLevel="normal" /> + + + diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index 2fad7b1a4a72b..f6f5341ff0a99 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -1606,8 +1606,12 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { @Override public ParcelFileDescriptor getWallpaper(String callingPkg, IWallpaperManagerCallback cb, final int which, Bundle outParams, int wallpaperUserId) { - enforceCallingOrSelfPermissionAndAppOp(android.Manifest.permission.READ_EXTERNAL_STORAGE, - callingPkg, Binder.getCallingUid(), "read wallpaper"); + final int hasPrivilege = mContext.checkCallingOrSelfPermission( + android.Manifest.permission.READ_WALLPAPER_INTERNAL); + if (hasPrivilege != PackageManager.PERMISSION_GRANTED) { + enforceCallingOrSelfPermissionAndAppOp(android.Manifest.permission.READ_EXTERNAL_STORAGE, + callingPkg, Binder.getCallingUid(), "read wallpaper"); + } wallpaperUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), wallpaperUserId, false, true, "getWallpaper", null);