1a92623408ef72ecfb70083938eb5896199589c79Jan Clarin/*
2dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumar * Copyright 2018 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
17564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariapackage androidx.work.impl.background.systemalarm;
18a92623408ef72ecfb70083938eb5896199589c79Jan Clarin
19dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumarimport android.app.Service;
20ea55183d5b0bb706e6e962605cd820e5b3a02c28Xyan Bhatnagarimport android.arch.lifecycle.LifecycleService;
21a92623408ef72ecfb70083938eb5896199589c79Jan Clarinimport android.content.Intent;
22dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumarimport android.support.annotation.MainThread;
23a92623408ef72ecfb70083938eb5896199589c79Jan Clarinimport android.support.annotation.RestrictTo;
24697d6a4a3797bc71d0dd8685937a318e9934066bRahul Ravikumarimport android.util.Log;
25564e43098c323d1a90be53c190b8fdbdde973505Sumir Kataria
26a92623408ef72ecfb70083938eb5896199589c79Jan Clarin/**
27a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * Service invoked by {@link android.app.AlarmManager} to run work tasks.
28a92623408ef72ecfb70083938eb5896199589c79Jan Clarin *
29a92623408ef72ecfb70083938eb5896199589c79Jan Clarin * @hide
30a92623408ef72ecfb70083938eb5896199589c79Jan Clarin */
31a92623408ef72ecfb70083938eb5896199589c79Jan Clarin@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
32dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumarpublic class SystemAlarmService extends LifecycleService
33dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumar        implements SystemAlarmDispatcher.CommandsCompletedListener {
34a7ef49dfd297780b8298b4534c291bcd89b9ca82Xyan Bhatnagar
35a92623408ef72ecfb70083938eb5896199589c79Jan Clarin    private static final String TAG = "SystemAlarmService";
36dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumar
37dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumar    private SystemAlarmDispatcher mDispatcher;
38a92623408ef72ecfb70083938eb5896199589c79Jan Clarin
39a92623408ef72ecfb70083938eb5896199589c79Jan Clarin    @Override
40a92623408ef72ecfb70083938eb5896199589c79Jan Clarin    public void onCreate() {
41a92623408ef72ecfb70083938eb5896199589c79Jan Clarin        super.onCreate();
42dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumar        mDispatcher = new SystemAlarmDispatcher(this);
432da9e7a82febfc60388c19b46a05480dc6258a15Rahul Ravikumar        mDispatcher.setCompletedListener(this);
44a92623408ef72ecfb70083938eb5896199589c79Jan Clarin    }
45a92623408ef72ecfb70083938eb5896199589c79Jan Clarin
46a92623408ef72ecfb70083938eb5896199589c79Jan Clarin    @Override
47f0d52dd74b60bc0555c4dd5dd503e59d049d8599Sumir Kataria    public void onDestroy() {
48f0d52dd74b60bc0555c4dd5dd503e59d049d8599Sumir Kataria        super.onDestroy();
49f0d52dd74b60bc0555c4dd5dd503e59d049d8599Sumir Kataria        mDispatcher.onDestroy();
50f0d52dd74b60bc0555c4dd5dd503e59d049d8599Sumir Kataria    }
51f0d52dd74b60bc0555c4dd5dd503e59d049d8599Sumir Kataria
52f0d52dd74b60bc0555c4dd5dd503e59d049d8599Sumir Kataria    @Override
53a92623408ef72ecfb70083938eb5896199589c79Jan Clarin    public int onStartCommand(Intent intent, int flags, int startId) {
54ea55183d5b0bb706e6e962605cd820e5b3a02c28Xyan Bhatnagar        super.onStartCommand(intent, flags, startId);
55dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumar        if (intent != null) {
56dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumar            mDispatcher.add(intent, startId);
57363a74f7a2d7d1b3e79a7ba32c118915757200c8Xyan Bhatnagar        }
58dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumar        return Service.START_STICKY;
59363a74f7a2d7d1b3e79a7ba32c118915757200c8Xyan Bhatnagar    }
60363a74f7a2d7d1b3e79a7ba32c118915757200c8Xyan Bhatnagar
61dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumar    @MainThread
62363a74f7a2d7d1b3e79a7ba32c118915757200c8Xyan Bhatnagar    @Override
63dd3c04c8aa64eb9c8d3da1bbac6024e613d39143Rahul Ravikumar    public void onAllCommandsCompleted() {
64697d6a4a3797bc71d0dd8685937a318e9934066bRahul Ravikumar        Log.d(TAG, "All commands completed in dispatcher");
65a7ef49dfd297780b8298b4534c291bcd89b9ca82Xyan Bhatnagar        stopSelf();
66a92623408ef72ecfb70083938eb5896199589c79Jan Clarin    }
67a92623408ef72ecfb70083938eb5896199589c79Jan Clarin}
68