summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Salo <asalo@google.com> 2019-02-15 13:50:11 -0800
committer Alex Salo <asalo@google.com> 2019-02-28 11:01:16 -0800
commit9af68f16d13522a72e710635065852885f859f2b (patch)
treecab7112c02f99e1331d27569e88a9d6bf45a6de7
parent0072f63eef049e11f65bb9dcac8b8bac87c19b6e (diff)
Put AttentionDetector behind a setting
Observe the setting change and user change to always have fresh value of isEnabled in AttentionDetector. If disabled, don't do anything. Bug: 111939367 Test: atest AttentionDetectorTest Change-Id: I6625dbe408c92ca644f2110123c57207433ac519
-rw-r--r--services/core/java/com/android/server/power/AttentionDetector.java28
-rw-r--r--services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java28
2 files changed, 55 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/power/AttentionDetector.java b/services/core/java/com/android/server/power/AttentionDetector.java
index 8740256af04d..406cbc10a8aa 100644
--- a/services/core/java/com/android/server/power/AttentionDetector.java
+++ b/services/core/java/com/android/server/power/AttentionDetector.java
@@ -19,9 +19,13 @@ package com.android.server.power;
import android.attention.AttentionManagerInternal;
import android.attention.AttentionManagerInternal.AttentionCallbackInternal;
import android.content.Context;
+import android.database.ContentObserver;
+import android.os.Handler;
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.SystemClock;
+import android.os.UserHandle;
+import android.provider.Settings;
import android.service.attention.AttentionService;
import android.util.Slog;
import android.util.StatsLog;
@@ -44,6 +48,8 @@ public class AttentionDetector {
private static final String TAG = "AttentionDetector";
private static final boolean DEBUG = false;
+ private boolean mIsSettingEnabled;
+
/**
* Invoked whenever user attention is detected.
*/
@@ -128,15 +134,35 @@ public class AttentionDetector {
mWakefulness = PowerManagerInternal.WAKEFULNESS_AWAKE;
}
+ @VisibleForTesting
+ void updateEnabledFromSettings(Context context) {
+ mIsSettingEnabled = Settings.System.getIntForUser(context.getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT) == 1;
+ }
+
public void systemReady(Context context) {
+ updateEnabledFromSettings(context);
mAttentionManager = LocalServices.getService(AttentionManagerInternal.class);
mMaximumExtensionMillis = context.getResources().getInteger(
com.android.internal.R.integer.config_attentionMaximumExtension);
mMaxAttentionApiTimeoutMillis = context.getResources().getInteger(
com.android.internal.R.integer.config_attentionApiTimeout);
+
+ context.getContentResolver().registerContentObserver(Settings.System.getUriFor(
+ Settings.System.ADAPTIVE_SLEEP),
+ false, new ContentObserver(new Handler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ updateEnabledFromSettings(context);
+ }
+ }, UserHandle.USER_ALL);
}
public long updateUserActivity(long nextScreenDimming) {
+ if (!mIsSettingEnabled) {
+ return nextScreenDimming;
+ }
+
if (!isAttentionServiceSupported()) {
return nextScreenDimming;
}
@@ -182,7 +208,7 @@ public class AttentionDetector {
* the activity happened.
*
* @param eventTime Activity time, in uptime millis.
- * @param event Activity type as defined in {@link PowerManager}.
+ * @param event Activity type as defined in {@link PowerManager}.
* @return 0 when activity was ignored, 1 when handled, -1 when invalid.
*/
public int onUserActivity(long eventTime, int event) {
diff --git a/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java b/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
index 6a937fabd3ec..a2f1f01b689f 100644
--- a/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
@@ -32,10 +32,13 @@ import android.attention.AttentionManagerInternal;
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.SystemClock;
+import android.os.UserHandle;
+import android.provider.Settings;
import android.service.attention.AttentionService;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
@@ -49,6 +52,7 @@ public class AttentionDetectorTest extends AndroidTestCase {
private TestableAttentionDetector mAttentionDetector;
private long mAttentionTimeout;
private long mNextDimming;
+ private int mIsSettingEnabled;
@Before
public void setUp() {
@@ -59,6 +63,20 @@ public class AttentionDetectorTest extends AndroidTestCase {
mAttentionDetector.onWakefulnessChangeStarted(PowerManagerInternal.WAKEFULNESS_AWAKE);
mAttentionDetector.setAttentionServiceSupported(true);
mNextDimming = SystemClock.uptimeMillis() + 3000L;
+
+ // Save the existing state.
+ mIsSettingEnabled = Settings.System.getIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT);
+
+ Settings.System.putIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 1, UserHandle.USER_CURRENT);
+ mAttentionDetector.updateEnabledFromSettings(getContext());
+ }
+
+ @After
+ public void tearDown() {
+ Settings.System.putIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, mIsSettingEnabled, UserHandle.USER_CURRENT);
}
@Test
@@ -69,6 +87,16 @@ public class AttentionDetectorTest extends AndroidTestCase {
}
@Test
+ public void testOnUserActivity_doesntCheckIfNotEnabled() {
+ Settings.System.putIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT);
+ mAttentionDetector.updateEnabledFromSettings(getContext());
+ long when = registerAttention();
+ verify(mAttentionManagerInternal, never()).checkAttention(anyInt(), anyLong(), any());
+ assertThat(mNextDimming).isEqualTo(when);
+ }
+
+ @Test
public void testOnUserActivity_doesntCheckIfNotSupported() {
mAttentionDetector.setAttentionServiceSupported(false);
long when = registerAttention();