Use property instead of meta-data for primary CDM service
Meta-data will increase the system server ram consumption. So we decide to use property instead of meta-data to indicate the primary cdm service. Test: atest CtsCompanionDeviceManagerCoreTestCases:SelfPresenceReportingTest Fix: 217953124 Change-Id: I91ebe374bba392d14d693d3c6a36433b5af7cf2a
This commit is contained in:
@@ -780,9 +780,9 @@ public final class CompanionDeviceManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the system that the given self-managed association has just 'appeared'.
|
||||
* Notify the system that the given self-managed association has just appeared.
|
||||
* This causes the system to bind to the companion app to keep it running until the association
|
||||
* is reported as 'disappeared'
|
||||
* is reported as disappeared
|
||||
*
|
||||
* <p>This API is only available for the companion apps that manage the connectivity by
|
||||
* themselves.</p>
|
||||
@@ -803,7 +803,7 @@ public final class CompanionDeviceManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the system that the given self-managed association has just 'disappeared'.
|
||||
* Notify the system that the given self-managed association has just disappeared.
|
||||
* This causes the system to unbind to the companion app.
|
||||
*
|
||||
* <p>This API is only available for the companion apps that manage the connectivity by
|
||||
|
||||
@@ -77,10 +77,11 @@ import java.util.Objects;
|
||||
* {@link #onDeviceAppeared(AssociationInfo)} and {@link #onDeviceDisappeared(AssociationInfo)}
|
||||
* only to one "primary" services.
|
||||
* Applications that declare multiple {@link CompanionDeviceService}-s should indicate the "primary"
|
||||
* service using "android.companion.primary" tag.
|
||||
* service using "android.companion.PROPERTY_PRIMARY_COMPANION_DEVICE_SERVICE" service level
|
||||
* property.
|
||||
* <pre>{@code
|
||||
* <meta-data
|
||||
* android:name="android.companion.primary"
|
||||
* <property
|
||||
* android:name="android.companion.PROPERTY_PRIMARY_COMPANION_DEVICE_SERVICE"
|
||||
* android:value="true" />
|
||||
* }</pre>
|
||||
*
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.android.server.companion;
|
||||
|
||||
import static android.content.pm.PackageManager.FEATURE_COMPANION_DEVICE_SETUP;
|
||||
import static android.content.pm.PackageManager.GET_CONFIGURATIONS;
|
||||
import static android.content.pm.PackageManager.GET_META_DATA;
|
||||
import static android.content.pm.PackageManager.GET_PERMISSIONS;
|
||||
|
||||
import static com.android.server.companion.CompanionDeviceManagerService.TAG;
|
||||
@@ -53,7 +52,8 @@ import java.util.Map;
|
||||
final class PackageUtils {
|
||||
private static final Intent COMPANION_SERVICE_INTENT =
|
||||
new Intent(CompanionDeviceService.SERVICE_INTERFACE);
|
||||
private static final String META_DATA_PRIMARY_TAG = "android.companion.primary";
|
||||
private static final String PROPERTY_PRIMARY_TAG =
|
||||
"android.companion.PROPERTY_PRIMARY_COMPANION_DEVICE_SERVICE";
|
||||
|
||||
static @Nullable PackageInfo getPackageInfo(@NonNull Context context,
|
||||
@UserIdInt int userId, @NonNull String packageName) {
|
||||
@@ -84,9 +84,8 @@ final class PackageUtils {
|
||||
static @NonNull Map<String, List<ComponentName>> getCompanionServicesForUser(
|
||||
@NonNull Context context, @UserIdInt int userId) {
|
||||
final PackageManager pm = context.getPackageManager();
|
||||
final ResolveInfoFlags flags = ResolveInfoFlags.of(GET_META_DATA);
|
||||
final List<ResolveInfo> companionServices =
|
||||
pm.queryIntentServicesAsUser(COMPANION_SERVICE_INTENT, flags, userId);
|
||||
final List<ResolveInfo> companionServices = pm.queryIntentServicesAsUser(
|
||||
COMPANION_SERVICE_INTENT, ResolveInfoFlags.of(0), userId);
|
||||
|
||||
final Map<String, List<ComponentName>> packageNameToServiceInfoList = new HashMap<>();
|
||||
|
||||
@@ -109,7 +108,8 @@ final class PackageUtils {
|
||||
service.packageName, it -> new LinkedList<>());
|
||||
|
||||
final ComponentName componentName = service.getComponentName();
|
||||
if (isPrimaryCompanionDeviceService(service)) {
|
||||
|
||||
if (isPrimaryCompanionDeviceService(pm, componentName)) {
|
||||
// "Primary" service should be at the head of the list.
|
||||
services.addFirst(componentName);
|
||||
} else {
|
||||
@@ -120,7 +120,12 @@ final class PackageUtils {
|
||||
return packageNameToServiceInfoList;
|
||||
}
|
||||
|
||||
private static boolean isPrimaryCompanionDeviceService(ServiceInfo service) {
|
||||
return service.metaData != null && service.metaData.getBoolean(META_DATA_PRIMARY_TAG);
|
||||
private static boolean isPrimaryCompanionDeviceService(@NonNull PackageManager pm,
|
||||
@NonNull ComponentName componentName) {
|
||||
try {
|
||||
return pm.getProperty(PROPERTY_PRIMARY_TAG, componentName).getBoolean();
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user