summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Sami Tolvanen <samitolvanen@google.com> 2016-02-05 14:30:45 -0800
committer Sami Tolvanen <samitolvanen@google.com> 2016-02-09 12:43:19 -0800
commitee2b49283261f7b4518ec7c98f568f883f817c9d (patch)
treec41b771ea79ce453fa0ec94de312cb2181305a1b
parent9f9352411269e047a10f8de9e3ada8985868343c (diff)
Support persist.sys.audit_safemode
Don't leave safe more if persist.sys.audit_safemode is set, unless the current build date is newer than the specified value. This allows us to keep the device in safe mode across reboots until an OTA has been applied or user data is wiped. Bug: 26902605 Change-Id: I781c3059ea8d4fb2f0c923e4488b1932d69678d3
-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) {
}