Home | History | Annotate | Download | only in task
      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      */
     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 
     54     protected final void success() {
     55         mCallback.onSuccess(this);
     56     }
     57 
     58     protected final void error(int resultCode) {
     59         mCallback.onError(this, resultCode);
     60     }
     61 
     62     protected void startTaskTimer() {
     63         mTimeLogger.start();
     64     }
     65 
     66     protected void stopTaskTimer() {
     67         mTimeLogger.stop();
     68     }
     69 
     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      */
     79     public abstract void run(int userId);
     80 
     81     /**
     82      * @return the resource id of the status message related to the task.
     83      */
     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          */
    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          */
    108         void onError(AbstractProvisioningTask task, int errorCode);
    109     }
    110 }
    111