• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2016, The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.managedprovisioning.task;
18 
19 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.VIEW_UNKNOWN;
20 import static com.android.internal.util.Preconditions.checkNotNull;
21 
22 import android.content.Context;
23 
24 import com.android.managedprovisioning.analytics.TimeLogger;
25 import com.android.managedprovisioning.model.ProvisioningParams;
26 
27 /**
28  * Base class for all provisioning tasks.
29  */
30 public abstract class AbstractProvisioningTask {
31     protected final Context mContext;
32     protected final ProvisioningParams mProvisioningParams;
33     private final Callback mCallback;
34     private TimeLogger mTimeLogger;
35 
36     /**
37      * Constructor for a provisioning task
38      *
39      * @param context {@link Context} object.
40      * @param provisioningParams {@link ProvisioningParams} object for this provisioning process.
41      * @param callback {@link Callback} object to return task results.
42      */
AbstractProvisioningTask( Context context, ProvisioningParams provisioningParams, Callback callback)43     AbstractProvisioningTask(
44             Context context,
45             ProvisioningParams provisioningParams,
46             Callback callback) {
47         mContext = checkNotNull(context);
48         mProvisioningParams = provisioningParams;
49         mCallback = checkNotNull(callback);
50 
51         mTimeLogger = new TimeLogger(context, getMetricsCategory());
52     }
53 
success()54     protected final void success() {
55         mCallback.onSuccess(this);
56     }
57 
error(int resultCode)58     protected final void error(int resultCode) {
59         mCallback.onError(this, resultCode);
60     }
61 
startTaskTimer()62     protected void startTaskTimer() {
63         mTimeLogger.start();
64     }
65 
stopTaskTimer()66     protected void stopTaskTimer() {
67         mTimeLogger.stop();
68     }
69 
getMetricsCategory()70     protected int getMetricsCategory() {
71         return VIEW_UNKNOWN;
72     }
73 
74     /**
75      * Run the task.
76      *
77      * @param userId the id of the user the action should be performed on.
78      */
run(int userId)79     public abstract void run(int userId);
80 
81     /**
82      * @return the resource id of the status message related to the task.
83      */
getStatusMsgId()84     public abstract int getStatusMsgId();
85 
86     /**
87      * Callback class for provisioning tasks.
88      *
89      * <p>Every execution of run should result in exactly one of
90      * {@link Callback#onSuccess(AbstractProvisioningTask)} and
91      * {@link Callback#onError(AbstractProvisioningTask, int)} to be called.</p>
92      */
93     public interface Callback {
94 
95         /**
96          * Callback indicating that the task has finished successfully.
97          *
98          * @param task the task that finished executing.
99          */
onSuccess(AbstractProvisioningTask task)100         void onSuccess(AbstractProvisioningTask task);
101 
102         /**
103          * Callback indicating that the task has encountered an error.
104          *
105          * @param task the task that finished executing.
106          * @param errorCode a error code indicating the type of error that happened.
107          */
onError(AbstractProvisioningTask task, int errorCode)108         void onError(AbstractProvisioningTask task, int errorCode);
109     }
110 }
111