WorkRequest.java revision 13915a0763bdd2601eeb95046138ebbcabf4fb04
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 23c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria/** 243f630c934df9af951f5b209ac98892a840f9aa97Sumir Kataria * A class to create a logical unit of non-repeating work. 25c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria */ 26c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria 273032a52e9b0e87bcef422396d9080983df1e9eeaSumir Katariapublic abstract class Work implements BaseWork { 281cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria 291cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria /** 30c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria * Builder for {@link Work} class. 31c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria */ 3213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public static class Builder implements WorkBuilder<Work, Builder> { 3313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 3413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria private WorkImpl.Builder mInternalBuilder; 35c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria 36fdfa71bde752910546ff5c2499661de9bcf7fc02Xyan Bhatnagar /** 371cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria * Creates a {@link Work} that runs once. 381cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria * 391cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria * @param workerClass The {@link Worker} class to run with this job 40fdfa71bde752910546ff5c2499661de9bcf7fc02Xyan Bhatnagar */ 411cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria public Builder(Class<? extends Worker> workerClass) { 4213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder = new WorkImpl.Builder(workerClass); 43367c6495989abb32b5c0fa99be983c93c4bb5c09Xyan Bhatnagar } 44367c6495989abb32b5c0fa99be983c93c4bb5c09Xyan Bhatnagar 4525d6e06a5a297f18ddde4f09a6a5c8eb0bad7000Sumir Kataria /** 46ee302e19355ede7dde7d607940d5bd686d164baeJan Clarin * Specify whether {@link Work} should run with an initial delay. Default is 0ms. 47ee302e19355ede7dde7d607940d5bd686d164baeJan Clarin * 48a1af78b16d275b98dd13f8df852d568f13c4ec0cXyan Bhatnagar * @param duration initial delay before running WorkSpec (in milliseconds) 491cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria * @return The current {@link Builder} 50a1af78b16d275b98dd13f8df852d568f13c4ec0cXyan Bhatnagar */ 5113915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 5213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withInitialDelay(long duration) { 5313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withInitialDelay(duration); 5413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 5513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 56a1af78b16d275b98dd13f8df852d568f13c4ec0cXyan Bhatnagar 57a48d7acf791f20ed5afc8bc8d8c66eebd9fbfd5bSumir Kataria /** 5818aa0f0a4d1416c8bedad720da7178d130735340Sumir Kataria * Specify an {@link InputMerger}. The default is {@link OverwritingInputMerger}. 59a48d7acf791f20ed5afc8bc8d8c66eebd9fbfd5bSumir Kataria * 60a48d7acf791f20ed5afc8bc8d8c66eebd9fbfd5bSumir Kataria * @param inputMerger The class name of the {@link InputMerger} to use for this {@link Work} 61a48d7acf791f20ed5afc8bc8d8c66eebd9fbfd5bSumir Kataria * @return The current {@link Builder} 62a48d7acf791f20ed5afc8bc8d8c66eebd9fbfd5bSumir Kataria */ 6313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 6413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withInputMerger(@NonNull Class<? extends InputMerger> inputMerger) { 6513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withInputMerger(inputMerger); 6613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 6713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 6813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 6913915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 7013915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withBackoffCriteria(@BackoffPolicy int backoffPolicy, 7113915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria long backoffDelayMillis) { 7213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withBackoffCriteria(backoffPolicy, backoffDelayMillis); 7313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 7413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 7513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 7613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 7713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withConstraints(@NonNull Constraints constraints) { 7813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withConstraints(constraints); 7913915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 8013915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 8113915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 8213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 8313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withArguments(@NonNull Arguments arguments) { 8413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withArguments(arguments); 8513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 8613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 8713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 8813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 8913915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder addTag(@NonNull String tag) { 9013915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.addTag(tag); 9113915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 9213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 9313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 9413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 9513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Work build() { 9613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return mInternalBuilder.build(); 9713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 9813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 9913915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @VisibleForTesting 10013915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 10113915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withInitialStatus(@WorkStatus int status) { 10213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withInitialStatus(status); 10313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 10413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 10513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 10613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @VisibleForTesting 10713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 10813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withInitialRunAttemptCount(int runAttemptCount) { 10913915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withInitialRunAttemptCount(runAttemptCount); 11013915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 11113915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 11213915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria 11313915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @VisibleForTesting 11413915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria @Override 11513915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria public Builder withPeriodStartTime(long periodStartTime) { 11613915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria mInternalBuilder.withPeriodStartTime(periodStartTime); 11713915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria return this; 11813915a0763bdd2601eeb95046138ebbcabf4fb04Sumir Kataria } 119c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria } 120c8aed5157c86b7f6a7c609d4d1aeb6f3b12e735eSumir Kataria} 121