Files
frameworks_base/services/java/com/android/server/SystemConfigService.java
Winson Chiu 9efbc1352b Move SystemConfig to services.jar
Migrates getDefaultVrComponents used by SettingsProvider and
adds a flag for hidden API enforcement to ApplicationInfo.

This removes any dependency on SystemConfig from core/ and
so it can be moved into services/core and exposed as a
mainline API.

This was done instead of exposing all of the methods through
SystemConfigManager, as that is designed for use across
processes, and it's more efficient to expose SystemConfig
directly for modules running in the server process.

Although VrManager is a nullable service, so getDefaultVrComponents
had to live there to simplify the logic and maintain the existing
behavior.

Bug: 236389629

Change-Id: I4c2b14e1d34aaf439ceb1a3f9c8207e5d39fa6c2
2022-10-13 15:54:15 +00:00

123 lines
5.1 KiB
Java

/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
import android.Manifest;
import android.content.ComponentName;
import android.content.Context;
import android.os.ISystemConfig;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.SparseArray;
import com.android.internal.util.ArrayUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Service class that runs inside the system_server process to handle queries to
* {@link com.android.server.SystemConfig}.
* @hide
*/
public class SystemConfigService extends SystemService {
private final Context mContext;
private final ISystemConfig.Stub mInterface = new ISystemConfig.Stub() {
@Override
public List<String> getDisabledUntilUsedPreinstalledCarrierApps() {
mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_CARRIER_APP_INFO,
"getDisabledUntilUsedPreInstalledCarrierApps requires READ_CARRIER_APP_INFO");
return new ArrayList<>(
SystemConfig.getInstance().getDisabledUntilUsedPreinstalledCarrierApps());
}
@Override
public Map getDisabledUntilUsedPreinstalledCarrierAssociatedApps() {
mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_CARRIER_APP_INFO,
"getDisabledUntilUsedPreInstalledCarrierAssociatedApps requires"
+ " READ_CARRIER_APP_INFO");
return SystemConfig.getInstance()
.getDisabledUntilUsedPreinstalledCarrierAssociatedApps().entrySet().stream()
.collect(toMap(
Map.Entry::getKey,
e -> e.getValue().stream().map(app -> app.packageName)
.collect(toList())));
}
@Override
public Map getDisabledUntilUsedPreinstalledCarrierAssociatedAppEntries() {
mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_CARRIER_APP_INFO,
"getDisabledUntilUsedPreInstalledCarrierAssociatedAppEntries requires"
+ " READ_CARRIER_APP_INFO");
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);
}
@Override
public List<ComponentName> getEnabledComponentOverrides(String packageName) {
ArrayMap<String, Boolean> systemComponents = SystemConfig.getInstance()
.getComponentsEnabledStates(packageName);
List<ComponentName> enabledComponent = new ArrayList<>();
if (systemComponents != null) {
for (Map.Entry<String, Boolean> entry : systemComponents.entrySet()) {
if (Boolean.TRUE.equals(entry.getValue())) {
enabledComponent.add(new ComponentName(packageName, entry.getKey()));
}
}
}
return enabledComponent;
}
@Override
public List<ComponentName> getDefaultVrComponents() {
getContext().enforceCallingOrSelfPermission(Manifest.permission.QUERY_ALL_PACKAGES,
"Caller must hold " + Manifest.permission.QUERY_ALL_PACKAGES);
return new ArrayList<>(SystemConfig.getInstance().getDefaultVrComponents());
}
};
public SystemConfigService(Context context) {
super(context);
mContext = context;
}
@Override
public void onStart() {
publishBinderService(Context.SYSTEM_CONFIG_SERVICE, mInterface);
}
}