Skip to content

Commit 258658b

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 1734125 + f7a0b32 commit 258658b

File tree

5 files changed

+36
-12
lines changed

5 files changed

+36
-12
lines changed

lib/src/androidTest/java/com/cloudinary/android/AndroidJobStrategyTest.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.io.IOException;
1414

1515
import static junit.framework.Assert.assertEquals;
16+
import static junit.framework.Assert.assertTrue;
1617

1718
@RunWith(AndroidJUnit4.class)
1819
public class AndroidJobStrategyTest extends AbstractTest {
@@ -21,9 +22,10 @@ public class AndroidJobStrategyTest extends AbstractTest {
2122
public void testAdapter() throws InterruptedException, IOException {
2223
FilePayload payload = new FilePayload(assetToFile(TEST_IMAGE).getAbsolutePath());
2324

25+
int tenMinutes = 10 * 60 * 1000;
2426
UploadRequest<FilePayload> request =
2527
new UploadRequest<>(new UploadContext<>(payload, null), null)
26-
.constrain(new TimeWindow.Builder().minLatencyMillis(20).maxExecutionDelayMillis(200).build())
28+
.constrain(new TimeWindow.Builder().minLatencyMillis(20).maxExecutionDelayMillis(tenMinutes).build())
2729
.policy(new UploadPolicy.Builder()
2830
.networkPolicy(UploadPolicy.NetworkType.UNMETERED)
2931
.requiresCharging(true)
@@ -35,11 +37,20 @@ public void testAdapter() throws InterruptedException, IOException {
3537
JobRequest adapted = AndroidJobStrategy.adapt(request);
3638

3739
assertEquals(20, adapted.getStartMs());
38-
assertEquals(200, adapted.getEndMs());
40+
assertEquals(tenMinutes, adapted.getEndMs());
3941
assertEquals(true, adapted.requiresCharging());
4042
assertEquals(false, adapted.requiresDeviceIdle());
4143
assertEquals(100, adapted.getBackoffMs());
4244
assertEquals(JobRequest.BackoffPolicy.LINEAR, adapted.getBackoffPolicy());
4345
assertEquals(9, adapted.getExtras().get("maxErrorRetries"));
46+
47+
UploadRequest<FilePayload> exactRequest =
48+
new UploadRequest<>(new UploadContext<>(payload, null), null)
49+
.constrain(TimeWindow.immediate());
50+
51+
JobRequest adaptedExact = AndroidJobStrategy.adapt(exactRequest);
52+
assertTrue(adaptedExact.isExact());
53+
assertEquals(adaptedExact.getStartMs(), 1);
54+
assertEquals(adaptedExact.getEndMs(), 1);
4455
}
4556
}

lib/src/main/java/com/cloudinary/android/AndroidJobStrategy.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,25 @@ static JobRequest adapt(UploadRequest request) {
3232

3333
UploadPolicy policy = request.getUploadPolicy();
3434

35-
return new JobRequest.Builder(JOB_TAG)
36-
.setExecutionWindow(request.getTimeWindow().getMinLatencyOffsetMillis(), request.getTimeWindow().getMaxExecutionDelayMillis())
37-
.setRequiredNetworkType(adaptNetworkType(policy.getNetworkType()))
35+
JobRequest.Builder builder = new JobRequest.Builder(JOB_TAG)
3836
.setBackoffCriteria(policy.getBackoffMillis(), adaptPolicy(policy.getBackoffPolicy()))
39-
.setRequiresCharging(policy.isRequiresCharging())
40-
.setRequiresDeviceIdle(policy.isRequiresIdle())
41-
.setExtras(extras)
42-
.setRequirementsEnforced(true)
43-
.build();
37+
.setExtras(extras);
38+
39+
if (request.getTimeWindow().isImmediate()) {
40+
if (request.getUploadPolicy().hasRequirements()) {
41+
Logger.d(TAG, "Note: Request marked to start immediately - all requirements will be ignored.");
42+
}
43+
44+
builder.startNow();
45+
} else {
46+
builder.setExecutionWindow(request.getTimeWindow().getMinLatencyOffsetMillis(), request.getTimeWindow().getMaxExecutionDelayMillis())
47+
.setRequiredNetworkType(adaptNetworkType(policy.getNetworkType()))
48+
.setRequiresCharging(policy.isRequiresCharging())
49+
.setRequiresDeviceIdle(policy.isRequiresIdle())
50+
.setRequirementsEnforced(true);
51+
}
52+
53+
return builder.build();
4454
}
4555

4656
private static JobRequest.BackoffPolicy adaptPolicy(UploadPolicy.BackoffPolicy backoffPolicy) {

lib/src/main/java/com/cloudinary/android/policy/TimeWindow.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public boolean isImmediate() {
7373
*/
7474
public static final class Builder{
7575
private long minLatencyOffsetMillis = 0;
76-
private long maxExecutionDelayMillis = System.currentTimeMillis() + DEFAULT_TIME_WINDOW;
76+
private long maxExecutionDelayMillis = DEFAULT_TIME_WINDOW;
7777

7878
/**
7979
* Sets the minimum time to wait before executing a request. This is defined as offset to current time.

lib/src/main/java/com/cloudinary/android/policy/UploadPolicy.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ public long getBackoffMillis() {
7070
return backoffMillis;
7171
}
7272

73+
public boolean hasRequirements() {
74+
return requiresCharging || requiresIdle || networkType == NetworkType.UNMETERED;
75+
}
7376
/**
7477
* Get a new builder with the configuration copied from this policy.
7578
*/

sample/src/main/java/com/cloudinary/android/sample/core/CloudinaryHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class CloudinaryHelper {
2323
public static String uploadResource(Resource resource, boolean preprocess) {
2424
UploadRequest request = MediaManager.get().upload(Uri.parse(resource.getLocalUri()))
2525
.unsigned("sample_app_preset")
26-
.constrain(TimeWindow.immediate())
26+
.constrain(TimeWindow.getDefault())
2727
.option("resource_type", "auto")
2828
.maxFileSize(100 * 1024 * 1024) // max 100mb
2929
.policy(MediaManager.get().getGlobalUploadPolicy().newBuilder().maxRetries(10).build());

0 commit comments

Comments
 (0)