Move widevine provisioning check logic to worker from BootReceiver.
MediaDRM instance creation is blocking. However, BootReceiver expects to
finish up any pending tasks within a certain time limit. This may cause
ANR if there is any blockage in setting up the MediaDRM instance.
Test: tested on cuttlefish.
Fixes: 265854414
Change-Id: I25210205c2032403c025b53adaada0ffd2821cde
diff --git a/src/com/android/remoteprovisioner/BootReceiver.java b/src/com/android/remoteprovisioner/BootReceiver.java
index fd9b019..05f77db 100644
--- a/src/com/android/remoteprovisioner/BootReceiver.java
+++ b/src/com/android/remoteprovisioner/BootReceiver.java
@@ -24,8 +24,8 @@
import android.os.RemoteException;
import android.os.ServiceManager;
import android.security.remoteprovisioning.AttestationPoolStatus;
-import android.security.remoteprovisioning.ImplInfo;
import android.security.remoteprovisioning.IRemoteProvisioning;
+import android.security.remoteprovisioning.ImplInfo;
import android.util.Log;
import androidx.work.Constraints;
@@ -80,14 +80,13 @@
.enqueueUniquePeriodicWork("ProvisioningJob",
ExistingPeriodicWorkPolicy.REPLACE, // Replace on reboot.
workRequest);
- if (WidevineProvisioner.isWidevineProvisioningNeeded()) {
- Log.i(TAG, "WV provisioning needed. Queueing a one-time provisioning job.");
- OneTimeWorkRequest wvRequest =
- new OneTimeWorkRequest.Builder(WidevineProvisioner.class)
- .setConstraints(constraints)
- .build();
- WorkManager.getInstance(context).enqueue(wvRequest);
- }
+
+ Log.i(TAG, "Queueing a one-time provisioning job for widevine provisioning.");
+ OneTimeWorkRequest wvRequest =
+ new OneTimeWorkRequest.Builder(WidevineProvisioner.class)
+ .setConstraints(constraints)
+ .build();
+ WorkManager.getInstance(context).enqueue(wvRequest);
}
diff --git a/src/com/android/remoteprovisioner/WidevineProvisioner.java b/src/com/android/remoteprovisioner/WidevineProvisioner.java
index 717c7fd..8b6c21a 100644
--- a/src/com/android/remoteprovisioner/WidevineProvisioner.java
+++ b/src/com/android/remoteprovisioner/WidevineProvisioner.java
@@ -92,8 +92,11 @@
*/
@Override
public Result doWork() {
- Log.i(TAG, "Beginning WV provisioning request. Current attempt: " + getRunAttemptCount());
- return provisionWidevine();
+ if (isWidevineProvisioningNeeded()) {
+ Log.i(TAG, "Starting WV provisioning. Current attempt: " + getRunAttemptCount());
+ return provisionWidevine();
+ }
+ return Result.success();
}
/**
@@ -105,7 +108,7 @@
*/
public static boolean isWidevineProvisioningNeeded() {
try {
- final MediaDrm drm = new MediaDrm(WidevineProvisioner.WIDEVINE_UUID);
+ final MediaDrm drm = new MediaDrm(WIDEVINE_UUID);
if (!drm.getPropertyString("provisioningModel").equals("BootCertificateChain")) {
// Not a provisioning 4.0 device.