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