Remove STService dependency on model database
The loaded model can mismatch the model in the database.
Removing this dependency while preserving existing behavior
for STDetector clients. These clients already must load the
model to prevent state mismatch.
Test: Compiles
Bug: 266963008
Change-Id: I0c0ea9081e9507c2237796ac11a7585dec1c148d
diff --git a/core/java/com/android/internal/app/ISoundTriggerSession.aidl b/core/java/com/android/internal/app/ISoundTriggerSession.aidl
index a1ba558..3269ffc 100644
--- a/core/java/com/android/internal/app/ISoundTriggerSession.aidl
+++ b/core/java/com/android/internal/app/ISoundTriggerSession.aidl
@@ -36,7 +36,8 @@
void deleteSoundModel(in ParcelUuid soundModelId);
- int startRecognition(in ParcelUuid soundModelId, in IRecognitionStatusCallback callback,
+ int startRecognition(in SoundTrigger.GenericSoundModel soundModel,
+ in IRecognitionStatusCallback callback,
in SoundTrigger.RecognitionConfig config, boolean runInBatterySaver);
int stopRecognition(in ParcelUuid soundModelId, in IRecognitionStatusCallback callback);
diff --git a/media/java/android/media/soundtrigger/SoundTriggerDetector.java b/media/java/android/media/soundtrigger/SoundTriggerDetector.java
index 59e19ed..1a3e54d 100644
--- a/media/java/android/media/soundtrigger/SoundTriggerDetector.java
+++ b/media/java/android/media/soundtrigger/SoundTriggerDetector.java
@@ -25,6 +25,7 @@
import android.compat.annotation.UnsupportedAppUsage;
import android.hardware.soundtrigger.IRecognitionStatusCallback;
import android.hardware.soundtrigger.SoundTrigger;
+import android.hardware.soundtrigger.SoundTrigger.GenericSoundModel;
import android.hardware.soundtrigger.SoundTrigger.ModuleProperties;
import android.hardware.soundtrigger.SoundTrigger.RecognitionConfig;
import android.media.AudioFormat;
@@ -50,6 +51,7 @@
* VoiceInteractionService} instead. Access to this class is protected by a permission
* granted only to system or privileged apps.
* @deprecated use {@link SoundTriggerManager} directly
+ *
* @hide
*/
@Deprecated
@@ -67,7 +69,7 @@
private final Object mLock = new Object();
private final ISoundTriggerSession mSoundTriggerSession;
- private final UUID mSoundModelId;
+ private final GenericSoundModel mSoundModel;
private final Callback mCallback;
private final Handler mHandler;
private final RecognitionCallback mRecognitionCallback;
@@ -277,10 +279,11 @@
* This class should be constructed by the {@link SoundTriggerManager}.
* @hide
*/
- SoundTriggerDetector(ISoundTriggerSession soundTriggerSession, UUID soundModelId,
+ SoundTriggerDetector(ISoundTriggerSession soundTriggerSession,
+ @NonNull GenericSoundModel soundModel,
@NonNull Callback callback, @Nullable Handler handler) {
mSoundTriggerSession = soundTriggerSession;
- mSoundModelId = soundModelId;
+ mSoundModel = soundModel;
mCallback = callback;
if (handler == null) {
mHandler = new MyHandler();
@@ -320,7 +323,7 @@
int status;
try {
- status = mSoundTriggerSession.startRecognition(new ParcelUuid(mSoundModelId),
+ status = mSoundTriggerSession.startRecognition(mSoundModel,
mRecognitionCallback, new RecognitionConfig(captureTriggerAudio,
allowMultipleTriggers, null, null, audioCapabilities),
runInBatterySaver);
@@ -339,7 +342,7 @@
public boolean stopRecognition() {
int status = STATUS_OK;
try {
- status = mSoundTriggerSession.stopRecognition(new ParcelUuid(mSoundModelId),
+ status = mSoundTriggerSession.stopRecognition(new ParcelUuid(mSoundModel.getUuid()),
mRecognitionCallback);
} catch (RemoteException e) {
return false;
diff --git a/media/java/android/media/soundtrigger/SoundTriggerManager.java b/media/java/android/media/soundtrigger/SoundTriggerManager.java
index 8dc708a..c473a01 100644
--- a/media/java/android/media/soundtrigger/SoundTriggerManager.java
+++ b/media/java/android/media/soundtrigger/SoundTriggerManager.java
@@ -184,11 +184,16 @@
if (oldInstance != null) {
// Shutdown old instance.
}
- SoundTriggerDetector newInstance = new SoundTriggerDetector(mSoundTriggerSession,
- soundModelId, callback, handler);
- mReceiverInstanceMap.put(soundModelId, newInstance);
- return newInstance;
- }
+ try {
+ SoundTriggerDetector newInstance = new SoundTriggerDetector(mSoundTriggerSession,
+ mSoundTriggerSession.getSoundModel(new ParcelUuid(soundModelId)),
+ callback, handler);
+ mReceiverInstanceMap.put(soundModelId, newInstance);
+ return newInstance;
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
/**
* Class captures the data and fields that represent a non-keyphrase sound model. Use the
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
index 81717f4..7824c69 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
@@ -298,35 +298,33 @@
}
@Override
- public int startRecognition(ParcelUuid parcelUuid, IRecognitionStatusCallback callback,
+ public int startRecognition(GenericSoundModel soundModel,
+ IRecognitionStatusCallback callback,
RecognitionConfig config, boolean runInBatterySaverMode) {
try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
enforceCallingPermission(Manifest.permission.MANAGE_SOUND_TRIGGER);
+
+ if (soundModel == null) {
+ Slog.e(TAG, "Null model passed to startRecognition");
+ return STATUS_ERROR;
+ }
+
if (runInBatterySaverMode) {
enforceCallingPermission(Manifest.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER);
}
if (DEBUG) {
- Slog.i(TAG, "startRecognition(): Uuid : " + parcelUuid);
+ Slog.i(TAG, "startRecognition(): Uuid : " + soundModel.toString());
}
sEventLogger.enqueue(new EventLogger.StringEvent(
- "startRecognition(): Uuid : " + parcelUuid));
+ "startRecognition(): Uuid : " + soundModel.getUuid().toString()));
- GenericSoundModel model = getSoundModel(parcelUuid);
- if (model == null) {
- Slog.w(TAG, "Null model in database for id: " + parcelUuid);
-
- sEventLogger.enqueue(new EventLogger.StringEvent(
- "startRecognition(): Null model in database for id: " + parcelUuid));
-
- return STATUS_ERROR;
- }
-
- int ret = mSoundTriggerHelper.startGenericRecognition(parcelUuid.getUuid(), model,
+ int ret = mSoundTriggerHelper.startGenericRecognition(soundModel.getUuid(),
+ soundModel,
callback, config, runInBatterySaverMode);
if (ret == STATUS_OK) {
- mSoundModelStatTracker.onStart(parcelUuid.getUuid());
+ mSoundModelStatTracker.onStart(soundModel.getUuid());
}
return ret;
}
@@ -379,8 +377,7 @@
sEventLogger.enqueue(new EventLogger.StringEvent("updateSoundModel(): model = "
+ soundModel));
-
- mDbHelper.updateGenericSoundModel(soundModel);
+ mDbHelper.updateGenericSoundModel(soundModel);
}
}