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

Commit 34c5e096 authored by Eran Messeri's avatar Eran Messeri Committed by Android (Google) Code Review
Browse files

Merge "Notify users when admin grants location permission"

parents 79766375 e93050c4
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -162,10 +162,18 @@ public class Constants {
    public static final long INVALID_SESSION_ID = 0;

    /**
     * Key for NotificationManager.notify for the auto-granted permissions notification.
     * Key for NotificationManager.notify for auto-granted permissions notification,
     * when silently displayed to the user.
     */
    public static final String ADMIN_AUTO_GRANTED_PERMISSIONS_NOTIFICATION_CHANNEL_ID =
            "auto granted permissions";

    /**
     * Key for NotificationManager.notify the auto-granted permissions notification,
     * when alerting the user (with sound and vibration).
     */
    public static final String ADMIN_AUTO_GRANTED_PERMISSIONS_ALERTING_NOTIFICATION_CHANNEL_ID =
            "alerting auto granted permissions";
    /**
     * ID for notification of auto-granted permissions shown by
     * {@link com.android.permissioncontroller.permission.ui.AutoGrantPermissionsNotifier}.
+5 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ import com.android.permissioncontroller.permission.model.AppPermissions;
import com.android.permissioncontroller.permission.model.Permission;
import com.android.permissioncontroller.permission.model.livedatatypes.AppPermGroupUiInfo;
import com.android.permissioncontroller.permission.model.livedatatypes.AppPermGroupUiInfo.PermGrantState;
import com.android.permissioncontroller.permission.ui.AutoGrantPermissionsNotifier;
import com.android.permissioncontroller.permission.utils.KotlinUtils;
import com.android.permissioncontroller.permission.utils.Utils;

@@ -564,6 +565,8 @@ public final class PermissionControllerServiceImpl extends PermissionControllerL
                callerPkgInfo.applicationInfo.targetSdkVersion);

        AppPermissions app = new AppPermissions(this, pkgInfo, false, true, null);
        AutoGrantPermissionsNotifier autoGrantPermissionsNotifier =
                new AutoGrantPermissionsNotifier(this, pkgInfo);

        int numPerms = expandedPermissions.size();
        for (int i = 0; i < numPerms; i++) {
@@ -582,6 +585,7 @@ public final class PermissionControllerServiceImpl extends PermissionControllerL
                case PERMISSION_GRANT_STATE_GRANTED:
                    perm.setPolicyFixed(true);
                    group.grantRuntimePermissions(false, new String[]{permName});
                    autoGrantPermissionsNotifier.onPermissionAutoGranted(permName);
                    break;
                case PERMISSION_GRANT_STATE_DENIED:
                    perm.setPolicyFixed(true);
@@ -597,6 +601,7 @@ public final class PermissionControllerServiceImpl extends PermissionControllerL

        app.persistChanges(grantState == PERMISSION_GRANT_STATE_DENIED
                || !callerPackageName.equals(packageName));
        autoGrantPermissionsNotifier.notifyOfAutoGrantPermissions(false);

        return true;
    }
+21 −9
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static android.graphics.Bitmap.Config.ARGB_8888;
import static android.graphics.Bitmap.createBitmap;
import static android.os.UserHandle.getUserHandleForUid;

import static com.android.permissioncontroller.Constants.ADMIN_AUTO_GRANTED_PERMISSIONS_ALERTING_NOTIFICATION_CHANNEL_ID;
import static com.android.permissioncontroller.Constants.ADMIN_AUTO_GRANTED_PERMISSIONS_NOTIFICATION_CHANNEL_ID;
import static com.android.permissioncontroller.Constants.EXTRA_SESSION_ID;
import static com.android.permissioncontroller.Constants.PERMISSION_GRANTED_BY_ADMIN_NOTIFICATION_ID;
@@ -69,7 +70,7 @@ import java.util.ArrayList;
 * not only of location issues and use icons of the different groups associated with different
 * permissions.
 */
class AutoGrantPermissionsNotifier {
public class AutoGrantPermissionsNotifier {
    /**
     * Set of permissions for which the user should be notified when the admin auto-grants one of
     * them.
@@ -92,7 +93,7 @@ class AutoGrantPermissionsNotifier {
     */
    private final ArrayList<String> mGrantedPermissions = new ArrayList<>();

    AutoGrantPermissionsNotifier(@NonNull Context context,
    public AutoGrantPermissionsNotifier(@NonNull Context context,
            @NonNull PackageInfo packageInfo) {
        mPackageInfo = packageInfo;
        UserHandle callingUser = getUserHandleForUid(mPackageInfo.applicationInfo.uid);
@@ -104,17 +105,20 @@ class AutoGrantPermissionsNotifier {
     * to.
     *
     * @param user The user for which the permission was auto-granted.
     * @param shouldAlertUser
     */
    private void createAutoGrantNotifierChannel() {
    private void createAutoGrantNotifierChannel(boolean shouldNotifySilently) {
        NotificationManager notificationManager = getSystemServiceSafe(mContext,
                NotificationManager.class);

        NotificationChannel autoGrantedPermissionsChannel = new NotificationChannel(
                ADMIN_AUTO_GRANTED_PERMISSIONS_NOTIFICATION_CHANNEL_ID,
                getNotificationChannelId(shouldNotifySilently),
                mContext.getString(R.string.auto_granted_permissions),
                NotificationManager.IMPORTANCE_HIGH);
        if (shouldNotifySilently) {
            autoGrantedPermissionsChannel.enableVibration(false);
            autoGrantedPermissionsChannel.setSound(Uri.EMPTY, null);
        }
        notificationManager.createNotificationChannel(autoGrantedPermissionsChannel);
    }

@@ -123,12 +127,12 @@ class AutoGrantPermissionsNotifier {
     *
     * <p>NOTE: Right now this method only deals with location permissions.
     */
    public void notifyOfAutoGrantPermissions() {
    public void notifyOfAutoGrantPermissions(boolean shouldNotifySilently) {
        if (mGrantedPermissions.isEmpty()) {
            return;
        }

        createAutoGrantNotifierChannel();
        createAutoGrantNotifierChannel(shouldNotifySilently);

        PackageManager pm = mContext.getPackageManager();
        CharSequence pkgLabel = pm.getApplicationLabel(mPackageInfo.applicationInfo);
@@ -143,7 +147,7 @@ class AutoGrantPermissionsNotifier {
        String messageText = mContext.getString(R.string.auto_granted_permission_notification_body,
                pkgLabel);
        Notification.Builder b = (new Notification.Builder(mContext,
                ADMIN_AUTO_GRANTED_PERMISSIONS_NOTIFICATION_CHANNEL_ID)).setContentTitle(title)
                getNotificationChannelId(shouldNotifySilently))).setContentTitle(title)
                .setContentText(messageText)
                .setStyle(new Notification.BigTextStyle().bigText(messageText).setBigContentTitle(
                        title))
@@ -214,5 +218,13 @@ class AutoGrantPermissionsNotifier {
        pkgIcon.draw(canvas);
        return pkgIconBmp;
    }

    private String getNotificationChannelId(boolean shouldNotifySilently) {
        if (shouldNotifySilently) {
            return ADMIN_AUTO_GRANTED_PERMISSIONS_NOTIFICATION_CHANNEL_ID;
        } else {
            return ADMIN_AUTO_GRANTED_PERMISSIONS_ALERTING_NOTIFICATION_CHANNEL_ID;
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -1093,7 +1093,7 @@ public class GrantPermissionsActivity extends Activity
    public void finish() {
        setResultIfNeeded(RESULT_CANCELED);
        if (mAutoGrantPermissionsNotifier != null) {
            mAutoGrantPermissionsNotifier.notifyOfAutoGrantPermissions();
            mAutoGrantPermissionsNotifier.notifyOfAutoGrantPermissions(true);
        }
        super.finish();
    }