diff options
| author | 2019-02-15 13:50:11 -0800 | |
|---|---|---|
| committer | 2019-02-28 11:01:16 -0800 | |
| commit | 9af68f16d13522a72e710635065852885f859f2b (patch) | |
| tree | cab7112c02f99e1331d27569e88a9d6bf45a6de7 | |
| parent | 0072f63eef049e11f65bb9dcac8b8bac87c19b6e (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.java | 28 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java | 28 |
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(); |