diff --git a/services/backup/java/com/android/server/backup/FullBackupJob.java b/services/backup/java/com/android/server/backup/FullBackupJob.java index fe0e1c6b6fcb4..de33698c9d226 100644 --- a/services/backup/java/com/android/server/backup/FullBackupJob.java +++ b/services/backup/java/com/android/server/backup/FullBackupJob.java @@ -24,6 +24,7 @@ import android.app.job.JobScheduler; import android.app.job.JobService; import android.content.ComponentName; import android.content.Context; +import android.content.pm.PackageManager; import android.os.Bundle; import android.util.SparseArray; @@ -52,13 +53,15 @@ public class FullBackupJob extends JobService { JobInfo.Builder builder = new JobInfo.Builder(getJobIdForUserId(userId), sIdleService); final BackupManagerConstants constants = userBackupManagerService.getConstants(); synchronized (constants) { - builder.setRequiresDeviceIdle(true) - .setRequiredNetworkType(constants.getFullBackupRequiredNetworkType()) + builder.setRequiredNetworkType(constants.getFullBackupRequiredNetworkType()) .setRequiresCharging(constants.getFullBackupRequireCharging()); } if (minDelay > 0) { builder.setMinimumLatency(minDelay); } + if (!ctx.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { + builder.setRequiresDeviceIdle(true); + } Bundle extraInfo = new Bundle(); extraInfo.putInt(USER_ID_EXTRA_KEY, userId); diff --git a/services/robotests/backup/src/com/android/server/backup/FullBackupJobTest.java b/services/robotests/backup/src/com/android/server/backup/FullBackupJobTest.java index c8797e25b7407..da0adb55c0736 100644 --- a/services/robotests/backup/src/com/android/server/backup/FullBackupJobTest.java +++ b/services/robotests/backup/src/com/android/server/backup/FullBackupJobTest.java @@ -19,10 +19,13 @@ package com.android.server.backup; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; +import static org.robolectric.Shadows.shadowOf; import android.annotation.UserIdInt; +import android.app.job.JobInfo; import android.app.job.JobScheduler; import android.content.Context; +import android.content.pm.PackageManager; import android.os.Handler; import android.os.UserHandle; import android.platform.test.annotations.Presubmit; @@ -86,6 +89,25 @@ public class FullBackupJobTest { assertThat(mShadowJobScheduler.getPendingJob(getJobIdForUserId(mUserTwoId))).isNotNull(); } + @Test + public void testSchedule_notWatch_requiresDeviceIdle() { + shadowOf(mContext.getPackageManager()) + .setSystemFeature(PackageManager.FEATURE_WATCH, false); + FullBackupJob.schedule(mUserOneId, mContext, 0, mUserBackupManagerService); + + JobInfo pendingJob = mShadowJobScheduler.getPendingJob(getJobIdForUserId(mUserOneId)); + assertThat(pendingJob.isRequireDeviceIdle()).isTrue(); + } + + @Test + public void testSchedule_isWatch_doesNotRequireDeviceIdle() { + shadowOf(mContext.getPackageManager()).setSystemFeature(PackageManager.FEATURE_WATCH, true); + FullBackupJob.schedule(mUserOneId, mContext, 0, mUserBackupManagerService); + + JobInfo pendingJob = mShadowJobScheduler.getPendingJob(getJobIdForUserId(mUserOneId)); + assertThat(pendingJob.isRequireDeviceIdle()).isFalse(); + } + @Test public void testCancel_afterCancelling_jobDoesntExist() { FullBackupJob.schedule(mUserOneId, mContext, 0, mUserBackupManagerService);