migrated to media3, dependency update

This commit is contained in:
nuclearfog 2023-07-14 22:28:21 +02:00
parent ea8b0ca764
commit 9c02e04e9f
No known key found for this signature in database
GPG Key ID: 03488A185C476379
7 changed files with 74 additions and 71 deletions

View File

@ -42,9 +42,6 @@ android {
dependencies {
implementation 'com.google.android.material:material:1.9.0'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.19.0'
implementation 'com.google.android.exoplayer:exoplayer-core:2.19.0'
implementation 'com.google.android.exoplayer:extension-okhttp:2.19.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.recyclerview:recyclerview:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
@ -52,7 +49,7 @@ dependencies {
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'org.jsoup:jsoup:1.15.4'
//noinspection GradleDependency
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
//noinspection GradleDependency
implementation 'com.squareup.picasso:picasso:2.8'
implementation 'jp.wasabeef:picasso-transformations:2.4.0'
@ -62,4 +59,7 @@ dependencies {
implementation 'com.github.nuclearfog:LinkAndScrollMovement:1.4.1'
implementation 'com.github.kyleduo:SwitchButton:2.0.3-SNAPSHOT'
implementation 'com.github.UnifiedPush:android-connector:2.1.1'
implementation 'androidx.media3:media3-exoplayer:1.1.0'
implementation 'androidx.media3:media3-ui:1.1.0'
implementation 'androidx.media3:media3-datasource-okhttp:1.1.0'
}

View File

@ -1,5 +1,6 @@
package org.nuclearfog.twidda.ui.activities;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
@ -17,26 +18,25 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.RenderersFactory;
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer;
import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.mediacodec.MediaCodecSelector;
import com.google.android.exoplayer2.metadata.MetadataOutput;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.text.TextOutput;
import com.google.android.exoplayer2.ui.StyledPlayerView;
import com.google.android.exoplayer2.upstream.ContentDataSource;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.video.MediaCodecVideoRenderer;
import com.google.android.exoplayer2.video.VideoRendererEventListener;
import androidx.media3.common.MediaItem;
import androidx.media3.common.PlaybackException;
import androidx.media3.common.Player;
import androidx.media3.datasource.ContentDataSource;
import androidx.media3.ui.PlayerView;
import androidx.media3.datasource.DataSource;
import androidx.media3.datasource.okhttp.OkHttpDataSource;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.Renderer;
import androidx.media3.exoplayer.RenderersFactory;
import androidx.media3.exoplayer.audio.AudioRendererEventListener;
import androidx.media3.exoplayer.audio.MediaCodecAudioRenderer;
import androidx.media3.exoplayer.mediacodec.MediaCodecSelector;
import androidx.media3.exoplayer.metadata.MetadataOutput;
import androidx.media3.exoplayer.source.ProgressiveMediaSource;
import androidx.media3.exoplayer.text.TextOutput;
import androidx.media3.exoplayer.video.MediaCodecVideoRenderer;
import androidx.media3.exoplayer.video.VideoRendererEventListener;
import androidx.media3.extractor.DefaultExtractorsFactory;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.helper.MediaStatus;
@ -52,11 +52,13 @@ import java.io.Serializable;
import okhttp3.Call;
/**
* video player activity to show local and online videos/animations
*
* @author nuclearfog
*/
@SuppressLint("UnsafeOptInUsageError")
public class VideoViewer extends AppCompatActivity implements Player.Listener, DescriptionCallback, RenderersFactory {
/**
@ -78,7 +80,7 @@ public class VideoViewer extends AppCompatActivity implements Player.Listener, D
@Nullable
private DescriptionView descriptionView; // only used in portrait layout
private Toolbar toolbar;
private StyledPlayerView playerView;
private PlayerView playerView;
private DescriptionDialog descriptionDialog;
@ -277,9 +279,11 @@ public class VideoViewer extends AppCompatActivity implements Player.Listener, D
}
@NonNull
@Override
public Renderer[] createRenderers(Handler eventHandler, VideoRendererEventListener videoRendererEventListener, AudioRendererEventListener audioRendererEventListener,
TextOutput textRendererOutput, MetadataOutput metadataRendererOutput) {
public Renderer[] createRenderers(@NonNull Handler eventHandler, @NonNull VideoRendererEventListener videoRendererEventListener,
@NonNull AudioRendererEventListener audioRendererEventListener, @NonNull TextOutput textRendererOutput,
@NonNull MetadataOutput metadataRendererOutput) {
return new Renderer[]{
new MediaCodecVideoRenderer(getApplicationContext(), MediaCodecSelector.DEFAULT, 0L, eventHandler, videoRendererEventListener, 4),
new MediaCodecAudioRenderer(getApplicationContext(), MediaCodecSelector.DEFAULT, eventHandler, audioRendererEventListener)

View File

@ -1,8 +1,8 @@
package org.nuclearfog.twidda.ui.dialogs;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@ -12,24 +12,23 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.RenderersFactory;
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer;
import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.mediacodec.MediaCodecSelector;
import com.google.android.exoplayer2.metadata.MetadataOutput;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.text.TextOutput;
import com.google.android.exoplayer2.ui.PlayerControlView;
import com.google.android.exoplayer2.upstream.ContentDataSource;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.video.VideoRendererEventListener;
import androidx.media3.common.MediaItem;
import androidx.media3.datasource.ContentDataSource;
import androidx.media3.datasource.DataSource;
import androidx.media3.datasource.okhttp.OkHttpDataSource;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.Renderer;
import androidx.media3.exoplayer.RenderersFactory;
import androidx.media3.exoplayer.audio.AudioRendererEventListener;
import androidx.media3.exoplayer.audio.MediaCodecAudioRenderer;
import androidx.media3.exoplayer.mediacodec.MediaCodecSelector;
import androidx.media3.exoplayer.metadata.MetadataOutput;
import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.source.ProgressiveMediaSource;
import androidx.media3.exoplayer.text.TextOutput;
import androidx.media3.exoplayer.video.VideoRendererEventListener;
import androidx.media3.extractor.DefaultExtractorsFactory;
import androidx.media3.ui.PlayerControlView;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.utils.ConnectionBuilder;
@ -44,7 +43,8 @@ import okhttp3.Call;
*
* @author nuclearfog
*/
public class AudioPlayerDialog extends Dialog implements OnClickListener, Closeable {
@SuppressLint("UnsafeOptInUsageError")
public class AudioPlayerDialog extends Dialog implements OnClickListener, RenderersFactory, Closeable {
private PlayerControlView controls;
private TextView mediaLink;
@ -59,7 +59,7 @@ public class AudioPlayerDialog extends Dialog implements OnClickListener, Closea
*/
public AudioPlayerDialog(Activity activity) {
super(activity, R.style.AudioDialog);
player = new ExoPlayer.Builder(activity.getApplicationContext(), createRenderer(activity.getApplicationContext())).build();
player = new ExoPlayer.Builder(activity.getApplicationContext(), this).build();
}
@ -70,11 +70,7 @@ public class AudioPlayerDialog extends Dialog implements OnClickListener, Closea
mediaLink = findViewById(R.id.dialog_audio_player_share);
controls = findViewById(R.id.dialog_audio_player_controls);
controls.setShowNextButton(false);
controls.setShowPreviousButton(false);
controls.setPlayer(player);
controls.setShowTimeoutMs(-1);
mediaLink.setOnClickListener(this);
}
@ -154,6 +150,17 @@ public class AudioPlayerDialog extends Dialog implements OnClickListener, Closea
}
}
@NonNull
@Override
public Renderer[] createRenderers(@NonNull Handler eventHandler, @NonNull VideoRendererEventListener videoRendererEventListener,
@NonNull AudioRendererEventListener audioRendererEventListener, @NonNull TextOutput textRendererOutput,
@NonNull MetadataOutput metadataRendererOutput) {
return new Renderer[]{
new MediaCodecAudioRenderer(getContext(), MediaCodecSelector.DEFAULT, eventHandler, audioRendererEventListener)
};
}
/**
* show dialog and play audio
*
@ -165,19 +172,4 @@ public class AudioPlayerDialog extends Dialog implements OnClickListener, Closea
super.show();
}
}
/**
*
*/
private RenderersFactory createRenderer(Context context) {
return new RenderersFactory() {
@Override
public Renderer[] createRenderers(Handler eventHandler, VideoRendererEventListener videoRendererEventListener, AudioRendererEventListener audioRendererEventListener,
TextOutput textRendererOutput, MetadataOutput metadataRendererOutput) {
return new Renderer[]{
new MediaCodecAudioRenderer(context, MediaCodecSelector.DEFAULT, eventHandler, audioRendererEventListener)
};
}
};
}
}

View File

@ -14,7 +14,7 @@
android:layout_height="@dimen/page_status_toolbar_height"
android:visibility="gone" />
<com.google.android.exoplayer2.ui.StyledPlayerView
<androidx.media3.ui.PlayerView
android:id="@+id/page_video_player"
android:layout_width="match_parent"
android:layout_height="0dp"

View File

@ -6,11 +6,16 @@
android:orientation="vertical"
android:padding="@dimen/dialog_audio_player_layout_padding">
<com.google.android.exoplayer2.ui.PlayerControlView
<androidx.media3.ui.PlayerControlView
android:id="@+id/dialog_audio_player_controls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/dialog_audio_player_layout_margin" />
android:minHeight="@dimen/dialog_audio_player_height"
android:layout_margin="@dimen/dialog_audio_player_layout_margin"
app:show_shuffle_button="false"
app:show_previous_button="false"
app:show_next_button="false"
app:show_timeout="-1"/>
<TextView
android:id="@+id/dialog_audio_player_share"
@ -19,6 +24,7 @@
android:drawablePadding="@dimen/dialog_audio_player_drawable_padding"
android:lines="1"
android:text="@string/button_share"
android:layout_margin="@dimen/dialog_audio_player_layout_margin"
app:drawableStartCompat="@drawable/share" />
</LinearLayout>

View File

@ -18,7 +18,7 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<com.google.android.exoplayer2.ui.StyledPlayerView
<androidx.media3.ui.PlayerView
android:id="@+id/page_video_player"
android:layout_width="match_parent"
android:layout_height="0dp"

View File

@ -305,6 +305,7 @@
<dimen name="dialog_status_dropdown_height">28sp</dimen>
<!--dimens of dialog_audio_player.xml-->
<dimen name="dialog_audio_player_height">200sp</dimen>
<dimen name="dialog_audio_player_drawable_padding">5dp</dimen>
<dimen name="dialog_audio_player_layout_padding">5dp</dimen>
<dimen name="dialog_audio_player_layout_margin">5dp</dimen>