diff options
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; |