Merge "Acquire the wake lock to ensure RoR isn't delayed"
diff --git a/services/core/java/com/android/server/locksettings/RebootEscrowManager.java b/services/core/java/com/android/server/locksettings/RebootEscrowManager.java
index b714c6d..4d525da 100644
--- a/services/core/java/com/android/server/locksettings/RebootEscrowManager.java
+++ b/services/core/java/com/android/server/locksettings/RebootEscrowManager.java
@@ -37,6 +37,7 @@
import android.net.Network;
import android.net.NetworkCapabilities;
import android.os.Handler;
+import android.os.PowerManager;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserManager;
@@ -119,6 +120,8 @@
*/
private static final int DEFAULT_LOAD_ESCROW_DATA_RETRY_COUNT = 3;
private static final int DEFAULT_LOAD_ESCROW_DATA_RETRY_INTERVAL_SECONDS = 30;
+ // 3 minutes. It's enough for the default 3 retries with 30 seconds interval
+ private static final int DEFAULT_WAKE_LOCK_TIMEOUT_MILLIS = 180_000;
@IntDef(prefix = {"ERROR_"}, value = {
ERROR_NONE,
@@ -187,6 +190,9 @@
private final RebootEscrowKeyStoreManager mKeyStoreManager;
+ PowerManager.WakeLock mWakeLock;
+
+
interface Callbacks {
boolean isUserSecure(int userId);
@@ -279,6 +285,11 @@
return mRebootEscrowProvider;
}
+ PowerManager.WakeLock getWakeLock() {
+ final PowerManager pm = mContext.getSystemService(PowerManager.class);
+ return pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "RebootEscrowManager");
+ }
+
public RebootEscrowProviderInterface getRebootEscrowProvider() {
return mRebootEscrowProvider;
}
@@ -365,6 +376,13 @@
return;
}
+ // Acquire the wake lock to make sure our scheduled task will run.
+ mWakeLock = mInjector.getWakeLock();
+ if (mWakeLock != null) {
+ mWakeLock.setReferenceCounted(false);
+ mWakeLock.acquire(DEFAULT_WAKE_LOCK_TIMEOUT_MILLIS);
+ }
+
mInjector.post(retryHandler, () -> loadRebootEscrowDataWithRetry(
retryHandler, 0, users, rebootEscrowUsers));
}
@@ -519,6 +537,10 @@
// Clear the saved reboot escrow provider
mInjector.clearRebootEscrowProvider();
clearMetricsStorage();
+
+ if (mWakeLock != null) {
+ mWakeLock.release();
+ }
}
private RebootEscrowKey getAndClearRebootEscrowKey(SecretKey kk) throws IOException {