1687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar/* 2687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * Copyright 2017 The Android Open Source Project 3687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * 4687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * Licensed under the Apache License, Version 2.0 (the "License"); 5687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * you may not use this file except in compliance with the License. 6687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * You may obtain a copy of the License at 7687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * 8687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * http://www.apache.org/licenses/LICENSE-2.0 9687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * 10687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * Unless required by applicable law or agreed to in writing, software 11687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * distributed under the License is distributed on an "AS IS" BASIS, 12687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * See the License for the specific language governing permissions and 14687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * limitations under the License. 15687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar */ 16687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar 17564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariapackage androidx.work.impl.utils.taskexecutor; 18687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar 19687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagarimport android.support.annotation.Nullable; 20687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagarimport android.support.annotation.RestrictTo; 21687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar 22687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar/** 23687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * A static class that serves as a central point to execute common tasks in WorkManager. 24687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * This is used for business logic internal to WorkManager and NOT for worker processing. 25687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * Adapted from {@link android.arch.core.executor.ArchTaskExecutor} 26687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * @hide 27687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar */ 28687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar 29687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) 30687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagarpublic class WorkManagerTaskExecutor implements TaskExecutor { 31687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar private static WorkManagerTaskExecutor sInstance; 32687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar private final TaskExecutor mDefaultTaskExecutor = new DefaultTaskExecutor(); 33687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar private TaskExecutor mTaskExecutor = mDefaultTaskExecutor; 34687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar 35687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar /** 36687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * Returns an instance of the task executor. 37687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar * @return The singleton WorkManagerTaskExecutor. 38687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar */ 39687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar public static synchronized WorkManagerTaskExecutor getInstance() { 40687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar if (sInstance == null) { 41687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar sInstance = new WorkManagerTaskExecutor(); 42687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar } 43687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar return sInstance; 44687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar } 45687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar 46687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar private WorkManagerTaskExecutor() { 47687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar } 48687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar 49f8702c39a4cb2ca1fab53a8ab0addb2ab9361569Rahul Ravikumar /** 50f8702c39a4cb2ca1fab53a8ab0addb2ab9361569Rahul Ravikumar * Overrides the task executor used by {@link androidx.work.impl.WorkManagerImpl}. 51f8702c39a4cb2ca1fab53a8ab0addb2ab9361569Rahul Ravikumar * 52f8702c39a4cb2ca1fab53a8ab0addb2ab9361569Rahul Ravikumar * @param taskExecutor The instance of the {@link TaskExecutor}. 53f8702c39a4cb2ca1fab53a8ab0addb2ab9361569Rahul Ravikumar */ 54f8702c39a4cb2ca1fab53a8ab0addb2ab9361569Rahul Ravikumar public void setTaskExecutor(@Nullable TaskExecutor taskExecutor) { 55687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar mTaskExecutor = taskExecutor == null ? mDefaultTaskExecutor : taskExecutor; 56687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar } 57687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar 58687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar @Override 59687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar public void postToMainThread(Runnable r) { 60687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar mTaskExecutor.postToMainThread(r); 61687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar } 62687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar 63687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar @Override 64687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar public void executeOnBackgroundThread(Runnable r) { 65687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar mTaskExecutor.executeOnBackgroundThread(r); 66687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar } 67687da3388ece2fefd80c710c382dff908b615a3fXyan Bhatnagar} 68