summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoman Birg <roman@cyngn.com>2015-07-09 12:21:55 -0700
committerGerrit Code Review <gerrit@cyanogenmod.org>2015-07-09 17:11:28 -0700
commit43b21f616154133e641abaf309058d5abf070a7c (patch)
tree3ef7f81065bfee47126695932555dc3b544fe22c
parent6e430b6c121978796064fe33d11e0b7af41abafe (diff)
downloadandroid_frameworks_base-43b21f616154133e641abaf309058d5abf070a7c.tar.gz
android_frameworks_base-43b21f616154133e641abaf309058d5abf070a7c.tar.bz2
android_frameworks_base-43b21f616154133e641abaf309058d5abf070a7c.zip
WallpaperManagerService: use a single file observer
In order to clean up logic, 2a80ec9 split up to have two separate file observers, since there are two separate objects, one for kg, one for regular wallpaper. However, there can only be one file observer registered for a directory. This was causing the keyguard observer getting all the inotify events since it was the last one registered, which stopped regular wallpaper change detections until a reboot. Move the file observer logic out of the wallpaper info and make it work for both. Change-Id: I8fd4976fb4731abe52dfcc8064af2edc42b274f9 Signed-off-by: Roman Birg <roman@cyngn.com>
-rw-r--r--services/core/java/com/android/server/wallpaper/WallpaperManagerService.java92
1 files changed, 28 insertions, 64 deletions
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 1cd8030d4f8..e4530c4137b 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -107,6 +107,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
static final String KEYGUARD_WALLPAPER = "keyguard_wallpaper";
static final String KEYGUARD_WALLPAPER_INFO = "keyguard_wallpaper_info.xml";
+ private WallpaperObserver mWallpaperObserver;
+
/**
* Observes the wallpaper for changes and notifies all IWallpaperServiceCallbacks
* that the wallpaper has changed. The CREATE is triggered when there is no
@@ -120,13 +122,22 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
final File mWallpaperFile;
final File mWallpaperInfoFile;
- public WallpaperObserver(WallpaperData wallpaper) {
+ final KeyguardWallpaperData mKeyguardWallpaper;
+ final File mKeyguardWallpaperFile;
+ final File mKeyguardWallpaperInfoFile;
+
+ public WallpaperObserver(WallpaperData wallpaper,
+ KeyguardWallpaperData keyguardWallpaperData) {
super(getWallpaperDir(wallpaper.userId).getAbsolutePath(),
CLOSE_WRITE | MOVED_TO | DELETE | DELETE_SELF);
mWallpaperDir = getWallpaperDir(wallpaper.userId);
mWallpaper = wallpaper;
mWallpaperFile = new File(mWallpaperDir, WALLPAPER);
mWallpaperInfoFile = new File(mWallpaperDir, WALLPAPER_INFO);
+
+ mKeyguardWallpaper = keyguardWallpaperData;
+ mKeyguardWallpaperFile = new File(mWallpaperDir, KEYGUARD_WALLPAPER);
+ mKeyguardWallpaperInfoFile = new File(mWallpaperDir, KEYGUARD_WALLPAPER_INFO);
}
@Override
@@ -144,9 +155,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
bm.dataChanged();
Binder.restoreCallingIdentity(origId);
}
+ final boolean written = (event == CLOSE_WRITE || event == MOVED_TO);
if (mWallpaperFile.equals(changedFile)) {
notifyCallbacksLocked(mWallpaper);
- final boolean written = (event == CLOSE_WRITE || event == MOVED_TO);
if (mWallpaper.wallpaperComponent == null
|| event != CLOSE_WRITE // includes the MOVED_TO case
|| mWallpaper.imageWallpaperPending) {
@@ -157,34 +168,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
false, mWallpaper, null);
saveSettingsLocked(mWallpaper);
}
- }
- }
- }
- }
-
- private class KeyguardWallpaperObserver extends FileObserver {
-
- final KeyguardWallpaperData mKeyguardWallpaper;
- final File mWallpaperDir;
- final File mKeyguardWallpaperFile;
-
- public KeyguardWallpaperObserver(KeyguardWallpaperData keyguardWallpaper) {
- super(getWallpaperDir(keyguardWallpaper.userId).getAbsolutePath(),
- CLOSE_WRITE | MOVED_TO | DELETE | DELETE_SELF);
- mWallpaperDir = getWallpaperDir(keyguardWallpaper.userId);
- mKeyguardWallpaper = keyguardWallpaper;
- mKeyguardWallpaperFile = new File(mWallpaperDir, KEYGUARD_WALLPAPER);
- }
-
- @Override
- public void onEvent(int event, String path) {
- if (path == null) {
- return;
- }
- synchronized (mLock) {
- File changedFile = new File(mWallpaperDir, path);
- final boolean written = (event == CLOSE_WRITE || event == MOVED_TO);
- if (mKeyguardWallpaperFile.equals(changedFile)) {
+ } else if (mKeyguardWallpaperFile.equals(changedFile)) {
notifyCallbacksLocked(mKeyguardWallpaper);
if (written
|| mKeyguardWallpaper.imageWallpaperPending) {
@@ -245,7 +229,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
WallpaperConnection connection;
long lastDiedTime;
boolean wallpaperUpdating;
- WallpaperObserver wallpaperObserver;
/**
* List of callbacks registered they should each be notified when the wallpaper is changed.
@@ -280,8 +263,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
*/
String name = "";
- KeyguardWallpaperObserver keyguardWallpaperObserver;
-
/**
* List of callbacks registered they should each be notified when the wallpaper is changed.
*/
@@ -565,13 +546,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
@Override
protected void finalize() throws Throwable {
super.finalize();
- for (int i = 0; i < mWallpaperMap.size(); i++) {
- WallpaperData wallpaper = mWallpaperMap.valueAt(i);
- wallpaper.wallpaperObserver.stopWatching();
- }
- for (int i = 0; i < mKeyguardWallpaperMap.size(); i++) {
- KeyguardWallpaperData wallpaper = mKeyguardWallpaperMap.valueAt(i);
- wallpaper.keyguardWallpaperObserver.stopWatching();
+ if (mWallpaperObserver != null) {
+ mWallpaperObserver.stopWatching();
+ mWallpaperObserver = null;
}
}
@@ -580,12 +557,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
WallpaperData wallpaper = mWallpaperMap.get(UserHandle.USER_OWNER);
KeyguardWallpaperData keyguardWallpaper = mKeyguardWallpaperMap.get(UserHandle.USER_OWNER);
switchWallpaper(wallpaper, null);
- wallpaper.wallpaperObserver = new WallpaperObserver(wallpaper);
- wallpaper.wallpaperObserver.startWatching();
- keyguardWallpaper.keyguardWallpaperObserver
- = new KeyguardWallpaperObserver(keyguardWallpaper);
- keyguardWallpaper.keyguardWallpaperObserver.startWatching();
+ mWallpaperObserver = new WallpaperObserver(wallpaper, keyguardWallpaper);
+ mWallpaperObserver.startWatching();
IntentFilter userFilter = new IntentFilter();
userFilter.addAction(Intent.ACTION_USER_REMOVED);
@@ -639,20 +613,17 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
void onStoppingUser(int userId) {
if (userId < 1) return;
synchronized (mLock) {
+ if (mWallpaperObserver != null) {
+ mWallpaperObserver.stopWatching();
+ mWallpaperObserver = null;
+ }
+
WallpaperData wallpaper = mWallpaperMap.get(userId);
if (wallpaper != null) {
- if (wallpaper.wallpaperObserver != null) {
- wallpaper.wallpaperObserver.stopWatching();
- wallpaper.wallpaperObserver = null;
- }
mWallpaperMap.remove(userId);
}
KeyguardWallpaperData kgwallpaper = mKeyguardWallpaperMap.get(userId);
if (kgwallpaper != null) {
- if (kgwallpaper.keyguardWallpaperObserver != null) {
- kgwallpaper.keyguardWallpaperObserver.stopWatching();
- kgwallpaper.keyguardWallpaperObserver = null;
- }
mKeyguardWallpaperMap.remove(userId);
}
}
@@ -689,15 +660,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
mKeyguardWallpaperMap.put(userId, keygaurdWallpaper);
loadKeyguardSettingsLocked(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();
- }
- if (keygaurdWallpaper.keyguardWallpaperObserver == null) {
- keygaurdWallpaper.keyguardWallpaperObserver
- = new KeyguardWallpaperObserver(keygaurdWallpaper);
- keygaurdWallpaper.keyguardWallpaperObserver.startWatching();
+ if (mWallpaperObserver == null) {
+ mWallpaperObserver = new WallpaperObserver(wallpaper, keygaurdWallpaper);
+ mWallpaperObserver.startWatching();
}
switchWallpaper(wallpaper, reply);
}
@@ -983,9 +948,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
/** @hide */
public boolean isKeyguardWallpaperSet() {
- int userId = UserHandle.getCallingUserId();
synchronized (mLock) {
- KeyguardWallpaperData data = mKeyguardWallpaperMap.get(userId);
+ KeyguardWallpaperData data = mKeyguardWallpaperMap.get(mCurrentUserId);
return data.wallpaperFile.exists();
}
}