From a6e9e24be53d2516138f487e340e46b8d0212d86 Mon Sep 17 00:00:00 2001 From: Sami Tolvanen Date: Fri, 5 Feb 2016 14:30:45 -0800 Subject: [PATCH] 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 (cherry picked from commit ee2b49283261f7b4518ec7c98f568f883f817c9d) --- .../android/server/power/ShutdownThread.java | 3 +++ .../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 26f9ffd8fa74d..bcafddc3e999b 100644 --- a/services/core/java/com/android/server/power/ShutdownThread.java +++ b/services/core/java/com/android/server/power/ShutdownThread.java @@ -94,6 +94,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 142715e89c6ca..9d97f17fdb55d 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -320,6 +320,8 @@ public class WindowManagerService extends IWindowManager.Stub private static final float DRAG_SHADOW_ALPHA_TRANSPARENT = .7071f; + private static final String PROPERTY_BUILD_DATE_UTC = "ro.build.date.utc"; + final private KeyguardDisableHandler mKeyguardDisableHandler; final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @@ -7458,8 +7460,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) { }