Use BroadcastReceiver.goAsync() instead of a service.

Bug: 36635931

Change-Id: Ib279354a345a89bdf1a3c9e20e8d951cc0e17fdf
(cherry picked from commit 725b26593c969a50a6e83f45414e0d46d490ec0f)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2ed8f59..18675a7 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -33,9 +33,5 @@
                     android:name="android.intent.action.BOOT_COMPLETED"/>
             </intent-filter>
         </receiver>
-
-        <service
-            android:name=".OneTimeInitializerService">
-        </service>
     </application>
 </manifest>
diff --git a/src/com/android/onetimeinitializer/OneTimeInitializerService.java b/src/com/android/onetimeinitializer/OneTimeInitializer.java
similarity index 88%
rename from src/com/android/onetimeinitializer/OneTimeInitializerService.java
rename to src/com/android/onetimeinitializer/OneTimeInitializer.java
index cf72eae..aa37036 100644
--- a/src/com/android/onetimeinitializer/OneTimeInitializerService.java
+++ b/src/com/android/onetimeinitializer/OneTimeInitializer.java
@@ -16,7 +16,6 @@
 
 package com.android.onetimeinitializer;
 
-import android.app.IntentService;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.ContentValues;
@@ -37,11 +36,8 @@
  * BOOT_COMPLETED broadcast intent instead.  This means, when the app is upgraded, the
  * initialization code here won't run until the device reboots.
  */
-public class OneTimeInitializerService extends IntentService {
-
-    // class name is too long
-    private static final String TAG = OneTimeInitializerService.class.getSimpleName()
-            .substring(0, 22);
+public class OneTimeInitializer {
+    private static final String TAG = OneTimeInitializer.class.getSimpleName();
 
     // Name of the shared preferences file.
     private static final String SHARED_PREFS_FILE = "oti";
@@ -58,21 +54,16 @@
     private static final String LAUNCHER_INTENT_COLUMN = "intent";
 
     private SharedPreferences mPreferences;
+    private Context mContext;
 
-    public OneTimeInitializerService() {
-        super("OneTimeInitializer Service");
+    OneTimeInitializer(Context context) {
+        mContext = context;
+        mPreferences = mContext.getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
     }
 
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        mPreferences = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
-    }
-
-    @Override
-    protected void onHandleIntent(Intent intent) {
+    void initialize() {
         if (Log.isLoggable(TAG, Log.VERBOSE)) {
-            Log.v(TAG, "OneTimeInitializerService.onHandleIntent");
+            Log.v(TAG, "OneTimeInitializer.initialize");
         }
 
         final int currentVersion = getMappingVersion();
@@ -100,7 +91,7 @@
     }
 
     private void updateDialtactsLauncher() {
-        ContentResolver cr = getContentResolver();
+        ContentResolver cr = mContext.getContentResolver();
         Cursor c = cr.query(LAUNCHER_CONTENT_URI,
                 new String[]{LAUNCHER_ID_COLUMN, LAUNCHER_INTENT_COLUMN}, null, null, null);
         if (c == null) {
diff --git a/src/com/android/onetimeinitializer/OneTimeInitializerReceiver.java b/src/com/android/onetimeinitializer/OneTimeInitializerReceiver.java
index 0f99a2b..07e6501 100644
--- a/src/com/android/onetimeinitializer/OneTimeInitializerReceiver.java
+++ b/src/com/android/onetimeinitializer/OneTimeInitializerReceiver.java
@@ -22,17 +22,21 @@
 import android.util.Log;
 
 /**
- * BroadcastReceiver that starts the service to performs one time initialization
- * at bootup time.
+ * BroadcastReceiver that performs one time initialization at bootup time.
  */
 public class OneTimeInitializerReceiver extends BroadcastReceiver {
-
-    private static final String TAG = OneTimeInitializerReceiver.class.getSimpleName()
-            .substring(0, 22);
+    private static final String TAG = "OneTimeInitializerReceiver";
 
     @Override
-    public void onReceive(Context context, Intent intent) {
+    public void onReceive(final Context context, Intent intent) {
         Log.v(TAG, "OneTimeInitializerReceiver.onReceive");
-        context.startService(new Intent(context, OneTimeInitializerService.class));
+        final PendingResult result = goAsync();
+        new Thread(() -> {
+            try {
+                new OneTimeInitializer(context).initialize();
+            } finally {
+                result.finish();
+            }
+        }).start();
     }
 }