WorkRequest.java revision 62a7e773945d980084dfc5d00c724de2e27dc22d
1c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria/* 2564e43098c323d1a90be53c190b8fdbdde973505Sumir Kataria * Copyright 2018 The Android Open Source Project 3c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * 4c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * Licensed under the Apache License, Version 2.0 (the "License"); 5c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * you may not use this file except in compliance with the License. 6c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * You may obtain a copy of the License at 7c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * 8c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * http://www.apache.org/licenses/LICENSE-2.0 9c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * 10c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * Unless required by applicable law or agreed to in writing, software 11c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * distributed under the License is distributed on an "AS IS" BASIS, 12c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * See the License for the specific language governing permissions and 14c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * limitations under the License. 15c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria */ 16564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariapackage androidx.work; 17c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria 181cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Katariaimport android.support.annotation.NonNull; 197031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumarimport android.support.annotation.RestrictTo; 207031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumarimport android.support.annotation.VisibleForTesting; 217031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 227031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumarimport androidx.work.impl.model.WorkSpec; 23035f7b94b88f82d259c68938b9f07e5aeddfe057Rahul Ravikumar 247031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumarimport java.util.HashSet; 257031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumarimport java.util.Set; 267031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumarimport java.util.UUID; 27f4ae2b7ec2f6d21ac6a7ee974fa363049ba6d12eSumir Katariaimport java.util.concurrent.TimeUnit; 286d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria 29c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria/** 307031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * The base interface for work requests. 31c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria */ 32c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria 337031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumarpublic abstract class WorkRequest { 341cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria 351cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria /** 367031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * {@see https://android.googlesource.com/platform/frameworks/base/+/oreo-release/core/java/android/app/job/JobInfo.java#77} 377031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 387031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar public static final long DEFAULT_BACKOFF_DELAY_MILLIS = 30000L; 397031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 407031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 417031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * {@see https://android.googlesource.com/platform/frameworks/base/+/oreo-release/core/java/android/app/job/JobInfo.java#82} 427031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 437031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar public static final long MAX_BACKOFF_MILLIS = 5 * 60 * 60 * 1000; // 5 hours. 447031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 457031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 467031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * {@see https://android.googlesource.com/platform/frameworks/base/+/oreo-release/core/java/android/app/job/JobInfo.java#119} 476d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria */ 487031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar public static final long MIN_BACKOFF_MILLIS = 10 * 1000; // 10 seconds. 497031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 50fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria private @NonNull UUID mId; 51fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria private @NonNull WorkSpec mWorkSpec; 52fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria private @NonNull Set<String> mTags; 537031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 54fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria protected WorkRequest(@NonNull UUID id, @NonNull WorkSpec workSpec, @NonNull Set<String> tags) { 55fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria mId = id; 567031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mWorkSpec = workSpec; 577031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mTags = tags; 586d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria } 596d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria 606d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria /** 617031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Gets the unique identifier associated with this unit of work. 626d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria * 637031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @return The identifier for this unit of work 646d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria */ 65fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria public UUID getId() { 66fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria return mId; 67fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria } 68fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria 69fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria /** 70fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria * Gets the string for the unique identifier associated with this unit of work. 71fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria * 72fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria * @return The string identifier for this unit of work 73fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria * @hide 74fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria */ 75fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) 76fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria public String getStringId() { 77fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria return mId.toString(); 786d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria } 796d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria 807031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 817031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Gets the {@link WorkSpec} associated with this unit of work. 827031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 837031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @return The {@link WorkSpec} for this unit of work 847031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @hide 857031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 867031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) 877031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar public WorkSpec getWorkSpec() { 887031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return mWorkSpec; 897031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar } 9031099f8c34e2e4ba4760ca643c7f6cdb51791c4eSumir Kataria 917031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 927031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Gets the tags associated with this unit of work. 937031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 947031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @return The tags for this unit of work 957031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @hide 967031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 977031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) 987031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar public Set<String> getTags() { 997031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return mTags; 10031099f8c34e2e4ba4760ca643c7f6cdb51791c4eSumir Kataria } 10131099f8c34e2e4ba4760ca643c7f6cdb51791c4eSumir Kataria 1026d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria /** 1037031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * A builder for {@link WorkRequest}. 1047031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 1057031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param <B> The concrete implementation of of this Builder 1067031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param <W> The type of work object built by this Builder 107c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria */ 1087031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar public abstract static class Builder<B extends Builder, W extends WorkRequest> { 1097031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 110fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria boolean mBackoffCriteriaSet = false; 111fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria UUID mId; 112fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria WorkSpec mWorkSpec; 113fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria Set<String> mTags = new HashSet<>(); 114c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria 11586894df5599526eb983c484ce185ad27ee8e0398Sumir Kataria public Builder(@NonNull Class<? extends Worker> workerClass) { 116fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria mId = UUID.randomUUID(); 117fa284c943bd003ff03f1934370d70bd4a5e034c3Sumir Kataria mWorkSpec = new WorkSpec(mId.toString(), workerClass.getName()); 1187031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar } 1197031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 1207031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 1217031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Change backoff policy and delay for the work. The default is 1227031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * {@link BackoffPolicy#EXPONENTIAL} and 1237031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * {@value WorkRequest#DEFAULT_BACKOFF_DELAY_MILLIS}. The maximum backoff delay 1247031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * duration is {@value WorkRequest#MAX_BACKOFF_MILLIS}. 1257031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 1267031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param backoffPolicy The {@link BackoffPolicy} to use for work 1277031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param backoffDelay Time to wait before restarting {@link Worker} in {@code timeUnit} 1287031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * units 1297031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param timeUnit The {@link TimeUnit} for {@code backoffDelay} 1307031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @return The current {@link Builder} 1317031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 13262a7e773945d980084dfc5d00c724de2e27dc22dSumir Kataria public B setBackoffCriteria( 1337031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @NonNull BackoffPolicy backoffPolicy, 1347031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar long backoffDelay, 1357031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @NonNull TimeUnit timeUnit) { 1367031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mBackoffCriteriaSet = true; 1377031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mWorkSpec.backoffPolicy = backoffPolicy; 1387031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mWorkSpec.setBackoffDelayDuration(timeUnit.toMillis(backoffDelay)); 1397031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return getThis(); 1407031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar } 1417031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 1427031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 1437031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Add constraints to the {@link OneTimeWorkRequest}. 1447031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 1457031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param constraints The constraints for the work 1467031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @return The current {@link Builder} 1477031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 14862a7e773945d980084dfc5d00c724de2e27dc22dSumir Kataria public B setConstraints(@NonNull Constraints constraints) { 1497031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mWorkSpec.constraints = constraints; 1507031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return getThis(); 151367c6495989abb32b5c0fa99be983c93c4bb5c09Xyan Bhatnagar } 152367c6495989abb32b5c0fa99be983c93c4bb5c09Xyan Bhatnagar 1538b3284fa4a62568df91f706b0b2334284794008fSumir Kataria /** 1547031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Add input {@link Data} to the work. 1558b3284fa4a62568df91f706b0b2334284794008fSumir Kataria * 1567031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param inputData key/value pairs that will be provided to the {@link Worker} class 1578b3284fa4a62568df91f706b0b2334284794008fSumir Kataria * @return The current {@link Builder} 1588b3284fa4a62568df91f706b0b2334284794008fSumir Kataria */ 15962a7e773945d980084dfc5d00c724de2e27dc22dSumir Kataria public B setInputData(@NonNull Data inputData) { 1607031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mWorkSpec.input = inputData; 1617031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return getThis(); 1623d5949e3e18fe4a190a83079bef180fae6dcb318Sumir Kataria } 1633d5949e3e18fe4a190a83079bef180fae6dcb318Sumir Kataria 1648b3284fa4a62568df91f706b0b2334284794008fSumir Kataria /** 1657031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Add an optional tag for the work. This is particularly useful for modules or 1667031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * libraries who want to query for or cancel all of their own work. 1678b3284fa4a62568df91f706b0b2334284794008fSumir Kataria * 1687031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param tag A tag for identifying the work in queries. 1698b3284fa4a62568df91f706b0b2334284794008fSumir Kataria * @return The current {@link Builder} 1708b3284fa4a62568df91f706b0b2334284794008fSumir Kataria */ 1717031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar public B addTag(@NonNull String tag) { 1727031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mTags.add(tag); 1737031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return getThis(); 17413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 17513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 1767031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 1777031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Specifies that the results of this work should be kept for at least the specified amount 1787031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * of time. After this time has elapsed, the results may be pruned at the discretion of 1797031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * WorkManager when there are no pending dependent jobs. 1807031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 1817031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * When the results of a work are pruned, it becomes impossible to query for its 1827031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * {@link WorkStatus}. 1837031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 1847031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Specifying a long duration here may adversely affect performance in terms of app storage 1857031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * and database query time. 1867031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 1877031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param duration The minimum duration of time (in {@code timeUnit} units) to keep the 1887031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * results of this work 1897031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param timeUnit The unit of time for {@code duration} 1907031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @return The current {@link Builder} 1917031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 1927031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar public B keepResultsForAtLeast(long duration, @NonNull TimeUnit timeUnit) { 1937031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mWorkSpec.minimumRetentionDuration = timeUnit.toMillis(duration); 1947031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return getThis(); 1957031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar } 19613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 1977031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 1987031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Builds this work object. 1997031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 2007031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @return The concrete implementation of the work associated with this builder 2017031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 2027031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar public abstract W build(); 2037031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 20462a7e773945d980084dfc5d00c724de2e27dc22dSumir Kataria abstract B getThis(); 2057031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 2067031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 2077031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Set the initial state for this work. Used in testing only. 2087031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 2097031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param state The {@link State} to set 2107031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @return The current {@link Builder} 2117031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @hide 2127031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 2137031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) 2147031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @VisibleForTesting 21562a7e773945d980084dfc5d00c724de2e27dc22dSumir Kataria public B setInitialState(@NonNull State state) { 2167031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mWorkSpec.state = state; 2177031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return getThis(); 21813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 2195ab54f5659eccf75e3b7deee75012e83380da48cSumir Kataria 2207031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 2217031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Set the initial run attempt count for this work. Used in testing only. 2227031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 2237031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param runAttemptCount The initial run attempt count 2247031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @return The current {@link Builder} 2257031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @hide 2267031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 2277031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) 2287031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @VisibleForTesting 22962a7e773945d980084dfc5d00c724de2e27dc22dSumir Kataria public B setInitialRunAttemptCount(int runAttemptCount) { 2307031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mWorkSpec.runAttemptCount = runAttemptCount; 2317031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return getThis(); 2327031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar } 2337031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 2347031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 2357031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Set the period start time for this work. Used in testing only. 2367031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 2377031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param periodStartTime the period start time in {@code timeUnit} units 2387031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param timeUnit The {@link TimeUnit} for {@code periodStartTime} 2397031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @return The current {@link Builder} 2407031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @hide 2417031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 2427031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) 2437031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @VisibleForTesting 24462a7e773945d980084dfc5d00c724de2e27dc22dSumir Kataria public B setPeriodStartTime(long periodStartTime, @NonNull TimeUnit timeUnit) { 2457031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mWorkSpec.periodStartTime = timeUnit.toMillis(periodStartTime); 2467031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return getThis(); 2477031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar } 2487031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar 2497031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar /** 2507031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * Set when the scheduler actually schedules the worker. 2517031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * 2527031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param scheduleRequestedAt The time at which the scheduler scheduled a worker. 2537031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @param timeUnit The {@link TimeUnit} for {@code scheduleRequestedAt} 2547031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @return The current {@link Builder} 2557031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar * @hide 2567031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar */ 2577031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) 2587031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @VisibleForTesting 25962a7e773945d980084dfc5d00c724de2e27dc22dSumir Kataria public B setScheduleRequestedAt( 2607031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar long scheduleRequestedAt, 2617031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar @NonNull TimeUnit timeUnit) { 2627031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar mWorkSpec.scheduleRequestedAt = timeUnit.toMillis(scheduleRequestedAt); 2637031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return getThis(); 2645ab54f5659eccf75e3b7deee75012e83380da48cSumir Kataria } 265c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria } 266c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria} 267