summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Brown <jeffbrown@google.com> 2012-10-05 21:58:15 -0700
committer Jeff Brown <jeffbrown@google.com> 2012-10-06 14:25:09 -0700
commitc7505bc9dddcb0655302c1598e966bf121586ebe (patch)
treeb030e02b87a9c23927a7cd85f0b0fddd900dcb3d
parent52177738e8fa38e2f7769db1bcad40e7405baf17 (diff)
Increase lock screen timeout when on custom widget page.
Bug: 7290676 Change-Id: I93c48fb24adb24d16ec278a4fdd51a13a85a96c3
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java34
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewBase.java7
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java22
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java26
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java39
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();
}
}