summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Enforcer.java34
1 files changed, 18 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Enforcer.java b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Enforcer.java
index 90ac69a97158..cf7460b306cd 100644
--- a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Enforcer.java
+++ b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Enforcer.java
@@ -42,7 +42,7 @@ public class SoundTriggerHw2Enforcer implements ISoundTriggerHw2 {
static final String TAG = "SoundTriggerHw2Enforcer";
final ISoundTriggerHw2 mUnderlying;
- final Map<Integer, Boolean> mModelStates = new HashMap<>();
+ Map<Integer, Boolean> mModelStates = new HashMap<>();
public SoundTriggerHw2Enforcer(
ISoundTriggerHw2 underlying) {
@@ -62,12 +62,12 @@ public class SoundTriggerHw2Enforcer implements ISoundTriggerHw2 {
public int loadSoundModel(ISoundTriggerHw.SoundModel soundModel, Callback callback,
int cookie) {
try {
+ int handle = mUnderlying.loadSoundModel(soundModel, new CallbackEnforcer(callback),
+ cookie);
synchronized (mModelStates) {
- int handle = mUnderlying.loadSoundModel(soundModel, new CallbackEnforcer(callback),
- cookie);
mModelStates.put(handle, false);
- return handle;
}
+ return handle;
} catch (RuntimeException e) {
throw handleException(e);
}
@@ -77,13 +77,13 @@ public class SoundTriggerHw2Enforcer implements ISoundTriggerHw2 {
public int loadPhraseSoundModel(ISoundTriggerHw.PhraseSoundModel soundModel, Callback callback,
int cookie) {
try {
+ int handle = mUnderlying.loadPhraseSoundModel(soundModel,
+ new CallbackEnforcer(callback),
+ cookie);
synchronized (mModelStates) {
- int handle = mUnderlying.loadPhraseSoundModel(soundModel,
- new CallbackEnforcer(callback),
- cookie);
mModelStates.put(handle, false);
- return handle;
}
+ return handle;
} catch (RuntimeException e) {
throw handleException(e);
}
@@ -92,8 +92,8 @@ public class SoundTriggerHw2Enforcer implements ISoundTriggerHw2 {
@Override
public void unloadSoundModel(int modelHandle) {
try {
+ mUnderlying.unloadSoundModel(modelHandle);
synchronized (mModelStates) {
- mUnderlying.unloadSoundModel(modelHandle);
mModelStates.remove(modelHandle);
}
} catch (RuntimeException e) {
@@ -104,8 +104,8 @@ public class SoundTriggerHw2Enforcer implements ISoundTriggerHw2 {
@Override
public void stopRecognition(int modelHandle) {
try {
+ mUnderlying.stopRecognition(modelHandle);
synchronized (mModelStates) {
- mUnderlying.stopRecognition(modelHandle);
mModelStates.replace(modelHandle, false);
}
} catch (RuntimeException e) {
@@ -116,8 +116,8 @@ public class SoundTriggerHw2Enforcer implements ISoundTriggerHw2 {
@Override
public void stopAllRecognitions() {
try {
+ mUnderlying.stopAllRecognitions();
synchronized (mModelStates) {
- mUnderlying.stopAllRecognitions();
for (Map.Entry<Integer, Boolean> entry : mModelStates.entrySet()) {
entry.setValue(false);
}
@@ -130,12 +130,14 @@ public class SoundTriggerHw2Enforcer implements ISoundTriggerHw2 {
@Override
public void startRecognition(int modelHandle, RecognitionConfig config, Callback callback,
int cookie) {
+ // It is possible that an event will be sent before the HAL returns from the
+ // startRecognition call, thus it is important to set the state to active before the call.
+ synchronized (mModelStates) {
+ mModelStates.replace(modelHandle, true);
+ }
try {
- synchronized (mModelStates) {
- mUnderlying.startRecognition(modelHandle, config, new CallbackEnforcer(callback),
- cookie);
- mModelStates.replace(modelHandle, true);
- }
+ mUnderlying.startRecognition(modelHandle, config, new CallbackEnforcer(callback),
+ cookie);
} catch (RuntimeException e) {
throw handleException(e);
}