Update AmbientContextManager with suggestions.

Address comments in ag/20668329.

Bug: 244181656
Test: atest CtsAmbientContextServiceTestCases atest CtsWearableSensingServiceTestCasesi
Ignore-AOSP-First: to prevent new feature leak.
Change-Id: I488682a377ee8fd7714013fc88c4b94d21159c00
This commit is contained in:
Charlie Wang
2022-12-21 11:52:44 -08:00
parent b0e5c41101
commit e1599f6d2a

View File

@@ -50,6 +50,8 @@ import com.android.server.infra.AbstractMasterSystemService;
import com.android.server.infra.FrameworkResourcesServiceNameResolver;
import com.android.server.pm.KnownPackages;
import com.google.android.collect.Sets;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -67,12 +69,10 @@ public class AmbientContextManagerService extends
AmbientContextManagerPerUserService> {
private static final String TAG = AmbientContextManagerService.class.getSimpleName();
private static final String KEY_SERVICE_ENABLED = "service_enabled";
private static final Set<Integer> DEFAULT_EVENT_SET = new HashSet<>(){{
add(AmbientContextEvent.EVENT_COUGH);
add(AmbientContextEvent.EVENT_SNORE);
add(AmbientContextEvent.EVENT_BACK_DOUBLE_TAP);
}
};
private static final Set<Integer> DEFAULT_EVENT_SET = Sets.newHashSet(
AmbientContextEvent.EVENT_COUGH,
AmbientContextEvent.EVENT_SNORE,
AmbientContextEvent.EVENT_BACK_DOUBLE_TAP);
/** Default value in absence of {@link DeviceConfig} override. */
private static final boolean DEFAULT_SERVICE_ENABLED = true;
@@ -409,14 +409,6 @@ public class AmbientContextManagerService extends
}
}
private Set<Integer> intArrayToIntegerSet(int[] eventTypes) {
Set<Integer> types = new HashSet<>();
for (Integer i : eventTypes) {
types.add(i);
}
return types;
}
private AmbientContextManagerPerUserService.ServiceType getServiceType(String serviceName) {
final String wearableService = mContext.getResources()
.getString(R.string.config_defaultWearableSensingService);
@@ -513,6 +505,14 @@ public class AmbientContextManagerService extends
return intArray;
}
private Set<Integer> intArrayToIntegerSet(int[] eventTypes) {
Set<Integer> types = new HashSet<>();
for (Integer i : eventTypes) {
types.add(i);
}
return types;
}
@NonNull
private static Integer[] intArrayToIntegerArray(@NonNull int[] integerSet) {
Integer[] intArray = new Integer[integerSet.length];
@@ -567,37 +567,24 @@ public class AmbientContextManagerService extends
mContext.enforceCallingOrSelfPermission(
Manifest.permission.ACCESS_AMBIENT_CONTEXT_EVENT, TAG);
assertCalledByPackageOwner(packageName);
AmbientContextManagerPerUserService service =
getAmbientContextManagerPerUserServiceForEventTypes(
UserHandle.getCallingUserId(),
request.getEventTypes());
if (service == null) {
Slog.w(TAG, "onRegisterObserver unavailable user_id: "
+ UserHandle.getCallingUserId());
}
if (service.getServiceType() == ServiceType.DEFAULT && !mIsServiceEnabled) {
Slog.d(TAG, "Service not available.");
service.completeRegistration(observer,
AmbientContextManager.STATUS_SERVICE_UNAVAILABLE);
return;
}
if (service.getServiceType() == ServiceType.WEARABLE && !mIsWearableServiceEnabled) {
Slog.d(TAG, "Wearable Service not available.");
service.completeRegistration(observer,
AmbientContextManager.STATUS_SERVICE_UNAVAILABLE);
return;
}
if (containsMixedEvents(integerSetToIntArray(request.getEventTypes()))) {
Slog.d(TAG, "AmbientContextEventRequest contains mixed events,"
+ " this is not supported.");
service.completeRegistration(observer,
AmbientContextManager.STATUS_NOT_SUPPORTED);
return;
}
service.onRegisterObserver(request, packageName, observer);
int statusCode = checkStatusCode(
service, integerSetToIntArray(request.getEventTypes()));
if (statusCode == AmbientContextManager.STATUS_SUCCESS) {
service.onRegisterObserver(request, packageName, observer);
} else {
service.completeRegistration(observer, statusCode);
}
}
@Override
@@ -606,10 +593,10 @@ public class AmbientContextManagerService extends
Manifest.permission.ACCESS_AMBIENT_CONTEXT_EVENT, TAG);
assertCalledByPackageOwner(callingPackage);
AmbientContextManagerPerUserService service = null;
for (ClientRequest cr : mExistingClientRequests) {
if (cr.getPackageName().equals(callingPackage)) {
service = getAmbientContextManagerPerUserServiceForEventTypes(
AmbientContextManagerPerUserService service =
getAmbientContextManagerPerUserServiceForEventTypes(
UserHandle.getCallingUserId(), cr.getRequest().getEventTypes());
if (service != null) {
service.onUnregisterObserver(callingPackage);
@@ -635,34 +622,18 @@ public class AmbientContextManagerService extends
getAmbientContextManagerPerUserServiceForEventTypes(
UserHandle.getCallingUserId(), intArrayToIntegerSet(eventTypes));
if (service == null) {
Slog.w(TAG, "onQueryServiceStatus unavailable user_id: "
Slog.w(TAG, "queryServiceStatus unavailable user_id: "
+ UserHandle.getCallingUserId());
}
if (service.getServiceType() == ServiceType.DEFAULT && !mIsServiceEnabled) {
Slog.d(TAG, "Service not available.");
service.sendStatusCallback(statusCallback,
AmbientContextManager.STATUS_SERVICE_UNAVAILABLE);
return;
}
if (service.getServiceType() == ServiceType.WEARABLE
&& !mIsWearableServiceEnabled) {
Slog.d(TAG, "Wearable Service not available.");
service.sendStatusCallback(statusCallback,
AmbientContextManager.STATUS_SERVICE_UNAVAILABLE);
return;
}
if (containsMixedEvents(eventTypes)) {
Slog.d(TAG, "AmbientContextEventRequest contains mixed events,"
+ " this is not supported.");
service.sendStatusCallback(statusCallback,
AmbientContextManager.STATUS_NOT_SUPPORTED);
return;
int statusCode = checkStatusCode(service, eventTypes);
if (statusCode == AmbientContextManager.STATUS_SUCCESS) {
service.onQueryServiceStatus(eventTypes, callingPackage,
statusCallback);
} else {
service.sendStatusCallback(statusCallback, statusCode);
}
service.onQueryServiceStatus(eventTypes, callingPackage,
statusCallback);
}
}
@@ -708,5 +679,22 @@ public class AmbientContextManagerService extends
new AmbientContextShellCommand(AmbientContextManagerService.this).exec(
this, in, out, err, args, callback, resultReceiver);
}
private int checkStatusCode(AmbientContextManagerPerUserService service, int[] eventTypes) {
if (service.getServiceType() == ServiceType.DEFAULT && !mIsServiceEnabled) {
Slog.d(TAG, "Service not enabled.");
return AmbientContextManager.STATUS_SERVICE_UNAVAILABLE;
}
if (service.getServiceType() == ServiceType.WEARABLE && !mIsWearableServiceEnabled) {
Slog.d(TAG, "Wearable Service not available.");
return AmbientContextManager.STATUS_SERVICE_UNAVAILABLE;
}
if (containsMixedEvents(eventTypes)) {
Slog.d(TAG, "AmbientContextEventRequest contains mixed events,"
+ " this is not supported.");
return AmbientContextManager.STATUS_NOT_SUPPORTED;
}
return AmbientContextManager.STATUS_SUCCESS;
}
}
}