From 6474c4cd939fcb03449e607c7cd06b95c4632aaa Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Thu, 4 Oct 2012 14:55:42 -0700 Subject: [PATCH] Fix dupes in initial wallpaper selection Bug: 7281217 Needed to load the settings for the user, in case the user was stopped. Change-Id: I52d1f59a7681f8c4f7d3596486accb91cb840ecf --- .../server/WallpaperManagerService.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java index 4225913844c9b..98f561cc8f214 100644 --- a/services/java/com/android/server/WallpaperManagerService.java +++ b/services/java/com/android/server/WallpaperManagerService.java @@ -38,6 +38,7 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.UserInfo; import android.content.res.Resources; import android.os.Binder; import android.os.Bundle; @@ -53,6 +54,7 @@ import android.os.SELinux; import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; +import android.os.UserManager; import android.service.wallpaper.IWallpaperConnection; import android.service.wallpaper.IWallpaperEngine; import android.service.wallpaper.IWallpaperService; @@ -511,6 +513,9 @@ class WallpaperManagerService extends IWallpaperManager.Stub { wallpaper = new WallpaperData(userId); mWallpaperMap.put(userId, wallpaper); loadSettingsLocked(userId); + } + // Not started watching yet, in case wallpaper data was loaded for other reasons. + if (wallpaper.wallpaperObserver == null) { wallpaper.wallpaperObserver = new WallpaperObserver(wallpaper); wallpaper.wallpaperObserver.startWatching(); } @@ -580,9 +585,21 @@ class WallpaperManagerService extends IWallpaperManager.Stub { public boolean hasNamedWallpaper(String name) { synchronized (mLock) { - for (int i=0; i users; + long ident = Binder.clearCallingIdentity(); + try { + users = ((UserManager) mContext.getSystemService(Context.USER_SERVICE)).getUsers(); + } finally { + Binder.restoreCallingIdentity(ident); + } + for (UserInfo user: users) { + WallpaperData wd = mWallpaperMap.get(user.id); + if (wd == null) { + // User hasn't started yet, so load her settings to peek at the wallpaper + loadSettingsLocked(user.id); + wd = mWallpaperMap.get(user.id); + } + if (wd != null && name.equals(wd.name)) { return true; } }