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

Commit 6acdc094 authored by Eric Laurent's avatar Eric Laurent
Browse files

audioservice: add RTT mode observer

Add content observer for RTT mode: when RTT is ON during a call,
The assistant is allowed to capture audio similarly to when an
accessibility service is in the foreground.

Bug: 132976361
Test: use voice input during a call with RTT enabled.
Change-Id: Ief04d886370b50ae3dac0a72dbd1a4ea5f2c66a3
parent 335dfdec
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -2242,6 +2242,12 @@ android_media_AudioSystem_setAllowedCapturePolicy(JNIEnv *env, jobject thiz, jin
    return AudioSystem::setAllowedCapturePolicy(uid, flags);
}

static jint
android_media_AudioSystem_setRttEnabled(JNIEnv *env, jobject thiz, jboolean enabled)
{
    return (jint) check_AudioSystem_Command(AudioSystem::setRttEnabled(enabled));
}

// ----------------------------------------------------------------------------

static const JNINativeMethod gMethods[] = {
@@ -2319,6 +2325,7 @@ static const JNINativeMethod gMethods[] = {
    {"getHwOffloadEncodingFormatsSupportedForA2DP", "(Ljava/util/ArrayList;)I",
                    (void*)android_media_AudioSystem_getHwOffloadEncodingFormatsSupportedForA2DP},
    {"setAllowedCapturePolicy", "(II)I", (void *)android_media_AudioSystem_setAllowedCapturePolicy},
    {"setRttEnabled",       "(Z)I",     (void *)android_media_AudioSystem_setRttEnabled},
};

static const JNINativeMethod gEventHandlerMethods[] = {
+2 −1
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.media.audiofx.AudioEffect;
import android.media.audiopolicy.AudioMix;
import android.os.Build;
import android.util.Log;

import java.util.ArrayList;
@@ -981,6 +980,8 @@ public class AudioSystem
    public static native boolean getMasterMono();
    /** @hide enables or disables the master mono mode. */
    public static native int setMasterMono(boolean mono);
    /** @hide enables or disables the RTT mode. */
    public static native int setRttEnabled(boolean enabled);

    /** @hide returns master balance value in range -1.f -> 1.f, where 0.f is dead center. */
    @TestApi
+11 −0
Original line number Diff line number Diff line
@@ -1016,6 +1016,7 @@ public class AudioService extends IAudioService.Stub
            sendEncodedSurroundMode(mContentResolver, "onAudioServerDied");
            sendEnabledSurroundFormats(mContentResolver, true);
            updateAssistantUId(true);
            updateRttEanbled(mContentResolver);
        }
        synchronized (mAccessibilityServiceUidsLock) {
            AudioSystem.setA11yServicesUids(mAccessibilityServiceUids);
@@ -1480,6 +1481,12 @@ public class AudioService extends IAudioService.Stub
        }
    }

    private void updateRttEanbled(ContentResolver cr) {
        final boolean rttEnabled = Settings.Secure.getIntForUser(cr,
                    Settings.Secure.RTT_CALLING_MODE, 0, UserHandle.USER_CURRENT) != 0;
        AudioSystem.setRttEnabled(rttEnabled);
    }

    private void readPersistedSettings() {
        final ContentResolver cr = mContentResolver;

@@ -1524,6 +1531,7 @@ public class AudioService extends IAudioService.Stub
            sendEncodedSurroundMode(cr, "readPersistedSettings");
            sendEnabledSurroundFormats(cr, true);
            updateAssistantUId(true);
            updateRttEanbled(cr);
        }

        mMuteAffectedStreams = System.getIntForUser(cr,
@@ -5502,6 +5510,8 @@ public class AudioService extends IAudioService.Stub

            mContentResolver.registerContentObserver(Settings.Secure.getUriFor(
                    Settings.Secure.VOICE_INTERACTION_SERVICE), false, this);
            mContentResolver.registerContentObserver(Settings.Secure.getUriFor(
                    Settings.Secure.RTT_CALLING_MODE), false, this);
        }

        @Override
@@ -5525,6 +5535,7 @@ public class AudioService extends IAudioService.Stub
                updateEncodedSurroundOutput();
                sendEnabledSurroundFormats(mContentResolver, mSurroundModeChanged);
                updateAssistantUId(false);
                updateRttEanbled(mContentResolver);
            }
        }