1
0
mirror of https://github.com/TeamNewPipe/NewPipe synced 2024-10-01 08:20:50 +00:00

PopUpPlayer now has a play and pause button. Tapping now doesnt pause or unpause the video and instead shows this button.

This commit is contained in:
Somethingweirdhere 2018-04-22 00:16:07 +02:00
parent f94f14ab65
commit 06292bceb2
3 changed files with 61 additions and 96 deletions

View File

@ -175,12 +175,10 @@ public final class PopupVideoPlayer extends Service {
// Init // Init
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/
View rootView;
@SuppressLint("RtlHardcoded") @SuppressLint("RtlHardcoded")
private void initPopup() { private void initPopup() {
if (DEBUG) Log.d(TAG, "initPopup() called"); if (DEBUG) Log.d(TAG, "initPopup() called");
rootView = View.inflate(this, R.layout.player_popup, null); View rootView = View.inflate(this, R.layout.player_popup, null);
playerImpl.setup(rootView); playerImpl.setup(rootView);
shutdownFlingVelocity = PlayerHelper.getShutdownFlingVelocity(this); shutdownFlingVelocity = PlayerHelper.getShutdownFlingVelocity(this);
@ -373,6 +371,7 @@ public final class PopupVideoPlayer extends Service {
protected class VideoPlayerImpl extends VideoPlayer implements View.OnLayoutChangeListener { protected class VideoPlayerImpl extends VideoPlayer implements View.OnLayoutChangeListener {
private TextView resizingIndicator; private TextView resizingIndicator;
private ImageButton fullScreenButton; private ImageButton fullScreenButton;
private ImageView videoPlayPause;
private View extraOptionsView; private View extraOptionsView;
@ -394,6 +393,8 @@ public final class PopupVideoPlayer extends Service {
resizingIndicator = rootView.findViewById(R.id.resizing_indicator); resizingIndicator = rootView.findViewById(R.id.resizing_indicator);
fullScreenButton = rootView.findViewById(R.id.fullScreenButton); fullScreenButton = rootView.findViewById(R.id.fullScreenButton);
fullScreenButton.setOnClickListener(v -> onFullScreenButtonClicked()); fullScreenButton.setOnClickListener(v -> onFullScreenButtonClicked());
videoPlayPause = rootView.findViewById(R.id.videoPlayPause);
videoPlayPause.setOnClickListener(this::onPlayPauseButtonPressed);
extraOptionsView = rootView.findViewById(R.id.extraOptionsView); extraOptionsView = rootView.findViewById(R.id.extraOptionsView);
rootView.addOnLayoutChangeListener(this); rootView.addOnLayoutChangeListener(this);
@ -409,6 +410,10 @@ public final class PopupVideoPlayer extends Service {
view.setStyle(captionStyle); view.setStyle(captionStyle);
} }
private void onPlayPauseButtonPressed(View ib) {
onPlayPause();
}
@Override @Override
public void onLayoutChange(final View view, int left, int top, int right, int bottom, public void onLayoutChange(final View view, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) { int oldLeft, int oldTop, int oldRight, int oldBottom) {
@ -654,6 +659,7 @@ public final class PopupVideoPlayer extends Service {
public void onPlaying() { public void onPlaying() {
super.onPlaying(); super.onPlaying();
updateNotification(R.drawable.ic_pause_white); updateNotification(R.drawable.ic_pause_white);
videoPlayPause.setBackgroundResource(R.drawable.ic_pause_white);
lockManager.acquireWifiAndCpu(); lockManager.acquireWifiAndCpu();
hideControls(DEFAULT_CONTROLS_DURATION, DEFAULT_CONTROLS_HIDE_TIME); hideControls(DEFAULT_CONTROLS_DURATION, DEFAULT_CONTROLS_HIDE_TIME);
@ -669,12 +675,14 @@ public final class PopupVideoPlayer extends Service {
public void onPaused() { public void onPaused() {
super.onPaused(); super.onPaused();
updateNotification(R.drawable.ic_play_arrow_white); updateNotification(R.drawable.ic_play_arrow_white);
videoPlayPause.setBackgroundResource(R.drawable.ic_play_arrow_white);
lockManager.releaseWifiAndCpu(); lockManager.releaseWifiAndCpu();
} }
@Override @Override
public void onPausedSeek() { public void onPausedSeek() {
super.onPausedSeek(); super.onPausedSeek();
videoPlayPause.setBackgroundResource(R.drawable.ic_pause_white);
updateNotification(R.drawable.ic_play_arrow_white); updateNotification(R.drawable.ic_play_arrow_white);
} }
@ -682,10 +690,27 @@ public final class PopupVideoPlayer extends Service {
public void onCompleted() { public void onCompleted() {
super.onCompleted(); super.onCompleted();
updateNotification(R.drawable.ic_replay_white); updateNotification(R.drawable.ic_replay_white);
showAndAnimateControl(R.drawable.ic_replay_white, false); videoPlayPause.setBackgroundResource(R.drawable.ic_replay_white);
lockManager.releaseWifiAndCpu(); lockManager.releaseWifiAndCpu();
} }
@Override
public void showControlsThenHide() {
videoPlayPause.setVisibility(View.VISIBLE);
super.showControlsThenHide();
}
public void showControls(long duration) {
videoPlayPause.setVisibility(View.VISIBLE);
super.showControls(duration);
}
public void hideControls(final long duration, long delay) {
super.hideControlsAndButton(duration, delay, videoPlayPause);
}
/*////////////////////////////////////////////////////////////////////////// /*//////////////////////////////////////////////////////////////////////////
// Utils // Utils
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/
@ -719,6 +744,8 @@ public final class PopupVideoPlayer extends Service {
Log.d(TAG, "onDoubleTap() called with: e = [" + e + "]" + "rawXy = " + e.getRawX() + ", " + e.getRawY() + ", xy = " + e.getX() + ", " + e.getY()); Log.d(TAG, "onDoubleTap() called with: e = [" + e + "]" + "rawXy = " + e.getRawX() + ", " + e.getRawY() + ", xy = " + e.getX() + ", " + e.getY());
if (playerImpl == null || !playerImpl.isPlaying()) return false; if (playerImpl == null || !playerImpl.isPlaying()) return false;
playerImpl.hideControls(0, 0);
if (e.getX() > popupWidth / 2) { if (e.getX() > popupWidth / 2) {
playerImpl.onFastForward(); playerImpl.onFastForward();
} else { } else {

View File

@ -40,7 +40,6 @@ import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.SurfaceView; import android.view.SurfaceView;
import android.view.View; import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.PopupMenu; import android.widget.PopupMenu;
import android.widget.ProgressBar; import android.widget.ProgressBar;
@ -158,8 +157,6 @@ public abstract class VideoPlayer extends BasePlayer
private int captionPopupMenuGroupId = 89; private int captionPopupMenuGroupId = 89;
private PopupMenu captionPopupMenu; private PopupMenu captionPopupMenu;
private ImageButton buttonPlayPause;
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
public VideoPlayer(String debugTag, Context context) { public VideoPlayer(String debugTag, Context context) {
@ -214,9 +211,6 @@ public abstract class VideoPlayer extends BasePlayer
((ProgressBar) this.loadingPanel.findViewById(R.id.progressBarLoadingPanel)) ((ProgressBar) this.loadingPanel.findViewById(R.id.progressBarLoadingPanel))
.getIndeterminateDrawable().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY); .getIndeterminateDrawable().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);
buttonPlayPause = rootView.findViewById(R.id.videoPlayPause);
buttonPlayPause.setTag(1);
} }
protected abstract void setupSubtitleView(@NonNull SubtitleView view, protected abstract void setupSubtitleView(@NonNull SubtitleView view,
@ -232,22 +226,6 @@ public abstract class VideoPlayer extends BasePlayer
captionTextView.setOnClickListener(this); captionTextView.setOnClickListener(this);
resizeView.setOnClickListener(this); resizeView.setOnClickListener(this);
playbackLiveSync.setOnClickListener(this); playbackLiveSync.setOnClickListener(this);
buttonPlayPause.setOnClickListener(new View.OnClickListener() {
public void onClick(View ib) {
if((int)ib.getTag()==2) {
onPlay();
ib.setBackgroundResource(R.drawable.ic_pause_white);
ib.setTag(1);
} else {
ib.setBackgroundResource(R.drawable.ic_play_arrow_white);
onPause();
ib.setTag(2);
}
}
});
} }
@Override @Override
@ -886,68 +864,18 @@ public abstract class VideoPlayer extends BasePlayer
controlViewAnimator.start(); controlViewAnimator.start();
} }
public void showPlayPause(final int drawableId) {
if (DEBUG) Log.d(TAG, "showAndAnimateControl() called with: drawableId = [" + drawableId + "], goneOnEnd = [" + false + "]");
if (controlViewAnimator != null && controlViewAnimator.isRunning()) {
if (DEBUG) Log.d(TAG, "showAndAnimateControl: controlViewAnimator.isRunning");
controlViewAnimator.end();
}
if (drawableId == -1) {
if (controlAnimationView.getVisibility() == View.VISIBLE) {
controlViewAnimator = ObjectAnimator.ofPropertyValuesHolder(controlAnimationView,
PropertyValuesHolder.ofFloat(View.ALPHA, 1f, 0f),
PropertyValuesHolder.ofFloat(View.SCALE_X, 1.4f, 1f),
PropertyValuesHolder.ofFloat(View.SCALE_Y, 1.4f, 1f)
).setDuration(DEFAULT_CONTROLS_DURATION);
controlViewAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
controlAnimationView.setVisibility(View.GONE);
}
});
controlViewAnimator.start();
}
return;
}
float scaleFrom = 1f, scaleTo = 1.4f;
float alphaFrom = 0f, alphaTo = 1f;
controlViewAnimator = ObjectAnimator.ofPropertyValuesHolder(controlAnimationView,
PropertyValuesHolder.ofFloat(View.ALPHA, alphaFrom, alphaTo),
PropertyValuesHolder.ofFloat(View.SCALE_X, scaleFrom, scaleTo),
PropertyValuesHolder.ofFloat(View.SCALE_Y, scaleFrom, scaleTo)
);
controlViewAnimator.setDuration(500);
controlViewAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
controlAnimationView.setVisibility(View.VISIBLE);
}
});
controlAnimationView.setVisibility(View.VISIBLE);
controlAnimationView.setImageDrawable(ContextCompat.getDrawable(context, drawableId));
controlViewAnimator.start();
}
public boolean isSomePopupMenuVisible() { public boolean isSomePopupMenuVisible() {
return isSomePopupMenuVisible; return isSomePopupMenuVisible;
} }
public void showControlsThenHide() { public void showControlsThenHide() {
if (DEBUG) Log.d(TAG, "showControlsThenHide() called"); if (DEBUG) Log.d(TAG, "showControlsThenHide() called");
buttonPlayPause.setVisibility(View.VISIBLE);
animateView(controlsRoot, true, DEFAULT_CONTROLS_DURATION, 0, animateView(controlsRoot, true, DEFAULT_CONTROLS_DURATION, 0,
() -> hideControls(DEFAULT_CONTROLS_DURATION, DEFAULT_CONTROLS_HIDE_TIME)); () -> hideControls(DEFAULT_CONTROLS_DURATION, DEFAULT_CONTROLS_HIDE_TIME));
} }
public void showControls(long duration) { public void showControls(long duration) {
if (DEBUG) Log.d(TAG, "showControls() called"); if (DEBUG) Log.d(TAG, "showControls() called");
buttonPlayPause.setVisibility(View.VISIBLE);
controlsVisibilityHandler.removeCallbacksAndMessages(null); controlsVisibilityHandler.removeCallbacksAndMessages(null);
animateView(controlsRoot, true, duration); animateView(controlsRoot, true, duration);
} }
@ -955,17 +883,23 @@ public abstract class VideoPlayer extends BasePlayer
public void hideControls(final long duration, long delay) { public void hideControls(final long duration, long delay) {
if (DEBUG) Log.d(TAG, "hideControls() called with: delay = [" + delay + "]"); if (DEBUG) Log.d(TAG, "hideControls() called with: delay = [" + delay + "]");
controlsVisibilityHandler.removeCallbacksAndMessages(null); controlsVisibilityHandler.removeCallbacksAndMessages(null);
controlsVisibilityHandler.postDelayed(hideControlsHandler(duration), delay); controlsVisibilityHandler.postDelayed(
() -> animateView(controlsRoot, false, duration), delay);
} }
private Runnable hideControlsHandler(long duration) public void hideControlsAndButton(final long duration, long delay, View button) {
if (DEBUG) Log.d(TAG, "hideControls() called with: delay = [" + delay + "]");
controlsVisibilityHandler.removeCallbacksAndMessages(null);
controlsVisibilityHandler.postDelayed(hideControlsAndButtonHandler(duration, button), delay);
}
private Runnable hideControlsAndButtonHandler(long duration, View videoPlayPause)
{ {
return () -> { return () -> {
buttonPlayPause.setVisibility(View.INVISIBLE); videoPlayPause.setVisibility(View.INVISIBLE);
animateView(controlsRoot, false,duration); animateView(controlsRoot, false,duration);
}; };
} }
/*////////////////////////////////////////////////////////////////////////// /*//////////////////////////////////////////////////////////////////////////
// Getters and Setters // Getters and Setters
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout <FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -218,21 +217,6 @@
android:weightSum="5.5"> android:weightSum="5.5">
<!--tools:visibility="gone">--> <!--tools:visibility="gone">-->
<ImageButton
android:id="@+id/videoPlayPause"
android:layout_width="30dp"
android:layout_height="60dp"
android:layout_alignParentRight="true"
android:layout_weight="1"
android:background="@drawable/ic_pause_white"
android:clickable="true"
android:focusable="true"
android:scaleType="centerInside"
android:scaleX="1"
android:scaleY="1"
android:visibility="invisible"
tools:ignore="ContentDescription,RtlHardcoded" />
<ImageView <ImageView
android:id="@+id/controlAnimationView" android:id="@+id/controlAnimationView"
android:layout_width="0dp" android:layout_width="0dp"
@ -244,6 +228,26 @@
tools:visibility="visible"/> tools:visibility="visible"/>
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="5.5">
<!--tools:visibility="gone">-->
<ImageView
android:id="@+id/videoPlayPause"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="centerInside"
android:visibility="gone"
tools:ignore="ContentDescription"
tools:visibility="visible" />
</LinearLayout>
<TextView <TextView
android:id="@+id/currentDisplaySeek" android:id="@+id/currentDisplaySeek"
android:layout_width="wrap_content" android:layout_width="wrap_content"