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

Commit 4d0c52ea authored by Kohsuke Yatoh's avatar Kohsuke Yatoh
Browse files

Have Telecom service notify AudioService of RTT call state.

Calculate RTT call state when:
- a call is added
- a call is removed
- a call's CallState is changed
- a call's RTT connection property is changed
and notify AudioServer of the RTT call state change.

Bug: 147037345
Test: Force installed Gboard 8.3.6 and verified voice typing works in
  simulated RTT call and simulated RTT upgrade call.
Change-Id: I78b93ce42474b7fc28f7193afee2a6328e2abfd0
parent f144bae4
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -392,6 +392,8 @@ public class CallsManager extends Call.ListenerBase

    private LinkedList<HandlerThread> mGraphHandlerThreads;

    private boolean mHasActiveRttCall = false;

    /**
     * Listener to PhoneAccountRegistrar events.
     */
@@ -897,6 +899,13 @@ public class CallsManager extends Call.ListenerBase
        }
    }

    @Override
    public void onConnectionPropertiesChanged(Call call, boolean didRttChange) {
        if (didRttChange) {
            updateHasActiveRttCall();
        }
    }

    @Override
    public void onParentChanged(Call call) {
        // parent-child relationship affects which call should be foreground, so do an update.
@@ -3423,6 +3432,7 @@ public class CallsManager extends Call.ListenerBase
                SystemClock.elapsedRealtime());

        updateCanAddCall();
        updateHasActiveRttCall();
        // onCallAdded for calls which immediately take the foreground (like the first call).
        for (CallsManagerListener listener : mListeners) {
            if (LogUtils.SYSTRACE_DEBUG) {
@@ -3456,6 +3466,7 @@ public class CallsManager extends Call.ListenerBase
        // Only broadcast changes for calls that are being tracked.
        if (shouldNotify) {
            updateCanAddCall();
            updateHasActiveRttCall();
            for (CallsManagerListener listener : mListeners) {
                if (LogUtils.SYSTRACE_DEBUG) {
                    Trace.beginSection(listener.getClass().toString() + " onCallRemoved");
@@ -3469,6 +3480,24 @@ public class CallsManager extends Call.ListenerBase
        Trace.endSection();
    }

    private void updateHasActiveRttCall() {
        boolean hasActiveRttCall = hasActiveRttCall();
        if (hasActiveRttCall != mHasActiveRttCall) {
            Log.i(this, "updateHasActiveRttCall %s -> %s", mHasActiveRttCall, hasActiveRttCall);
            AudioManager.setRttEnabled(hasActiveRttCall);
            mHasActiveRttCall = hasActiveRttCall;
        }
    }

    private boolean hasActiveRttCall() {
        for (Call call : mCalls) {
            if (call.isActive() && call.isRttCall()) {
                return true;
            }
        }
        return false;
    }

    /**
     * Sets the specified state on the specified call.
     *
@@ -3510,6 +3539,7 @@ public class CallsManager extends Call.ListenerBase
                // Only broadcast state change for calls that are being tracked.
                if (mCalls.contains(call)) {
                    updateCanAddCall();
                    updateHasActiveRttCall();
                    for (CallsManagerListener listener : mListeners) {
                        if (LogUtils.SYSTRACE_DEBUG) {
                            Trace.beginSection(listener.getClass().toString() +