aboutsummaryrefslogtreecommitdiff
path: root/work
diff options
context:
space:
mode:
authorSumir Kataria <sumir@google.com>2018-06-01 16:57:55 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-06-01 16:57:55 +0000
commit170ba43e442a28b0091f764e2eec288bbab99fbd (patch)
tree5c82915a8e089e810e631e5a3557e4f6ebfbbfa3 /work
parentd7d117aae8900092b7def215c4281ec88625b2a0 (diff)
parenteda66d6e6b83e6f68717be95ec10e7ad8f070a83 (diff)
downloadsupport-170ba43e442a28b0091f764e2eec288bbab99fbd.tar.gz
Merge "Add Network to Worker/RuntimeExtras." into pi-preview1-androidx-dev
Diffstat (limited to 'work')
-rw-r--r--work/workmanager/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java37
-rw-r--r--work/workmanager/src/main/java/androidx/work/Worker.java13
-rw-r--r--work/workmanager/src/main/java/androidx/work/impl/Extras.java5
-rw-r--r--work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java6
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);