SystemAlarmService.java revision ea55183d5b0bb706e6e962605cd820e5b3a02c28
1a92623408ef72ecfb70083938eb5896199589c79Jan Clarin/* 2a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * Copyright 2017 The Android Open Source Project 3a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * 4a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * Licensed under the Apache License, Version 2.0 (the "License"); 5a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * you may not use this file except in compliance with the License. 6a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * You may obtain a copy of the License at 7a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * 8a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * http://www.apache.org/licenses/LICENSE-2.0 9a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * 10a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * Unless required by applicable law or agreed to in writing, software 11a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * distributed under the License is distributed on an "AS IS" BASIS, 12a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * See the License for the specific language governing permissions and 14a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * limitations under the License. 15a92623408ef72ecfb70083938eb5896199589c79Jan Clarin */ 16a92623408ef72ecfb70083938eb5896199589c79Jan Clarin 171ecbe025abd63da00f6868d6459afb823241a412Jan Clarinpackage android.arch.background.workmanager.background.systemalarm; 18a92623408ef72ecfb70083938eb5896199589c79Jan Clarin 19a92623408ef72ecfb70083938eb5896199589c79Jan Clarinimport android.arch.background.workmanager.ExecutionListener; 20a92623408ef72ecfb70083938eb5896199589c79Jan Clarinimport android.arch.background.workmanager.WorkDatabase; 21a92623408ef72ecfb70083938eb5896199589c79Jan Clarinimport android.arch.background.workmanager.WorkManager; 22bb667b8826f311cfc49a1deff0c7670f8dc9cdfdJan Clarinimport android.arch.background.workmanager.background.BackgroundProcessor; 23ea55183d5b0bb706e6e962605cd820e5b3a02c28Xyan Bhatnagarimport android.arch.lifecycle.LifecycleService; 24a92623408ef72ecfb70083938eb5896199589c79Jan Clarinimport android.content.Context; 25a92623408ef72ecfb70083938eb5896199589c79Jan Clarinimport android.content.Intent; 26a92623408ef72ecfb70083938eb5896199589c79Jan Clarinimport android.os.IBinder; 2709835397594c33239e4eefe16cb4dee544047af3Xyan Bhatnagarimport android.support.annotation.NonNull; 28a92623408ef72ecfb70083938eb5896199589c79Jan Clarinimport android.support.annotation.Nullable; 29a92623408ef72ecfb70083938eb5896199589c79Jan Clarinimport android.support.annotation.RestrictTo; 30a92623408ef72ecfb70083938eb5896199589c79Jan Clarinimport android.util.Log; 31a92623408ef72ecfb70083938eb5896199589c79Jan Clarin 32a92623408ef72ecfb70083938eb5896199589c79Jan Clarin/** 33a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * Service invoked by {@link android.app.AlarmManager} to run work tasks. 34a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * 35a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * @hide 36a92623408ef72ecfb70083938eb5896199589c79Jan Clarin */ 37a92623408ef72ecfb70083938eb5896199589c79Jan Clarin@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) 38ea55183d5b0bb706e6e962605cd820e5b3a02c28Xyan Bhatnagarpublic class SystemAlarmService extends LifecycleService implements ExecutionListener { 3996c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin public static final String EXTRA_WORK_ID = "EXTRA_WORK_ID"; 40a92623408ef72ecfb70083938eb5896199589c79Jan Clarin private static final String TAG = "SystemAlarmService"; 41bb667b8826f311cfc49a1deff0c7670f8dc9cdfdJan Clarin private BackgroundProcessor mProcessor; 42a92623408ef72ecfb70083938eb5896199589c79Jan Clarin 43a92623408ef72ecfb70083938eb5896199589c79Jan Clarin @Override 44a92623408ef72ecfb70083938eb5896199589c79Jan Clarin public void onCreate() { 45a92623408ef72ecfb70083938eb5896199589c79Jan Clarin super.onCreate(); 46a92623408ef72ecfb70083938eb5896199589c79Jan Clarin Context context = getApplicationContext(); 47f53efa6d7ade99f4acc5db025e38a7bedabc0ddbSumir Kataria WorkManager workManager = WorkManager.getInstance(); 48a92623408ef72ecfb70083938eb5896199589c79Jan Clarin WorkDatabase database = workManager.getWorkDatabase(); 49bb667b8826f311cfc49a1deff0c7670f8dc9cdfdJan Clarin mProcessor = new BackgroundProcessor(context, database, workManager.getScheduler(), this); 50ea55183d5b0bb706e6e962605cd820e5b3a02c28Xyan Bhatnagar ProxyController.startProxyControllers(context, database, this); 51a92623408ef72ecfb70083938eb5896199589c79Jan Clarin } 52a92623408ef72ecfb70083938eb5896199589c79Jan Clarin 53a92623408ef72ecfb70083938eb5896199589c79Jan Clarin @Override 54a92623408ef72ecfb70083938eb5896199589c79Jan Clarin public int onStartCommand(Intent intent, int flags, int startId) { 5596c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin // TODO(janclarin): Keep wakelock. 56ea55183d5b0bb706e6e962605cd820e5b3a02c28Xyan Bhatnagar super.onStartCommand(intent, flags, startId); 5796c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin String workSpecId = intent.getStringExtra(EXTRA_WORK_ID); 5896c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin mProcessor.process(workSpecId, 0L); 5996c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin return START_NOT_STICKY; 60a92623408ef72ecfb70083938eb5896199589c79Jan Clarin } 61a92623408ef72ecfb70083938eb5896199589c79Jan Clarin 62a92623408ef72ecfb70083938eb5896199589c79Jan Clarin @Override 6309835397594c33239e4eefe16cb4dee544047af3Xyan Bhatnagar public void onExecuted(@NonNull String workSpecId, boolean needsReschedule) { 64a92623408ef72ecfb70083938eb5896199589c79Jan Clarin Log.d(TAG, workSpecId + " executed on AlarmManager"); 6596c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin // TODO(janclarin): Handle rescheduling if needed or if periodic. 660f5ebc4740ab2db64fc2b278d6d60624b69ffeb0Xyan Bhatnagar // TODO(xbhatnag): Query WorkSpecs and disable proxies as needed. 6796c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin 6896c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin if (!mProcessor.hasWork()) { 6996c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin // TODO(janclarin): Release wakelock. 7096c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin Log.d(TAG, "Stopping self"); 7196c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin stopSelf(); 7296c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin } 73a92623408ef72ecfb70083938eb5896199589c79Jan Clarin } 74a92623408ef72ecfb70083938eb5896199589c79Jan Clarin 75a92623408ef72ecfb70083938eb5896199589c79Jan Clarin @Nullable 76a92623408ef72ecfb70083938eb5896199589c79Jan Clarin @Override 77a92623408ef72ecfb70083938eb5896199589c79Jan Clarin public IBinder onBind(Intent intent) { 78ea55183d5b0bb706e6e962605cd820e5b3a02c28Xyan Bhatnagar super.onBind(intent); 79a92623408ef72ecfb70083938eb5896199589c79Jan Clarin return null; 80a92623408ef72ecfb70083938eb5896199589c79Jan Clarin } 81a92623408ef72ecfb70083938eb5896199589c79Jan Clarin 82a92623408ef72ecfb70083938eb5896199589c79Jan Clarin @Override 83a92623408ef72ecfb70083938eb5896199589c79Jan Clarin public void onDestroy() { 84a92623408ef72ecfb70083938eb5896199589c79Jan Clarin Log.d(TAG, "Destroyed"); 8596c5bc560ddbdc1fb871d2c7450f86df34dbcbf6Jan Clarin super.onDestroy(); 86a92623408ef72ecfb70083938eb5896199589c79Jan Clarin } 87a92623408ef72ecfb70083938eb5896199589c79Jan Clarin} 88