diff options
author | d34d <clark@cyngn.com> | 2016-03-31 09:47:40 -0700 |
---|---|---|
committer | d34d <clark@cyngn.com> | 2016-03-31 09:47:40 -0700 |
commit | 0ff6e87d92b6152c41a7f99f6eb974ecc90fa44a (patch) | |
tree | 2220f80a9b2225219463a164e66d8fb7471cc2ca | |
parent | 191efc4c33c3b26e3537c399fc114e5a67bd6a4a (diff) | |
download | android_packages_services_LiveLockScreenService-0ff6e87d92b6152c41a7f99f6eb974ecc90fa44a.tar.gz android_packages_services_LiveLockScreenService-0ff6e87d92b6152c41a7f99f6eb974ecc90fa44a.tar.bz2 android_packages_services_LiveLockScreenService-0ff6e87d92b6152c41a7f99f6eb974ecc90fa44a.zip |
Observe enabled changes and update current accordingly
Change-Id: If6eb2eb2a9841f622a28859988aadc8d8ad1a3b8
-rw-r--r-- | Android.mk | 1 | ||||
-rw-r--r-- | AndroidManifest.xml | 2 | ||||
-rw-r--r-- | src/org/cyanogenmod/livelockscreen/service/LiveLockScreenManagerService.java | 60 |
3 files changed, 60 insertions, 3 deletions
@@ -30,6 +30,7 @@ LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res LOCAL_PROGUARD_FLAG_FILES := proguard.flags LOCAL_PROGUARD_ENABLED := optimization +LOCAL_CERTIFICATE := platform LOCAL_PRIVILEGED_MODULE := true include $(BUILD_PACKAGE) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d384f99..8b67a79 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -18,7 +18,7 @@ package="org.cyanogenmod.livelockscreen.service" coreApp="true"> - <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/> + <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/> <uses-permission android:name="cyanogenmod.permission.LIVE_LOCK_SCREEN_MANAGER_PROVIDER"/> <application android:label="@string/app_name"> diff --git a/src/org/cyanogenmod/livelockscreen/service/LiveLockScreenManagerService.java b/src/org/cyanogenmod/livelockscreen/service/LiveLockScreenManagerService.java index d534c3e..b5142e6 100644 --- a/src/org/cyanogenmod/livelockscreen/service/LiveLockScreenManagerService.java +++ b/src/org/cyanogenmod/livelockscreen/service/LiveLockScreenManagerService.java @@ -17,12 +17,16 @@ package org.cyanogenmod.livelockscreen.service; import android.content.ComponentName; +import android.content.ContentResolver; +import android.database.ContentObserver; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.Process; import android.os.RemoteException; +import android.os.UserHandle; +import android.text.TextUtils; import android.util.Log; import cyanogenmod.app.BaseLiveLockManagerService; @@ -36,11 +40,14 @@ public class LiveLockScreenManagerService extends BaseLiveLockManagerService { private static final boolean DEBUG = false; private LiveLockScreenInfo mCurrentLiveLockScreen; + private boolean mLiveLockScreenEnabled; private WorkerHandler mHandler; private final HandlerThread mWorkerThread = new HandlerThread("worker", Process.THREAD_PRIORITY_BACKGROUND); + private SettingsObserver mSettingsObserver; + private class WorkerHandler extends Handler { private static final int MSG_UPDATE_CURRENT = 1000; @@ -74,7 +81,7 @@ public class LiveLockScreenManagerService extends BaseLiveLockManagerService { @Override public LiveLockScreenInfo getCurrentLiveLockScreen() throws RemoteException { - return mCurrentLiveLockScreen; + return mLiveLockScreenEnabled ? mCurrentLiveLockScreen : null; } @Override @@ -83,6 +90,11 @@ public class LiveLockScreenManagerService extends BaseLiveLockManagerService { mHandler.sendMessage(msg); } + @Override + public boolean getLiveLockScreenEnabled() throws RemoteException { + return mLiveLockScreenEnabled; + } + public LiveLockScreenManagerService() { super(); } @@ -93,10 +105,18 @@ public class LiveLockScreenManagerService extends BaseLiveLockManagerService { if (DEBUG) Log.d(TAG, "service created"); mWorkerThread.start(); mHandler = new WorkerHandler(mWorkerThread.getLooper()); + mSettingsObserver = new SettingsObserver(mHandler); + mSettingsObserver.observe(); mCurrentLiveLockScreen = getDefaultLiveLockScreenInternal(); } + @Override + public void onDestroy() { + super.onDestroy(); + mSettingsObserver.unobserve(); + } + private void handleUpdateCurrentLiveLockScreenLocked(LiveLockScreenInfo llsInfo) { if (!Objects.equals(mCurrentLiveLockScreen, llsInfo)) { mCurrentLiveLockScreen = llsInfo; @@ -108,11 +128,47 @@ public class LiveLockScreenManagerService extends BaseLiveLockManagerService { final String defComponent = CMSettings.Secure.getString(getContentResolver(), CMSettings.Secure.DEFAULT_LIVE_LOCK_SCREEN_COMPONENT); - if (defComponent != null) { + if (!TextUtils.isEmpty(defComponent)) { return new LiveLockScreenInfo.Builder() .setComponent(ComponentName.unflattenFromString(defComponent)) .build(); } return null; } + + private class SettingsObserver extends ContentObserver { + /** + * Creates a content observer. + * + * @param handler The handler to run {@link #onChange} on, or null if none. + */ + public SettingsObserver(Handler handler) { + super(handler); + } + + public void observe() { + ContentResolver resolver = getContentResolver(); + resolver.registerContentObserver(CMSettings.Secure.getUriFor( + CMSettings.Secure.LIVE_LOCK_SCREEN_ENABLED), false, this, + UserHandle.USER_ALL); + onChange(true); + } + + public void unobserve() { + getContentResolver().unregisterContentObserver(this); + } + + @Override + public void onChange(boolean selfChange) { + mLiveLockScreenEnabled = CMSettings.Secure.getInt(getContentResolver(), + CMSettings.Secure.LIVE_LOCK_SCREEN_ENABLED, 0) == 1; + if (!selfChange) { + try { + notifyChangeListeners(getCurrentLiveLockScreen()); + } catch (RemoteException e) { + /* ignore */ + } + } + } + } } |