From 7def60daa049271c0d595d2ff566965693ee88cd Mon Sep 17 00:00:00 2001 From: Edward Savage-Jones Date: Fri, 13 Nov 2015 13:27:03 +0100 Subject: [PATCH] Add support for locking the screen when the lid is closed This commit adds configurable support for lockscreen behaviour when the user has a device cover/lid. This is intended for lids with a viewing window so that the user can see the time and interact with apps via the window. Change-Id: Id71883f66d1a180c4732912b3b59cabf9f4d7b6e --- core/java/android/view/WindowManagerPolicy.java | 5 +++++ core/res/res/values/config.xml | 4 ++++ core/res/res/values/symbols.xml | 1 + .../java/com/android/server/policy/PhoneWindowManager.java | 6 ++++++ .../java/com/android/server/wm/WindowManagerService.java | 6 ++++++ 5 files changed, 22 insertions(+) diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index aaf605274a9ac..0a7e594f081cd 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -429,6 +429,11 @@ public interface WindowManagerPolicy { */ public int getLidState(); + /** + * Lock the device now. + */ + public void lockDeviceNow(); + /** * Returns a code that descripbes whether the camera lens is covered or not. */ diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 0859e5a038561..794262e848cd9 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -673,6 +673,10 @@ closed. The default is 0. --> 0 + + false + diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 6d8c38f4100a2..0b105f98be111 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1474,6 +1474,7 @@ + diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 8ad45c935ea1e..bfe68b34066e6 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -392,6 +392,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mDeskDockEnablesAccelerometer; int mLidKeyboardAccessibility; int mLidNavigationAccessibility; + boolean mLidControlsScreenLock; boolean mLidControlsSleep; int mShortPressOnPowerBehavior; int mLongPressOnPowerBehavior; @@ -1421,6 +1422,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { com.android.internal.R.integer.config_lidKeyboardAccessibility); mLidNavigationAccessibility = mContext.getResources().getInteger( com.android.internal.R.integer.config_lidNavigationAccessibility); + mLidControlsScreenLock = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_lidControlsScreenLock); mLidControlsSleep = mContext.getResources().getBoolean( com.android.internal.R.bool.config_lidControlsSleep); mTranslucentDecorEnabled = mContext.getResources().getBoolean( @@ -6309,6 +6312,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { mPowerManager.goToSleep(SystemClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_LID_SWITCH, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); + } else if (mLidState == LID_CLOSED && mLidControlsScreenLock) { + mWindowManagerFuncs.lockDeviceNow(); } synchronized (mLock) { @@ -6887,6 +6892,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { pw.print(prefix); pw.print("mLidKeyboardAccessibility="); pw.print(mLidKeyboardAccessibility); pw.print(" mLidNavigationAccessibility="); pw.print(mLidNavigationAccessibility); + pw.print(" mLidControlsScreenLock="); pw.println(mLidControlsScreenLock); pw.print(" mLidControlsSleep="); pw.println(mLidControlsSleep); pw.print(prefix); pw.print("mShortPressOnPowerBehavior="); pw.print(mShortPressOnPowerBehavior); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 101f64b841915..267f4a79bb5ea 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5632,6 +5632,12 @@ public class WindowManagerService extends IWindowManager.Stub } } + // Called by window manager policy. Not exposed externally. + @Override + public void lockDeviceNow() { + lockNow(null); + } + // Called by window manager policy. Not exposed externally. @Override public int getCameraLensCoverState() {