From 79a2457e198cf40b2b80e7fb6bd1656a9d78f246 Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Wed, 2 Mar 2016 14:42:44 -0800 Subject: [PATCH] Add API to clear a specific wallpaper There was previously no public API for clearing the keyguard wallpaper versus the system wallpaper, or both. Now there is. Bug 27400185 Change-Id: If1789dd430040acdf16d77413c0e4b46bf3789f3 --- api/current.txt | 1 + api/system-current.txt | 1 + api/test-current.txt | 1 + core/java/android/app/WallpaperManager.java | 19 +++++++++++++++++++ .../wallpaper/WallpaperManagerService.java | 8 ++++++++ 5 files changed, 30 insertions(+) diff --git a/api/current.txt b/api/current.txt index aeaae55833042..8624cf6b68e09 100644 --- a/api/current.txt +++ b/api/current.txt @@ -5711,6 +5711,7 @@ package android.app { public class WallpaperManager { method public void clear() throws java.io.IOException; + method public void clear(int) throws java.io.IOException; method public void clearWallpaperOffsets(android.os.IBinder); method public void forgetLoadedWallpaper(); method public android.graphics.drawable.Drawable getBuiltInDrawable(); diff --git a/api/system-current.txt b/api/system-current.txt index 1a2c8547fa8cb..505b1fbb53438 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5843,6 +5843,7 @@ package android.app { public class WallpaperManager { method public void clear() throws java.io.IOException; + method public void clear(int) throws java.io.IOException; method public void clearWallpaper(); method public void clearWallpaper(int, int); method public void clearWallpaperOffsets(android.os.IBinder); diff --git a/api/test-current.txt b/api/test-current.txt index 1039fed4ac4f6..3c54b348ed3e7 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -5715,6 +5715,7 @@ package android.app { public class WallpaperManager { method public void clear() throws java.io.IOException; + method public void clear(int) throws java.io.IOException; method public void clearWallpaperOffsets(android.os.IBinder); method public void forgetLoadedWallpaper(); method public android.graphics.drawable.Drawable getBuiltInDrawable(); diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index 4d8d96b0e16c7..6bc03f7da77be 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -1432,6 +1432,25 @@ public class WallpaperManager { setStream(openDefaultWallpaper(mContext)); } + /** + * Remove one or more currently set wallpapers, reverting to the system default + * display for each one. If {@link #FLAG_SET_SYSTEM} is set in the {@code which} + * parameter, the intent {@link Intent#ACTION_WALLPAPER_CHANGED} will be broadcast + * upon success. + * + * @param which A bitwise combination of {@link #FLAG_SET_SYSTEM} or + * {@link #FLAG_SET_LOCK} + * @throws IOException If an error occurs reverting to the built-in wallpaper. + */ + public void clear(int which) throws IOException { + if ((which & FLAG_SET_SYSTEM) != 0) { + clear(); + } + if ((which & FLAG_SET_LOCK) != 0) { + clearWallpaper(FLAG_SET_LOCK, mContext.getUserId()); + } + } + /** * Open stream representing the default static image wallpaper. * diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index ba0d34061e9e0..a0a971af0030e 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -882,6 +882,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { wallpaper = mLockWallpaperMap.get(userId); if (wallpaper == null) { // It's already gone; we're done. + if (DEBUG) { + Slog.i(TAG, "Lock wallpaper already cleared"); + } return; } } else { @@ -902,14 +905,19 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { wallpaper.wallpaperFile.delete(); wallpaper.cropFile.delete(); if (which == FLAG_SET_LOCK) { + mLockWallpaperMap.remove(userId); final IWallpaperManagerCallback cb = mKeyguardListener; if (cb != null) { + if (DEBUG) { + Slog.i(TAG, "Notifying keyguard of lock wallpaper clear"); + } try { cb.onWallpaperChanged(); } catch (RemoteException e) { // Oh well it went away; no big deal } } + saveSettingsLocked(userId); return; } }