Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9aa1db74 authored by Atneya Nair's avatar Atneya Nair
Browse files

Revert "[hotword] fix race condition in destroy()"

This reverts commit 2c300979.

Reason for revert: b/312021415

Change-Id: I1f6aa0eba880131a8f9b165a55e770836d35389b
parent 9b7b17ee
Loading
Loading
Loading
Loading
+24 −28
Original line number Diff line number Diff line
@@ -960,8 +960,8 @@ public class AlwaysOnHotwordDetector extends AbstractDetector {
                mKeyphraseMetadata = new KeyphraseMetadata(1, mText, fakeSupportedLocales,
                        AlwaysOnHotwordDetector.RECOGNITION_MODE_VOICE_TRIGGER);
            }
            notifyStateChangedLocked();
        }
        notifyStateChanged(availability);
    }

    /**
@@ -1371,8 +1371,8 @@ public class AlwaysOnHotwordDetector extends AbstractDetector {

            mAvailability = STATE_INVALID;
            mIsAvailabilityOverriddenByTestApi = false;
            notifyStateChangedLocked();
        }
        notifyStateChanged(STATE_INVALID);
        super.destroy();
    }

@@ -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
@@ -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)) {
@@ -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();
        }
    }

@@ -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")
@@ -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();
    }

@@ -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);
                    }
                }
            }