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

Commit 354ddeac authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add RoleControllerManager for role controller service."

parents 1242575e 95d073df
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -223,10 +223,9 @@
            </intent-filter>
        </service>

        <service android:name="com.android.packageinstaller.role.service.RoleControllerServiceImpl"
                 android:permission="android.permission.BIND_ROLE_CONTROLLER_SERVICE">
        <service android:name="com.android.packageinstaller.role.service.RoleControllerServiceImpl">
            <intent-filter android:priority="1">
                <action android:name="android.rolecontrollerservice.RoleControllerService"/>
                <action android:name="android.app.role.RoleControllerService"/>
            </intent-filter>
        </service>

+20 −11
Original line number Diff line number Diff line
@@ -17,18 +17,19 @@
package com.android.packageinstaller.role.service;

import android.app.AppOpsManager;
import android.app.role.RoleControllerService;
import android.app.role.RoleManager;
import android.app.role.RoleManagerCallback;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PermissionInfo;
import android.os.Binder;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Process;
import android.os.UserHandle;
import android.rolecontrollerservice.RoleControllerService;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -87,6 +88,7 @@ public class RoleControllerServiceImpl extends RoleControllerService {

    @Override
    public void onGrantDefaultRoles(@NonNull RoleManagerCallback callback) {
        enforceCallerSystemUid("onGrantDefaultRoles");
        if (callback == null) {
            Log.e(LOG_TAG, "callback cannot be null");
            return;
@@ -97,6 +99,7 @@ public class RoleControllerServiceImpl extends RoleControllerService {
    @Override
    public void onAddRoleHolder(@NonNull String roleName, @NonNull String packageName, int flags,
            @NonNull RoleManagerCallback callback) {
        enforceCallerSystemUid("onAddRoleHolder");
        if (callback == null) {
            Log.e(LOG_TAG, "callback cannot be null");
            return;
@@ -121,6 +124,7 @@ public class RoleControllerServiceImpl extends RoleControllerService {
    @Override
    public void onRemoveRoleHolder(@NonNull String roleName, @NonNull String packageName, int flags,
            @NonNull RoleManagerCallback callback) {
        enforceCallerSystemUid("onRemoveRoleHolder");
        if (callback == null) {
            Log.e(LOG_TAG, "callback cannot be null");
            return;
@@ -145,6 +149,7 @@ public class RoleControllerServiceImpl extends RoleControllerService {
    @Override
    public void onClearRoleHolders(@NonNull String roleName, int flags,
            @NonNull RoleManagerCallback callback) {
        enforceCallerSystemUid("onClearRoleHolders");
        if (callback == null) {
            Log.e(LOG_TAG, "callback cannot be null");
            return;
@@ -162,25 +167,29 @@ public class RoleControllerServiceImpl extends RoleControllerService {
    }

    @Override
    public void onSmsKillSwitchToggled(boolean smsRestrictionEnabled) {
    public void onSmsKillSwitchToggled(boolean enabled) {
        enforceCallerSystemUid("onSmsKillSwitchToggled");
        mWorkerHandler.post(() -> {
            PackageManager pm = getPackageManager();
            ArrayMap<String, Role> roles = Roles.get(this);
            PackageManager packageManager = getPackageManager();
            List<PackageInfo> installedPackages = getPackageManager().getInstalledPackages(0);
            for (int i = 0, size = installedPackages.size(); i < size; i++) {
                PackageInfo pkg = installedPackages.get(i);
                onSmsKillSwitchToggled(smsRestrictionEnabled, pkg,
                        Utils.getPlatformPermissionsOfGroup(
                                pm, android.Manifest.permission_group.SMS));
                onSmsKillSwitchToggled(smsRestrictionEnabled, pkg,
                        Utils.getPlatformPermissionsOfGroup(
                                pm, android.Manifest.permission_group.CALL_LOG));
                onSmsKillSwitchToggled(enabled, pkg, Utils.getPlatformPermissionsOfGroup(
                        packageManager, android.Manifest.permission_group.SMS));
                onSmsKillSwitchToggled(enabled, pkg, Utils.getPlatformPermissionsOfGroup(
                        packageManager, android.Manifest.permission_group.CALL_LOG));
            }

            grantDefaultRoles(null /* callback */);
            grantDefaultRoles(null);
        });
    }

    private void enforceCallerSystemUid(@NonNull String methodName) {
        if (Binder.getCallingUid() != Process.SYSTEM_UID) {
            throw new SecurityException("Only the system process call " + methodName + "()");
        }
    }

    void onSmsKillSwitchToggled(boolean smsRestrictionEnabled, PackageInfo pkg,
            List<PermissionInfo> permissions) {
        PackageManager pm = getPackageManager();