Merge "Call listModules directly in STService" into udc-dev

This commit is contained in:
Atneya Nair
2023-03-23 02:00:35 +00:00
committed by Android (Google) Code Review

View File

@@ -44,6 +44,7 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.hardware.soundtrigger.IRecognitionStatusCallback; import android.hardware.soundtrigger.IRecognitionStatusCallback;
import android.hardware.soundtrigger.ModelParams; import android.hardware.soundtrigger.ModelParams;
import android.hardware.soundtrigger.ConversionUtil;
import android.hardware.soundtrigger.SoundTrigger; import android.hardware.soundtrigger.SoundTrigger;
import android.hardware.soundtrigger.SoundTrigger.GenericSoundModel; import android.hardware.soundtrigger.SoundTrigger.GenericSoundModel;
import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel; import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel;
@@ -63,6 +64,7 @@ import android.media.permission.SafeCloseable;
import android.media.soundtrigger.ISoundTriggerDetectionService; import android.media.soundtrigger.ISoundTriggerDetectionService;
import android.media.soundtrigger.ISoundTriggerDetectionServiceClient; import android.media.soundtrigger.ISoundTriggerDetectionServiceClient;
import android.media.soundtrigger.SoundTriggerDetectionService; import android.media.soundtrigger.SoundTriggerDetectionService;
import android.media.soundtrigger_middleware.ISoundTriggerMiddlewareService;
import android.os.Binder; import android.os.Binder;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
@@ -72,6 +74,8 @@ import android.os.Parcel;
import android.os.ParcelUuid; import android.os.ParcelUuid;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.os.ServiceManager;
import android.os.SystemClock; import android.os.SystemClock;
import android.os.UserHandle; import android.os.UserHandle;
import android.provider.Settings; import android.provider.Settings;
@@ -88,11 +92,13 @@ import com.android.server.utils.EventLogger;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
@@ -215,14 +221,29 @@ public class SoundTriggerService extends SystemService {
} }
} }
// Must be called with cleared binder context.
private static List<ModuleProperties> listUnderlyingModuleProperties(
Identity originatorIdentity) {
Identity middlemanIdentity = new Identity();
middlemanIdentity.packageName = ActivityThread.currentOpPackageName();
var service = ISoundTriggerMiddlewareService.Stub.asInterface(
ServiceManager.waitForService(Context.SOUND_TRIGGER_MIDDLEWARE_SERVICE));
try {
return Arrays.stream(service.listModulesAsMiddleman(middlemanIdentity,
originatorIdentity))
.map(desc -> ConversionUtil.aidl2apiModuleDescriptor(desc))
.collect(Collectors.toList());
} catch (RemoteException e) {
throw new ServiceSpecificException(SoundTrigger.STATUS_DEAD_OBJECT);
}
}
private SoundTriggerHelper newSoundTriggerHelper(ModuleProperties moduleProperties) { private SoundTriggerHelper newSoundTriggerHelper(ModuleProperties moduleProperties) {
Identity middlemanIdentity = new Identity(); Identity middlemanIdentity = new Identity();
middlemanIdentity.packageName = ActivityThread.currentOpPackageName(); middlemanIdentity.packageName = ActivityThread.currentOpPackageName();
Identity originatorIdentity = IdentityContext.getNonNull(); Identity originatorIdentity = IdentityContext.getNonNull();
ArrayList<ModuleProperties> moduleList = new ArrayList<>(); List<ModuleProperties> moduleList = listUnderlyingModuleProperties(originatorIdentity);
SoundTrigger.listModulesAsMiddleman(moduleList, middlemanIdentity,
originatorIdentity);
// Don't fail existing CTS tests which run without a ST module // Don't fail existing CTS tests which run without a ST module
final int moduleId = (moduleProperties != null) ? final int moduleId = (moduleProperties != null) ?
@@ -241,12 +262,8 @@ public class SoundTriggerService extends SystemService {
moduleId, statusListener, null /* handler */, moduleId, statusListener, null /* handler */,
middlemanIdentity, originatorIdentity), middlemanIdentity, originatorIdentity),
moduleId, moduleId,
() -> { () -> listUnderlyingModuleProperties(originatorIdentity)
ArrayList<ModuleProperties> modulePropList = new ArrayList<>(); );
SoundTrigger.listModulesAsMiddleman(modulePropList, middlemanIdentity,
originatorIdentity);
return modulePropList;
});
} }
class SoundTriggerServiceStub extends ISoundTriggerService.Stub { class SoundTriggerServiceStub extends ISoundTriggerService.Stub {
@@ -276,12 +293,7 @@ public class SoundTriggerService extends SystemService {
public List<ModuleProperties> listModuleProperties(@NonNull Identity originatorIdentity) { public List<ModuleProperties> listModuleProperties(@NonNull Identity originatorIdentity) {
try (SafeCloseable ignored = PermissionUtil.establishIdentityDirect( try (SafeCloseable ignored = PermissionUtil.establishIdentityDirect(
originatorIdentity)) { originatorIdentity)) {
Identity middlemanIdentity = new Identity(); return listUnderlyingModuleProperties(originatorIdentity);
middlemanIdentity.packageName = ActivityThread.currentOpPackageName();
ArrayList<ModuleProperties> moduleList = new ArrayList<>();
SoundTrigger.listModulesAsMiddleman(moduleList, middlemanIdentity,
originatorIdentity);
return moduleList;
} }
} }
} }
@@ -1647,17 +1659,10 @@ public class SoundTriggerService extends SystemService {
@Override @Override
public List<ModuleProperties> listModuleProperties(Identity originatorIdentity) { public List<ModuleProperties> listModuleProperties(Identity originatorIdentity) {
ArrayList<ModuleProperties> moduleList = new ArrayList<>();
try (SafeCloseable ignored = PermissionUtil.establishIdentityDirect( try (SafeCloseable ignored = PermissionUtil.establishIdentityDirect(
originatorIdentity)) { originatorIdentity)) {
Identity middlemanIdentity = new Identity(); return listUnderlyingModuleProperties(originatorIdentity);
middlemanIdentity.uid = Binder.getCallingUid();
middlemanIdentity.pid = Binder.getCallingPid();
middlemanIdentity.packageName = ActivityThread.currentOpPackageName();
SoundTrigger.listModulesAsMiddleman(moduleList, middlemanIdentity,
originatorIdentity);
} }
return moduleList;
} }
@Override @Override