New API for getting uids have specific permissions from SystemConfig

SysetmConfig is internal service for frameworks only which cannot
use by Connectivity mainline module, but PermissionMonitor which
is part of the module needs to get uids that have been granted
INTERNET/UPDATE_DEVICE_STATS permission from SystemConfig.
Therefore, add a new API to SystemConfigManager that can get
these uids from SysetmConfig.

Bug: 177188455
Test: atest SystemConfigTest
Change-Id: I62bdd969b1b813631ed6223df97bda21a39aec2c
This commit is contained in:
paulhu
2021-01-27 11:21:09 +08:00
parent 905c2570cd
commit ba70fa80ac
4 changed files with 44 additions and 0 deletions

View File

@@ -21,6 +21,10 @@ import static java.util.stream.Collectors.toMap;
import android.Manifest;
import android.content.Context;
import android.os.ISystemConfig;
import android.util.ArraySet;
import android.util.SparseArray;
import com.android.internal.util.ArrayUtils;
import java.util.ArrayList;
import java.util.List;
@@ -64,6 +68,22 @@ public class SystemConfigService extends SystemService {
return SystemConfig.getInstance()
.getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
}
@Override
public int[] getSystemPermissionUids(String permissionName) {
mContext.enforceCallingOrSelfPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS,
"getSystemPermissionUids requires GET_RUNTIME_PERMISSIONS");
final List<Integer> uids = new ArrayList<>();
final SparseArray<ArraySet<String>> systemPermissions =
SystemConfig.getInstance().getSystemPermissions();
for (int i = 0; i < systemPermissions.size(); i++) {
final ArraySet<String> permissions = systemPermissions.valueAt(i);
if (permissions != null && permissions.contains(permissionName)) {
uids.add(systemPermissions.keyAt(i));
}
}
return ArrayUtils.convertToIntArray(uids);
}
};
public SystemConfigService(Context context) {