Implement a callback to report HotwordDetectionService status
When the application uses VoiceInteractionService to create a SoftwareHotwordDetector, we need to report the HotwordDetectionService status to the application, but we pass null callback into the updateStateLocked function, it means that we will not receive the HotwordDetectionService status. In this change, we implement IHotwordRecognitionStatusCallback and pass the callback into updateStateLocked function. When we receive the HotwordDetectionService status, we will pass the status to the application. Bug: 183239093 Test: atest CtsVoiceInteractionTestCases Test: atest CtsVoiceInteractionTestCases --instant Change-Id: I1a1b8abe5c7e82eddaa2f0a83f54110df74d1efb
This commit is contained in:
@@ -22,6 +22,7 @@ import static com.android.internal.util.function.pooled.PooledLambda.obtainMessa
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.hardware.soundtrigger.SoundTrigger;
|
||||
import android.media.AudioFormat;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
@@ -31,6 +32,7 @@ import android.os.RemoteException;
|
||||
import android.os.SharedMemory;
|
||||
import android.util.Slog;
|
||||
|
||||
import com.android.internal.app.IHotwordRecognitionStatusCallback;
|
||||
import com.android.internal.app.IVoiceInteractionManagerService;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
@@ -64,7 +66,8 @@ class SoftwareHotwordDetector extends AbstractHotwordDetector {
|
||||
mAudioFormat = audioFormat;
|
||||
mCallback = callback;
|
||||
mHandler = new Handler(Looper.getMainLooper());
|
||||
updateStateLocked(options, sharedMemory, null /* callback */);
|
||||
updateStateLocked(options, sharedMemory,
|
||||
new InitializationStateListener(mHandler, mCallback));
|
||||
}
|
||||
|
||||
@RequiresPermission(RECORD_AUDIO)
|
||||
@@ -133,6 +136,58 @@ class SoftwareHotwordDetector extends AbstractHotwordDetector {
|
||||
}
|
||||
}
|
||||
|
||||
private static class InitializationStateListener
|
||||
extends IHotwordRecognitionStatusCallback.Stub {
|
||||
private final Handler mHandler;
|
||||
private final HotwordDetector.Callback mCallback;
|
||||
|
||||
InitializationStateListener(Handler handler, HotwordDetector.Callback callback) {
|
||||
this.mHandler = handler;
|
||||
this.mCallback = callback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onKeyphraseDetected(SoundTrigger.KeyphraseRecognitionEvent recognitionEvent)
|
||||
throws RemoteException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGenericSoundTriggerDetected(
|
||||
SoundTrigger.GenericRecognitionEvent recognitionEvent) throws RemoteException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRejected(HotwordRejectedResult result) throws RemoteException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int status) throws RemoteException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRecognitionPaused() throws RemoteException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRecognitionResumed() throws RemoteException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusReported(int status) {
|
||||
Slog.v(TAG, "onStatusReported" + (DEBUG ? "(" + status + ")" : ""));
|
||||
mHandler.sendMessage(obtainMessage(
|
||||
HotwordDetector.Callback::onHotwordDetectionServiceInitialized,
|
||||
mCallback,
|
||||
status));
|
||||
}
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public void dump(String prefix, PrintWriter pw) {
|
||||
// TODO: implement this
|
||||
|
||||
Reference in New Issue
Block a user