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

Commit c7505bc9 authored by Jeff Brown's avatar Jeff Brown
Browse files

Increase lock screen timeout when on custom widget page.

Bug: 7290676
Change-Id: I93c48fb24adb24d16ec278a4fdd51a13a85a96c3
parent 52177738
Loading
Loading
Loading
Loading
+32 −2
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ public class KeyguardHostView extends KeyguardViewBase {
    private static final String KEYGUARD_WIDGET_PREFS = "keyguard_widget_prefs";

    private AppWidgetHost mAppWidgetHost;
    private KeyguardWidgetRegion mAppWidgetRegion;
    private KeyguardWidgetPager mAppWidgetContainer;
    private ViewFlipper mSecurityViewContainer;
    private KeyguardSelectorView mKeyguardSelectorView;
@@ -142,9 +143,11 @@ public class KeyguardHostView extends KeyguardViewBase {

    @Override
    protected void onFinishInflate() {
        mAppWidgetRegion = (KeyguardWidgetRegion) findViewById(R.id.kg_widget_region);
        mAppWidgetRegion.setVisibility(VISIBLE);
        mAppWidgetRegion.setCallbacks(mWidgetCallbacks);

        mAppWidgetContainer = (KeyguardWidgetPager) findViewById(R.id.app_widget_container);
        KeyguardWidgetRegion kgwr = (KeyguardWidgetRegion) findViewById(R.id.kg_widget_region);
        kgwr.setVisibility(VISIBLE);
        mSecurityViewContainer = (ViewFlipper) findViewById(R.id.view_flipper);
        mKeyguardSelectorView = (KeyguardSelectorView) findViewById(R.id.keyguard_selector_view);

@@ -209,6 +212,33 @@ public class KeyguardHostView extends KeyguardViewBase {
        mAppWidgetContainer.addWidget(view);
    }

    private KeyguardWidgetRegion.Callbacks mWidgetCallbacks
            = new KeyguardWidgetRegion.Callbacks() {
        @Override
        public void userActivity() {
            if (mViewMediatorCallback != null) {
                mViewMediatorCallback.userActivity();
            }
        }

        @Override
        public void onUserActivityTimeoutChanged() {
            if (mViewMediatorCallback != null) {
                mViewMediatorCallback.onUserActivityTimeoutChanged();
            }
        }
    };

    @Override
    public long getUserActivityTimeout() {
        // Currently only considering user activity timeouts needed by widgets.
        // Could also take into account longer timeouts for certain security views.
        if (mAppWidgetRegion != null) {
            return mAppWidgetRegion.getUserActivityTimeout();
        }
        return -1;
    }

    private KeyguardSecurityCallback mCallback = new KeyguardSecurityCallback() {

        public void userActivity(long timeout) {
+6 −1
Original line number Diff line number Diff line
@@ -137,6 +137,12 @@ public abstract class KeyguardViewBase extends LinearLayout {
     */
    abstract public void cleanUp();

    /**
     * Gets the desired user activity timeout in milliseconds, or -1 if the
     * default should be used.
     */
    abstract public long getUserActivityTimeout();

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (interceptMediaKey(event)) {
@@ -250,5 +256,4 @@ public abstract class KeyguardViewBase extends LinearLayout {
            KeyguardViewMediator.ViewMediatorCallback viewMediatorCallback) {
        mViewMediatorCallback = viewMediatorCallback;
    }

}
+21 −1
Original line number Diff line number Diff line
@@ -184,12 +184,13 @@ public class KeyguardViewManager {
                lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
            }
            lp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
            lp.userActivityTimeout = KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS;
            lp.setTitle(isActivity ? "KeyguardMock" : "Keyguard");
            mWindowLayoutParams = lp;
            mViewManager.addView(mKeyguardHost, lp);
        }

        inflateKeyguardView(options);
        updateUserActivityTimeoutInWindowLayoutParams();
        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);

        mKeyguardHost.restoreHierarchyState(mStateContainer);
@@ -224,6 +225,25 @@ public class KeyguardViewManager {
        }
    }

    public void updateUserActivityTimeout() {
        updateUserActivityTimeoutInWindowLayoutParams();
        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
    }

    private void updateUserActivityTimeoutInWindowLayoutParams() {
        // Use the user activity timeout requested by the keyguard view, if any.
        if (mKeyguardView != null) {
            long timeout = mKeyguardView.getUserActivityTimeout();
            if (timeout >= 0) {
                mWindowLayoutParams.userActivityTimeout = timeout;
                return;
            }
        }

        // Otherwise, use the default timeout.
        mWindowLayoutParams.userActivityTimeout = KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS;
    }

    private void maybeEnableScreenRotation(boolean enableScreenRotation) {
        // TODO: move this outside
        if (enableScreenRotation) {
+23 −3
Original line number Diff line number Diff line
@@ -259,9 +259,14 @@ public class KeyguardViewMediator {
        void wakeUp();

        /**
         * Reports user activity and requests that the screen stay on for the specified
         * amount of time.
         * @param millis The amount of time in millis.
         * Reports user activity and requests that the screen stay on.
         */
        void userActivity();

        /**
         * Reports user activity and requests that the screen stay on for at least
         * the specified amount of time.
         * @param millis The amount of time in millis.  This value is currently ignored.
         */
        void userActivity(long millis);

@@ -284,6 +289,12 @@ public class KeyguardViewMediator {
         * @param needsInput
         */
        void setNeedsInput(boolean needsInput);

        /**
         * Tell view mediator that the keyguard view's desired user activity timeout
         * has changed and needs to be reapplied to the window.
         */
        void onUserActivityTimeoutChanged();
    }

    KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
@@ -400,6 +411,10 @@ public class KeyguardViewMediator {
            KeyguardViewMediator.this.wakeUp();
        }

        public void userActivity() {
            KeyguardViewMediator.this.userActivity();
        }

        public void userActivity(long holdMs) {
            KeyguardViewMediator.this.userActivity(holdMs);
        }
@@ -416,6 +431,11 @@ public class KeyguardViewMediator {
        public void setNeedsInput(boolean needsInput) {
            mKeyguardViewManager.setNeedsInput(needsInput);
        }

        @Override
        public void onUserActivityTimeoutChanged() {
            mKeyguardViewManager.updateUserActivityTimeout();
        }
    };

    public void wakeUp() {
+32 −7
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@
package com.android.internal.policy.impl.keyguard;

import android.content.Context;
import android.os.PowerManager;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
@@ -31,7 +29,9 @@ public class KeyguardWidgetRegion extends LinearLayout implements PageSwitchList
    KeyguardGlowStripView mRightStrip;
    KeyguardWidgetPager mPager;
    private int mPage = 0;
    private PowerManager mPowerManager;
    private Callbacks mCallbacks;

    private static final long CUSTOM_WIDGET_USER_ACTIVITY_TIMEOUT = 30000;

    public KeyguardWidgetRegion(Context context) {
        this(context, null, 0);
@@ -43,7 +43,6 @@ public class KeyguardWidgetRegion extends LinearLayout implements PageSwitchList

    public KeyguardWidgetRegion(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
    }

    @Override
@@ -75,9 +74,10 @@ public class KeyguardWidgetRegion extends LinearLayout implements PageSwitchList
    @Override
    public void onPageSwitch(View newPage, int newPageIndex) {
        boolean showingStatusWidget = false;
        if ((newPage instanceof ViewGroup)) {
        if (newPage instanceof ViewGroup) {
            ViewGroup vg = (ViewGroup) newPage;
            if (vg.getChildAt(0) instanceof KeyguardStatusView) {
            View view = vg.getChildAt(0);
            if (view instanceof KeyguardStatusView) {
                showingStatusWidget = true;
            }
        }
@@ -91,8 +91,33 @@ public class KeyguardWidgetRegion extends LinearLayout implements PageSwitchList

        // Extend the display timeout if the user switches pages
        if (mPage != newPageIndex) {
            mPowerManager.userActivity(SystemClock.uptimeMillis(), false);
            mPage = newPageIndex;
            if (mCallbacks != null) {
                mCallbacks.onUserActivityTimeoutChanged();
                mCallbacks.userActivity();
            }
        }
    }

    public long getUserActivityTimeout() {
        View page = mPager.getPageAt(mPage);
        if (page instanceof ViewGroup) {
            ViewGroup vg = (ViewGroup) page;
            View view = vg.getChildAt(0);
            if (!(view instanceof KeyguardStatusView)
                    && !(view instanceof KeyguardMultiUserSelectorView)) {
                return CUSTOM_WIDGET_USER_ACTIVITY_TIMEOUT;
            }
        }
        return -1;
    }

    public void setCallbacks(Callbacks callbacks) {
        mCallbacks = callbacks;
    }

    public interface Callbacks {
        public void userActivity();
        public void onUserActivityTimeoutChanged();
    }
}