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

Commit 9dc10111 authored by Nate Myren's avatar Nate Myren
Browse files

Remove usages of AppPermissionActivity

Remove all uses of the AppPermissionActivity, except the legacy usage in
ManagePermissionsActivity. Ensure all permission notifications link to
the ManagePermissionsActivity, not the AppPermissionsActivity.
Deprecated the AppPermissionActivity.

Test: * Install TestDPC.
* Set TestDPC as Device Owner
* Find "Get/Set permissions policy" and toggle to "Auto accept"
* Get the BasicLocation app by checking out
  https://github.com/android/location-samples and building it from there.
* Install the app onto the device and start it.
* Click on notification
* Click on link at bottom of screen. Screen should not crash.
Fixes: 150162451

Change-Id: I2474b3121e6b1d2a140fd666d06fee5ff0267834
parent 48cfaff0
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.permissioncontroller.permission.service;

import static android.Manifest.permission.ACCESS_FINE_LOCATION;
import static android.Manifest.permission_group.LOCATION;
import static android.app.AppOpsManager.OPSTR_FINE_LOCATION;
import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.PendingIntent.FLAG_ONE_SHOT;
@@ -24,8 +25,9 @@ import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
import static android.app.PendingIntent.getBroadcast;
import static android.app.job.JobScheduler.RESULT_SUCCESS;
import static android.content.Context.MODE_PRIVATE;
import static android.content.Intent.ACTION_MANAGE_APP_PERMISSION;
import static android.content.Intent.EXTRA_PACKAGE_NAME;
import static android.content.Intent.EXTRA_PERMISSION_NAME;
import static android.content.Intent.EXTRA_PERMISSION_GROUP_NAME;
import static android.content.Intent.EXTRA_UID;
import static android.content.Intent.EXTRA_USER;
import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
@@ -103,7 +105,6 @@ import androidx.core.util.Preconditions;
import com.android.permissioncontroller.PermissionControllerStatsLog;
import com.android.permissioncontroller.R;
import com.android.permissioncontroller.permission.model.AppPermissionGroup;
import com.android.permissioncontroller.permission.ui.AppPermissionActivity;
import com.android.permissioncontroller.permission.utils.Utils;

import java.io.BufferedReader;
@@ -906,9 +907,9 @@ public class LocationAccessCheck {
                    "Location access check notification clicked with sessionId=" + sessionId + ""
                            + " uid=" + uid + " pkgName=" + pkg);

            Intent manageAppPermission = new Intent(context, AppPermissionActivity.class);
            Intent manageAppPermission = new Intent(ACTION_MANAGE_APP_PERMISSION);
            manageAppPermission.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK);
            manageAppPermission.putExtra(EXTRA_PERMISSION_NAME, ACCESS_FINE_LOCATION);
            manageAppPermission.putExtra(EXTRA_PERMISSION_GROUP_NAME, LOCATION);
            manageAppPermission.putExtra(EXTRA_PACKAGE_NAME, pkg);
            manageAppPermission.putExtra(EXTRA_USER, user);
            manageAppPermission.putExtra(EXTRA_SESSION_ID, sessionId);
+13 −1
Original line number Diff line number Diff line
@@ -43,8 +43,15 @@ import com.android.permissioncontroller.permission.utils.Utils;
import java.util.List;

/**
 * Manage a single permission of a single app
 * Manage a single permission of a single app.
 *
 * @deprecated This class is deprecated for handheld UI, and will throw an error if used for
 * handheld (read: non auto, TV, or wear) UIs. Instead, users should create an intent with the
 * ACTION_MANAGE_APP_PERMISSION action, which will intent into the ManagePermissionsActivity.
 *
 * @see ManagePermissionsActivity
 */
@Deprecated
public final class AppPermissionActivity extends FragmentActivity {
    private static final String LOG_TAG = AppPermissionActivity.class.getSimpleName();

@@ -62,6 +69,11 @@ public final class AppPermissionActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        if (!DeviceUtils.isAuto(this) && !DeviceUtils.isWear(this)
                && !DeviceUtils.isTelevision(this)) {
            throw new IllegalStateException("Do not use AppPermissionActivity for handheld ui. "
                    + "Create intent with ACTION_MANAGE_APP_PERMISSION instead.");
        }
        if (DeviceUtils.isAuto(this)) {
            // Automotive relies on a different theme. Apply before calling super so that
            // fragments are restored properly on configuration changes.
+10 −10
Original line number Diff line number Diff line
@@ -16,11 +16,11 @@

package com.android.permissioncontroller.permission.ui;

import static android.Manifest.permission.ACCESS_FINE_LOCATION;
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
import static android.app.PendingIntent.getActivity;
import static android.content.Intent.ACTION_MANAGE_APP_PERMISSION;
import static android.content.Intent.EXTRA_PACKAGE_NAME;
import static android.content.Intent.EXTRA_PERMISSION_NAME;
import static android.content.Intent.EXTRA_PERMISSION_GROUP_NAME;
import static android.content.Intent.EXTRA_USER;
import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
@@ -199,13 +199,13 @@ public class AutoGrantPermissionsNotifier {
    private @NonNull Intent getSettingsPermissionIntent(long sessionId) {
        UserHandle callingUser = getUserHandleForUid(mPackageInfo.applicationInfo.uid);

        return new Intent(mContext, AppPermissionActivity.class)
        return new Intent(ACTION_MANAGE_APP_PERMISSION)
                .addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK)
        .putExtra(EXTRA_PERMISSION_NAME, ACCESS_FINE_LOCATION)
                .putExtra(EXTRA_PERMISSION_GROUP_NAME, Manifest.permission_group.LOCATION)
                .putExtra(EXTRA_PACKAGE_NAME, mPackageInfo.packageName)
                .putExtra(EXTRA_USER, callingUser)
                .putExtra(EXTRA_SESSION_ID, sessionId)
        .putExtra(AppPermissionActivity.EXTRA_CALLER_NAME,
                .putExtra(ManagePermissionsActivity.EXTRA_CALLER_NAME,
                        AutoGrantPermissionsNotifier.class.getName());
    }

+8 −9
Original line number Diff line number Diff line
@@ -41,6 +41,9 @@ import static com.android.permissioncontroller.permission.ui.GrantPermissionsVie
import static com.android.permissioncontroller.permission.ui.GrantPermissionsViewHandler.GRANTED_FOREGROUND_ONLY;
import static com.android.permissioncontroller.permission.ui.GrantPermissionsViewHandler.GRANTED_ONE_TIME;
import static com.android.permissioncontroller.permission.ui.GrantPermissionsViewHandler.LINKED_TO_SETTINGS;
import static com.android.permissioncontroller.permission.ui.ManagePermissionsActivity.EXTRA_CALLER_NAME;
import static com.android.permissioncontroller.permission.ui.ManagePermissionsActivity.EXTRA_RESULT_PERMISSION_INTERACTED;
import static com.android.permissioncontroller.permission.ui.ManagePermissionsActivity.EXTRA_RESULT_PERMISSION_RESULT;
import static com.android.permissioncontroller.permission.utils.Utils.getRequestMessage;

import android.Manifest;
@@ -723,8 +726,8 @@ public class GrantPermissionsActivity extends Activity
                            if (mActivityResultCallback == null) {
                                startAppPermissionFragment(groupState);
                                mActivityResultCallback = data -> {
                                    if (data == null || data.getStringExtra(AppPermissionActivity
                                            .EXTRA_RESULT_PERMISSION_INTERACTED) == null) {
                                    if (data == null || data.getStringExtra(
                                            EXTRA_RESULT_PERMISSION_INTERACTED) == null) {
                                        // User didn't interact, count against rate limit
                                        if (groupState.mGroup.isUserSet()) {
                                            groupState.mGroup.setUserFixed(true);
@@ -866,13 +869,10 @@ public class GrantPermissionsActivity extends Activity
                startAppPermissionFragment(groupState);
                mActivityResultCallback = data -> {
                    if (data != null) {
                        String groupName = data.getStringExtra(
                                AppPermissionActivity.EXTRA_RESULT_PERMISSION_INTERACTED);
                        String groupName = data.getStringExtra(EXTRA_RESULT_PERMISSION_INTERACTED);
                        if (groupName != null) {
                            mPermissionGroupsToSkip.add(groupName);
                            int result = data.getIntExtra(
                                            AppPermissionActivity.EXTRA_RESULT_PERMISSION_RESULT,
                                    -1);
                            int result = data.getIntExtra(EXTRA_RESULT_PERMISSION_RESULT, -1);
                            logSettingsInteraction(groupName, result);
                        }
                    }
@@ -933,8 +933,7 @@ public class GrantPermissionsActivity extends Activity
                .putExtra(Intent.EXTRA_PACKAGE_NAME, mAppPermissions.getPackageInfo().packageName)
                .putExtra(Intent.EXTRA_PERMISSION_GROUP_NAME, groupState.mGroup.getName())
                .putExtra(Intent.EXTRA_USER, groupState.mGroup.getUser())
                .putExtra(AppPermissionActivity.EXTRA_CALLER_NAME,
                        GrantPermissionsActivity.class.getName())
                .putExtra(EXTRA_CALLER_NAME, GrantPermissionsActivity.class.getName())
                .putExtra(Constants.EXTRA_SESSION_ID, mRequestId)
                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivityForResult(intent, APP_PERMISSION_REQUEST_CODE);
+15 −0
Original line number Diff line number Diff line
@@ -58,6 +58,21 @@ public final class ManagePermissionsActivity extends FragmentActivity {
    public static final String EXTRA_ALL_PERMISSIONS =
            "com.android.permissioncontroller.extra.ALL_PERMISSIONS";

    /**
     * Name of the extra parameter that is the fragment that called the current fragment.
     */
    public static final String EXTRA_CALLER_NAME =
            "com.android.permissioncontroller.extra.CALLER_NAME";

    // The permission group which was interacted with
    public static final String EXTRA_RESULT_PERMISSION_INTERACTED = "com.android"
            + ".permissioncontroller.extra.RESULT_PERMISSION_INTERACTED";
    /**
     * The result of the permission in terms of {@link GrantPermissionsViewHandler.Result}
     */
    public static final String EXTRA_RESULT_PERMISSION_RESULT = "com.android"
            + ".permissioncontroller.extra.PERMISSION_RESULT";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        if (DeviceUtils.isAuto(this)) {
Loading