summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2024-01-22 17:16:09 +0100
committerThomas <tschneider.ac@gmail.com>2024-01-22 17:16:09 +0100
commite18db746a0ed0fdaa4b051d0960a11c1f6c88974 (patch)
tree30fd90bd4f2dd8f38bb803c4a03aa68a884c05e1
parentc778c71306a474a340d56c29de0296e3e2e20d76 (diff)
Some changes
-rw-r--r--app/build.gradle2
-rw-r--r--app/src/fdroid/java/app/fedilab/android/activities/BasePeertubeActivity.java3
-rw-r--r--app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java36
-rw-r--r--app/src/main/res/layouts/peertube/layout/peertube_exo_player_control_view.xml2
-rw-r--r--doubletapplayerview/build.gradle9
-rw-r--r--doubletapplayerview/src/main/java/com/github/vkay94/dtpv/DoubleTapPlayerView.kt2
-rw-r--r--doubletapplayerview/src/main/java/com/github/vkay94/dtpv/youtube/views/CircleClipTapView.kt16
7 files changed, 53 insertions, 17 deletions
diff --git a/app/build.gradle b/app/build.gradle
index 4917a13eb..0f377b08c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -139,9 +139,11 @@ dependencies {
annotationProcessor "com.github.bumptech.glide:compiler:4.12.0"
implementation 'jp.wasabeef:glide-transformations:4.3.0'
implementation 'com.github.penfeizhou.android.animation:glide-plugin:2.23.0'
+ implementation 'androidx.media3:media3-exoplayer-hls:1.2.1'
implementation "androidx.media3:media3-exoplayer:1.2.1"
implementation "androidx.media3:media3-exoplayer-dash:1.2.1"
implementation "androidx.media3:media3-ui:1.2.1"
+ implementation "androidx.media3:media3-session:1.2.1"
implementation "androidx.viewpager2:viewpager2:1.0.0"
diff --git a/app/src/fdroid/java/app/fedilab/android/activities/BasePeertubeActivity.java b/app/src/fdroid/java/app/fedilab/android/activities/BasePeertubeActivity.java
index d190f88fa..16fec0c3c 100644
--- a/app/src/fdroid/java/app/fedilab/android/activities/BasePeertubeActivity.java
+++ b/app/src/fdroid/java/app/fedilab/android/activities/BasePeertubeActivity.java
@@ -29,6 +29,7 @@ import android.webkit.MimeTypeMap;
import androidx.appcompat.app.AlertDialog;
import androidx.media3.common.Player;
+import androidx.media3.exoplayer.ExoPlayer;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@@ -53,7 +54,7 @@ public class BasePeertubeActivity extends BaseBarActivity {
protected ActivityPeertubeBinding binding;
protected VideoData.Video peertube;
- protected Player player;
+ protected ExoPlayer player;
protected String videoURL;
protected String subtitlesStr;
diff --git a/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java b/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java
index 66034c619..a98981371 100644
--- a/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java
+++ b/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java
@@ -47,12 +47,12 @@ import android.content.res.Configuration;
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
+import android.media.session.PlaybackState;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
-import android.support.v4.media.session.MediaSessionCompat;
import android.text.Html;
import android.text.SpannableString;
import android.text.Spanned;
@@ -77,6 +77,7 @@ import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.LinearLayoutCompat;
@@ -86,6 +87,7 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.lifecycle.ViewModelProvider;
+import androidx.media3.common.C;
import androidx.media3.common.Format;
import androidx.media3.common.MediaItem;
import androidx.media3.common.MimeTypes;
@@ -96,19 +98,23 @@ import androidx.media3.common.VideoSize;
import androidx.media3.datasource.DataSource;
import androidx.media3.datasource.DefaultDataSource;
import androidx.media3.exoplayer.ExoPlayer;
+import androidx.media3.exoplayer.hls.HlsMediaSource;
import androidx.media3.exoplayer.source.MergingMediaSource;
import androidx.media3.exoplayer.source.ProgressiveMediaSource;
import androidx.media3.exoplayer.source.SingleSampleMediaSource;
import androidx.media3.exoplayer.trackselection.AdaptiveTrackSelection;
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector;
import androidx.media3.exoplayer.trackselection.TrackSelector;
+import androidx.media3.session.MediaSession;
import androidx.media3.ui.AspectRatioFrameLayout;
import androidx.media3.ui.PlayerControlView;
+import androidx.media3.ui.DefaultTimeBar;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
+import com.github.vkay94.dtpv.DoubleTapPlayerView;
import com.github.vkay94.dtpv.youtube.YouTubeOverlay;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.snackbar.Snackbar;
@@ -203,7 +209,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
private Status status;
private int flags;
private boolean humanInteraction;
-
+ private MediaSession mediaSession;
public static void hideKeyboard(Activity activity) {
if (activity != null && activity.getWindow() != null) {
activity.getWindow().getDecorView();
@@ -368,6 +374,26 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
binding.doubleTapPlayerView.setDoubleTapEnabled(true);
binding.doubleTapPlayerView.setControllerShowTimeoutMs(0);
binding.mediaVideo.performListener(new YouTubeOverlay.PerformListener() {
+ @Nullable
+ @Override
+ public Boolean shouldForward(@NonNull Player player, @NonNull DoubleTapPlayerView playerView, float posX) {
+ if (player.getPlaybackState() == PlaybackState.STATE_ERROR ||
+ player.getPlaybackState() == PlaybackState.STATE_NONE ||
+ player.getPlaybackState() == Player.STATE_ENDED) {
+
+ playerView.cancelInDoubleTapMode();
+ return null;
+ }
+
+ if (player.getCurrentPosition() > 500 && posX < playerView.getWidth() * 0.35)
+ return false;
+
+ if (player.getCurrentPosition() < player.getDuration() && posX > playerView.getWidth() * 0.65)
+ return true;
+
+ return null;
+ }
+
@Override
public void onAnimationStart() {
binding.mediaVideo.setVisibility(View.VISIBLE);
@@ -1533,6 +1559,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
binding = null;
if (player != null) {
player.release();
+ mediaSession = null;
}
unregisterReceiver();
}
@@ -1612,13 +1639,10 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
if (playInMinimized && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && player != null) {
isPlayInMinimized = true;
setRequestedOrientationCustom(initialOrientation);
- MediaSessionCompat mediaSession = new MediaSessionCompat(this, getPackageName());
- MediaSessionConnector mediaSessionConnector = new MediaSessionConnector(mediaSession);
- mediaSessionConnector.setPlayer(player);
+ mediaSession = new MediaSession.Builder(this, player).build();
PlayerControlView controlView = binding.doubleTapPlayerView.findViewById(R.id.exo_controller);
controlView.hide();
binding.doubleTapPlayerView.setControllerAutoShow(false);
- mediaSession.setActive(true);
PictureInPictureParams params = new PictureInPictureParams.Builder().build();
enterPictureInPictureMode(params);
}
diff --git a/app/src/main/res/layouts/peertube/layout/peertube_exo_player_control_view.xml b/app/src/main/res/layouts/peertube/layout/peertube_exo_player_control_view.xml
index 0301ca16a..fc4860513 100644
--- a/app/src/main/res/layouts/peertube/layout/peertube_exo_player_control_view.xml
+++ b/app/src/main/res/layouts/peertube/layout/peertube_exo_player_control_view.xml
@@ -125,7 +125,7 @@
android:textColor="#FFBEBEBE"
android:textSize="12sp" />
- <com.google.android.exoplayer2.ui.DefaultTimeBar
+ <androidx.media3.ui.DefaultTimeBar
android:id="@id/exo_progress"
android:layout_width="0dp"
android:layout_height="26dp"
diff --git a/doubletapplayerview/build.gradle b/doubletapplayerview/build.gradle
index 4abcd4afb..4437753f1 100644
--- a/doubletapplayerview/build.gradle
+++ b/doubletapplayerview/build.gradle
@@ -1,4 +1,5 @@
apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
android {
compileSdk 34
@@ -22,10 +23,18 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_1_8
+ }
namespace 'com.github.vkay94.dtpv'
}
+// Add a new configuration to hold your dependencies
+configurations {
+ libConfig
+}
+
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "androidx.appcompat:appcompat:1.6.1"
diff --git a/doubletapplayerview/src/main/java/com/github/vkay94/dtpv/DoubleTapPlayerView.kt b/doubletapplayerview/src/main/java/com/github/vkay94/dtpv/DoubleTapPlayerView.kt
index a3374d90c..f4bbf9b73 100644
--- a/doubletapplayerview/src/main/java/com/github/vkay94/dtpv/DoubleTapPlayerView.kt
+++ b/doubletapplayerview/src/main/java/com/github/vkay94/dtpv/DoubleTapPlayerView.kt
@@ -33,7 +33,7 @@ open class DoubleTapPlayerView @JvmOverloads constructor(
private var controllerRef: Int = -1
init {
- gestureDetector = GestureDetectorCompat(context, gestureListener)
+ gestureDetector = GestureDetectorCompat(context!!, gestureListener)
// Check whether controller is set through XML
attrs?.let {
diff --git a/doubletapplayerview/src/main/java/com/github/vkay94/dtpv/youtube/views/CircleClipTapView.kt b/doubletapplayerview/src/main/java/com/github/vkay94/dtpv/youtube/views/CircleClipTapView.kt
index 53d84e4ff..52d21b0f2 100644
--- a/doubletapplayerview/src/main/java/com/github/vkay94/dtpv/youtube/views/CircleClipTapView.kt
+++ b/doubletapplayerview/src/main/java/com/github/vkay94/dtpv/youtube/views/CircleClipTapView.kt
@@ -169,16 +169,16 @@ internal class CircleClipTapView(context: Context?, attrs: AttributeSet) :
}
addListener(object : Animator.AnimatorListener {
- override fun onAnimationStart(animation: Animator?) {
+ override fun onAnimationStart(animation: Animator) {
visibility = VISIBLE
}
- override fun onAnimationEnd(animation: Animator?) {
+ override fun onAnimationEnd(animation: Animator) {
if (!forceReset) performAtEnd()
}
- override fun onAnimationRepeat(animation: Animator?) {}
- override fun onAnimationCancel(animation: Animator?) {}
+ override fun onAnimationRepeat(animation: Animator) {}
+ override fun onAnimationCancel(animation: Animator) {}
})
}
}
@@ -208,14 +208,14 @@ internal class CircleClipTapView(context: Context?, attrs: AttributeSet) :
updatePathShape()
}
- override fun onDraw(canvas: Canvas?) {
+ override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
// Background
- canvas?.clipPath(shapePath)
- canvas?.drawPath(shapePath, backgroundPaint)
+ canvas.clipPath(shapePath)
+ canvas.drawPath(shapePath, backgroundPaint)
// Circle
- canvas?.drawCircle(cX, cY, currentRadius, circlePaint)
+ canvas.drawCircle(cX, cY, currentRadius, circlePaint)
}
} \ No newline at end of file