Call listModules directly in STService
- Appropriately transmits error conditions to the caller
- Clean-up various call sites.
Test: Assistant/Now Playing attaches
Test: atest CtsVoiceInteractionTestCases
Bug: 273243648
Change-Id: I50c045ca2fa0798f61c17bcb05eeb4aaf7b474cf
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
index 70af337..04c1c04 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
@@ -44,6 +44,7 @@
import android.content.pm.ResolveInfo;
import android.hardware.soundtrigger.IRecognitionStatusCallback;
import android.hardware.soundtrigger.ModelParams;
+import android.hardware.soundtrigger.ConversionUtil;
import android.hardware.soundtrigger.SoundTrigger;
import android.hardware.soundtrigger.SoundTrigger.GenericSoundModel;
import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel;
@@ -63,6 +64,7 @@
import android.media.soundtrigger.ISoundTriggerDetectionService;
import android.media.soundtrigger.ISoundTriggerDetectionServiceClient;
import android.media.soundtrigger.SoundTriggerDetectionService;
+import android.media.soundtrigger_middleware.ISoundTriggerMiddlewareService;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
@@ -72,6 +74,8 @@
import android.os.ParcelUuid;
import android.os.PowerManager;
import android.os.RemoteException;
+import android.os.ServiceSpecificException;
+import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings;
@@ -88,11 +92,13 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.TreeMap;
import java.util.UUID;
+import java.util.stream.Collectors;
import java.util.concurrent.TimeUnit;
/**
@@ -215,14 +221,29 @@
}
}
+ // 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) {
Identity middlemanIdentity = new Identity();
middlemanIdentity.packageName = ActivityThread.currentOpPackageName();
Identity originatorIdentity = IdentityContext.getNonNull();
- ArrayList<ModuleProperties> moduleList = new ArrayList<>();
- SoundTrigger.listModulesAsMiddleman(moduleList, middlemanIdentity,
- originatorIdentity);
+ List<ModuleProperties> moduleList = listUnderlyingModuleProperties(originatorIdentity);
// Don't fail existing CTS tests which run without a ST module
final int moduleId = (moduleProperties != null) ?
@@ -241,12 +262,8 @@
moduleId, statusListener, null /* handler */,
middlemanIdentity, originatorIdentity),
moduleId,
- () -> {
- ArrayList<ModuleProperties> modulePropList = new ArrayList<>();
- SoundTrigger.listModulesAsMiddleman(modulePropList, middlemanIdentity,
- originatorIdentity);
- return modulePropList;
- });
+ () -> listUnderlyingModuleProperties(originatorIdentity)
+ );
}
class SoundTriggerServiceStub extends ISoundTriggerService.Stub {
@@ -276,12 +293,7 @@
public List<ModuleProperties> listModuleProperties(@NonNull Identity originatorIdentity) {
try (SafeCloseable ignored = PermissionUtil.establishIdentityDirect(
originatorIdentity)) {
- Identity middlemanIdentity = new Identity();
- middlemanIdentity.packageName = ActivityThread.currentOpPackageName();
- ArrayList<ModuleProperties> moduleList = new ArrayList<>();
- SoundTrigger.listModulesAsMiddleman(moduleList, middlemanIdentity,
- originatorIdentity);
- return moduleList;
+ return listUnderlyingModuleProperties(originatorIdentity);
}
}
}
@@ -1647,17 +1659,10 @@
@Override
public List<ModuleProperties> listModuleProperties(Identity originatorIdentity) {
- ArrayList<ModuleProperties> moduleList = new ArrayList<>();
try (SafeCloseable ignored = PermissionUtil.establishIdentityDirect(
originatorIdentity)) {
- Identity middlemanIdentity = new Identity();
- middlemanIdentity.uid = Binder.getCallingUid();
- middlemanIdentity.pid = Binder.getCallingPid();
- middlemanIdentity.packageName = ActivityThread.currentOpPackageName();
- SoundTrigger.listModulesAsMiddleman(moduleList, middlemanIdentity,
- originatorIdentity);
+ return listUnderlyingModuleProperties(originatorIdentity);
}
- return moduleList;
}
@Override