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

Commit ead4dfd1 authored by Joel Galenson's avatar Joel Galenson
Browse files

Support multiple profiles in AllAppPermissionsFragment

This required changing a number of callsites.

In addition, I fixed SettingsWithLargeHeader's icon to be clickable,
although it's only used in one place.  And I disabled that place to be
consistent with Settings' app info, which makes it non-clickable.

Fixes: 131859961
Test: Open work app's AppPermissionsFragment, select "All
Permissions", see work profile icon, click info button, see work
profile icon.
Test: Do the same for non-work app and see unbadged icon.
Test: Grant permission through the dialog.
Test: Click on AppPermissionsFragment's header for work/normal app
when coming through AppPermissionFragment.  It worked before I
disabled it.
Change-Id: I14e05b40e77b3949f5e5535070da9f1c524fef5a
parent 91d9ba67
Loading
Loading
Loading
Loading
+15 −12
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.content.res.Resources;
import android.graphics.drawable.Icon;
import android.os.Build;
import android.os.Bundle;
import android.os.UserHandle;
import android.permission.PermissionManager;
import android.text.Html;
import android.text.Spanned;
@@ -264,6 +265,18 @@ public class GrantPermissionsActivity extends Activity

        setTitle(R.string.permission_request_title);

        PackageInfo callingPackageInfo = getCallingPackageInfo();

        if (callingPackageInfo == null || callingPackageInfo.requestedPermissions == null
                || callingPackageInfo.requestedPermissions.length <= 0) {
            setResultAndFinish();
            return;
        }

        mCallingUid = callingPackageInfo.applicationInfo.uid;

        UserHandle userHandle = UserHandle.getUserHandleForUid(mCallingUid);

        if (DeviceUtils.isTelevision(this)) {
            mViewHandler = new com.android.packageinstaller.permission.ui.television
                    .GrantPermissionsViewHandlerImpl(this,
@@ -271,11 +284,11 @@ public class GrantPermissionsActivity extends Activity
        } else if (DeviceUtils.isWear(this)) {
            mViewHandler = new GrantPermissionsWatchViewHandler(this).setResultListener(this);
        } else if (DeviceUtils.isAuto(this)) {
            mViewHandler = new GrantPermissionsAutoViewHandler(this, mCallingPackage)
            mViewHandler = new GrantPermissionsAutoViewHandler(this, mCallingPackage, userHandle)
                    .setResultListener(this);
        } else {
            mViewHandler = new com.android.packageinstaller.permission.ui.handheld
                    .GrantPermissionsViewHandlerImpl(this, mCallingPackage)
                    .GrantPermissionsViewHandlerImpl(this, mCallingPackage, userHandle)
                    .setResultListener(this);
        }

@@ -292,16 +305,6 @@ public class GrantPermissionsActivity extends Activity
            return;
        }

        PackageInfo callingPackageInfo = getCallingPackageInfo();

        if (callingPackageInfo == null || callingPackageInfo.requestedPermissions == null
                || callingPackageInfo.requestedPermissions.length <= 0) {
            setResultAndFinish();
            return;
        }

        mCallingUid = callingPackageInfo.applicationInfo.uid;

        // Don't allow legacy apps to request runtime permissions.
        if (callingPackageInfo.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) {
            // Returning empty arrays means a cancellation.
+5 −5
Original line number Diff line number Diff line
@@ -114,14 +114,14 @@ public final class ManagePermissionsActivity extends FragmentActivity {
                } else {
                    final boolean allPermissions = getIntent().getBooleanExtra(
                            EXTRA_ALL_PERMISSIONS, false);
                    if (allPermissions) {
                        androidXFragment = com.android.packageinstaller.permission.ui.handheld
                                .AllAppPermissionsFragment.newInstance(packageName);
                    } else {
                    UserHandle userHandle = getIntent().getParcelableExtra(Intent.EXTRA_USER);
                    if (userHandle == null) {
                        userHandle = UserHandle.of(UserHandle.myUserId());
                    }
                    if (allPermissions) {
                        androidXFragment = com.android.packageinstaller.permission.ui.handheld
                                .AllAppPermissionsFragment.newInstance(packageName, userHandle);
                    } else {
                        androidXFragment = com.android.packageinstaller.permission.ui.handheld
                                .AppPermissionsFragment.newInstance(packageName, userHandle);
                    }
+4 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.packageinstaller.permission.ui.auto;

import android.app.Activity;
import android.os.UserHandle;
import android.view.WindowManager;

import com.android.packageinstaller.permission.ui.handheld.GrantPermissionsViewHandlerImpl;
@@ -30,8 +31,9 @@ import com.android.packageinstaller.permission.ui.handheld.GrantPermissionsViewH
 * change the window params to allow the dialog's width to be larger.
 */
public class GrantPermissionsAutoViewHandler extends GrantPermissionsViewHandlerImpl {
    public GrantPermissionsAutoViewHandler(Activity activity, String appPackageName) {
        super(activity, appPackageName);
    public GrantPermissionsAutoViewHandler(Activity activity, String appPackageName,
            UserHandle userHandle) {
        super(activity, appPackageName, userHandle);
    }

    /**
+15 −11
Original line number Diff line number Diff line
@@ -31,12 +31,14 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
import android.widget.Switch;

import androidx.annotation.NonNull;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceGroup;
@@ -63,20 +65,20 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {

    private static final String KEY_OTHER = "other_perms";

    private static final String EXTRA_FILTER_GROUP =
            "com.android.packageinstaller.extra.FILTER_GROUP";

    private List<AppPermissionGroup> mGroups;

    public static AllAppPermissionsFragment newInstance(String packageName) {
        return newInstance(packageName, null);
    public static AllAppPermissionsFragment newInstance(@NonNull String packageName,
            @NonNull UserHandle userHandle) {
        return newInstance(packageName, null, userHandle);
    }

    public static AllAppPermissionsFragment newInstance(String packageName, String filterGroup) {
    public static AllAppPermissionsFragment newInstance(@NonNull String packageName,
            @NonNull String filterGroup, @NonNull UserHandle userHandle) {
        AllAppPermissionsFragment instance = new AllAppPermissionsFragment();
        Bundle arguments = new Bundle();
        arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
        arguments.putString(EXTRA_FILTER_GROUP, filterGroup);
        arguments.putString(Intent.EXTRA_PERMISSION_GROUP_NAME, filterGroup);
        arguments.putParcelable(Intent.EXTRA_USER, userHandle);
        instance.setArguments(arguments);
        return instance;
    }
@@ -88,7 +90,7 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
        final ActionBar ab = getActivity().getActionBar();
        if (ab != null) {
            // If we target a group make this look like app permissions.
            if (getArguments().getString(EXTRA_FILTER_GROUP) == null) {
            if (getArguments().getString(Intent.EXTRA_PERMISSION_GROUP_NAME) == null) {
                ab.setTitle(R.string.all_permissions);
            } else {
                ab.setTitle(R.string.app_permissions);
@@ -121,12 +123,14 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
        ArrayList<Preference> prefs = new ArrayList<>(); // Used for sorting.
        prefs.add(otherGroup);
        String pkg = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
        String filterGroup = getArguments().getString(EXTRA_FILTER_GROUP);
        String filterGroup = getArguments().getString(Intent.EXTRA_PERMISSION_GROUP_NAME);
        UserHandle userHandle = getArguments().getParcelable(Intent.EXTRA_USER);
        otherGroup.removeAll();
        PackageManager pm = getContext().getPackageManager();

        try {
            PackageInfo info = pm.getPackageInfo(pkg, PackageManager.GET_PERMISSIONS);
            PackageInfo info = getActivity().createPackageContextAsUser(pkg, 0, userHandle)
                    .getPackageManager().getPackageInfo(pkg, PackageManager.GET_PERMISSIONS);

            ApplicationInfo appInfo = info.applicationInfo;
            final Drawable icon = Utils.getBadgedIcon(getContext(), appInfo);
@@ -137,7 +141,7 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
                infoIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
                        .setData(Uri.fromParts("package", pkg, null));
            }
            setHeader(icon, label, infoIntent);
            setHeader(icon, label, infoIntent, userHandle);

            if (info.requestedPermissions != null) {
                for (int i = 0; i < info.requestedPermissions.length; i++) {
+3 −2
Original line number Diff line number Diff line
@@ -186,7 +186,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader {
        }

        String appLabel = Utils.getFullAppLabel(mGroup.getApp().applicationInfo, context);
        setHeader(getAppIcon(), appLabel, null, false);
        setHeader(getAppIcon(), appLabel, null, null, false);
        updateHeader(root.requireViewById(R.id.large_header));

        ((TextView) root.requireViewById(R.id.permission_message)).setText(
@@ -212,6 +212,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader {
            Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS);
            intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mGroup.getApp().packageName);
            intent.putExtra(Intent.EXTRA_USER, user);
            intent.putExtra(AppPermissionsFragment.EXTRA_HIDE_INFO_BUTTON, true);
            context.startActivity(intent);
        });

@@ -744,7 +745,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader {
     */
    private void showAllPermissions(@NonNull String filterGroup) {
        Fragment frag = AllAppPermissionsFragment.newInstance(mGroup.getApp().packageName,
                filterGroup);
                filterGroup, UserHandle.getUserHandleForUid(mGroup.getApp().applicationInfo.uid));
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, frag)
                .addToBackStack("AllPerms")
Loading