OSDN Git Service

Repin home once setup is complete
authorJorim Jaggi <jjaggi@google.com>
Sun, 15 Jul 2018 12:24:38 +0000 (14:24 +0200)
committerJorim Jaggi <jjaggi@google.com>
Tue, 17 Jul 2018 10:59:58 +0000 (12:59 +0200)
On a fresh device, the home intent resovles to SetupWizard. After
setup is complete, it will resolve to the regular home app. In
order to accomodate for that, repin home app once user setup is
complete.

Test: Wipe device, complete SUW, inspect pinner
Bug: 111132016
Change-Id: I904ecd2fed26bc1a3baf45c1b54da5fc6352d773

services/core/java/com/android/server/PinnerService.java

index cec2028..f5b29e9 100644 (file)
@@ -34,6 +34,7 @@ import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.database.ContentObserver;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Build;
@@ -43,6 +44,7 @@ import android.os.Message;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.provider.MediaStore;
+import android.provider.Settings;
 import android.system.ErrnoException;
 import android.system.Os;
 import android.system.OsConstants;
@@ -166,7 +168,9 @@ public final class PinnerService extends SystemService {
         filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
         filter.addDataScheme("package");
         mContext.registerReceiver(mBroadcastReceiver, filter);
+
         registerUidListener();
+        registerUserSetupCompleteListener();
     }
 
     @Override
@@ -238,6 +242,26 @@ public final class PinnerService extends SystemService {
         }
     }
 
+    /**
+     * Registers a listener to repin the home app when user setup is complete, as the home intent
+     * initially resolves to setup wizard, but once setup is complete, it will resolve to the
+     * regular home app.
+     */
+    private void registerUserSetupCompleteListener() {
+        Uri userSetupCompleteUri = Settings.Secure.getUriFor(
+                Settings.Secure.USER_SETUP_COMPLETE);
+        mContext.getContentResolver().registerContentObserver(userSetupCompleteUri,
+                false, new ContentObserver(null) {
+                    @Override
+                    public void onChange(boolean selfChange, Uri uri) {
+                        if (userSetupCompleteUri.equals(uri)) {
+                            sendPinAppMessage(KEY_HOME, ActivityManager.getCurrentUser(),
+                                    true /* force */);
+                        }
+                    }
+                }, UserHandle.USER_ALL);
+    }
+
     private void registerUidListener() {
         try {
             mAm.registerUidObserver(new IUidObserver.Stub() {