From 255a556df11254e5a4e57d5c4edda1df154f64bd Mon Sep 17 00:00:00 2001 From: Atneya Nair Date: Mon, 13 Mar 2023 07:01:02 -0700 Subject: [PATCH] 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 --- .../soundtrigger/SoundTriggerService.java | 51 ++++++++++--------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java index 70af33796ad12..04c1c0451e633 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.PackageManager; 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.permission.SafeCloseable; 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.Parcel; 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 com.android.server.utils.EventLogger; 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 @@ public class SoundTriggerService extends SystemService { } } + // Must be called with cleared binder context. + private static List 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 moduleList = new ArrayList<>(); - SoundTrigger.listModulesAsMiddleman(moduleList, middlemanIdentity, - originatorIdentity); + List moduleList = listUnderlyingModuleProperties(originatorIdentity); // Don't fail existing CTS tests which run without a ST module final int moduleId = (moduleProperties != null) ? @@ -241,12 +262,8 @@ public class SoundTriggerService extends SystemService { moduleId, statusListener, null /* handler */, middlemanIdentity, originatorIdentity), moduleId, - () -> { - ArrayList modulePropList = new ArrayList<>(); - SoundTrigger.listModulesAsMiddleman(modulePropList, middlemanIdentity, - originatorIdentity); - return modulePropList; - }); + () -> listUnderlyingModuleProperties(originatorIdentity) + ); } class SoundTriggerServiceStub extends ISoundTriggerService.Stub { @@ -276,12 +293,7 @@ public class SoundTriggerService extends SystemService { public List listModuleProperties(@NonNull Identity originatorIdentity) { try (SafeCloseable ignored = PermissionUtil.establishIdentityDirect( originatorIdentity)) { - Identity middlemanIdentity = new Identity(); - middlemanIdentity.packageName = ActivityThread.currentOpPackageName(); - ArrayList moduleList = new ArrayList<>(); - SoundTrigger.listModulesAsMiddleman(moduleList, middlemanIdentity, - originatorIdentity); - return moduleList; + return listUnderlyingModuleProperties(originatorIdentity); } } } @@ -1647,17 +1659,10 @@ public class SoundTriggerService extends SystemService { @Override public List listModuleProperties(Identity originatorIdentity) { - ArrayList 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