Merge "Allow HotwordDetectionService to return HotwordRejectedResult." into sc-dev

This commit is contained in:
Ahaan Ugale
2021-03-23 21:58:59 +00:00
committed by Android (Google) Code Review
6 changed files with 31 additions and 34 deletions

View File

@@ -10333,7 +10333,6 @@ package android.service.voice {
method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean stopRecognition();
field public static final int AUDIO_CAPABILITY_ECHO_CANCELLATION = 1; // 0x1
field public static final int AUDIO_CAPABILITY_NOISE_SUPPRESSION = 2; // 0x2
field public static final int HOTWORD_DETECTION_FALSE_ALERT = 0; // 0x0
field public static final int MODEL_PARAM_THRESHOLD_FACTOR = 0; // 0x0
field public static final int RECOGNITION_FLAG_ALLOW_MULTIPLE_TRIGGERS = 2; // 0x2
field public static final int RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO = 1; // 0x1
@@ -10356,7 +10355,7 @@ package android.service.voice {
method public abstract void onError();
method public abstract void onRecognitionPaused();
method public abstract void onRecognitionResumed();
method public void onRejected(int);
method public void onRejected(@Nullable android.service.voice.HotwordRejectedResult);
}
public static class AlwaysOnHotwordDetector.EventPayload {
@@ -10405,7 +10404,7 @@ package android.service.voice {
public static final class HotwordDetectionService.DspHotwordDetectionCallback {
method public void onDetected();
method public void onRejected();
method public void onRejected(@Nullable android.service.voice.HotwordRejectedResult);
}
public interface HotwordDetector {

View File

@@ -238,18 +238,6 @@ public class AlwaysOnHotwordDetector {
})
public @interface ModelParams {}
/**
* Indicates that the given audio data is a false alert for {@link VoiceInteractionService}.
*/
public static final int HOTWORD_DETECTION_FALSE_ALERT = 0;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(flag = true, prefix = { "HOTWORD_DETECTION_" }, value = {
HOTWORD_DETECTION_FALSE_ALERT,
})
public @interface HotwordDetectionResult {}
/**
* Controls the sensitivity threshold adjustment factor for a given model.
* Negative value corresponds to less sensitive model (high threshold) and
@@ -478,11 +466,14 @@ public class AlwaysOnHotwordDetector {
public abstract void onRecognitionResumed();
/**
* Called when the validated result is invalid.
* Called when the {@link HotwordDetectionService second stage detection} did not detect the
* keyphrase.
*
* @param reason The reason why the validated result is invalid.
* @param result Info about the second stage detection result, provided by the
* {@link HotwordDetectionService}.
*/
public void onRejected(@HotwordDetectionResult int reason) {}
public void onRejected(@Nullable HotwordRejectedResult result) {
}
}
/**
@@ -1069,13 +1060,13 @@ public class AlwaysOnHotwordDetector {
}
@Override
public void onRejected(int reason) {
public void onRejected(HotwordRejectedResult result) {
if (DBG) {
Slog.d(TAG, "onRejected(" + reason + ")");
Slog.d(TAG, "onRejected(" + result + ")");
} else {
Slog.i(TAG, "onRejected");
}
Message.obtain(mHandler, MSG_HOTWORD_REJECTED, reason).sendToTarget();
Message.obtain(mHandler, MSG_HOTWORD_REJECTED, result).sendToTarget();
}
@Override
@@ -1124,7 +1115,7 @@ public class AlwaysOnHotwordDetector {
mExternalCallback.onRecognitionResumed();
break;
case MSG_HOTWORD_REJECTED:
mExternalCallback.onRejected(msg.arg1);
mExternalCallback.onRejected((HotwordRejectedResult) msg.obj);
break;
default:
super.handleMessage(msg);

View File

@@ -182,11 +182,14 @@ public abstract class HotwordDetectionService extends Service {
}
/**
* Called when the detected result is invalid.
* Informs the {@link AlwaysOnHotwordDetector} that the keyphrase was not detected.
*
* @param result Info about the second stage detection result. This is provided to
* the {@link AlwaysOnHotwordDetector}.
*/
public void onRejected() {
public void onRejected(@Nullable HotwordRejectedResult result) {
try {
mRemoteCallback.onRejected();
mRemoteCallback.onRejected(result);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}

View File

@@ -16,6 +16,8 @@
package android.service.voice;
import android.service.voice.HotwordRejectedResult;
/**
* Callback for returning the detected result from the HotwordDetectionService.
*
@@ -28,7 +30,7 @@ oneway interface IDspHotwordDetectionCallback {
void onDetected();
/**
* Called when the detected result is invalid.
* Sends {@code result} to the HotwordDetector.
*/
void onRejected();
void onRejected(in HotwordRejectedResult result);
}

View File

@@ -17,6 +17,7 @@
package com.android.internal.app;
import android.hardware.soundtrigger.SoundTrigger;
import android.service.voice.HotwordRejectedResult;
/**
* @hide
@@ -41,11 +42,13 @@ oneway interface IHotwordRecognitionStatusCallback {
void onGenericSoundTriggerDetected(in SoundTrigger.GenericRecognitionEvent recognitionEvent);
/**
* Called when the validated result is invalid.
* Called when the {@link HotwordDetectionService second stage detection} did not detect the
* keyphrase.
*
* @param reason The reason why the validated result is invalid.
* @param result Info about the second stage detection result, provided by the
* {@link HotwordDetectionService}.
*/
void onRejected(int reason);
void onRejected(in HotwordRejectedResult result);
/**
* Called when the detection fails due to an error.

View File

@@ -30,8 +30,8 @@ import android.os.ParcelFileDescriptor;
import android.os.PersistableBundle;
import android.os.RemoteException;
import android.os.SharedMemory;
import android.service.voice.AlwaysOnHotwordDetector;
import android.service.voice.HotwordDetectionService;
import android.service.voice.HotwordRejectedResult;
import android.service.voice.IDspHotwordDetectionCallback;
import android.service.voice.IHotwordDetectionService;
import android.util.Pair;
@@ -206,13 +206,12 @@ final class HotwordDetectionConnection {
}
@Override
public void onRejected() throws RemoteException {
public void onRejected(HotwordRejectedResult result) throws RemoteException {
if (DEBUG) {
Slog.d(TAG, "onRejected");
}
cancelingFuture.cancel(true);
externalCallback.onRejected(
AlwaysOnHotwordDetector.HOTWORD_DETECTION_FALSE_ALERT);
externalCallback.onRejected(result);
}
};