diff options
| author | 2012-10-05 21:58:15 -0700 | |
|---|---|---|
| committer | 2012-10-06 14:25:09 -0700 | |
| commit | c7505bc9dddcb0655302c1598e966bf121586ebe (patch) | |
| tree | b030e02b87a9c23927a7cd85f0b0fddd900dcb3d | |
| parent | 52177738e8fa38e2f7769db1bcad40e7405baf17 (diff) | |
Increase lock screen timeout when on custom widget page.
Bug: 7290676
Change-Id: I93c48fb24adb24d16ec278a4fdd51a13a85a96c3
5 files changed, 114 insertions, 14 deletions
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java index f90769748698..8e9362e4c554 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java @@ -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) { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewBase.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewBase.java index ad5de0ec1f8d..3191f4a1df24 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewBase.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewBase.java @@ -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; } - } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java index b0f5596f9899..33ff71e30785 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java @@ -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) { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java index 1ca85b4dbf17..3ed952c2c65e 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java @@ -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() { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java index e9ea2c37b22b..47bf85bf79a1 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java @@ -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(); } } |