summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/provider/Settings.java9
-rw-r--r--core/tests/coretests/src/android/provider/SettingsBackupTest.java1
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java22
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java56
-rw-r--r--services/core/java/com/android/server/policy/WindowManagerPolicy.java4
5 files changed, 74 insertions, 18 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 15306260dcba..7de52cc2155c 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -13047,6 +13047,15 @@ public final class Settings {
*/
public static final String LTE_SERVICE_FORCED = "lte_service_forced";
+
+ /**
+ * Specifies the behaviour the lid triggers when closed
+ * <p>
+ * See WindowManagerPolicy.WindowManagerFuncs
+ * @hide
+ */
+ public static final String LID_BEHAVIOR = "lid_behavior";
+
/**
* Ephemeral app cookie max size in bytes.
* <p>
diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
index 3a1a4fc7b65f..23cd96382d1a 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -319,6 +319,7 @@ public class SettingsBackupTest {
Settings.Global.LOW_POWER_MODE_STICKY,
Settings.Global.LOW_POWER_MODE_SUGGESTION_PARAMS,
Settings.Global.LTE_SERVICE_FORCED,
+ Settings.Global.LID_BEHAVIOR,
Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE,
Settings.Global.MAX_SOUND_TRIGGER_DETECTION_SERVICE_OPS_PER_DAY,
Settings.Global.MDC_INITIAL_MAX_RETRY,
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index ef90dc981870..0ee16a9e9ed2 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -23,6 +23,7 @@ import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
+import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
@@ -2440,6 +2441,7 @@ class DatabaseHelper extends SQLiteOpenHelper {
private void loadGlobalSettings(SQLiteDatabase db) {
SQLiteStatement stmt = null;
+ final Resources res = mContext.getResources();
try {
stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
+ " VALUES(?,?);");
@@ -2468,7 +2470,7 @@ class DatabaseHelper extends SQLiteOpenHelper {
loadSetting(stmt, Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
("1".equals(SystemProperties.get("ro.kernel.qemu")) ||
- mContext.getResources().getBoolean(R.bool.def_stay_on_while_plugged_in))
+ res.getBoolean(R.bool.def_stay_on_while_plugged_in))
? 1 : 0);
loadIntegerSetting(stmt, Settings.Global.WIFI_SLEEP_POLICY,
@@ -2505,14 +2507,14 @@ class DatabaseHelper extends SQLiteOpenHelper {
loadBooleanSetting(stmt, Settings.Global.DEVICE_PROVISIONED,
R.bool.def_device_provisioned);
- final int maxBytes = mContext.getResources().getInteger(
+ final int maxBytes = res.getInteger(
R.integer.def_download_manager_max_bytes_over_mobile);
if (maxBytes > 0) {
loadSetting(stmt, Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE,
Integer.toString(maxBytes));
}
- final int recommendedMaxBytes = mContext.getResources().getInteger(
+ final int recommendedMaxBytes = res.getInteger(
R.integer.def_download_manager_recommended_max_bytes_over_mobile);
if (recommendedMaxBytes > 0) {
loadSetting(stmt, Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE,
@@ -2609,6 +2611,20 @@ class DatabaseHelper extends SQLiteOpenHelper {
loadSetting(stmt, Settings.Global.DEVICE_NAME, getDefaultDeviceName());
+ // Set default lid/cover behaviour according to legacy device config
+ final int defaultLidBehavior;
+ if (res.getBoolean(com.android.internal.R.bool.config_lidControlsSleep)) {
+ // WindowManagerFuncs.LID_BEHAVIOR_SLEEP
+ defaultLidBehavior = 1;
+ } else if (res.getBoolean(com.android.internal.R.bool.config_lidControlsScreenLock)) {
+ // WindowManagerFuncs.LID_BEHAVIOR_LOCK
+ defaultLidBehavior = 2;
+ } else {
+ // WindowManagerFuncs.LID_BEHAVIOR_NONE
+ defaultLidBehavior = 0;
+ }
+ loadSetting(stmt, Settings.Global.LID_BEHAVIOR, defaultLidBehavior);
+
/*
* IMPORTANT: Do not add any more upgrade steps here as the global,
* secure, and system settings are no longer stored in a database
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 68dab3401a1b..df733ac7b3c0 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -86,6 +86,9 @@ import static android.view.WindowManagerGlobal.ADD_PERMISSION_DENIED;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVERED;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVER_ABSENT;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_UNCOVERED;
+import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.LID_BEHAVIOR_LOCK;
+import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.LID_BEHAVIOR_NONE;
+import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.LID_BEHAVIOR_SLEEP;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.LID_CLOSED;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.LID_OPEN;
import static com.android.server.wm.WindowManagerPolicyProto.KEYGUARD_DELEGATE;
@@ -473,8 +476,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
int mLidKeyboardAccessibility;
int mLidNavigationAccessibility;
- boolean mLidControlsScreenLock;
- boolean mLidControlsSleep;
private boolean mLidControlsDisplayFold;
int mShortPressOnPowerBehavior;
int mLongPressOnPowerBehavior;
@@ -1195,6 +1196,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
+ private int getLidBehavior() {
+ return Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.LID_BEHAVIOR, LID_BEHAVIOR_NONE);
+ }
+
private int getMaxMultiPressPowerCount() {
if (mTriplePressOnPowerBehavior != MULTI_PRESS_POWER_NOTHING) {
return 3;
@@ -1796,10 +1802,6 @@ 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);
mLidControlsDisplayFold = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_lidControlsDisplayFold);
@@ -2040,7 +2042,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private boolean shouldEnableWakeGestureLp() {
return mWakeGestureEnabledSetting && !mDefaultDisplayPolicy.isAwake()
- && (!mLidControlsSleep || mDefaultDisplayPolicy.getLidState() != LID_CLOSED)
+ && (getLidBehavior() != LID_BEHAVIOR_SLEEP
+ || mDefaultDisplayPolicy.getLidState() != LID_CLOSED)
&& mWakeGestureListener.isSupported();
}
@@ -3546,7 +3549,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
if (lidOpen) {
wakeUp(SystemClock.uptimeMillis(), mAllowTheaterModeWakeFromLidSwitch,
PowerManager.WAKE_REASON_LID, "android.policy:LID");
- } else if (!mLidControlsSleep) {
+ } else if (getLidBehavior() != LID_BEHAVIOR_SLEEP) {
mPowerManager.userActivity(SystemClock.uptimeMillis(), false);
}
}
@@ -5041,11 +5044,22 @@ public class PhoneWindowManager implements WindowManagerPolicy {
final int lidState = mDefaultDisplayPolicy.getLidState();
if (mLidControlsDisplayFold && mDisplayFoldController != null) {
mDisplayFoldController.requestDeviceFolded(lidState == LID_CLOSED);
- } else if (lidState == LID_CLOSED && mLidControlsSleep) {
- goToSleep(SystemClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_LID_SWITCH,
- PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
- } else if (lidState == LID_CLOSED && mLidControlsScreenLock) {
- mWindowManagerFuncs.lockDeviceNow();
+ } else if (lidState == LID_CLOSED) {
+ int lidBehavior = getLidBehavior();
+ switch (lidBehavior) {
+ case LID_BEHAVIOR_LOCK:
+ mWindowManagerFuncs.lockDeviceNow();
+ break;
+ case LID_BEHAVIOR_SLEEP:
+ goToSleep(SystemClock.uptimeMillis(),
+ PowerManager.GO_TO_SLEEP_REASON_LID_SWITCH,
+ PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
+ break;
+ case LID_BEHAVIOR_NONE:
+ // fall through
+ default:
+ break;
+ }
}
synchronized (mLock) {
@@ -5405,8 +5419,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(prefix); pw.print("mLidControlsSleep="); pw.println(mLidControlsSleep);
+ pw.print(" getLidBehavior="); pw.println(lidBehaviorToString(getLidBehavior()));
pw.print(prefix);
pw.print("mLongPressOnBackBehavior=");
pw.println(longPressOnBackBehaviorToString(mLongPressOnBackBehavior));
@@ -5640,6 +5653,19 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
+ private static String lidBehaviorToString(int behavior) {
+ switch (behavior) {
+ case LID_BEHAVIOR_LOCK:
+ return "LID_BEHAVIOR_LOCK";
+ case LID_BEHAVIOR_SLEEP:
+ return "LID_BEHAVIOR_SLEEP";
+ case LID_BEHAVIOR_NONE:
+ return "LID_BEHAVIOR_NONE";
+ default:
+ return Integer.toString(behavior);
+ }
+ }
+
@Override
public boolean setAodShowing(boolean aodShowing) {
if (mAodShowing != aodShowing) {
diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java
index d7e4b6cff4d8..adc1a256f867 100644
--- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java
+++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java
@@ -518,6 +518,10 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants {
public static final int LID_CLOSED = 0;
public static final int LID_OPEN = 1;
+ public static final int LID_BEHAVIOR_NONE = 0;
+ public static final int LID_BEHAVIOR_SLEEP = 1;
+ public static final int LID_BEHAVIOR_LOCK = 2;
+
public static final int CAMERA_LENS_COVER_ABSENT = -1;
public static final int CAMERA_LENS_UNCOVERED = 0;
public static final int CAMERA_LENS_COVERED = 1;