summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/power/ShutdownThread.java3
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java20
2 files changed, 21 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index ac6a28e91ca8..225f9a9b3979 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -96,6 +96,9 @@ public final class ShutdownThread extends Thread {
// Indicates whether we are rebooting into safe mode
public static final String REBOOT_SAFEMODE_PROPERTY = "persist.sys.safemode";
+ // Indicates whether we should stay in safe mode until ro.build.date.utc is newer than this
+ public static final String AUDIT_SAFEMODE_PROPERTY = "persist.sys.audit_safemode";
+
// static instance of this thread
private static final ShutdownThread sInstance = new ShutdownThread();
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index aa74b424b5a1..6d3d5d6daa60 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -305,6 +305,8 @@ public class WindowManagerService extends IWindowManager.Stub
private static final String PROPERTY_EMULATOR_CIRCULAR = "ro.emulator.circular";
+ private static final String PROPERTY_BUILD_DATE_UTC = "ro.build.date.utc";
+
final private KeyguardDisableHandler mKeyguardDisableHandler;
final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@@ -7629,8 +7631,22 @@ public class WindowManagerService extends IWindowManager.Stub
|| volumeDownState > 0;
try {
if (SystemProperties.getInt(ShutdownThread.REBOOT_SAFEMODE_PROPERTY, 0) != 0) {
- mSafeMode = true;
- SystemProperties.set(ShutdownThread.REBOOT_SAFEMODE_PROPERTY, "");
+ int auditSafeMode = SystemProperties.getInt(ShutdownThread.AUDIT_SAFEMODE_PROPERTY, 0);
+
+ if (auditSafeMode == 0) {
+ mSafeMode = true;
+ SystemProperties.set(ShutdownThread.REBOOT_SAFEMODE_PROPERTY, "");
+ } else {
+ // stay in safe mode until we have updated to a newer build
+ int buildDate = SystemProperties.getInt(PROPERTY_BUILD_DATE_UTC, 0);
+
+ if (auditSafeMode >= buildDate) {
+ mSafeMode = true;
+ } else {
+ SystemProperties.set(ShutdownThread.REBOOT_SAFEMODE_PROPERTY, "");
+ SystemProperties.set(ShutdownThread.AUDIT_SAFEMODE_PROPERTY, "");
+ }
+ }
}
} catch (IllegalArgumentException e) {
}