diff options
-rw-r--r-- | java/com/android/voicemail/impl/DeviceProvisionedJobService.java | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/java/com/android/voicemail/impl/DeviceProvisionedJobService.java b/java/com/android/voicemail/impl/DeviceProvisionedJobService.java index a0b999d23..20993d051 100644 --- a/java/com/android/voicemail/impl/DeviceProvisionedJobService.java +++ b/java/com/android/voicemail/impl/DeviceProvisionedJobService.java @@ -29,6 +29,7 @@ import android.content.Intent; import android.os.Build.VERSION_CODES; import android.provider.Settings; import android.provider.Settings.Global; +import android.support.annotation.VisibleForTesting; import android.telecom.PhoneAccountHandle; import com.android.dialer.constants.ScheduledJobIds; @@ -39,29 +40,25 @@ import com.android.dialer.constants.ScheduledJobIds; @TargetApi(VERSION_CODES.O) public class DeviceProvisionedJobService extends JobService { - private static final String EXTRA_PHONE_ACCOUNT_HANDLE = "EXTRA_PHONE_ACCOUNT_HANDLE"; + @VisibleForTesting static final String EXTRA_PHONE_ACCOUNT_HANDLE = "EXTRA_PHONE_ACCOUNT_HANDLE"; /** Queue the phone account to be reactivated after the setup wizard has completed. */ public static void activateAfterProvisioned( Context context, PhoneAccountHandle phoneAccountHandle) { - JobInfo jobInfo = - new JobInfo.Builder( - ScheduledJobIds.VVM_DEVICE_PROVISIONED_JOB, - new ComponentName(context, DeviceProvisionedJobService.class)) - .addTriggerContentUri( - new TriggerContentUri(Global.getUriFor(Global.DEVICE_PROVISIONED), 0)) - // VVM activation must be run as soon as possible to avoid voicemail loss - .setTriggerContentMaxDelay(0) - .build(); - Intent intent = new Intent(); intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle); - context.getSystemService(JobScheduler.class).enqueue(jobInfo, new JobWorkItem(intent)); + context + .getSystemService(JobScheduler.class) + .enqueue(createJobInfo(context), new JobWorkItem(intent)); } @Override public boolean onStartJob(JobParameters params) { - Assert.isTrue(isDeviceProvisioned()); + if (!isDeviceProvisioned()) { + VvmLog.i("DeviceProvisionedJobService.onStartJob", "device not provisioned, rescheduling"); + getSystemService(JobScheduler.class).schedule(createJobInfo(this)); + return false; // job not running in background + } VvmLog.i("DeviceProvisionedJobService.onStartJob", "device provisioned"); for (JobWorkItem item = params.dequeueWork(); item != null; item = params.dequeueWork()) { PhoneAccountHandle phoneAccountHandle = @@ -82,4 +79,14 @@ public class DeviceProvisionedJobService extends JobService { private boolean isDeviceProvisioned() { return Settings.Global.getInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0) == 1; } + + private static JobInfo createJobInfo(Context context) { + return new JobInfo.Builder( + ScheduledJobIds.VVM_DEVICE_PROVISIONED_JOB, + new ComponentName(context, DeviceProvisionedJobService.class)) + .addTriggerContentUri(new TriggerContentUri(Global.getUriFor(Global.DEVICE_PROVISIONED), 0)) + // VVM activation must be run as soon as possible to avoid voicemail loss + .setTriggerContentMaxDelay(0) + .build(); + } } |