Merge "Add system service for accessing SystemConfig"

This commit is contained in:
Hall Liu
2020-01-20 21:34:28 +00:00
committed by Android (Google) Code Review
11 changed files with 233 additions and 1 deletions

View File

@@ -155,6 +155,7 @@ package android {
field public static final String QUERY_TIME_ZONE_RULES = "android.permission.QUERY_TIME_ZONE_RULES";
field public static final String RADIO_SCAN_WITHOUT_LOCATION = "android.permission.RADIO_SCAN_WITHOUT_LOCATION";
field public static final String READ_ACTIVE_EMERGENCY_SESSION = "android.permission.READ_ACTIVE_EMERGENCY_SESSION";
field public static final String READ_CARRIER_APP_INFO = "android.permission.READ_CARRIER_APP_INFO";
field public static final String READ_CELL_BROADCASTS = "android.permission.READ_CELL_BROADCASTS";
field public static final String READ_CONTENT_RATING_SYSTEMS = "android.permission.READ_CONTENT_RATING_SYSTEMS";
field public static final String READ_DEVICE_CONFIG = "android.permission.READ_DEVICE_CONFIG";
@@ -1753,6 +1754,7 @@ package android.content {
field public static final String SECURE_ELEMENT_SERVICE = "secure_element";
field public static final String STATS_MANAGER = "stats";
field public static final String STATUS_BAR_SERVICE = "statusbar";
field public static final String SYSTEM_CONFIG_SERVICE = "system_config";
field public static final String SYSTEM_UPDATE_SERVICE = "system_update";
field public static final String TELEPHONY_IMS_SERVICE = "telephony_ims";
field public static final String TELEPHONY_REGISTRY_SERVICE = "telephony_registry";
@@ -7485,6 +7487,11 @@ package android.os {
field public static final int TUPLE_VALUE_TYPE = 7; // 0x7
}
public class SystemConfigManager {
method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Set<java.lang.String> getDisabledUntilUsedPreinstalledCarrierApps();
method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
}
public class SystemProperties {
method @NonNull public static String get(@NonNull String);
method @NonNull public static String get(@NonNull String, @Nullable String);

View File

@@ -2181,6 +2181,11 @@ package android.os {
method public void log(android.os.StrictMode.ViolationInfo);
}
public class SystemConfigManager {
method @NonNull @RequiresPermission("android.permission.READ_CARRIER_APP_INFO") public java.util.Set<java.lang.String> getDisabledUntilUsedPreinstalledCarrierApps();
method @NonNull @RequiresPermission("android.permission.READ_CARRIER_APP_INFO") public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
}
public class SystemProperties {
method @NonNull public static String get(@NonNull String);
method @NonNull public static String get(@NonNull String, @Nullable String);

View File

@@ -148,6 +148,7 @@ import android.os.RecoverySystem;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
import android.os.SystemConfigManager;
import android.os.SystemUpdateManager;
import android.os.SystemVibrator;
import android.os.UserHandle;
@@ -627,6 +628,13 @@ public final class SystemServiceRegistry {
return new SystemUpdateManager(service);
}});
registerService(Context.SYSTEM_CONFIG_SERVICE, SystemConfigManager.class,
new CachedServiceFetcher<SystemConfigManager>() {
@Override
public SystemConfigManager createService(ContextImpl ctx) {
return new SystemConfigManager();
}});
registerService(Context.TELEPHONY_REGISTRY_SERVICE, TelephonyRegistryManager.class,
new CachedServiceFetcher<TelephonyRegistryManager>() {
@Override

View File

@@ -5018,6 +5018,14 @@ public abstract class Context {
@TestApi
public static final String TELEPHONY_IMS_SERVICE = "telephony_ims";
/**
* Use with {@link #getSystemService(String)} to retrieve an
* {@link android.os.SystemConfigManager}.
* @hide
*/
@SystemApi
public static final String SYSTEM_CONFIG_SERVICE = "system_config";
/**
* Use with {@link #getSystemService(String)} to retrieve an
* {@link android.telephony.ims.RcsMessageManager}.

View File

@@ -0,0 +1,33 @@
/*
* 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 android.os;
/**
* Binder interface to query SystemConfig in the system server.
* {@hide}
*/
interface ISystemConfig {
/**
* @see SystemConfigManager#getDisabledUntilUsedPreinstalledCarrierApps
*/
List<String> getDisabledUntilUsedPreinstalledCarrierApps();
/**
* @see SystemConfigManager#getDisabledUntilUsedPreinstalledCarrierAssociatedApps
*/
Map getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
}

View File

@@ -0,0 +1,91 @@
/*
* 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 android.os;
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.TestApi;
import android.content.Context;
import android.util.ArraySet;
import android.util.Log;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Allows apps outside the system process to access various bits of configuration defined in
* /etc/sysconfig and its counterparts on OEM and vendor partitions.
*
* TODO: Intended for access by system mainline modules only. Marking as SystemApi until the
* module-only API surface is available.
* @hide
*/
@SystemApi
@TestApi
@SystemService(Context.SYSTEM_CONFIG_SERVICE)
public class SystemConfigManager {
private static final String TAG = SystemConfigManager.class.getSimpleName();
private final ISystemConfig mInterface;
/** @hide **/
public SystemConfigManager() {
mInterface = ISystemConfig.Stub.asInterface(
ServiceManager.getService(Context.SYSTEM_CONFIG_SERVICE));
}
/**
* Returns a set of package names for carrier apps that are preinstalled on the device but
* should be disabled until the matching carrier's SIM is inserted into the device.
* @return A set of package names.
*/
@RequiresPermission(Manifest.permission.READ_CARRIER_APP_INFO)
public @NonNull Set<String> getDisabledUntilUsedPreinstalledCarrierApps() {
try {
List<String> apps = mInterface.getDisabledUntilUsedPreinstalledCarrierApps();
return new ArraySet<>(apps);
} catch (RemoteException e) {
Log.e(TAG, "Caught remote exception");
return Collections.emptySet();
}
}
/**
* Returns a map that describes helper apps associated with carrier apps that, like the apps
* returned by {@link #getDisabledUntilUsedPreinstalledCarrierApps()}, should be disabled until
* the correct SIM is inserted into the device.
* @return A map with keys corresponding to package names returned by
* {@link #getDisabledUntilUsedPreinstalledCarrierApps()} and values as lists of package
* names of helper apps.
*/
@RequiresPermission(Manifest.permission.READ_CARRIER_APP_INFO)
public @NonNull Map<String, List<String>>
getDisabledUntilUsedPreinstalledCarrierAssociatedApps() {
try {
return (Map<String, List<String>>)
mInterface.getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
} catch (RemoteException e) {
Log.e(TAG, "Caught remote exception");
return Collections.emptyMap();
}
}
}

View File

@@ -2234,6 +2234,14 @@
<permission android:name="android.permission.BIND_EUICC_SERVICE"
android:protectionLevel="signature|telephony" />
<!-- Required for reading information about carrier apps from SystemConfigManager.
<p>Protection level: signature|telephony
@SystemApi
@hide
-->
<permission android:name="android.permission.READ_CARRIER_APP_INFO"
android:protectionLevel="signature|telephony" />
<!-- ================================== -->
<!-- Permissions for sdcard interaction -->
<!-- ================================== -->

View File

@@ -153,6 +153,7 @@ applications that come with the platform
<permission name="android.permission.MODIFY_PHONE_STATE"/>
<permission name="android.permission.PACKAGE_USAGE_STATS"/>
<permission name="android.permission.PERFORM_CDMA_PROVISIONING"/>
<permission name="android.permission.READ_CARRIER_APP_INFO"/>
<permission name="android.permission.READ_NETWORK_USAGE_HISTORY"/>
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
<permission name="android.permission.READ_SEARCH_INDEXABLES"/>
@@ -311,6 +312,7 @@ applications that come with the platform
<!-- Needed for test only -->
<permission name="android.permission.PACKET_KEEPALIVE_OFFLOAD" />
<permission name="android.permission.POWER_SAVER" />
<permission name="android.permission.READ_CARRIER_APP_INFO"/>
<permission name="android.permission.READ_FRAME_BUFFER"/>
<permission name="android.permission.READ_LOWPAN_CREDENTIAL"/>
<!-- Needed for test only -->

View File

@@ -221,7 +221,10 @@
<!-- Permission required for CTS test - UiModeManagerTest -->
<uses-permission android:name="android.permission.ENTER_CAR_MODE_PRIORITIZED"/>
<!-- Permission required for CTS test - CarModeInCallServiceTest -->
<!-- Permission required for CTS test - SystemConfigTest -->
<uses-permission android:name="android.permission.READ_CARRIER_APP_INFO"/>
<!-- Permission required for CTS test - CarModeInCallServiceTest -->
<uses-permission android:name="android.permission.CONTROL_INCALL_EXPERIENCE"/>
<!-- Permission requried for CTS test - CellBroadcastIntentsTest -->

View File

@@ -0,0 +1,62 @@
/*
* 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 android.Manifest;
import android.content.Context;
import android.os.ISystemConfig;
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();
}
};
public SystemConfigService(Context context) {
super(context);
mContext = context;
}
@Override
public void onStart() {
publishBinderService(Context.SYSTEM_CONFIG_SERVICE, mInterface);
}
}

View File

@@ -902,6 +902,11 @@ public final class SystemServer {
private void startCoreServices(@NonNull TimingsTraceAndSlog t) {
t.traceBegin("startCoreServices");
// Service for system config
t.traceBegin("StartSystemConfigService");
mSystemServiceManager.startService(SystemConfigService.class);
t.traceEnd();
t.traceBegin("StartBatteryService");
// Tracks the battery level. Requires LightService.
mSystemServiceManager.startService(BatteryService.class);