Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 31316ca7 authored by Atneya Nair's avatar Atneya Nair
Browse files

Plumb trusted config through soundtrigger stack

Add a new argument for attaching a session for a trusted middleman.
In this case, the soundtrigger stack will not attribute data delivery
ops when calling back, since the trusted middleman will handle this
attribution instead.

Primarily used for HotwordDetectionService, which only delivers data and
attributes ops onDetected.

Bug: 272147641
Fixes: 278626527
Test: atest SoundTriggerManagerTest
Test: atest AlwaysOnHotwordDetectorTest
Test: Manual verification hotword, now playing functionality
Change-Id: If0ade4a816d0972de1647d275f23e3fdb773f279
parent 476349f7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2269,7 +2269,7 @@ public class SoundTrigger {
        Looper looper = handler != null ? handler.getLooper() : Looper.getMainLooper();
        try {
            return new SoundTriggerModule(getService(), moduleId, listener, looper,
                    middlemanIdentity, originatorIdentity);
                    middlemanIdentity, originatorIdentity, false);
        } catch (Exception e) {
            Log.e(TAG, "", e);
            return null;
+4 −2
Original line number Diff line number Diff line
@@ -83,7 +83,8 @@ public class SoundTriggerModule {
     */
    public SoundTriggerModule(@NonNull ISoundTriggerMiddlewareService service,
            int moduleId, @NonNull SoundTrigger.StatusListener listener, @NonNull Looper looper,
            @NonNull Identity middlemanIdentity, @NonNull Identity originatorIdentity) {
            @NonNull Identity middlemanIdentity, @NonNull Identity originatorIdentity,
            boolean isTrusted) {
        mId = moduleId;
        mEventHandlerDelegate = new EventHandlerDelegate(listener, looper);

@@ -91,7 +92,8 @@ public class SoundTriggerModule {
            try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
                mService = service.attachAsMiddleman(moduleId, middlemanIdentity,
                        originatorIdentity,
                        mEventHandlerDelegate);
                        mEventHandlerDelegate,
                        isTrusted);
            }
            mService.asBinder().linkToDeath(mEventHandlerDelegate, 0);
        } catch (RemoteException e) {
+4 −2
Original line number Diff line number Diff line
@@ -80,14 +80,16 @@ interface ISoundTriggerMiddlewareService {
     *   This implies that the caller must clear its caller identity to protect from the case where
     *   it resides in the same process as the callee.
     * - The identity of the entity on behalf of which module operations are to be performed.
     *
     * @param isTrusted - {@code true} if the middleware should not audit data delivery, since the
     * callback is being delivered to another trusted component which will audit access.
     * listModules() must be called prior to calling this method and the provided handle must be
     * one of the handles from the returned list.
     */
    ISoundTriggerModule attachAsMiddleman(int handle,
                                          in Identity middlemanIdentity,
                                          in Identity originatorIdentity,
                                          ISoundTriggerCallback callback);
                                          ISoundTriggerCallback callback,
                                          boolean isTrusted);

    /**
     * Attach an injection interface interface to the ST mock HAL.
+8 −1
Original line number Diff line number Diff line
@@ -47,7 +47,14 @@ public interface SoundTriggerInternal {
    int STATUS_OK = SoundTrigger.STATUS_OK;

    // Attach to a specific underlying STModule
    Session attach(@NonNull IBinder client, ModuleProperties underlyingModule);
    /**
     * Attach to a specific underlying STModule.
     * @param client - Binder token representing the app client for death notifications
     * @param underlyingModule - Properties of the underlying STModule to attach to
     * @param isTrusted - {@code true} if callbacks will be appropriately AppOps attributed by
     * a trusted component prior to delivery to the ultimate client.
     */
    Session attach(@NonNull IBinder client, ModuleProperties underlyingModule, boolean isTrusted);

    // Enumerate possible STModules to attach to
    List<ModuleProperties> listModuleProperties(Identity originatorIdentity);
+19 −19
Original line number Diff line number Diff line
@@ -163,7 +163,7 @@ public class SoundTriggerMiddlewareImplTest {
    public void testAttachDetach() throws Exception {
        // Normal attachment / detachment.
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);
        assertNotNull(module);
        module.detach();
    }
@@ -171,7 +171,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testLoadUnloadModel() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        final int hwHandle = 7;
        int handle = loadGenericModel(module, hwHandle).first;
@@ -182,7 +182,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testLoadPreemptModel() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        final int hwHandle = 7;
        Pair<Integer, SoundTriggerHwCallback> loadResult = loadGenericModel(module, hwHandle);
@@ -201,7 +201,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testLoadUnloadPhraseModel() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        final int hwHandle = 73;
        int handle = loadPhraseModel(module, hwHandle).first;
@@ -212,7 +212,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testStartStopRecognition() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        // Load the model.
        final int hwHandle = 7;
@@ -237,7 +237,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testStartRecognitionBusy() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        // Load the model.
        final int hwHandle = 7;
@@ -261,7 +261,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testStartStopPhraseRecognition() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        // Load the model.
        final int hwHandle = 67;
@@ -286,7 +286,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testRecognition() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        // Load the model.
        final int hwHandle = 7;
@@ -331,7 +331,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testPhraseRecognition() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        // Load the model.
        final int hwHandle = 7;
@@ -361,7 +361,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testForceRecognition() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        // Load the model.
        final int hwHandle = 17;
@@ -398,7 +398,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testForceRecognitionNotSupported() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        // Load the model.
        final int hwHandle = 17;
@@ -429,7 +429,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testForcePhraseRecognition() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        // Load the model.
        final int hwHandle = 17;
@@ -466,7 +466,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testForcePhraseRecognitionNotSupported() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        // Load the model.
        final int hwHandle = 17;
@@ -498,7 +498,7 @@ public class SoundTriggerMiddlewareImplTest {
    public void testAbortRecognition() throws Exception {
        // Make sure the HAL doesn't support concurrent capture.
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        // Load the model.
        final int hwHandle = 11;
@@ -528,7 +528,7 @@ public class SoundTriggerMiddlewareImplTest {
    public void testAbortPhraseRecognition() throws Exception {
        // Make sure the HAL doesn't support concurrent capture.
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);

        // Load the model.
        final int hwHandle = 11;
@@ -557,7 +557,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testParameterSupported() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);
        final int hwHandle = 12;
        int modelHandle = loadGenericModel(module, hwHandle).first;

@@ -579,7 +579,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testParameterNotSupported() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);
        final int hwHandle = 13;
        int modelHandle = loadGenericModel(module, hwHandle).first;

@@ -597,7 +597,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testGetParameter() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);
        final int hwHandle = 14;
        int modelHandle = loadGenericModel(module, hwHandle).first;

@@ -614,7 +614,7 @@ public class SoundTriggerMiddlewareImplTest {
    @Test
    public void testSetParameter() throws Exception {
        ISoundTriggerCallback callback = createCallbackMock();
        ISoundTriggerModule module = mService.attach(0, callback);
        ISoundTriggerModule module = mService.attach(0, callback, false);
        final int hwHandle = 17;
        int modelHandle = loadGenericModel(module, hwHandle).first;

Loading