Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b8a5ea8 authored by Alex Salo's avatar Alex Salo Committed by Automerger Merge Worker
Browse files

Merge "Flag the falsing threshold for attention" into rvc-d1-dev am: 9040c8e1

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11560435

Change-Id: Ia068b98121b81c8e532840b2bb370bc4e9913adb
parents 5557368e 9040c8e1
Loading
Loading
Loading
Loading
+28 −6
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.power;

import static android.provider.DeviceConfig.NAMESPACE_ATTENTION_MANAGER_SERVICE;
import static android.provider.Settings.Secure.ADAPTIVE_SLEEP;

import android.Manifest;
import android.app.ActivityManager;
@@ -75,6 +76,12 @@ public class AttentionDetector {
    /** Default value in absence of {@link DeviceConfig} override. */
    static final long DEFAULT_POST_DIM_CHECK_DURATION_MILLIS = 0;

    /**
     * DeviceConfig flag name, describes the limit of how long the device can remain unlocked due to
     * attention checking.
     */
    static final String KEY_MAX_EXTENSION_MILLIS = "post_dim_check_duration_millis";

    private Context mContext;

    private boolean mIsSettingEnabled;
@@ -85,11 +92,11 @@ public class AttentionDetector {
    private final Runnable mOnUserAttention;

    /**
     * The maximum time, in millis, that the phone can stay unlocked because of attention events,
     * triggered by any user.
     * The default value for the maximum time, in millis, that the phone can stay unlocked because
     * of attention events, triggered by any user.
     */
    @VisibleForTesting
    protected long mMaximumExtensionMillis;
    protected long mDefaultMaximumExtensionMillis;

    private final Object mLock;

@@ -162,7 +169,7 @@ public class AttentionDetector {
        mContentResolver = context.getContentResolver();
        mAttentionManager = LocalServices.getService(AttentionManagerInternal.class);
        mWindowManager = LocalServices.getService(WindowManagerInternal.class);
        mMaximumExtensionMillis = context.getResources().getInteger(
        mDefaultMaximumExtensionMillis = context.getResources().getInteger(
                com.android.internal.R.integer.config_attentionMaximumExtension);

        try {
@@ -196,7 +203,7 @@ public class AttentionDetector {

        final long now = SystemClock.uptimeMillis();
        final long whenToCheck = nextScreenDimming - getPreDimCheckDurationMillis();
        final long whenToStopExtending = mLastUserActivityTime + mMaximumExtensionMillis;
        final long whenToStopExtending = mLastUserActivityTime + getMaxExtensionMillis();
        if (now < whenToCheck) {
            if (DEBUG) {
                Slog.d(TAG, "Do not check for attention yet, wait " + (whenToCheck - now));
@@ -309,7 +316,7 @@ public class AttentionDetector {
    public void dump(PrintWriter pw) {
        pw.println("AttentionDetector:");
        pw.println(" mIsSettingEnabled=" + mIsSettingEnabled);
        pw.println(" mMaximumExtensionMillis=" + mMaximumExtensionMillis);
        pw.println(" mMaxExtensionMillis=" + getMaxExtensionMillis());
        pw.println(" preDimCheckDurationMillis=" + getPreDimCheckDurationMillis());
        pw.println(" postDimCheckDurationMillis=" + mLastPostDimTimeout);
        pw.println(" mLastUserActivityTime(excludingAttention)=" + mLastUserActivityTime);
@@ -348,6 +355,21 @@ public class AttentionDetector {
        return mLastPostDimTimeout;
    }

    /** How long the device can remain unlocked due to attention checking. */
    @VisibleForTesting
    protected long getMaxExtensionMillis() {
        final long millis = DeviceConfig.getLong(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                KEY_MAX_EXTENSION_MILLIS,
                mDefaultMaximumExtensionMillis);

        if (millis < 0 || millis > 60 * 60 * 1000) { // 1 hour
            Slog.w(TAG, "Bad flag value supplied for: " + KEY_MAX_EXTENSION_MILLIS);
            return mDefaultMaximumExtensionMillis;
        }

        return millis;
    }

    @VisibleForTesting
    final class AttentionCallbackInternalImpl extends AttentionCallbackInternal {
        private final int mId;
+45 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.provider.DeviceConfig.NAMESPACE_ATTENTION_MANAGER_SERVICE;

import static com.android.server.power.AttentionDetector.DEFAULT_POST_DIM_CHECK_DURATION_MILLIS;
import static com.android.server.power.AttentionDetector.DEFAULT_PRE_DIM_CHECK_DURATION_MILLIS;
import static com.android.server.power.AttentionDetector.KEY_MAX_EXTENSION_MILLIS;
import static com.android.server.power.AttentionDetector.KEY_POST_DIM_CHECK_DURATION_MILLIS;
import static com.android.server.power.AttentionDetector.KEY_PRE_DIM_CHECK_DURATION_MILLIS;

@@ -87,6 +88,7 @@ public class AttentionDetectorTest extends AndroidTestCase {
        when(mWindowManagerInternal.isKeyguardShowingAndNotOccluded()).thenReturn(false);
        mAttentionDetector = new TestableAttentionDetector();
        mRealAttentionDetector = new AttentionDetector(mOnUserAttention, new Object());
        mRealAttentionDetector.mDefaultMaximumExtensionMillis = 900_000L;
        mAttentionDetector.onWakefulnessChangeStarted(PowerManagerInternal.WAKEFULNESS_AWAKE);
        mAttentionDetector.setAttentionServiceSupported(true);
        mNextDimming = SystemClock.uptimeMillis() + 3000L;
@@ -98,6 +100,10 @@ public class AttentionDetectorTest extends AndroidTestCase {
        Settings.Secure.putIntForUser(getContext().getContentResolver(),
                Settings.Secure.ADAPTIVE_SLEEP, 1, UserHandle.USER_CURRENT);
        mAttentionDetector.updateEnabledFromSettings(getContext());

        DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                KEY_MAX_EXTENSION_MILLIS,
                Long.toString(10_000L), false);
    }

    @After
@@ -111,6 +117,9 @@ public class AttentionDetectorTest extends AndroidTestCase {
        DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                KEY_POST_DIM_CHECK_DURATION_MILLIS,
                Long.toString(DEFAULT_POST_DIM_CHECK_DURATION_MILLIS), false);
        DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                KEY_MAX_EXTENSION_MILLIS,
                Long.toString(mRealAttentionDetector.mDefaultMaximumExtensionMillis), false);
    }

    @Test
@@ -393,6 +402,42 @@ public class AttentionDetectorTest extends AndroidTestCase {
                DEFAULT_POST_DIM_CHECK_DURATION_MILLIS);
    }

    @Test
    public void testGetMaxExtensionMillis_handlesGoodFlagValue() {
        DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                KEY_MAX_EXTENSION_MILLIS, "123", false);
        assertThat(mRealAttentionDetector.getMaxExtensionMillis()).isEqualTo(123);
    }

    @Test
    public void testGetMaxExtensionMillis_rejectsNegativeValue() {
        DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                KEY_MAX_EXTENSION_MILLIS, "-50", false);
        assertThat(mRealAttentionDetector.getMaxExtensionMillis()).isEqualTo(
                mRealAttentionDetector.mDefaultMaximumExtensionMillis);
    }

    @Test
    public void testGetMaxExtensionMillis_rejectsTooBigValue() {
        DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                KEY_MAX_EXTENSION_MILLIS, "9900000", false);
        assertThat(mRealAttentionDetector.getMaxExtensionMillis()).isEqualTo(
                mRealAttentionDetector.mDefaultMaximumExtensionMillis);
    }

    @Test
    public void testGetMaxExtensionMillis_handlesBadFlagValue() {
        DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                KEY_MAX_EXTENSION_MILLIS, "20000k", false);
        assertThat(mRealAttentionDetector.getMaxExtensionMillis()).isEqualTo(
                mRealAttentionDetector.mDefaultMaximumExtensionMillis);

        DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                KEY_MAX_EXTENSION_MILLIS, "0.25", false);
        assertThat(mRealAttentionDetector.getMaxExtensionMillis()).isEqualTo(
                mRealAttentionDetector.mDefaultMaximumExtensionMillis);
    }

    private long registerAttention() {
        mPreDimCheckDuration = 4000L;
        mAttentionDetector.onUserActivity(SystemClock.uptimeMillis(),
@@ -409,7 +454,6 @@ public class AttentionDetectorTest extends AndroidTestCase {
            mWindowManager = mWindowManagerInternal;
            mPackageManager = AttentionDetectorTest.this.mPackageManager;
            mContentResolver = getContext().getContentResolver();
            mMaximumExtensionMillis = 10000L;
        }

        void setAttentionServiceSupported(boolean supported) {