migrated to media3, dependency update
This commit is contained in:
parent
ea8b0ca764
commit
9c02e04e9f
|
@ -42,9 +42,6 @@ android {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.google.android.material:material:1.9.0'
|
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.appcompat:appcompat:1.6.1'
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.3.0'
|
implementation 'androidx.recyclerview:recyclerview:1.3.0'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||||
|
@ -52,7 +49,7 @@ dependencies {
|
||||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||||
implementation 'org.jsoup:jsoup:1.15.4'
|
implementation 'org.jsoup:jsoup:1.15.4'
|
||||||
//noinspection GradleDependency
|
//noinspection GradleDependency
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
|
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
|
||||||
//noinspection GradleDependency
|
//noinspection GradleDependency
|
||||||
implementation 'com.squareup.picasso:picasso:2.8'
|
implementation 'com.squareup.picasso:picasso:2.8'
|
||||||
implementation 'jp.wasabeef:picasso-transformations:2.4.0'
|
implementation 'jp.wasabeef:picasso-transformations:2.4.0'
|
||||||
|
@ -62,4 +59,7 @@ dependencies {
|
||||||
implementation 'com.github.nuclearfog:LinkAndScrollMovement:1.4.1'
|
implementation 'com.github.nuclearfog:LinkAndScrollMovement:1.4.1'
|
||||||
implementation 'com.github.kyleduo:SwitchButton:2.0.3-SNAPSHOT'
|
implementation 'com.github.kyleduo:SwitchButton:2.0.3-SNAPSHOT'
|
||||||
implementation 'com.github.UnifiedPush:android-connector:2.1.1'
|
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'
|
||||||
}
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package org.nuclearfog.twidda.ui.activities;
|
package org.nuclearfog.twidda.ui.activities;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
|
@ -17,26 +18,25 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
import androidx.media3.common.MediaItem;
|
||||||
import com.google.android.exoplayer2.ExoPlayer;
|
import androidx.media3.common.PlaybackException;
|
||||||
import com.google.android.exoplayer2.MediaItem;
|
import androidx.media3.common.Player;
|
||||||
import com.google.android.exoplayer2.PlaybackException;
|
import androidx.media3.datasource.ContentDataSource;
|
||||||
import com.google.android.exoplayer2.Player;
|
import androidx.media3.ui.PlayerView;
|
||||||
import com.google.android.exoplayer2.Renderer;
|
import androidx.media3.datasource.DataSource;
|
||||||
import com.google.android.exoplayer2.RenderersFactory;
|
import androidx.media3.datasource.okhttp.OkHttpDataSource;
|
||||||
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
|
import androidx.media3.exoplayer.ExoPlayer;
|
||||||
import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer;
|
import androidx.media3.exoplayer.Renderer;
|
||||||
import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource;
|
import androidx.media3.exoplayer.RenderersFactory;
|
||||||
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
|
import androidx.media3.exoplayer.audio.AudioRendererEventListener;
|
||||||
import com.google.android.exoplayer2.mediacodec.MediaCodecSelector;
|
import androidx.media3.exoplayer.audio.MediaCodecAudioRenderer;
|
||||||
import com.google.android.exoplayer2.metadata.MetadataOutput;
|
import androidx.media3.exoplayer.mediacodec.MediaCodecSelector;
|
||||||
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
|
import androidx.media3.exoplayer.metadata.MetadataOutput;
|
||||||
import com.google.android.exoplayer2.text.TextOutput;
|
import androidx.media3.exoplayer.source.ProgressiveMediaSource;
|
||||||
import com.google.android.exoplayer2.ui.StyledPlayerView;
|
import androidx.media3.exoplayer.text.TextOutput;
|
||||||
import com.google.android.exoplayer2.upstream.ContentDataSource;
|
import androidx.media3.exoplayer.video.MediaCodecVideoRenderer;
|
||||||
import com.google.android.exoplayer2.upstream.DataSource;
|
import androidx.media3.exoplayer.video.VideoRendererEventListener;
|
||||||
import com.google.android.exoplayer2.video.MediaCodecVideoRenderer;
|
import androidx.media3.extractor.DefaultExtractorsFactory;
|
||||||
import com.google.android.exoplayer2.video.VideoRendererEventListener;
|
|
||||||
|
|
||||||
import org.nuclearfog.twidda.R;
|
import org.nuclearfog.twidda.R;
|
||||||
import org.nuclearfog.twidda.backend.helper.MediaStatus;
|
import org.nuclearfog.twidda.backend.helper.MediaStatus;
|
||||||
|
@ -52,11 +52,13 @@ import java.io.Serializable;
|
||||||
|
|
||||||
import okhttp3.Call;
|
import okhttp3.Call;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* video player activity to show local and online videos/animations
|
* video player activity to show local and online videos/animations
|
||||||
*
|
*
|
||||||
* @author nuclearfog
|
* @author nuclearfog
|
||||||
*/
|
*/
|
||||||
|
@SuppressLint("UnsafeOptInUsageError")
|
||||||
public class VideoViewer extends AppCompatActivity implements Player.Listener, DescriptionCallback, RenderersFactory {
|
public class VideoViewer extends AppCompatActivity implements Player.Listener, DescriptionCallback, RenderersFactory {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -78,7 +80,7 @@ public class VideoViewer extends AppCompatActivity implements Player.Listener, D
|
||||||
@Nullable
|
@Nullable
|
||||||
private DescriptionView descriptionView; // only used in portrait layout
|
private DescriptionView descriptionView; // only used in portrait layout
|
||||||
private Toolbar toolbar;
|
private Toolbar toolbar;
|
||||||
private StyledPlayerView playerView;
|
private PlayerView playerView;
|
||||||
|
|
||||||
private DescriptionDialog descriptionDialog;
|
private DescriptionDialog descriptionDialog;
|
||||||
|
|
||||||
|
@ -277,9 +279,11 @@ public class VideoViewer extends AppCompatActivity implements Player.Listener, D
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Renderer[] createRenderers(Handler eventHandler, VideoRendererEventListener videoRendererEventListener, AudioRendererEventListener audioRendererEventListener,
|
public Renderer[] createRenderers(@NonNull Handler eventHandler, @NonNull VideoRendererEventListener videoRendererEventListener,
|
||||||
TextOutput textRendererOutput, MetadataOutput metadataRendererOutput) {
|
@NonNull AudioRendererEventListener audioRendererEventListener, @NonNull TextOutput textRendererOutput,
|
||||||
|
@NonNull MetadataOutput metadataRendererOutput) {
|
||||||
return new Renderer[]{
|
return new Renderer[]{
|
||||||
new MediaCodecVideoRenderer(getApplicationContext(), MediaCodecSelector.DEFAULT, 0L, eventHandler, videoRendererEventListener, 4),
|
new MediaCodecVideoRenderer(getApplicationContext(), MediaCodecSelector.DEFAULT, 0L, eventHandler, videoRendererEventListener, 4),
|
||||||
new MediaCodecAudioRenderer(getApplicationContext(), MediaCodecSelector.DEFAULT, eventHandler, audioRendererEventListener)
|
new MediaCodecAudioRenderer(getApplicationContext(), MediaCodecSelector.DEFAULT, eventHandler, audioRendererEventListener)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package org.nuclearfog.twidda.ui.dialogs;
|
package org.nuclearfog.twidda.ui.dialogs;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.Context;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
@ -12,24 +12,23 @@ import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.media3.common.MediaItem;
|
||||||
import com.google.android.exoplayer2.ExoPlayer;
|
import androidx.media3.datasource.ContentDataSource;
|
||||||
import com.google.android.exoplayer2.MediaItem;
|
import androidx.media3.datasource.DataSource;
|
||||||
import com.google.android.exoplayer2.Renderer;
|
import androidx.media3.datasource.okhttp.OkHttpDataSource;
|
||||||
import com.google.android.exoplayer2.RenderersFactory;
|
import androidx.media3.exoplayer.ExoPlayer;
|
||||||
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
|
import androidx.media3.exoplayer.Renderer;
|
||||||
import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer;
|
import androidx.media3.exoplayer.RenderersFactory;
|
||||||
import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource;
|
import androidx.media3.exoplayer.audio.AudioRendererEventListener;
|
||||||
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
|
import androidx.media3.exoplayer.audio.MediaCodecAudioRenderer;
|
||||||
import com.google.android.exoplayer2.mediacodec.MediaCodecSelector;
|
import androidx.media3.exoplayer.mediacodec.MediaCodecSelector;
|
||||||
import com.google.android.exoplayer2.metadata.MetadataOutput;
|
import androidx.media3.exoplayer.metadata.MetadataOutput;
|
||||||
import com.google.android.exoplayer2.source.MediaSource;
|
import androidx.media3.exoplayer.source.MediaSource;
|
||||||
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
|
import androidx.media3.exoplayer.source.ProgressiveMediaSource;
|
||||||
import com.google.android.exoplayer2.text.TextOutput;
|
import androidx.media3.exoplayer.text.TextOutput;
|
||||||
import com.google.android.exoplayer2.ui.PlayerControlView;
|
import androidx.media3.exoplayer.video.VideoRendererEventListener;
|
||||||
import com.google.android.exoplayer2.upstream.ContentDataSource;
|
import androidx.media3.extractor.DefaultExtractorsFactory;
|
||||||
import com.google.android.exoplayer2.upstream.DataSource;
|
import androidx.media3.ui.PlayerControlView;
|
||||||
import com.google.android.exoplayer2.video.VideoRendererEventListener;
|
|
||||||
|
|
||||||
import org.nuclearfog.twidda.R;
|
import org.nuclearfog.twidda.R;
|
||||||
import org.nuclearfog.twidda.backend.utils.ConnectionBuilder;
|
import org.nuclearfog.twidda.backend.utils.ConnectionBuilder;
|
||||||
|
@ -44,7 +43,8 @@ import okhttp3.Call;
|
||||||
*
|
*
|
||||||
* @author nuclearfog
|
* @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 PlayerControlView controls;
|
||||||
private TextView mediaLink;
|
private TextView mediaLink;
|
||||||
|
@ -59,7 +59,7 @@ public class AudioPlayerDialog extends Dialog implements OnClickListener, Closea
|
||||||
*/
|
*/
|
||||||
public AudioPlayerDialog(Activity activity) {
|
public AudioPlayerDialog(Activity activity) {
|
||||||
super(activity, R.style.AudioDialog);
|
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);
|
mediaLink = findViewById(R.id.dialog_audio_player_share);
|
||||||
controls = findViewById(R.id.dialog_audio_player_controls);
|
controls = findViewById(R.id.dialog_audio_player_controls);
|
||||||
|
|
||||||
controls.setShowNextButton(false);
|
|
||||||
controls.setShowPreviousButton(false);
|
|
||||||
controls.setPlayer(player);
|
controls.setPlayer(player);
|
||||||
controls.setShowTimeoutMs(-1);
|
|
||||||
|
|
||||||
mediaLink.setOnClickListener(this);
|
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
|
* show dialog and play audio
|
||||||
*
|
*
|
||||||
|
@ -165,19 +172,4 @@ public class AudioPlayerDialog extends Dialog implements OnClickListener, Closea
|
||||||
super.show();
|
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)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -14,7 +14,7 @@
|
||||||
android:layout_height="@dimen/page_status_toolbar_height"
|
android:layout_height="@dimen/page_status_toolbar_height"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<com.google.android.exoplayer2.ui.StyledPlayerView
|
<androidx.media3.ui.PlayerView
|
||||||
android:id="@+id/page_video_player"
|
android:id="@+id/page_video_player"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
|
|
|
@ -6,11 +6,16 @@
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="@dimen/dialog_audio_player_layout_padding">
|
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:id="@+id/dialog_audio_player_controls"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
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
|
<TextView
|
||||||
android:id="@+id/dialog_audio_player_share"
|
android:id="@+id/dialog_audio_player_share"
|
||||||
|
@ -19,6 +24,7 @@
|
||||||
android:drawablePadding="@dimen/dialog_audio_player_drawable_padding"
|
android:drawablePadding="@dimen/dialog_audio_player_drawable_padding"
|
||||||
android:lines="1"
|
android:lines="1"
|
||||||
android:text="@string/button_share"
|
android:text="@string/button_share"
|
||||||
|
android:layout_margin="@dimen/dialog_audio_player_layout_margin"
|
||||||
app:drawableStartCompat="@drawable/share" />
|
app:drawableStartCompat="@drawable/share" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
|
@ -18,7 +18,7 @@
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent" />
|
app:layout_constraintEnd_toEndOf="parent" />
|
||||||
|
|
||||||
<com.google.android.exoplayer2.ui.StyledPlayerView
|
<androidx.media3.ui.PlayerView
|
||||||
android:id="@+id/page_video_player"
|
android:id="@+id/page_video_player"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
|
|
|
@ -305,6 +305,7 @@
|
||||||
<dimen name="dialog_status_dropdown_height">28sp</dimen>
|
<dimen name="dialog_status_dropdown_height">28sp</dimen>
|
||||||
|
|
||||||
<!--dimens of dialog_audio_player.xml-->
|
<!--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_drawable_padding">5dp</dimen>
|
||||||
<dimen name="dialog_audio_player_layout_padding">5dp</dimen>
|
<dimen name="dialog_audio_player_layout_padding">5dp</dimen>
|
||||||
<dimen name="dialog_audio_player_layout_margin">5dp</dimen>
|
<dimen name="dialog_audio_player_layout_margin">5dp</dimen>
|
||||||
|
|
Loading…
Reference in New Issue