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

Commit 51cc4dbc authored by Eric Laurent's avatar Eric Laurent
Browse files

Audio: add system API AudioManager.isScoManagedByAudio()

The API indicates if both the feature flag and the system property
controlling the new SCO audio activation mode controlled by the audio
framework are enabled.

Bug: 265057196
Test: atest AudioManagerTest#testIsScoManagedByAudio
Flag: android.media.audio.sco_managed_by_audio
Change-Id: If823ae7b9cbf81cdf8429d046839f7c5f7ec84e2
parent 26bd6785
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -7736,6 +7736,7 @@ package android.media {
    method public boolean isHdmiSystemAudioSupported();
    method @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public boolean isHotwordStreamSupported(boolean);
    method @RequiresPermission(android.Manifest.permission.CALL_AUDIO_INTERCEPTION) public boolean isPstnCallAudioInterceptable();
    method @FlaggedApi("android.media.audio.sco_managed_by_audio") public boolean isScoManagedByAudio();
    method @RequiresPermission(android.Manifest.permission.ACCESS_ULTRASOUND) public boolean isUltrasoundSupported();
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void muteAwaitConnection(@NonNull int[], @NonNull android.media.AudioDeviceAttributes, long, @NonNull java.util.concurrent.TimeUnit) throws java.lang.IllegalStateException;
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int registerAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
+19 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static android.media.audio.Flags.FLAG_DEPRECATE_STREAM_BT_SCO;
import static android.media.audio.Flags.FLAG_FOCUS_EXCLUSIVE_WITH_RECORDING;
import static android.media.audio.Flags.FLAG_FOCUS_FREEZE_TEST_API;
import static android.media.audio.Flags.FLAG_REGISTER_VOLUME_CALLBACK_API_HARDENING;
import static android.media.audio.Flags.FLAG_SCO_MANAGED_BY_AUDIO;
import static android.media.audio.Flags.FLAG_SUPPORTED_DEVICE_TYPES_API;
import static android.media.audio.Flags.FLAG_UNIFY_ABSOLUTE_VOLUME_MANAGEMENT;
import static android.media.audio.Flags.autoPublicVolumeApiHardening;
@@ -9704,6 +9705,24 @@ public class AudioManager {
        }
    }


    /**
     * @hide
     * Queries if Bluetooth SCO audio connection is controlled by the audio framework based on the
     * feature flag (until removed) and system property states.
     * @return true if SCO audio is managed by the audio framework, false otherwise.
     */
    @SystemApi
    @FlaggedApi(FLAG_SCO_MANAGED_BY_AUDIO)
    public boolean isScoManagedByAudio() {
        try {
            return getService().isScoManagedByAudio();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }


    //---------------------------------------------------------
    // audio device connection-dependent muting
    /**
+4 −0
Original line number Diff line number Diff line
@@ -838,4 +838,8 @@ interface IAudioService {
    @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED)")
    void setEnableHardening(in boolean shouldEnable);

    @EnforcePermission("BLUETOOTH_PRIVILEGED")
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED)")
    boolean isScoManagedByAudio();
}
+9 −0
Original line number Diff line number Diff line
@@ -7915,6 +7915,15 @@ public class AudioService extends IAudioService.Stub
                .record();
    }
    /**
     * @see AudioManager#isScoManagedByAudio()
     * @return true if SCO is managed by audio, false otherwise
     */
    @android.annotation.EnforcePermission(BLUETOOTH_PRIVILEGED)
    public boolean isScoManagedByAudio() {
        super.isScoManagedByAudio_enforcePermission();
        return mDeviceBroker.isScoManagedByAudio();
    }
    /*package*/ ContentResolver getContentResolver() {
        return mContentResolver;