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

Commit e10a7489 authored by Atneya Nair's avatar Atneya Nair
Browse files

Add test API for phone call state

ST observes and reacts to phone calls by pausing recognition.

Instrumenting a fake phone call through the telephony stack is hard,
so add a test API which mocks this callback from the telephony service
to enable CTS tests for the ST response.

Bug: 272147641
Fixes: 278904783
Test: AlwaysOnHotwordDetectorTest#
      testOnPhoneCall_recognitionPausedAndResumed
Change-Id: I409cbaca11294291d4b504e4fc2bf9971686f1ff
parent e239b595
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -2037,6 +2037,7 @@ package android.media.metrics {
package android.media.soundtrigger {
package android.media.soundtrigger {


  public final class SoundTriggerInstrumentation {
  public final class SoundTriggerInstrumentation {
    method public void setInPhoneCallState(boolean);
    method public void setResourceContention(boolean);
    method public void setResourceContention(boolean);
    method public void triggerOnResourcesAvailable();
    method public void triggerOnResourcesAvailable();
    method public void triggerRestart();
    method public void triggerRestart();
+6 −0
Original line number Original line Diff line number Diff line
@@ -79,4 +79,10 @@ interface ISoundTriggerService {
     * Attach an HAL injection interface.
     * Attach an HAL injection interface.
     */
     */
     void attachInjection(ISoundTriggerInjection injection);
     void attachInjection(ISoundTriggerInjection injection);

    /**
     * Test API to override the phone call state.
     */
     void setInPhoneCallState(boolean isInPhoneCall);

}
}
+22 −0
Original line number Original line Diff line number Diff line
@@ -66,6 +66,8 @@ public final class SoundTriggerInstrumentation {
    @GuardedBy("mLock")
    @GuardedBy("mLock")
    private IBinder mClientToken = null;
    private IBinder mClientToken = null;


    private final ISoundTriggerService mService;

    private final GlobalCallback mClientCallback;
    private final GlobalCallback mClientCallback;
    private final Executor mGlobalCallbackExecutor;
    private final Executor mGlobalCallbackExecutor;


@@ -562,6 +564,7 @@ public final class SoundTriggerInstrumentation {
            @NonNull GlobalCallback callback) {
            @NonNull GlobalCallback callback) {
        mClientCallback = Objects.requireNonNull(callback);
        mClientCallback = Objects.requireNonNull(callback);
        mGlobalCallbackExecutor = Objects.requireNonNull(executor);
        mGlobalCallbackExecutor = Objects.requireNonNull(executor);
        mService = service;
        try {
        try {
            service.attachInjection(new Injection());
            service.attachInjection(new Injection());
        } catch (RemoteException e) {
        } catch (RemoteException e) {
@@ -651,5 +654,24 @@ public final class SoundTriggerInstrumentation {
            }
            }
        }
        }
    }
    }

    /**
     * Simulate a phone call for {@link com.android.server.soundtrigger.SoundTriggerService}.
     * If the phone call state changes, the service will be notified to respond.
     * The service should pause recognition for the duration of the call.
     *
     * @param isInPhoneCall - {@code true} to cause the SoundTriggerService to
     * see the phone call state as off-hook. {@code false} to cause the service to
     * see the state as normal.
     * @hide
     */
    @TestApi
    public void setInPhoneCallState(boolean isInPhoneCall) {
        try {
            mService.setInPhoneCallState(isInPhoneCall);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
}
}
+6 −0
Original line number Original line Diff line number Diff line
@@ -412,6 +412,12 @@ public class SoundTriggerService extends SystemService {
            }
            }
        }
        }


        @Override
        public void setInPhoneCallState(boolean isInPhoneCall) {
            Slog.i(TAG, "Overriding phone call state: " + isInPhoneCall);
            mDeviceStateHandler.onPhoneCallStateChanged(isInPhoneCall);
        }

        @Override
        @Override
        public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
            // Event loggers
            // Event loggers