diff options
| -rw-r--r-- | services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Enforcer.java | 34 |
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); } |