WorkRequest.java revision 6d0c2e72666e6e6c463ce283f6f546ef26159f1c
1c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria/* 2c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * Copyright (C) 2017 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 */ 16c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria 17c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Katariapackage android.arch.background.workmanager; 18c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria 193032a52e9b0e87bcef422396d9080983df1e9eeaSumir Katariaimport android.arch.background.workmanager.impl.WorkImpl; 201cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Katariaimport android.support.annotation.NonNull; 2113915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Katariaimport android.support.annotation.VisibleForTesting; 22c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria 236d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Katariaimport java.util.ArrayList; 246d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Katariaimport java.util.List; 256d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria 26c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria/** 2751b5cd2bc8a7fb7979e2bcd731fc8fd0d195f860Sumir Kataria * A class to execute a logical unit of non-repeating work. 28c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria */ 29c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria 303032a52e9b0e87bcef422396d9080983df1e9eeaSumir Katariapublic abstract class Work implements BaseWork { 311cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria 321cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria /** 336d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria * Creates an array of {@link Work} with defaults from an array of {@link Worker} class names. 346d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria * 356d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria * @param workerClasses An array of {@link Worker} class names 366d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria * @return An array of {@link Work} constructed by using defaults in the {@link Builder} 376d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria */ 386d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria public static Work[] from(@NonNull Class<? extends Worker>... workerClasses) { 396d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria Work[] workArray = new Work[workerClasses.length]; 406d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria for (int i = 0; i < workerClasses.length; ++i) { 416d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria workArray[i] = new Work.Builder(workerClasses[i]).build(); 426d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria } 436d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria return workArray; 446d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria } 456d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria 466d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria /** 476d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria * Creates a list of {@link Work} with defaults from an array of {@link Worker} class names. 486d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria * 496d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria * @param workerClasses An array of {@link Worker} class names 506d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria * @return A listof {@link Work} constructed by using defaults in the {@link Builder} 516d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria */ 526d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria public static List<Work> from(@NonNull List<Class<? extends Worker>> workerClasses) { 536d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria List<Work> workList = new ArrayList<>(workerClasses.size()); 546d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria for (Class<? extends Worker> workerClass : workerClasses) { 556d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria workList.add(new Work.Builder(workerClass).build()); 566d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria } 576d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria return workList; 586d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria } 596d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria 606d0c2e72666e6e6c463ce283f6f546ef26159f1cSumir Kataria /** 61c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * Builder for {@link Work} class. 62c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria */ 6313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public static class Builder implements WorkBuilder<Work, Builder> { 6413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 6513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria private WorkImpl.Builder mInternalBuilder; 66c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria 67fdfa71bde752910546ff5c2499661de9bcf7fc02Xyan Bhatnagar /** 681cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria * Creates a {@link Work} that runs once. 691cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria * 701cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria * @param workerClass The {@link Worker} class to run with this job 71fdfa71bde752910546ff5c2499661de9bcf7fc02Xyan Bhatnagar */ 721cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria public Builder(Class<? extends Worker> workerClass) { 7313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder = new WorkImpl.Builder(workerClass); 74367c6495989abb32b5c0fa99be983c93c4bb5c09Xyan Bhatnagar } 75367c6495989abb32b5c0fa99be983c93c4bb5c09Xyan Bhatnagar 7625d6e06a5a297f18ddde4f09a6a5c8eb0bad7000Sumir Kataria /** 77ee302e19355ede7dde7d607940d5bd686d164baeJan Clarin * Specify whether {@link Work} should run with an initial delay. Default is 0ms. 78ee302e19355ede7dde7d607940d5bd686d164baeJan Clarin * 79a1af78b16d275b98dd13f8df852d568f13c4ec0cXyan Bhatnagar * @param duration initial delay before running WorkSpec (in milliseconds) 801cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria * @return The current {@link Builder} 81a1af78b16d275b98dd13f8df852d568f13c4ec0cXyan Bhatnagar */ 8213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 8313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withInitialDelay(long duration) { 8413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withInitialDelay(duration); 8513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 8613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 87a1af78b16d275b98dd13f8df852d568f13c4ec0cXyan Bhatnagar 88a48d7acf791f20ed5afc8bc8d8c66eebd9fbfd5bSumir Kataria /** 8918aa0f0a4d1416c8bedad720da7178d130735340Sumir Kataria * Specify an {@link InputMerger}. The default is {@link OverwritingInputMerger}. 90a48d7acf791f20ed5afc8bc8d8c66eebd9fbfd5bSumir Kataria * 91a48d7acf791f20ed5afc8bc8d8c66eebd9fbfd5bSumir Kataria * @param inputMerger The class name of the {@link InputMerger} to use for this {@link Work} 92a48d7acf791f20ed5afc8bc8d8c66eebd9fbfd5bSumir Kataria * @return The current {@link Builder} 93a48d7acf791f20ed5afc8bc8d8c66eebd9fbfd5bSumir Kataria */ 9413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 9513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withInputMerger(@NonNull Class<? extends InputMerger> inputMerger) { 9613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withInputMerger(inputMerger); 9713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 9813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 9913915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 10013915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 10161a1a9b8cb72b06c1b11c111bff8637562beb3eeSumir Kataria public Builder withBackoffCriteria( 10261a1a9b8cb72b06c1b11c111bff8637562beb3eeSumir Kataria @NonNull BackoffPolicy backoffPolicy, 10361a1a9b8cb72b06c1b11c111bff8637562beb3eeSumir Kataria long backoffDelayMillis) { 10413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withBackoffCriteria(backoffPolicy, backoffDelayMillis); 10513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 10613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 10713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 10813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 10913915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withConstraints(@NonNull Constraints constraints) { 11013915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withConstraints(constraints); 11113915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 11213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 11313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 11413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 11513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withArguments(@NonNull Arguments arguments) { 11613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withArguments(arguments); 11713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 11813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 11913915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 12013915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 12113915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder addTag(@NonNull String tag) { 12213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.addTag(tag); 12313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 12413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 12513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 12613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 12713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Work build() { 12813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return mInternalBuilder.build(); 12913915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 13013915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 13113915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @VisibleForTesting 13213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 13366fd2b18d367c602d84b3fa7220462b4228fae43Sumir Kataria public Builder withInitialStatus(WorkStatus status) { 13413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withInitialStatus(status); 13513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 13613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 13713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 13813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @VisibleForTesting 13913915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 14013915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withInitialRunAttemptCount(int runAttemptCount) { 14113915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withInitialRunAttemptCount(runAttemptCount); 14213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 14313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 14413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 14513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @VisibleForTesting 14613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 14713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withPeriodStartTime(long periodStartTime) { 14813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withPeriodStartTime(periodStartTime); 14913915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 15013915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 151c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria } 152c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria} 153