Skip to content

Commit 82245c1

Browse files
Amith YamasaniAndroid (Google) Code Review
authored andcommitted
Merge "Fix dupes in initial wallpaper selection" into jb-mr1-dev
2 parents dfc8e79 + 6474c4c commit 82245c1

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

services/java/com/android/server/WallpaperManagerService.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import android.content.pm.ResolveInfo;
3939
import android.content.pm.ServiceInfo;
4040
import android.content.pm.PackageManager.NameNotFoundException;
41+
import android.content.pm.UserInfo;
4142
import android.content.res.Resources;
4243
import android.os.Binder;
4344
import android.os.Bundle;
@@ -53,6 +54,7 @@
5354
import android.os.ServiceManager;
5455
import android.os.SystemClock;
5556
import android.os.UserHandle;
57+
import android.os.UserManager;
5658
import android.service.wallpaper.IWallpaperConnection;
5759
import android.service.wallpaper.IWallpaperEngine;
5860
import android.service.wallpaper.IWallpaperService;
@@ -511,6 +513,9 @@ void switchUser(int userId, IRemoteCallback reply) {
511513
wallpaper = new WallpaperData(userId);
512514
mWallpaperMap.put(userId, wallpaper);
513515
loadSettingsLocked(userId);
516+
}
517+
// Not started watching yet, in case wallpaper data was loaded for other reasons.
518+
if (wallpaper.wallpaperObserver == null) {
514519
wallpaper.wallpaperObserver = new WallpaperObserver(wallpaper);
515520
wallpaper.wallpaperObserver.startWatching();
516521
}
@@ -580,9 +585,21 @@ void clearWallpaperLocked(boolean defaultFailed, int userId, IRemoteCallback rep
580585

581586
public boolean hasNamedWallpaper(String name) {
582587
synchronized (mLock) {
583-
for (int i=0; i<mWallpaperMap.size(); i++) {
584-
WallpaperData wd = mWallpaperMap.valueAt(i);
585-
if (name.equals(wd.name)) {
588+
List<UserInfo> users;
589+
long ident = Binder.clearCallingIdentity();
590+
try {
591+
users = ((UserManager) mContext.getSystemService(Context.USER_SERVICE)).getUsers();
592+
} finally {
593+
Binder.restoreCallingIdentity(ident);
594+
}
595+
for (UserInfo user: users) {
596+
WallpaperData wd = mWallpaperMap.get(user.id);
597+
if (wd == null) {
598+
// User hasn't started yet, so load her settings to peek at the wallpaper
599+
loadSettingsLocked(user.id);
600+
wd = mWallpaperMap.get(user.id);
601+
}
602+
if (wd != null && name.equals(wd.name)) {
586603
return true;
587604
}
588605
}

0 commit comments

Comments
 (0)