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

Commit ee42cb2f authored by Dongwon Kang's avatar Dongwon Kang
Browse files

MediaPlayer2: remove AudioManager private API usage

Private API AudioManager.getDevicesStatic() is being used in
MediaPlayer2 for conversion between id <=> AudioDeviceInfo.
This conversion was added to talk with internal native AudioTrack API,
but in MediaPlayer2 since we will use public java AudioTrack API,
the given AudioDeviceInfo can be directly passed to java AudioTrack
instance.

Test: CtsMediaTestCases:android.media.cts.RoutingTest
Bug: 112767549
Change-Id: I03f01d17ef10e4edb074a160c877ca3aa711cbe1
parent 9403a362
Loading
Loading
Loading
Loading
+3 −49
Original line number Diff line number Diff line
@@ -798,11 +798,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {

    @Override
    public boolean setPreferredDevice(AudioDeviceInfo deviceInfo) {
        if (deviceInfo != null && !deviceInfo.isSink()) {
            return false;
        }
        int preferredDeviceId = deviceInfo != null ? deviceInfo.getId() : 0;
        boolean status = native_setOutputDevice(preferredDeviceId);
        boolean status = native_setPreferredDevice(deviceInfo);
        if (status == true) {
            synchronized (this) {
                mPreferredDevice = deviceInfo;
@@ -819,20 +815,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
    }

    @Override
    public AudioDeviceInfo getRoutedDevice() {
        int deviceId = native_getRoutedDeviceId();
        if (deviceId == 0) {
            return null;
        }
        AudioDeviceInfo[] devices =
                AudioManager.getDevicesStatic(AudioManager.GET_DEVICES_OUTPUTS);
        for (int i = 0; i < devices.length; i++) {
            if (devices[i].getId() == deviceId) {
                return devices[i];
            }
        }
        return null;
    }
    public native AudioDeviceInfo getRoutedDevice();

    @Override
    public void addOnRoutingChangedListener(AudioRouting.OnRoutingChangedListener listener,
@@ -852,8 +835,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
        native_removeDeviceCallback(listener);
    }

    private native final boolean native_setOutputDevice(int deviceId);
    private native final int native_getRoutedDeviceId();
    private native boolean native_setPreferredDevice(AudioDeviceInfo device);
    private native void native_addDeviceCallback(RoutingDelegate rd);
    private native void native_removeDeviceCallback(
            AudioRouting.OnRoutingChangedListener listener);
@@ -2773,34 +2755,6 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {

    }

    // Called from the native side
    @SuppressWarnings("unused")
    private static boolean setAudioOutputDeviceById(AudioTrack track, int deviceId) {
        if (track == null) {
            return false;
        }

        if (deviceId == 0) {
            // Use default routing.
            track.setPreferredDevice(null);
            return true;
        }

        // TODO: Unhide AudioManager.getDevicesStatic.
        AudioDeviceInfo[] outputDevices =
                AudioManager.getDevicesStatic(AudioManager.GET_DEVICES_OUTPUTS);

        boolean success = false;
        for (AudioDeviceInfo device : outputDevices) {
            if (device.getId() == deviceId) {
                track.setPreferredDevice(device);
                success = true;
                break;
            }
        }
        return success;
    }

    // Instantiated from the native side
    @SuppressWarnings("unused")
    private static class StreamEventCallback extends AudioTrack.StreamEventCallback {
+7 −7
Original line number Diff line number Diff line
@@ -1306,22 +1306,22 @@ static void android_media_MediaPlayer2_releaseDrm(JNIEnv *env, jobject thiz)

/////////////////////////////////////////////////////////////////////////////////////
// AudioRouting begin
static jboolean android_media_MediaPlayer2_setOutputDevice(JNIEnv *env, jobject thiz, jint device_id)
static jboolean android_media_MediaPlayer2_setPreferredDevice(JNIEnv *env, jobject thiz, jobject device)
{
    sp<MediaPlayer2> mp = getMediaPlayer(env, thiz);
    if (mp == NULL) {
        return false;
    }
    return mp->setOutputDevice(device_id) == NO_ERROR;
    return mp->setPreferredDevice(device) == NO_ERROR;
}

static jint android_media_MediaPlayer2_getRoutedDeviceId(JNIEnv *env, jobject thiz)
static jobject android_media_MediaPlayer2_getRoutedDevice(JNIEnv *env, jobject thiz)
{
    sp<MediaPlayer2> mp = getMediaPlayer(env, thiz);
    if (mp == NULL) {
        return AUDIO_PORT_HANDLE_NONE;
        return nullptr;
    }
    return mp->getRoutedDeviceId();
    return mp->getRoutedDevice();
}

static void android_media_MediaPlayer2_addDeviceCallback(
@@ -1470,8 +1470,8 @@ static const JNINativeMethod gMethods[] = {
    { "_releaseDrm", "()V",                                     (void *)android_media_MediaPlayer2_releaseDrm },

    // AudioRouting
    {"native_setOutputDevice", "(I)Z",                          (void *)android_media_MediaPlayer2_setOutputDevice},
    {"native_getRoutedDeviceId", "()I",                         (void *)android_media_MediaPlayer2_getRoutedDeviceId},
    {"native_setPreferredDevice", "(Landroid/media/AudioDeviceInfo;)Z", (void *)android_media_MediaPlayer2_setPreferredDevice},
    {"getRoutedDevice", "()Landroid/media/AudioDeviceInfo;", (void *)android_media_MediaPlayer2_getRoutedDevice},
    {"native_addDeviceCallback", "(Landroid/media/RoutingDelegate;)V", (void *)android_media_MediaPlayer2_addDeviceCallback},
    {"native_removeDeviceCallback", "(Landroid/media/AudioRouting$OnRoutingChangedListener;)V",
            (void *)android_media_MediaPlayer2_removeDeviceCallback},