Merge pull request #1545 from mfietz/issue/673-video-controls
Video Player: Rewind and FF controls
|
@ -639,17 +639,19 @@ public abstract class MediaplayerActivity extends AppCompatActivity implements O
|
|||
}
|
||||
}
|
||||
checkFavorite();
|
||||
if(controller == null) {
|
||||
butPlaybackSpeed.setVisibility(View.GONE);
|
||||
} else {
|
||||
butPlaybackSpeed.setVisibility(View.VISIBLE);
|
||||
if (controller.canSetPlaybackSpeed()) {
|
||||
ViewCompat.setAlpha(butPlaybackSpeed, 1.0f);
|
||||
if(butPlaybackSpeed != null) {
|
||||
if (controller == null) {
|
||||
butPlaybackSpeed.setVisibility(View.GONE);
|
||||
} else {
|
||||
ViewCompat.setAlpha(butPlaybackSpeed, 0.5f);
|
||||
butPlaybackSpeed.setVisibility(View.VISIBLE);
|
||||
if (controller.canSetPlaybackSpeed()) {
|
||||
ViewCompat.setAlpha(butPlaybackSpeed, 1.0f);
|
||||
} else {
|
||||
ViewCompat.setAlpha(butPlaybackSpeed, 0.5f);
|
||||
}
|
||||
}
|
||||
updateButPlaybackSpeed();
|
||||
}
|
||||
updateButPlaybackSpeed();
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
@ -672,12 +674,13 @@ public abstract class MediaplayerActivity extends AppCompatActivity implements O
|
|||
return;
|
||||
}
|
||||
|
||||
String length;
|
||||
if (showTimeLeft) {
|
||||
txtvLength.setText("-" + Converter.getDurationStringLong((media
|
||||
.getDuration() - media.getPosition())));
|
||||
length = "-" + Converter.getDurationStringLong(media.getDuration() - media.getPosition());
|
||||
} else {
|
||||
txtvLength.setText(Converter.getDurationStringLong((media.getDuration())));
|
||||
length = Converter.getDurationStringLong(media.getDuration());
|
||||
}
|
||||
txtvLength.setText(length);
|
||||
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.putBoolean(PREF_SHOW_TIME_LEFT, showTimeLeft);
|
||||
|
@ -765,8 +768,7 @@ public abstract class MediaplayerActivity extends AppCompatActivity implements O
|
|||
if (rewindSecs == values[i]) {
|
||||
checked = i;
|
||||
}
|
||||
choices[i] = String.valueOf(values[i]) + " "
|
||||
+ getString(R.string.time_seconds);
|
||||
choices[i] = String.valueOf(values[i]) + " " + getString(R.string.time_seconds);
|
||||
}
|
||||
choice = values[checked];
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(MediaplayerActivity.this);
|
||||
|
@ -807,8 +809,7 @@ public abstract class MediaplayerActivity extends AppCompatActivity implements O
|
|||
if (rewindSecs == values[i]) {
|
||||
checked = i;
|
||||
}
|
||||
choices[i] = String.valueOf(values[i]) + " "
|
||||
+ getString(R.string.time_seconds);
|
||||
choices[i] = String.valueOf(values[i]) + " " + getString(R.string.time_seconds);
|
||||
}
|
||||
choice = values[checked];
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(MediaplayerActivity.this);
|
||||
|
@ -854,21 +855,19 @@ public abstract class MediaplayerActivity extends AppCompatActivity implements O
|
|||
float prog;
|
||||
|
||||
@Override
|
||||
public void onProgressChanged(SeekBar seekBar, int progress,
|
||||
boolean fromUser) {
|
||||
public void onProgressChanged (SeekBar seekBar,int progress, boolean fromUser) {
|
||||
if (controller != null) {
|
||||
prog = controller.onSeekBarProgressChanged(seekBar, progress, fromUser,
|
||||
txtvPosition);
|
||||
prog = controller.onSeekBarProgressChanged(seekBar, progress, fromUser, txtvPosition);
|
||||
if (showTimeLeft && prog != 0) {
|
||||
int duration = controller.getDuration();
|
||||
txtvLength.setText("-" + Converter
|
||||
.getDurationStringLong(duration - (int) (prog * duration)));
|
||||
String length = "-" + Converter.getDurationStringLong(duration - (int) (prog * duration));
|
||||
txtvLength.setText(length);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateButPlaybackSpeed() {
|
||||
if (controller != null) {
|
||||
if (controller != null && butPlaybackSpeed != null) {
|
||||
butPlaybackSpeed.setText(UserPreferences.getPlaybackSpeed() + "x");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,9 +3,9 @@ package de.danoeh.antennapod.activity;
|
|||
import android.annotation.SuppressLint;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.v4.view.WindowCompat;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
|
@ -19,7 +19,8 @@ import android.widget.LinearLayout;
|
|||
import android.widget.ProgressBar;
|
||||
import android.widget.SeekBar;
|
||||
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.core.feed.MediaType;
|
||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||
|
@ -39,8 +40,10 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
*/
|
||||
private boolean videoControlsShowing = true;
|
||||
private boolean videoSurfaceCreated = false;
|
||||
private VideoControlsHider videoControlsToggler;
|
||||
|
||||
private VideoControlsHider videoControlsHider = new VideoControlsHider(this);
|
||||
|
||||
private LinearLayout controls;
|
||||
private LinearLayout videoOverlay;
|
||||
private AspectRatioVideoView videoview;
|
||||
private ProgressBar progressIndicator;
|
||||
|
@ -60,26 +63,13 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0x80000000));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
if (videoControlsToggler != null) {
|
||||
videoControlsToggler.cancel(true);
|
||||
}
|
||||
if (controller != null && controller.getStatus() == PlayerStatus.PLAYING) {
|
||||
controller.pause();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (getIntent().getAction() != null
|
||||
&& getIntent().getAction().equals(Intent.ACTION_VIEW)) {
|
||||
Intent intent = getIntent();
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG, "Received VIEW intent: "
|
||||
+ intent.getData().getPath());
|
||||
Log.d(TAG, "Received VIEW intent: " + intent.getData().getPath());
|
||||
ExternalMedia media = new ExternalMedia(intent.getData().getPath(),
|
||||
MediaType.VIDEO);
|
||||
Intent launchIntent = new Intent(this, PlaybackService.class);
|
||||
|
@ -93,6 +83,22 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
videoControlsHider.stop();
|
||||
if (controller != null && controller.getStatus() == PlayerStatus.PLAYING) {
|
||||
controller.pause();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
videoControlsHider.stop();
|
||||
videoControlsHider = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean loadMediaInfo() {
|
||||
if (!super.loadMediaInfo()) {
|
||||
|
@ -104,7 +110,6 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
getSupportActionBar().setTitle(media.getFeedTitle());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -112,6 +117,7 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
protected void setupGUI() {
|
||||
super.setupGUI();
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
controls = (LinearLayout) findViewById(R.id.controls);
|
||||
videoOverlay = (LinearLayout) findViewById(R.id.overlay);
|
||||
videoview = (AspectRatioVideoView) findViewById(R.id.videoview);
|
||||
progressIndicator = (ProgressBar) findViewById(R.id.progressIndicator);
|
||||
|
@ -133,14 +139,11 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
@Override
|
||||
protected void onAwaitingVideoSurface() {
|
||||
if (videoSurfaceCreated) {
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG,
|
||||
"Videosurface already created, setting videosurface now");
|
||||
Log.d(TAG, "Videosurface already created, setting videosurface now");
|
||||
|
||||
Pair<Integer, Integer> videoSize = controller.getVideoSize();
|
||||
if (videoSize != null && videoSize.first > 0 && videoSize.second > 0) {
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG, "Width,height of video: " + videoSize.first + ", " + videoSize.second);
|
||||
Log.d(TAG, "Width,height of video: " + videoSize.first + ", " + videoSize.second);
|
||||
videoview.setVideoSize(videoSize.first, videoSize.second);
|
||||
} else {
|
||||
Log.e(TAG, "Could not determine video size");
|
||||
|
@ -156,7 +159,6 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
} else {
|
||||
progressIndicator.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -164,38 +166,23 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
progressIndicator.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
View.OnTouchListener onVideoviewTouched = new View.OnTouchListener() {
|
||||
|
||||
@Override
|
||||
public boolean onTouch(View v, MotionEvent event) {
|
||||
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||
if (videoControlsToggler != null) {
|
||||
videoControlsToggler.cancel(true);
|
||||
}
|
||||
toggleVideoControlsVisibility();
|
||||
if (videoControlsShowing) {
|
||||
setupVideoControlsToggler();
|
||||
}
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
View.OnTouchListener onVideoviewTouched = (v, event) -> {
|
||||
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||
videoControlsHider.stop();
|
||||
toggleVideoControlsVisibility();
|
||||
if (videoControlsShowing) {
|
||||
setupVideoControlsToggler();
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
void setupVideoControlsToggler() {
|
||||
if (videoControlsToggler != null) {
|
||||
videoControlsToggler.cancel(true);
|
||||
}
|
||||
videoControlsToggler = new VideoControlsHider();
|
||||
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) {
|
||||
videoControlsToggler
|
||||
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
} else {
|
||||
videoControlsToggler.execute();
|
||||
}
|
||||
videoControlsHider.stop();
|
||||
videoControlsHider.start();
|
||||
}
|
||||
|
||||
private void toggleVideoControlsVisibility() {
|
||||
|
@ -209,46 +196,6 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
videoControlsShowing = !videoControlsShowing;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides the videocontrols after a certain period of time.
|
||||
*/
|
||||
public class VideoControlsHider extends AsyncTask<Void, Void, Void> {
|
||||
@Override
|
||||
protected void onCancelled() {
|
||||
videoControlsToggler = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void result) {
|
||||
videoControlsToggler = null;
|
||||
}
|
||||
|
||||
private static final int WAITING_INTERVALL = 5000;
|
||||
private static final String TAG = "VideoControlsToggler";
|
||||
|
||||
@Override
|
||||
protected void onProgressUpdate(Void... values) {
|
||||
if (videoControlsShowing) {
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG, "Hiding video controls");
|
||||
getSupportActionBar().hide();
|
||||
hideVideoControls();
|
||||
videoControlsShowing = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
try {
|
||||
Thread.sleep(WAITING_INTERVALL);
|
||||
} catch (InterruptedException e) {
|
||||
return null;
|
||||
}
|
||||
publishProgress();
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private final SurfaceHolder.Callback surfaceHolderCallback = new SurfaceHolder.Callback() {
|
||||
@Override
|
||||
|
@ -259,15 +206,13 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
|
||||
@Override
|
||||
public void surfaceCreated(SurfaceHolder holder) {
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG, "Videoview holder created");
|
||||
Log.d(TAG, "Videoview holder created");
|
||||
videoSurfaceCreated = true;
|
||||
if (controller.getStatus() == PlayerStatus.PLAYING) {
|
||||
if (controller.serviceAvailable()) {
|
||||
controller.setVideoSurface(holder);
|
||||
} else {
|
||||
Log.e(TAG,
|
||||
"Could'nt attach surface to mediaplayer - reference to service was null");
|
||||
Log.e(TAG, "Could'nt attach surface to mediaplayer - reference to service was null");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -275,8 +220,7 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
|
||||
@Override
|
||||
public void surfaceDestroyed(SurfaceHolder holder) {
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG, "Videosurface was destroyed");
|
||||
Log.d(TAG, "Videosurface was destroyed");
|
||||
videoSurfaceCreated = false;
|
||||
controller.notifyVideoSurfaceAbandoned();
|
||||
}
|
||||
|
@ -286,9 +230,7 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
@Override
|
||||
protected void onReloadNotification(int notificationCode) {
|
||||
if (notificationCode == PlaybackService.EXTRA_CODE_AUDIO) {
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG,
|
||||
"ReloadNotification received, switching to Audioplayer now");
|
||||
Log.d(TAG, "ReloadNotification received, switching to Audioplayer now");
|
||||
finish();
|
||||
startActivity(new Intent(this, AudioplayerActivity.class));
|
||||
}
|
||||
|
@ -297,9 +239,7 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
@Override
|
||||
public void onStartTrackingTouch(SeekBar seekBar) {
|
||||
super.onStartTrackingTouch(seekBar);
|
||||
if (videoControlsToggler != null) {
|
||||
videoControlsToggler.cancel(true);
|
||||
}
|
||||
videoControlsHider.stop();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -321,12 +261,11 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
@SuppressLint("NewApi")
|
||||
private void showVideoControls() {
|
||||
videoOverlay.setVisibility(View.VISIBLE);
|
||||
butPlay.setVisibility(View.VISIBLE);
|
||||
final Animation animation = AnimationUtils.loadAnimation(this,
|
||||
R.anim.fade_in);
|
||||
controls.setVisibility(View.VISIBLE);
|
||||
final Animation animation = AnimationUtils.loadAnimation(this, R.anim.fade_in);
|
||||
if (animation != null) {
|
||||
videoOverlay.startAnimation(animation);
|
||||
butPlay.startAnimation(animation);
|
||||
controls.startAnimation(animation);
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= 14) {
|
||||
videoview.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
|
||||
|
@ -335,11 +274,10 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
|
||||
@SuppressLint("NewApi")
|
||||
private void hideVideoControls() {
|
||||
final Animation animation = AnimationUtils.loadAnimation(this,
|
||||
R.anim.fade_out);
|
||||
final Animation animation = AnimationUtils.loadAnimation(this, R.anim.fade_out);
|
||||
if (animation != null) {
|
||||
videoOverlay.startAnimation(animation);
|
||||
butPlay.startAnimation(animation);
|
||||
controls.startAnimation(animation);
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= 14) {
|
||||
int videoviewFlag = (Build.VERSION.SDK_INT >= 16) ? View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION : 0;
|
||||
|
@ -348,7 +286,7 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
videoOverlay.setFitsSystemWindows(true);
|
||||
}
|
||||
videoOverlay.setVisibility(View.GONE);
|
||||
butPlay.setVisibility(View.GONE);
|
||||
controls.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -356,7 +294,6 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
return R.layout.videoplayer_activity;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void setScreenOn(boolean enable) {
|
||||
super.setScreenOn(enable);
|
||||
|
@ -366,4 +303,38 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
}
|
||||
}
|
||||
|
||||
private static class VideoControlsHider extends Handler {
|
||||
|
||||
private static final int DELAY = 5000;
|
||||
|
||||
private WeakReference<VideoplayerActivity> activity;
|
||||
|
||||
public VideoControlsHider(VideoplayerActivity activity) {
|
||||
this.activity = new WeakReference<>(activity);
|
||||
}
|
||||
|
||||
private final Runnable hideVideoControls = () -> {
|
||||
VideoplayerActivity vpa = activity.get();
|
||||
if(vpa == null) {
|
||||
return;
|
||||
}
|
||||
if (vpa.videoControlsShowing) {
|
||||
Log.d(TAG, "Hiding video controls");
|
||||
vpa.getSupportActionBar().hide();
|
||||
vpa.hideVideoControls();
|
||||
vpa.videoControlsShowing = false;
|
||||
}
|
||||
};
|
||||
|
||||
public void start() {
|
||||
this.postDelayed(hideVideoControls, DELAY);
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
this.removeCallbacks(hideVideoControls);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,14 +19,41 @@
|
|||
android:indeterminateOnly="true"
|
||||
android:visibility="invisible" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/butPlay"
|
||||
<LinearLayout
|
||||
android:id="@+id/controls"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:background="@drawable/overlay_button_circle_background"
|
||||
android:contentDescription="@string/pause_label"
|
||||
android:src="@drawable/ic_av_pause_circle_outline_80dp" />
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/butRev"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:background="@drawable/overlay_button_circle_background"
|
||||
android:contentDescription="@string/pause_label"
|
||||
android:src="@drawable/ic_av_rewind_80dp" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/butPlay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:background="@drawable/overlay_button_circle_background"
|
||||
android:contentDescription="@string/pause_label"
|
||||
android:src="@drawable/ic_av_pause_circle_outline_80dp" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/butFF"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:background="@drawable/overlay_button_circle_background"
|
||||
android:contentDescription="@string/pause_label"
|
||||
android:src="@drawable/ic_av_fast_forward_80dp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/overlay"
|
||||
|
@ -77,7 +104,9 @@
|
|||
android:layout_toLeftOf="@+id/txtvLength"
|
||||
android:layout_toRightOf="@+id/txtvPosition"
|
||||
android:max="500" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
||||
</FrameLayout>
|
||||
|
|
|
@ -18,7 +18,6 @@ import android.text.TextUtils;
|
|||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
import android.view.SurfaceHolder;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.SeekBar;
|
||||
|
@ -78,18 +77,18 @@ public abstract class PlaybackController {
|
|||
this.activity = activity;
|
||||
this.reinitOnPause = reinitOnPause;
|
||||
schedExecutor = new ScheduledThreadPoolExecutor(SCHED_EX_POOLSIZE,
|
||||
r -> {
|
||||
Thread t = new Thread(r);
|
||||
t.setPriority(Thread.MIN_PRIORITY);
|
||||
return t;
|
||||
}, new RejectedExecutionHandler() {
|
||||
@Override
|
||||
public void rejectedExecution(Runnable r,
|
||||
ThreadPoolExecutor executor) {
|
||||
Log.w(TAG,
|
||||
r -> {
|
||||
Thread t = new Thread(r);
|
||||
t.setPriority(Thread.MIN_PRIORITY);
|
||||
return t;
|
||||
}, new RejectedExecutionHandler() {
|
||||
@Override
|
||||
public void rejectedExecution(Runnable r,
|
||||
ThreadPoolExecutor executor) {
|
||||
Log.w(TAG,
|
||||
"Rejected execution of runnable in schedExecutor");
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -415,7 +414,6 @@ public abstract class PlaybackController {
|
|||
|
||||
Log.d(TAG, "status: " + status.toString());
|
||||
switch (status) {
|
||||
|
||||
case ERROR:
|
||||
postStatusMsg(R.string.player_error_msg);
|
||||
handleError(MediaPlayer.MEDIA_ERROR_UNKNOWN);
|
||||
|
@ -575,37 +573,32 @@ public abstract class PlaybackController {
|
|||
}
|
||||
|
||||
public OnClickListener newOnPlayButtonClickListener() {
|
||||
return new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (playbackService != null) {
|
||||
switch (status) {
|
||||
case PLAYING:
|
||||
playbackService.pause(true, reinitOnPause);
|
||||
break;
|
||||
case PAUSED:
|
||||
case PREPARED:
|
||||
playbackService.resume();
|
||||
break;
|
||||
case PREPARING:
|
||||
playbackService.setStartWhenPrepared(!playbackService
|
||||
.isStartWhenPrepared());
|
||||
if (reinitOnPause
|
||||
&& playbackService.isStartWhenPrepared() == false) {
|
||||
playbackService.reinit();
|
||||
}
|
||||
break;
|
||||
case INITIALIZED:
|
||||
playbackService.setStartWhenPrepared(true);
|
||||
playbackService.prepare();
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
Log.w(TAG,
|
||||
"Play/Pause button was pressed, but playbackservice was null!");
|
||||
}
|
||||
return v -> {
|
||||
if (playbackService == null) {
|
||||
Log.w(TAG, "Play/Pause button was pressed, but playbackservice was null!");
|
||||
return;
|
||||
}
|
||||
switch (status) {
|
||||
case PLAYING:
|
||||
playbackService.pause(true, reinitOnPause);
|
||||
break;
|
||||
case PAUSED:
|
||||
case PREPARED:
|
||||
playbackService.resume();
|
||||
break;
|
||||
case PREPARING:
|
||||
playbackService.setStartWhenPrepared(!playbackService
|
||||
.isStartWhenPrepared());
|
||||
if (reinitOnPause
|
||||
&& playbackService.isStartWhenPrepared() == false) {
|
||||
playbackService.reinit();
|
||||
}
|
||||
break;
|
||||
case INITIALIZED:
|
||||
playbackService.setStartWhenPrepared(true);
|
||||
playbackService.prepare();
|
||||
break;
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 760 B |
After Width: | Height: | Size: 853 B |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 6.2 KiB |