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