Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2e63aab0 authored by Svet Ganov's avatar Svet Ganov Committed by The Android Automerger
Browse files

Grant default permissions to the setup app robustly.

There is a zoo of components that handle the home intent and
have different priority. There is no reliable way to distinguish
the setup app from the other apps that handle home as some of
them have lower priority than the setup app and some higher.
This change adds a dedicated category to recognize the default
setup app.

Uncommented the code that grants accounts permissions as the
get_accounts permission is now a runtime permission and can be
granted.

bug:22471024
bug:22501463

Change-Id: I41726751fa2567cbcd7d09c7acfa7615b8aba577
parent 519bd07b
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -3093,6 +3093,13 @@ public class Intent implements Parcelable, Cloneable {
     */
    @SdkConstant(SdkConstantType.INTENT_CATEGORY)
    public static final String CATEGORY_HOME = "android.intent.category.HOME";
    /**
     * This is the setup wizard activity, that is the first activity that is displayed
     * when the user sets up the device for the first time.
     * @hide
     */
    @SdkConstant(SdkConstantType.INTENT_CATEGORY)
    public static final String CATEGORY_SETUP_WIZARD = "android.intent.category.SETUP_WIZARD";
    /**
     * This activity is a preference panel.
     */
+8 −14
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Debug;
import android.os.UserHandle;
import android.provider.CalendarContract;
import android.provider.ContactsContract;
@@ -120,12 +119,7 @@ final class DefaultPermissionGrantPolicy {

    private static final Set<String> ACCOUNTS_PERMISSIONS = new ArraySet<>();
    static {
        //ACCOUNTS_PERMISSIONS.add(Manifest.permission.GET_ACCOUNTS);
    }

    private static final Set<String> SETTINGS_PERMISSIONS = new ArraySet<>();
    static {
        SETTINGS_PERMISSIONS.add(Manifest.permission.WRITE_SETTINGS);
        ACCOUNTS_PERMISSIONS.add(Manifest.permission.GET_ACCOUNTS);
    }

    private final PackageManagerService mService;
@@ -161,7 +155,7 @@ final class DefaultPermissionGrantPolicy {
        mDialerAppPackagesProvider = provider;
    }

    public void setSyncAdapterPackagesProviderrLPw(SyncAdapterPackagesProvider provider) {
    public void setSyncAdapterPackagesProviderLPw(SyncAdapterPackagesProvider provider) {
        mSyncAdapterPackagesProvider = provider;
    }

@@ -256,7 +250,7 @@ final class DefaultPermissionGrantPolicy {

            // SetupWizard
            Intent setupIntent = new Intent(Intent.ACTION_MAIN);
            setupIntent.addCategory(Intent.CATEGORY_HOME);
            setupIntent.addCategory(Intent.CATEGORY_SETUP_WIZARD);
            PackageParser.Package setupPackage = getDefaultSystemHandlerActivityPackageLPr(
                    setupIntent, userId);
            if (setupPackage != null
@@ -374,8 +368,7 @@ final class DefaultPermissionGrantPolicy {

            // Calendar provider sync adapters
            List<PackageParser.Package> calendarSyncAdapters = getHeadlessSyncAdapterPackagesLPr(
                    calendarSyncAdapterPackages,
                            userId);
                    calendarSyncAdapterPackages, userId);
            final int calendarSyncAdapterCount = calendarSyncAdapters.size();
            for (int i = 0; i < calendarSyncAdapterCount; i++) {
                PackageParser.Package calendarSyncAdapter = calendarSyncAdapters.get(i);
@@ -398,8 +391,7 @@ final class DefaultPermissionGrantPolicy {

            // Contacts provider sync adapters
            List<PackageParser.Package> contactsSyncAdapters = getHeadlessSyncAdapterPackagesLPr(
                    contactsSyncAdapterPackages,
                            userId);
                    contactsSyncAdapterPackages, userId);
            final int contactsSyncAdapterCount = contactsSyncAdapters.size();
            for (int i = 0; i < contactsSyncAdapterCount; i++) {
                PackageParser.Package contactsSyncAdapter = contactsSyncAdapters.get(i);
@@ -628,10 +620,12 @@ final class DefaultPermissionGrantPolicy {
        List<ResolveInfo> handlers = mService.mActivities.queryIntent(intent,
                intent.resolveType(mService.mContext.getContentResolver()),
                PackageManager.GET_DISABLED_COMPONENTS, userId);
        if (handlers == null) {
            return null;
        }
        final int handlerCount = handlers.size();
        for (int i = 0; i < handlerCount; i++) {
            ResolveInfo handler = handlers.get(i);
            // TODO: This is a temporary hack to figure out the setup app.
            PackageParser.Package handlerPackage = getSystemPackageLPr(
                    handler.activityInfo.packageName);
            if (handlerPackage != null) {
+1 −1
Original line number Diff line number Diff line
@@ -16407,7 +16407,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        @Override
        public void setSyncAdapterPackagesprovider(SyncAdapterPackagesProvider provider) {
            synchronized (mPackages) {
                mDefaultPermissionPolicy.setSyncAdapterPackagesProviderrLPw(provider);
                mDefaultPermissionPolicy.setSyncAdapterPackagesProviderLPw(provider);
            }
        }