Loading core/java/android/service/voice/AlwaysOnHotwordDetector.java +24 −28 Original line number Diff line number Diff line Loading @@ -960,8 +960,8 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { mKeyphraseMetadata = new KeyphraseMetadata(1, mText, fakeSupportedLocales, AlwaysOnHotwordDetector.RECOGNITION_MODE_VOICE_TRIGGER); } notifyStateChangedLocked(); } notifyStateChanged(availability); } /** Loading Loading @@ -1371,8 +1371,8 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { mAvailability = STATE_INVALID; mIsAvailabilityOverriddenByTestApi = false; notifyStateChangedLocked(); } notifyStateChanged(STATE_INVALID); super.destroy(); } Loading Loading @@ -1402,8 +1402,6 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { */ // TODO(b/281608561): remove the enrollment flow from AlwaysOnHotwordDetector void onSoundModelsChanged() { boolean notifyError = false; synchronized (mLock) { if (mAvailability == STATE_INVALID || mAvailability == STATE_HARDWARE_UNAVAILABLE Loading Loading @@ -1444,9 +1442,6 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { // calling stopRecognition where there is no started session. Log.w(TAG, "Failed to stop recognition after enrollment update: code=" + result); // Execute a refresh availability task - which should then notify of a change. new RefreshAvailabilityTask().execute(); } catch (Exception e) { Slog.w(TAG, "Failed to stop recognition after enrollment update", e); if (CompatChanges.isChangeEnabled(SEND_ON_FAILURE_FOR_ASYNC_EXCEPTIONS)) { Loading @@ -1455,14 +1450,14 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { + Log.getStackTraceString(e), FailureSuggestedAction.RECREATE_DETECTOR)); } else { notifyError = true; } updateAndNotifyStateChangedLocked(STATE_ERROR); } return; } } if (notifyError) { updateAndNotifyStateChanged(STATE_ERROR); // Execute a refresh availability task - which should then notify of a change. new RefreshAvailabilityTask().execute(); } } Loading Loading @@ -1578,11 +1573,10 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { } } private void updateAndNotifyStateChanged(int availability) { synchronized (mLock) { @GuardedBy("mLock") private void updateAndNotifyStateChangedLocked(int availability) { updateAvailabilityLocked(availability); } notifyStateChanged(availability); notifyStateChangedLocked(); } @GuardedBy("mLock") Loading @@ -1596,17 +1590,17 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { } } private void notifyStateChanged(int newAvailability) { @GuardedBy("mLock") private void notifyStateChangedLocked() { Message message = Message.obtain(mHandler, MSG_AVAILABILITY_CHANGED); message.arg1 = newAvailability; message.arg1 = mAvailability; message.sendToTarget(); } @GuardedBy("mLock") private void sendUnknownFailure(String failureMessage) { synchronized (mLock) { // update but do not call onAvailabilityChanged callback for STATE_ERROR updateAvailabilityLocked(STATE_ERROR); } Message.obtain(mHandler, MSG_DETECTION_UNKNOWN_FAILURE, failureMessage).sendToTarget(); } Loading Loading @@ -1822,17 +1816,19 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { availability = STATE_KEYPHRASE_UNENROLLED; } } updateAndNotifyStateChangedLocked(availability); } updateAndNotifyStateChanged(availability); } catch (Exception e) { // Any exception here not caught will crash the process because AsyncTask does not // bubble up the exceptions to the client app, so we must propagate it to the app. Slog.w(TAG, "Failed to refresh availability", e); synchronized (mLock) { if (CompatChanges.isChangeEnabled(SEND_ON_FAILURE_FOR_ASYNC_EXCEPTIONS)) { sendUnknownFailure( "Failed to refresh availability: " + Log.getStackTraceString(e)); } else { updateAndNotifyStateChanged(STATE_ERROR); updateAndNotifyStateChangedLocked(STATE_ERROR); } } } Loading Loading
core/java/android/service/voice/AlwaysOnHotwordDetector.java +24 −28 Original line number Diff line number Diff line Loading @@ -960,8 +960,8 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { mKeyphraseMetadata = new KeyphraseMetadata(1, mText, fakeSupportedLocales, AlwaysOnHotwordDetector.RECOGNITION_MODE_VOICE_TRIGGER); } notifyStateChangedLocked(); } notifyStateChanged(availability); } /** Loading Loading @@ -1371,8 +1371,8 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { mAvailability = STATE_INVALID; mIsAvailabilityOverriddenByTestApi = false; notifyStateChangedLocked(); } notifyStateChanged(STATE_INVALID); super.destroy(); } Loading Loading @@ -1402,8 +1402,6 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { */ // TODO(b/281608561): remove the enrollment flow from AlwaysOnHotwordDetector void onSoundModelsChanged() { boolean notifyError = false; synchronized (mLock) { if (mAvailability == STATE_INVALID || mAvailability == STATE_HARDWARE_UNAVAILABLE Loading Loading @@ -1444,9 +1442,6 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { // calling stopRecognition where there is no started session. Log.w(TAG, "Failed to stop recognition after enrollment update: code=" + result); // Execute a refresh availability task - which should then notify of a change. new RefreshAvailabilityTask().execute(); } catch (Exception e) { Slog.w(TAG, "Failed to stop recognition after enrollment update", e); if (CompatChanges.isChangeEnabled(SEND_ON_FAILURE_FOR_ASYNC_EXCEPTIONS)) { Loading @@ -1455,14 +1450,14 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { + Log.getStackTraceString(e), FailureSuggestedAction.RECREATE_DETECTOR)); } else { notifyError = true; } updateAndNotifyStateChangedLocked(STATE_ERROR); } return; } } if (notifyError) { updateAndNotifyStateChanged(STATE_ERROR); // Execute a refresh availability task - which should then notify of a change. new RefreshAvailabilityTask().execute(); } } Loading Loading @@ -1578,11 +1573,10 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { } } private void updateAndNotifyStateChanged(int availability) { synchronized (mLock) { @GuardedBy("mLock") private void updateAndNotifyStateChangedLocked(int availability) { updateAvailabilityLocked(availability); } notifyStateChanged(availability); notifyStateChangedLocked(); } @GuardedBy("mLock") Loading @@ -1596,17 +1590,17 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { } } private void notifyStateChanged(int newAvailability) { @GuardedBy("mLock") private void notifyStateChangedLocked() { Message message = Message.obtain(mHandler, MSG_AVAILABILITY_CHANGED); message.arg1 = newAvailability; message.arg1 = mAvailability; message.sendToTarget(); } @GuardedBy("mLock") private void sendUnknownFailure(String failureMessage) { synchronized (mLock) { // update but do not call onAvailabilityChanged callback for STATE_ERROR updateAvailabilityLocked(STATE_ERROR); } Message.obtain(mHandler, MSG_DETECTION_UNKNOWN_FAILURE, failureMessage).sendToTarget(); } Loading Loading @@ -1822,17 +1816,19 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { availability = STATE_KEYPHRASE_UNENROLLED; } } updateAndNotifyStateChangedLocked(availability); } updateAndNotifyStateChanged(availability); } catch (Exception e) { // Any exception here not caught will crash the process because AsyncTask does not // bubble up the exceptions to the client app, so we must propagate it to the app. Slog.w(TAG, "Failed to refresh availability", e); synchronized (mLock) { if (CompatChanges.isChangeEnabled(SEND_ON_FAILURE_FOR_ASYNC_EXCEPTIONS)) { sendUnknownFailure( "Failed to refresh availability: " + Log.getStackTraceString(e)); } else { updateAndNotifyStateChanged(STATE_ERROR); updateAndNotifyStateChangedLocked(STATE_ERROR); } } } Loading