diff options
author | Sumir Kataria <sumir@google.com> | 2018-06-01 16:57:55 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-06-01 16:57:55 +0000 |
commit | 170ba43e442a28b0091f764e2eec288bbab99fbd (patch) | |
tree | 5c82915a8e089e810e631e5a3557e4f6ebfbbfa3 /work/workmanager | |
parent | d7d117aae8900092b7def215c4281ec88625b2a0 (diff) | |
parent | eda66d6e6b83e6f68717be95ec10e7ad8f070a83 (diff) | |
download | support-170ba43e442a28b0091f764e2eec288bbab99fbd.tar.gz |
Merge "Add Network to Worker/RuntimeExtras." into pi-preview1-androidx-dev
Diffstat (limited to 'work/workmanager')
4 files changed, 60 insertions, 1 deletions
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java index abf3450c29d..996c33df00a 100644 --- a/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java +++ b/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java @@ -30,6 +30,7 @@ import android.app.job.JobParameters; import android.arch.core.executor.ArchTaskExecutor; import android.arch.core.executor.TaskExecutor; import android.content.Context; +import android.net.Network; import android.net.Uri; import android.os.Build; import android.os.PersistableBundle; @@ -232,6 +233,27 @@ public class SystemJobServiceTest extends WorkManagerTest { assertThat(ContentUriTriggerLoggingWorker.sTriggeredContentUris, is(testContentUris)); } + @Test + @LargeTest + @SdkSuppress(minSdkVersion = 28) + public void testStartJob_passesNetwork() throws InterruptedException { + WorkRequest work = new OneTimeWorkRequest.Builder(NetworkLoggingWorker.class).build(); + insertWork(work); + + Network mockNetwork = mock(Network.class); + + JobParameters mockParams = createMockJobParameters(work.getStringId()); + when(mockParams.getNetwork()).thenReturn(mockNetwork); + + assertThat(NetworkLoggingWorker.sTimesUpdated, is(0)); + assertThat(mSystemJobServiceSpy.onStartJob(mockParams), is(true)); + + Thread.sleep(1000L); + + assertThat(NetworkLoggingWorker.sTimesUpdated, is(1)); + assertThat(NetworkLoggingWorker.sNetwork, is(mockNetwork)); + } + private JobParameters createMockJobParameters(String id) { JobParameters jobParameters = mock(JobParameters.class); @@ -262,4 +284,19 @@ public class SystemJobServiceTest extends WorkManagerTest { return WorkerResult.SUCCESS; } } + + public static class NetworkLoggingWorker extends Worker { + + static int sTimesUpdated = 0; + static Network sNetwork; + + @Override + public WorkerResult doWork() { + synchronized (NetworkLoggingWorker.class) { + ++sTimesUpdated; + sNetwork = getNetwork(); + } + return WorkerResult.SUCCESS; + } + } } diff --git a/work/workmanager/src/main/java/androidx/work/Worker.java b/work/workmanager/src/main/java/androidx/work/Worker.java index 97bfbaace11..b20fa044317 100644 --- a/work/workmanager/src/main/java/androidx/work/Worker.java +++ b/work/workmanager/src/main/java/androidx/work/Worker.java @@ -17,6 +17,7 @@ package androidx.work; import android.content.Context; +import android.net.Network; import android.net.Uri; import android.support.annotation.Keep; import android.support.annotation.NonNull; @@ -136,6 +137,18 @@ public abstract class Worker { } /** + * Gets the {@link Network} to use for this Worker, if any. If this value is {@code null}, the + * Worker may use the default network. + * + * @return The {@link Network} specified by the OS to be used with this Worker + */ + @RequiresApi(28) + public final @Nullable Network getNetwork() { + Extras.RuntimeExtras runtimeExtras = mExtras.getRuntimeExtras(); + return (runtimeExtras == null) ? null : runtimeExtras.network; + } + + /** * Override this method to do your actual background processing. * * @return The result of the work, corresponding to a {@link WorkerResult} value. If a diff --git a/work/workmanager/src/main/java/androidx/work/impl/Extras.java b/work/workmanager/src/main/java/androidx/work/impl/Extras.java index 0828672db8a..813c39f504b 100644 --- a/work/workmanager/src/main/java/androidx/work/impl/Extras.java +++ b/work/workmanager/src/main/java/androidx/work/impl/Extras.java @@ -16,9 +16,11 @@ package androidx.work.impl; +import android.net.Network; import android.net.Uri; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; import android.support.annotation.RestrictTo; import androidx.work.Data; @@ -69,5 +71,8 @@ public class Extras { public String[] triggeredContentAuthorities; public Uri[] triggeredContentUris; + + @RequiresApi(28) + public Network network; } } diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java index 41370749859..373bc14800b 100644 --- a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java +++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java @@ -90,13 +90,17 @@ public class SystemJobService extends JobService implements ExecutionListener { Extras.RuntimeExtras runtimeExtras = null; if (Build.VERSION.SDK_INT >= 24) { + runtimeExtras = new Extras.RuntimeExtras(); if (params.getTriggeredContentUris() != null || params.getTriggeredContentAuthorities() != null) { - runtimeExtras = new Extras.RuntimeExtras(); runtimeExtras.triggeredContentUris = params.getTriggeredContentUris(); runtimeExtras.triggeredContentAuthorities = params.getTriggeredContentAuthorities(); } + + if (Build.VERSION.SDK_INT >= 28) { + runtimeExtras.network = params.getNetwork(); + } } mWorkManagerImpl.startWork(workSpecId, runtimeExtras); |