am 3bb060b5: am 3da1e329: Fix bug where provisioning service could be started twice.

* commit '3bb060b5099122f4a0d8dd1ed211857d85ef72d3':
  Fix bug where provisioning service could be started twice.
diff --git a/src/com/android/managedprovisioning/ManagedProvisioningService.java b/src/com/android/managedprovisioning/ManagedProvisioningService.java
index 10a4e3f..4089468 100644
--- a/src/com/android/managedprovisioning/ManagedProvisioningService.java
+++ b/src/com/android/managedprovisioning/ManagedProvisioningService.java
@@ -37,6 +37,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.UserInfo;
+import android.os.AsyncTask;
 import android.os.IBinder;
 import android.os.Process;
 import android.os.RemoteException;
@@ -76,6 +77,16 @@
     private UserManager mUserManager;
 
     private int mStartIdProvisioning;
+    private AsyncTask<Intent, Object, Void> runnerTask;
+
+    private class RunnerTask extends AsyncTask<Intent, Object, Void> {
+        @Override
+        protected Void doInBackground(Intent ... intents) {
+            initialize(intents[0]);
+            startManagedProfileProvisioning();
+            return null;
+        }
+    }
 
     @Override
     public void onCreate() {
@@ -85,19 +96,20 @@
 
         mIpm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
         mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
+
+        runnerTask = new RunnerTask();
     }
 
     @Override
     public int onStartCommand(final Intent intent, int flags, int startId) {
+
         ProvisionLogger.logd("Starting managed provisioning service");
-        mStartIdProvisioning = startId;
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                initialize(intent);
-                startManagedProfileProvisioning();
-            }
-        }).start();
+        try {
+            runnerTask.execute(intent);
+        } catch (IllegalStateException ex) {
+            ProvisionLogger.logd("ManagedProvisioningService: Provisioning already in progress, "
+                    + "second provisioning intent not being processed");
+        }
         return START_NOT_STICKY;
 }
 
@@ -315,7 +327,7 @@
         LocalBroadcastManager.getInstance(this).sendBroadcast(successIntent);
 
         sendProvisioningCompleteToManagedProfile(this);
-        stopSelf(mStartIdProvisioning);
+        stopSelf();
     }
 
     private void error(String logMessage) {
@@ -324,7 +336,7 @@
         intent.putExtra(EXTRA_LOG_MESSAGE_KEY, logMessage);
         sendBroadcast(intent);
         cleanup();
-        stopSelf(mStartIdProvisioning);
+        stopSelf();
     }
 
     /**
@@ -342,4 +354,9 @@
     public IBinder onBind(Intent intent) {
         return null;
     }
+
+    @Override
+    public void onDestroy() {
+        ProvisionLogger.logd("ManagedProvisioningService  ONDESTROY");
+    }
 }