diff options
| -rw-r--r-- | services/core/java/com/android/server/power/ShutdownThread.java | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 20 |
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) { } |