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

Commit b75a0b47 authored by Arthur Hung's avatar Arthur Hung Committed by Android (Google) Code Review
Browse files

Merge "Fix contextual timeout sometimes does not work" into main

parents 0bb424e4 4f120fd1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -454,7 +454,7 @@ public class Notifier {
            int ownerUid, int ownerPid, WorkSource workSource, String historyTag,
            IWakeLockCallback callback) {
        onWakeLockReleased(flags, tag, packageName, ownerUid, ownerPid, workSource, historyTag,
                callback, ScreenTimeoutOverridePolicy.RELEASE_REASON_UNKNOWN);
                callback, ScreenTimeoutOverridePolicy.RELEASE_REASON_NOT_ACQUIRED);
    }

    /**
+4 −4
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ import static com.android.internal.util.LatencyTracker.ACTION_TURN_ON_SCREEN;
import static com.android.server.deviceidle.Flags.disableWakelocksInLightIdle;
import static com.android.server.display.DisplayDeviceConfig.INVALID_BRIGHTNESS_IN_CONFIG;
import static com.android.server.display.brightness.BrightnessUtils.isValidBrightnessValue;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_UNKNOWN;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_NOT_ACQUIRED;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_WAKE_LOCK_DEATH;

import android.annotation.IntDef;
@@ -1879,7 +1879,7 @@ public final class PowerManagerService extends SystemService
    @GuardedBy("mLock")
    private void removeWakeLockNoUpdateLocked(WakeLock wakeLock, int index) {
        removeWakeLockNoUpdateLocked(wakeLock, index,
                ScreenTimeoutOverridePolicy.RELEASE_REASON_UNKNOWN);
                ScreenTimeoutOverridePolicy.RELEASE_REASON_NOT_ACQUIRED);
    }

    @GuardedBy("mLock")
@@ -2065,7 +2065,7 @@ public final class PowerManagerService extends SystemService

    @GuardedBy("mLock")
    private void notifyWakeLockReleasedLocked(WakeLock wakeLock) {
        notifyWakeLockReleasedLocked(wakeLock, RELEASE_REASON_UNKNOWN);
        notifyWakeLockReleasedLocked(wakeLock, RELEASE_REASON_NOT_ACQUIRED);
    }

    @GuardedBy("mLock")
@@ -2195,7 +2195,7 @@ public final class PowerManagerService extends SystemService
            mAttentionDetector.onUserActivity(eventTime, event);

            if (mScreenTimeoutOverridePolicy != null) {
                mScreenTimeoutOverridePolicy.onUserActivity(mWakeLockSummary, event);
                mScreenTimeoutOverridePolicy.onUserActivity(mWakeLockSummary, event, flags);
            }

            if (mUserInactiveOverrideFromWindowManager) {
+9 −5
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.power;

import static android.os.PowerManager.USER_ACTIVITY_FLAG_INDIRECT;

import static com.android.server.power.PowerManagerService.WAKE_LOCK_BUTTON_BRIGHT;
import static com.android.server.power.PowerManagerService.WAKE_LOCK_SCREEN_BRIGHT;
import static com.android.server.power.PowerManagerService.WAKE_LOCK_SCREEN_DIM;
@@ -46,7 +48,7 @@ final class ScreenTimeoutOverridePolicy {
    /**
     * Release reason code: The wake lock is never acquired.
     */
    public static final int RELEASE_REASON_UNKNOWN = -1;
    public static final int RELEASE_REASON_NOT_ACQUIRED = -1;

    /**
     * Release reason code: The wake lock can't be acquired because of screen off.
@@ -92,7 +94,7 @@ final class ScreenTimeoutOverridePolicy {
     * @hide
     */
    @IntDef(prefix = { "RELEASE_REASON_" }, value = {
            RELEASE_REASON_UNKNOWN,
            RELEASE_REASON_NOT_ACQUIRED,
            RELEASE_REASON_NON_INTERACTIVE,
            RELEASE_REASON_SCREEN_LOCK,
            RELEASE_REASON_USER_ACTIVITY_ATTENTION,
@@ -109,7 +111,7 @@ final class ScreenTimeoutOverridePolicy {
    private long mScreenTimeoutOverrideConfig;

    // The last reason that wake locks had been released by service.
    private @ReleaseReason int mLastAutoReleaseReason = RELEASE_REASON_UNKNOWN;
    private @ReleaseReason int mLastAutoReleaseReason = RELEASE_REASON_NOT_ACQUIRED;

    interface PolicyCallback {
        /**
@@ -150,8 +152,10 @@ final class ScreenTimeoutOverridePolicy {
    /**
     * Called when the policy have to release all wake lock when user activity occurred.
     */
    void onUserActivity(int wakeLockSummary, @PowerManager.UserActivityEvent int event) {
        if (!isWakeLockAcquired(wakeLockSummary)) {
    void onUserActivity(int wakeLockSummary, @PowerManager.UserActivityEvent int event, int flags) {
        if (!isWakeLockAcquired(wakeLockSummary) || (flags & USER_ACTIVITY_FLAG_INDIRECT) != 0) {
            // Do not release wake lock when there is no wake lock hold or the flag hints not to
            // reset the user activity timeout.
            return;
        }

+3 −2
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import static android.view.Display.DEFAULT_DISPLAY;
import static com.android.server.power.ScreenTimeoutConstants.DEFAULT_SCREEN_OFF_TIMEOUT;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_NON_INTERACTIVE;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_SCREEN_LOCK;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_UNKNOWN;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_NOT_ACQUIRED;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_USER_ACTIVITY_ACCESSIBILITY;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_USER_ACTIVITY_ATTENTION;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_USER_ACTIVITY_BUTTON;
@@ -492,7 +492,8 @@ public class WakefulnessSessionObserver {
                                mOverrideTimeoutMs,
                                screenOffTimeoutMs);
                        mSendOverrideTimeoutLogTimestamp = eventTime;
                        mTimeoutOverrideReleaseReason = RELEASE_REASON_UNKNOWN; // reset the reason
                        // Reset the reason after applied.
                        mTimeoutOverrideReleaseReason = RELEASE_REASON_NOT_ACQUIRED;
                    }

                    checkAndLogDimIfQualified(POLICY_REASON_OFF_POWER_BUTTON, eventTime);
+35 −11
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.power;


import static android.os.PowerManager.USER_ACTIVITY_FLAG_INDIRECT;
import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP;
import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE;
import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING;
@@ -28,7 +29,7 @@ import static com.android.server.power.PowerManagerService.WAKE_LOCK_SCREEN_DIM;
import static com.android.server.power.PowerManagerService.WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_NON_INTERACTIVE;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_SCREEN_LOCK;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_UNKNOWN;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_NOT_ACQUIRED;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_USER_ACTIVITY_ACCESSIBILITY;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_USER_ACTIVITY_ATTENTION;
import static com.android.server.power.ScreenTimeoutOverridePolicy.RELEASE_REASON_USER_ACTIVITY_BUTTON;
@@ -63,7 +64,7 @@ public class ScreenTimeoutOverridePolicyTest {
    private ScreenTimeoutOverridePolicy mScreenTimeoutOverridePolicy;

    private ScreenTimeoutOverridePolicy.PolicyCallback mPolicyCallback;
    private int mReleaseReason = RELEASE_REASON_UNKNOWN;
    private int mReleaseReason = RELEASE_REASON_NOT_ACQUIRED;

    @Before
    public void setUp() {
@@ -83,30 +84,53 @@ public class ScreenTimeoutOverridePolicyTest {
    @Test
    public void testUserActivity() {
        mScreenTimeoutOverridePolicy.onUserActivity(WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE,
                PowerManager.USER_ACTIVITY_EVENT_ATTENTION);
                PowerManager.USER_ACTIVITY_EVENT_ATTENTION, 0);
        verifyReason(RELEASE_REASON_USER_ACTIVITY_ATTENTION);

        mScreenTimeoutOverridePolicy.onUserActivity(WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE,
                PowerManager.USER_ACTIVITY_EVENT_OTHER);
                PowerManager.USER_ACTIVITY_EVENT_OTHER, 0);
        verifyReason(RELEASE_REASON_USER_ACTIVITY_OTHER);

        mScreenTimeoutOverridePolicy.onUserActivity(WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE,
                PowerManager.USER_ACTIVITY_EVENT_BUTTON);
                PowerManager.USER_ACTIVITY_EVENT_BUTTON, 0);
        verifyReason(RELEASE_REASON_USER_ACTIVITY_BUTTON);

        mScreenTimeoutOverridePolicy.onUserActivity(WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE,
                PowerManager.USER_ACTIVITY_EVENT_TOUCH);
                PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
        verifyReason(RELEASE_REASON_USER_ACTIVITY_TOUCH);

        mScreenTimeoutOverridePolicy.onUserActivity(WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE,
                PowerManager.USER_ACTIVITY_EVENT_ACCESSIBILITY);
                PowerManager.USER_ACTIVITY_EVENT_ACCESSIBILITY, 0);
        verifyReason(RELEASE_REASON_USER_ACTIVITY_ACCESSIBILITY);
    }

    @Test
    public void testUserActivityIndirect() {
        mScreenTimeoutOverridePolicy.onUserActivity(WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE,
                PowerManager.USER_ACTIVITY_EVENT_ATTENTION, USER_ACTIVITY_FLAG_INDIRECT);
        verifyReason(RELEASE_REASON_NOT_ACQUIRED);

        mScreenTimeoutOverridePolicy.onUserActivity(WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE,
                PowerManager.USER_ACTIVITY_EVENT_OTHER, USER_ACTIVITY_FLAG_INDIRECT);
        verifyReason(RELEASE_REASON_NOT_ACQUIRED);

        mScreenTimeoutOverridePolicy.onUserActivity(WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE,
                PowerManager.USER_ACTIVITY_EVENT_BUTTON, USER_ACTIVITY_FLAG_INDIRECT);
        verifyReason(RELEASE_REASON_NOT_ACQUIRED);

        mScreenTimeoutOverridePolicy.onUserActivity(WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE,
                PowerManager.USER_ACTIVITY_EVENT_TOUCH, USER_ACTIVITY_FLAG_INDIRECT);
        verifyReason(RELEASE_REASON_NOT_ACQUIRED);

        mScreenTimeoutOverridePolicy.onUserActivity(WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE,
                PowerManager.USER_ACTIVITY_EVENT_ACCESSIBILITY, USER_ACTIVITY_FLAG_INDIRECT);
        verifyReason(RELEASE_REASON_NOT_ACQUIRED);
    }

    @Test
    public void testScreenWakeLock() {
        mScreenTimeoutOverridePolicy.checkScreenWakeLock(WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE);
        verifyReason(RELEASE_REASON_UNKNOWN);
        verifyReason(RELEASE_REASON_NOT_ACQUIRED);

        mScreenTimeoutOverridePolicy.checkScreenWakeLock(
                WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE | WAKE_LOCK_SCREEN_BRIGHT);
@@ -126,11 +150,11 @@ public class ScreenTimeoutOverridePolicyTest {
    public void testWakefulnessChange() {
        mScreenTimeoutOverridePolicy.onWakefulnessChange(
                WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE, WAKEFULNESS_AWAKE);
        verifyReason(RELEASE_REASON_UNKNOWN);
        verifyReason(RELEASE_REASON_NOT_ACQUIRED);

        mScreenTimeoutOverridePolicy.onWakefulnessChange(
                WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE, WAKEFULNESS_DREAMING);
        verifyReason(RELEASE_REASON_UNKNOWN);
        verifyReason(RELEASE_REASON_NOT_ACQUIRED);

        mScreenTimeoutOverridePolicy.onWakefulnessChange(
                WAKE_LOCK_SCREEN_TIMEOUT_OVERRIDE, WAKEFULNESS_ASLEEP);
@@ -143,6 +167,6 @@ public class ScreenTimeoutOverridePolicyTest {

    private void verifyReason(int expectedReason) {
        assertThat(mReleaseReason).isEqualTo(expectedReason);
        mReleaseReason = RELEASE_REASON_UNKNOWN;
        mReleaseReason = RELEASE_REASON_NOT_ACQUIRED;
    }
}
Loading