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

Commit b4c63066 authored by Ján Sebechlebský's avatar Ján Sebechlebský Committed by Android (Google) Code Review
Browse files

Merge "Fix MediaPlayer construction with AUDIO_SESSION_ALLOCATE."

parents 6a8fb9fa 0bbdb71a
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -708,12 +708,10 @@ public class MediaPlayer extends PlayerBase
         * It's easier to create it here than in C++.
         */
        try (ScopedParcelState attributionSourceState = attributionSource.asScopedParcelState()) {
            native_setup(new WeakReference<MediaPlayer>(this), attributionSourceState.getParcel());
            native_setup(new WeakReference<>(this), attributionSourceState.getParcel(),
                    resolvePlaybackSessionId(context, sessionId));
        }

        int effectiveSessionId = resolvePlaybackSessionId(context, sessionId);
        baseRegisterPlayer(effectiveSessionId);
        native_setAudioSessionId(effectiveSessionId);
        baseRegisterPlayer(getAudioSessionId());
    }

    private Parcel createPlayerIIdParcel() {
@@ -1022,8 +1020,6 @@ public class MediaPlayer extends PlayerBase
            final AudioAttributes aa = audioAttributes != null ? audioAttributes :
                new AudioAttributes.Builder().build();
            mp.setAudioAttributes(aa);
            mp.native_setAudioSessionId(audioSessionId);

            mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
            afd.close();
            mp.prepare();
@@ -2521,7 +2517,7 @@ public class MediaPlayer extends PlayerBase

    private static native final void native_init();
    private native void native_setup(Object mediaplayerThis,
            @NonNull Parcel attributionSource);
            @NonNull Parcel attributionSource, int audioSessionId);
    private native final void native_finalize();

    /**
+7 −3
Original line number Diff line number Diff line
@@ -956,14 +956,16 @@ android_media_MediaPlayer_native_init(JNIEnv *env)

static void
android_media_MediaPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this,
                                       jobject jAttributionSource)
                                       jobject jAttributionSource,
                                       jint jAudioSessionId)
{
    ALOGV("native_setup");

    Parcel* parcel = parcelForJavaObject(env, jAttributionSource);
    android::content::AttributionSourceState attributionSource;
    attributionSource.readFromParcel(parcel);
    sp<MediaPlayer> mp = sp<MediaPlayer>::make(attributionSource);
    sp<MediaPlayer> mp = sp<MediaPlayer>::make(
        attributionSource, static_cast<audio_session_t>(jAudioSessionId));
    if (mp == NULL) {
        jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
        return;
@@ -1419,7 +1421,9 @@ static const JNINativeMethod gMethods[] = {
    {"native_setMetadataFilter", "(Landroid/os/Parcel;)I",      (void *)android_media_MediaPlayer_setMetadataFilter},
    {"native_getMetadata", "(ZZLandroid/os/Parcel;)Z",          (void *)android_media_MediaPlayer_getMetadata},
    {"native_init",         "()V",                              (void *)android_media_MediaPlayer_native_init},
    {"native_setup",        "(Ljava/lang/Object;Landroid/os/Parcel;)V",(void *)android_media_MediaPlayer_native_setup},
    {"native_setup",
        "(Ljava/lang/Object;Landroid/os/Parcel;I)V",
        (void *)android_media_MediaPlayer_native_setup},
    {"native_finalize",     "()V",                              (void *)android_media_MediaPlayer_native_finalize},
    {"getAudioSessionId",   "()I",                              (void *)android_media_MediaPlayer_get_audio_session_id},
    {"native_setAudioSessionId",   "(I)V",                      (void *)android_media_MediaPlayer_set_audio_session_id},
+2 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static android.media.AudioManager.AUDIO_SESSION_ID_GENERATE;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -56,6 +57,7 @@ public class MediaPlayerUnitTest {
        MediaPlayer mediaPlayer = new MediaPlayer(virtualDeviceContext);

        assertNotEquals(vdmPlaybackSessionId, mediaPlayer.getAudioSessionId());
        assertTrue(mediaPlayer.getAudioSessionId() > 0);
    }

    @Test