summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authord34d <clark@cyngn.com>2016-03-31 09:47:40 -0700
committerd34d <clark@cyngn.com>2016-03-31 09:47:40 -0700
commit0ff6e87d92b6152c41a7f99f6eb974ecc90fa44a (patch)
tree2220f80a9b2225219463a164e66d8fb7471cc2ca
parent191efc4c33c3b26e3537c399fc114e5a67bd6a4a (diff)
downloadandroid_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.mk1
-rw-r--r--AndroidManifest.xml2
-rw-r--r--src/org/cyanogenmod/livelockscreen/service/LiveLockScreenManagerService.java60
3 files changed, 60 insertions, 3 deletions
diff --git a/Android.mk b/Android.mk
index 8126543..e7bb685 100644
--- a/Android.mk
+++ b/Android.mk
@@ -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 */
+ }
+ }
+ }
+ }
}