summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wallpaper/WallpaperManagerService.java26
1 files changed, 15 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index b963561dfd3c..0536ff155513 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -1138,7 +1138,13 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
mMonitor = new MyPackageMonitor();
mMonitor.register(context, null, UserHandle.ALL, true);
getWallpaperDir(UserHandle.USER_SYSTEM).mkdirs();
+
+ // Initialize state from the persistent store, then guarantee that the
+ // WallpaperData for the system imagery is instantiated & active, creating
+ // it from defaults if necessary.
loadSettingsLocked(UserHandle.USER_SYSTEM, false);
+ getWallpaperSafeLocked(UserHandle.USER_SYSTEM, FLAG_SYSTEM);
+
mColorsChangedListeners = new SparseArray<>();
}
@@ -1627,13 +1633,10 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
(which == FLAG_LOCK) ? mLockWallpaperMap : mWallpaperMap;
WallpaperData wallpaper = whichSet.get(wallpaperUserId);
if (wallpaper == null) {
- // common case, this is the first lookup post-boot of the system or
- // unified lock, so we bring up the saved state lazily now and recheck.
- loadSettingsLocked(wallpaperUserId, false);
- wallpaper = whichSet.get(wallpaperUserId);
- if (wallpaper == null) {
- return null;
- }
+ // There is no established wallpaper imagery of this type (expected
+ // only for lock wallpapers; a system WallpaperData is established at
+ // user switch)
+ return null;
}
try {
if (outParams != null) {
@@ -1658,7 +1661,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
@Override
public WallpaperInfo getWallpaperInfo(int userId) {
userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
- Binder.getCallingUid(), userId, false, true, "getWallpaperIdForUser", null);
+ Binder.getCallingUid(), userId, false, true, "getWallpaperInfo", null);
synchronized (mLock) {
WallpaperData wallpaper = mWallpaperMap.get(userId);
if (wallpaper != null && wallpaper.connection != null) {
@@ -2260,7 +2263,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
private void writeWallpaperAttributes(XmlSerializer out, String tag, WallpaperData wallpaper)
throws IllegalArgumentException, IllegalStateException, IOException {
if (DEBUG) {
- Slog.v(TAG, "writeWallpaperAttributes");
+ Slog.v(TAG, "writeWallpaperAttributes id=" + wallpaper.wallpaperId);
}
out.startTag(null, tag);
out.attribute(null, "id", Integer.toString(wallpaper.wallpaperId));
@@ -2359,6 +2362,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
* the event yet. We use this safe method when we don't care about this ordering and just
* want to update the data. The data is going to be applied when the user switch observer
* is eventually executed.
+ *
+ * Important: this method loads settings to initialize the given user's wallpaper data if
+ * there is no current in-memory state.
*/
private WallpaperData getWallpaperSafeLocked(int userId, int which) {
// We're setting either just system (work with the system wallpaper),
@@ -2397,8 +2403,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
}
private void loadSettingsLocked(int userId, boolean keepDimensionHints) {
- if (DEBUG) Slog.v(TAG, "loadSettingsLocked");
-
JournaledFile journal = makeJournaledFile(userId);
FileInputStream stream = null;
File file = journal.chooseForRead();