summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/IPowerManager.aidl1
-rw-r--r--core/java/android/os/LocalPowerManager.java28
-rw-r--r--core/java/android/view/WindowManager.java40
-rw-r--r--services/input/InputDispatcher.cpp10
-rw-r--r--services/input/InputWindow.h2
-rw-r--r--services/java/com/android/server/power/PowerManagerService.java46
-rwxr-xr-xservices/java/com/android/server/wm/WindowManagerService.java10
-rw-r--r--tests/StatusBar/src/com/android/statusbartest/PowerTest.java66
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java5
9 files changed, 102 insertions, 106 deletions
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index 5345a6d..557d3f3 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -40,7 +40,6 @@ interface IPowerManager
void reboot(String reason);
void crash(String message);
- void setPokeLock(int pokey, IBinder lock, String tag);
void setStayOnSetting(int val);
void setMaximumScreenOffTimeoutFromDeviceAdmin(int timeMs);
diff --git a/core/java/android/os/LocalPowerManager.java b/core/java/android/os/LocalPowerManager.java
deleted file mode 100644
index 519315c..0000000
--- a/core/java/android/os/LocalPowerManager.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.os;
-
-/** @hide */
-public interface LocalPowerManager {
- // FIXME: Replace poke locks with something else.
-
- public static final int POKE_LOCK_IGNORE_TOUCH_EVENTS = 0x1;
-
- public static final int POKE_LOCK_SHORT_TIMEOUT = 0x2;
- public static final int POKE_LOCK_MEDIUM_TIMEOUT = 0x4;
- public static final int POKE_LOCK_TIMEOUT_MASK = 0x6;
-}
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index fa2d4e8..6e51270 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -1176,14 +1176,42 @@ public interface WindowManager extends ViewManager {
public static final int INPUT_FEATURE_NO_INPUT_CHANNEL = 0x00000002;
/**
+ * When this window has focus, does not call user activity for all input events so
+ * the application will have to do it itself. Should only be used by
+ * the keyguard and phone app.
+ * <p>
+ * Should only be used by the keyguard and phone app.
+ * </p>
+ *
+ * @hide
+ */
+ public static final int INPUT_FEATURE_DISABLE_USER_ACTIVITY = 0x00000004;
+
+ /**
* Control special features of the input subsystem.
*
* @see #INPUT_FEATURE_DISABLE_TOUCH_PAD_GESTURES
* @see #INPUT_FEATURE_NO_INPUT_CHANNEL
+ * @see #INPUT_FEATURE_DISABLE_USER_ACTIVITY
* @hide
*/
public int inputFeatures;
+ /**
+ * Sets the number of milliseconds before the user activity timeout occurs
+ * when this window has focus. A value of -1 uses the standard timeout.
+ * A value of 0 uses the minimum support display timeout.
+ * <p>
+ * This property can only be used to reduce the user specified display timeout;
+ * it can never make the timeout longer than it normally would be.
+ * </p><p>
+ * Should only be used by the keyguard and phone app.
+ * </p>
+ *
+ * @hide
+ */
+ public long userActivityTimeout = -1;
+
public LayoutParams() {
super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
type = TYPE_APPLICATION;
@@ -1268,6 +1296,7 @@ public interface WindowManager extends ViewManager {
out.writeInt(subtreeSystemUiVisibility);
out.writeInt(hasSystemUiListeners ? 1 : 0);
out.writeInt(inputFeatures);
+ out.writeLong(userActivityTimeout);
}
public static final Parcelable.Creator<LayoutParams> CREATOR
@@ -1308,6 +1337,7 @@ public interface WindowManager extends ViewManager {
subtreeSystemUiVisibility = in.readInt();
hasSystemUiListeners = in.readInt() != 0;
inputFeatures = in.readInt();
+ userActivityTimeout = in.readLong();
}
@SuppressWarnings({"PointlessBitwiseExpression"})
@@ -1334,6 +1364,8 @@ public interface WindowManager extends ViewManager {
/** {@hide} */
public static final int PRIVATE_FLAGS_CHANGED = 1<<16;
/** {@hide} */
+ public static final int USER_ACTIVITY_TIMEOUT_CHANGED = 1<<17;
+ /** {@hide} */
public static final int EVERYTHING_CHANGED = 0xffffffff;
// internal buffer to backup/restore parameters under compatibility mode.
@@ -1455,6 +1487,11 @@ public interface WindowManager extends ViewManager {
changes |= INPUT_FEATURES_CHANGED;
}
+ if (userActivityTimeout != o.userActivityTimeout) {
+ userActivityTimeout = o.userActivityTimeout;
+ changes |= USER_ACTIVITY_TIMEOUT_CHANGED;
+ }
+
return changes;
}
@@ -1547,6 +1584,9 @@ public interface WindowManager extends ViewManager {
if (inputFeatures != 0) {
sb.append(" if=0x").append(Integer.toHexString(inputFeatures));
}
+ if (userActivityTimeout >= 0) {
+ sb.append(" userActivityTimeout=").append(userActivityTimeout);
+ }
sb.append('}');
return sb.toString();
}
diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp
index be0cec9..7862e17 100644
--- a/services/input/InputDispatcher.cpp
+++ b/services/input/InputDispatcher.cpp
@@ -1716,6 +1716,16 @@ String8 InputDispatcher::getApplicationWindowLabelLocked(
}
void InputDispatcher::pokeUserActivityLocked(const EventEntry* eventEntry) {
+ if (mFocusedWindowHandle != NULL) {
+ const InputWindowInfo* info = mFocusedWindowHandle->getInfo();
+ if (info->inputFeatures & InputWindowInfo::INPUT_FEATURE_DISABLE_USER_ACTIVITY) {
+#if DEBUG_DISPATCH_CYCLE
+ ALOGD("Not poking user activity: disabled by window '%s'.", info->name.string());
+#endif
+ return;
+ }
+ }
+
int32_t eventType = USER_ACTIVITY_EVENT_OTHER;
switch (eventEntry->type) {
case EventEntry::TYPE_MOTION: {
diff --git a/services/input/InputWindow.h b/services/input/InputWindow.h
index 3118099..7bd3af7 100644
--- a/services/input/InputWindow.h
+++ b/services/input/InputWindow.h
@@ -110,6 +110,8 @@ struct InputWindowInfo {
enum {
INPUT_FEATURE_DISABLE_TOUCH_PAD_GESTURES = 0x00000001,
+ INPUT_FEATURE_NO_INPUT_CHANNEL = 0x00000002,
+ INPUT_FEATURE_DISABLE_USER_ACTIVITY = 0x00000004,
};
sp<InputChannel> inputChannel;
diff --git a/services/java/com/android/server/power/PowerManagerService.java b/services/java/com/android/server/power/PowerManagerService.java
index b35fa11..ca86b7f 100644
--- a/services/java/com/android/server/power/PowerManagerService.java
+++ b/services/java/com/android/server/power/PowerManagerService.java
@@ -266,6 +266,11 @@ public final class PowerManagerService extends IPowerManager.Stub
// Use -1 to disable.
private int mScreenBrightnessOverrideFromWindowManager = -1;
+ // The user activity timeout override from the window manager
+ // to allow the current foreground activity to override the user activity timeout.
+ // Use -1 to disable.
+ private long mUserActivityTimeoutOverrideFromWindowManager = -1;
+
// The screen brightness setting override from the settings application
// to temporarily adjust the brightness until next updated,
// Use -1 to disable.
@@ -1156,6 +1161,9 @@ public final class PowerManagerService extends IPowerManager.Stub
if (isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()) {
timeout = Math.min(timeout, mMaximumScreenOffTimeoutFromDeviceAdmin);
}
+ if (mUserActivityTimeoutOverrideFromWindowManager >= 0) {
+ timeout = (int)Math.min(timeout, mUserActivityTimeoutOverrideFromWindowManager);
+ }
return Math.max(timeout, MINIMUM_SCREEN_OFF_TIMEOUT);
}
@@ -1573,12 +1581,6 @@ public final class PowerManagerService extends IPowerManager.Stub
}
}
- @Override // Binder call
- public void setPokeLock(int pokey, IBinder lock, String tag) {
- // TODO Auto-generated method stub
- // Only used by phone app, delete this
- }
-
/**
* Set the setting that determines whether the device stays on when plugged in.
* The argument is a bit string, with each bit specifying a power source that,
@@ -1721,6 +1723,36 @@ public final class PowerManagerService extends IPowerManager.Stub
}
/**
+ * Used by the window manager to override the user activity timeout based on the
+ * current foreground activity. It can only be used to make the timeout shorter
+ * than usual, not longer.
+ *
+ * This method must only be called by the window manager.
+ *
+ * @param timeoutMillis The overridden timeout, or -1 to disable the override.
+ */
+ public void setUserActivityTimeoutOverrideFromWindowManager(long timeoutMillis) {
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
+
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ setUserActivityTimeoutOverrideFromWindowManagerInternal(timeoutMillis);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ private void setUserActivityTimeoutOverrideFromWindowManagerInternal(long timeoutMillis) {
+ synchronized (mLock) {
+ if (mUserActivityTimeoutOverrideFromWindowManager != timeoutMillis) {
+ mUserActivityTimeoutOverrideFromWindowManager = timeoutMillis;
+ mDirty |= DIRTY_SETTINGS;
+ updatePowerStateLocked();
+ }
+ }
+ }
+
+ /**
* Used by the settings application and brightness control widgets to
* temporarily override the current screen brightness setting so that the
* user can observe the effect of an intended settings change without applying
@@ -1869,6 +1901,8 @@ public final class PowerManagerService extends IPowerManager.Stub
pw.println(" mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting);
pw.println(" mScreenBrightnessOverrideFromWindowManager="
+ mScreenBrightnessOverrideFromWindowManager);
+ pw.println(" mUserActivityTimeoutOverrideFromWindowManager="
+ + mUserActivityTimeoutOverrideFromWindowManager);
pw.println(" mTemporaryScreenBrightnessSettingOverride="
+ mTemporaryScreenBrightnessSettingOverride);
pw.println(" mTemporaryScreenAutoBrightnessAdjustmentSettingOverride="
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index d530f47..3f7b67b 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -598,6 +598,7 @@ public class WindowManagerService extends IWindowManager.Stub
private boolean mSyswin = false;
private float mScreenBrightness = -1;
private float mButtonBrightness = -1;
+ private long mUserActivityTimeout = -1;
private boolean mUpdateRotation = false;
private static final int DISPLAY_CONTENT_UNKNOWN = 0;
@@ -8775,6 +8776,11 @@ public class WindowManagerService extends IWindowManager.Stub
&& mInnerFields.mButtonBrightness < 0) {
mInnerFields.mButtonBrightness = w.mAttrs.buttonBrightness;
}
+ if (!mInnerFields.mSyswin && w.mAttrs.userActivityTimeout >= 0
+ && mInnerFields.mUserActivityTimeout < 0) {
+ mInnerFields.mUserActivityTimeout = w.mAttrs.userActivityTimeout;
+ }
+
final int type = attrs.type;
if (canBeSeen
&& (type == TYPE_SYSTEM_DIALOG
@@ -8874,7 +8880,9 @@ public class WindowManagerService extends IWindowManager.Stub
mInnerFields.mHoldScreen = null;
mInnerFields.mScreenBrightness = -1;
mInnerFields.mButtonBrightness = -1;
+ mInnerFields.mUserActivityTimeout = -1;
mInnerFields.mDisplayHasContent = LayoutFields.DISPLAY_CONTENT_UNKNOWN;
+
mTransactionSequence++;
final DisplayContent defaultDisplay = getDefaultDisplayContentLocked();
@@ -9349,6 +9357,8 @@ public class WindowManagerService extends IWindowManager.Stub
mPowerManager.setButtonBrightnessOverrideFromWindowManager(
toBrightnessOverride(mInnerFields.mButtonBrightness));
}
+ mPowerManager.setUserActivityTimeoutOverrideFromWindowManager(
+ mInnerFields.mUserActivityTimeout);
}
if (mTurnOnScreen) {
diff --git a/tests/StatusBar/src/com/android/statusbartest/PowerTest.java b/tests/StatusBar/src/com/android/statusbartest/PowerTest.java
index e38bb6c..0cab10d 100644
--- a/tests/StatusBar/src/com/android/statusbartest/PowerTest.java
+++ b/tests/StatusBar/src/com/android/statusbartest/PowerTest.java
@@ -21,9 +21,7 @@ import android.os.IBinder;
import android.os.IPowerManager;
import android.content.ComponentName;
import android.content.pm.PackageManager;
-import android.os.RemoteException;
import android.os.Handler;
-import android.os.LocalPowerManager;
import android.os.ServiceManager;
import android.os.PowerManager;
@@ -106,69 +104,5 @@ public class PowerTest extends TestActivity
}, 5000);
}
},
- new Test("Touch events don't poke") {
- public void run() {
- mPokeState |= LocalPowerManager.POKE_LOCK_IGNORE_TOUCH_EVENTS;
- try {
- mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG);
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- }
- }
- },
-
- new Test("Touch events poke") {
- public void run() {
- mPokeState &= ~LocalPowerManager.POKE_LOCK_IGNORE_TOUCH_EVENTS;
- try {
- mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG);
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- }
- }
- },
- new Test("Short timeout") {
- public void run() {
- mPokeState &= ~LocalPowerManager.POKE_LOCK_TIMEOUT_MASK;
- mPokeState |= LocalPowerManager.POKE_LOCK_SHORT_TIMEOUT;
- try {
- mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG);
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- }
- }
- },
- new Test("Medium timeout") {
- public void run() {
- mPokeState &= ~LocalPowerManager.POKE_LOCK_TIMEOUT_MASK;
- mPokeState |= LocalPowerManager.POKE_LOCK_MEDIUM_TIMEOUT;
- try {
- mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG);
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- }
- }
- },
- new Test("Normal timeout") {
- public void run() {
- mPokeState &= ~LocalPowerManager.POKE_LOCK_TIMEOUT_MASK;
- try {
- mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG);
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- }
- }
- },
- new Test("Illegal timeout") {
- public void run() {
- mPokeState |= LocalPowerManager.POKE_LOCK_SHORT_TIMEOUT
- | LocalPowerManager.POKE_LOCK_MEDIUM_TIMEOUT;
- try {
- mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG);
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- }
- }
- },
};
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
index 6175b0d..5e23f24 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
@@ -90,11 +90,6 @@ public class BridgePowerManager implements IPowerManager {
}
@Override
- public void setPokeLock(int arg0, IBinder arg1, String arg2) throws RemoteException {
- // pass for now.
- }
-
- @Override
public void setStayOnSetting(int arg0) throws RemoteException {
// pass for now.
}