Implemented missing PlaybackController state handling
This commit is contained in:
parent
982ce61b3f
commit
a989db586a
@ -137,16 +137,6 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
|||||||
return butPlay;
|
return butPlay;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void postStatusMsg(int msg, boolean showToast) {
|
|
||||||
MediaplayerActivity.this.postStatusMsg(msg, showToast);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clearStatusMsg() {
|
|
||||||
MediaplayerActivity.this.clearStatusMsg();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadMediaInfo() {
|
public boolean loadMediaInfo() {
|
||||||
return MediaplayerActivity.this.loadMediaInfo();
|
return MediaplayerActivity.this.loadMediaInfo();
|
||||||
@ -248,12 +238,16 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
|||||||
* Should be used to inform the user that the PlaybackService is currently
|
* Should be used to inform the user that the PlaybackService is currently
|
||||||
* buffering.
|
* buffering.
|
||||||
*/
|
*/
|
||||||
protected abstract void onBufferStart();
|
protected void onBufferStart() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Should be used to hide the view that was showing the 'buffering'-message.
|
* Should be used to hide the view that was showing the 'buffering'-message.
|
||||||
*/
|
*/
|
||||||
protected abstract void onBufferEnd();
|
protected void onBufferEnd() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void onBufferUpdate(float progress) {
|
private void onBufferUpdate(float progress) {
|
||||||
if (sbPosition != null) {
|
if (sbPosition != null) {
|
||||||
@ -468,10 +462,6 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
|||||||
*/
|
*/
|
||||||
protected abstract void onAwaitingVideoSurface();
|
protected abstract void onAwaitingVideoSurface();
|
||||||
|
|
||||||
protected abstract void postStatusMsg(int resId, boolean showToast);
|
|
||||||
|
|
||||||
protected abstract void clearStatusMsg();
|
|
||||||
|
|
||||||
void onPositionObserverUpdate() {
|
void onPositionObserverUpdate() {
|
||||||
if (controller == null || txtvPosition == null || txtvLength == null) {
|
if (controller == null || txtvPosition == null || txtvLength == null) {
|
||||||
return;
|
return;
|
||||||
|
@ -126,24 +126,6 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity {
|
|||||||
startActivity(new Intent(this, VideoplayerActivity.class));
|
startActivity(new Intent(this, VideoplayerActivity.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void postStatusMsg(int resId, boolean showToast) {
|
|
||||||
if (resId == R.string.player_preparing_msg
|
|
||||||
|| resId == R.string.player_seeking_msg
|
|
||||||
|| resId == R.string.player_buffering_msg) {
|
|
||||||
// TODO Show progress bar here
|
|
||||||
}
|
|
||||||
if (showToast) {
|
|
||||||
Toast.makeText(this, resId, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void clearStatusMsg() {
|
|
||||||
// TODO Hide progress bar here
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setupGUI() {
|
protected void setupGUI() {
|
||||||
super.setupGUI();
|
super.setupGUI();
|
||||||
@ -199,16 +181,6 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onBufferStart() {
|
|
||||||
postStatusMsg(R.string.player_buffering_msg, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onBufferEnd() {
|
|
||||||
clearStatusMsg();
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlaybackController getPlaybackController() {
|
public PlaybackController getPlaybackController() {
|
||||||
return controller;
|
return controller;
|
||||||
}
|
}
|
||||||
|
@ -171,20 +171,6 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void postStatusMsg(int resId, boolean showToast) {
|
|
||||||
if (resId == R.string.player_preparing_msg) {
|
|
||||||
progressIndicator.setVisibility(View.VISIBLE);
|
|
||||||
} else {
|
|
||||||
progressIndicator.setVisibility(View.INVISIBLE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void clearStatusMsg() {
|
|
||||||
progressIndicator.setVisibility(View.INVISIBLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
private final View.OnTouchListener onVideoviewTouched = (v, event) -> {
|
private final View.OnTouchListener onVideoviewTouched = (v, event) -> {
|
||||||
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||||
if (PictureInPictureUtil.isInPictureInPictureMode(this)) {
|
if (PictureInPictureUtil.isInPictureInPictureMode(this)) {
|
||||||
|
@ -10,9 +10,11 @@ import android.view.MenuItem;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
@ -33,6 +35,7 @@ import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
|||||||
import de.danoeh.antennapod.core.util.Converter;
|
import de.danoeh.antennapod.core.util.Converter;
|
||||||
import de.danoeh.antennapod.core.util.IntentUtils;
|
import de.danoeh.antennapod.core.util.IntentUtils;
|
||||||
import de.danoeh.antennapod.core.util.TimeSpeedConverter;
|
import de.danoeh.antennapod.core.util.TimeSpeedConverter;
|
||||||
|
import de.danoeh.antennapod.core.util.playback.MediaPlayerError;
|
||||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||||
import de.danoeh.antennapod.core.util.playback.PlaybackController;
|
import de.danoeh.antennapod.core.util.playback.PlaybackController;
|
||||||
import de.danoeh.antennapod.dialog.PlaybackControlsDialog;
|
import de.danoeh.antennapod.dialog.PlaybackControlsDialog;
|
||||||
@ -77,6 +80,7 @@ public class AudioPlayerFragment extends Fragment implements
|
|||||||
private TextView txtvFF;
|
private TextView txtvFF;
|
||||||
private ImageButton butSkip;
|
private ImageButton butSkip;
|
||||||
private Toolbar toolbar;
|
private Toolbar toolbar;
|
||||||
|
private ProgressBar progressIndicator;
|
||||||
|
|
||||||
private PlaybackController controller;
|
private PlaybackController controller;
|
||||||
private boolean showTimeLeft;
|
private boolean showTimeLeft;
|
||||||
@ -108,6 +112,7 @@ public class AudioPlayerFragment extends Fragment implements
|
|||||||
butFF = root.findViewById(R.id.butFF);
|
butFF = root.findViewById(R.id.butFF);
|
||||||
txtvFF = root.findViewById(R.id.txtvFF);
|
txtvFF = root.findViewById(R.id.txtvFF);
|
||||||
butSkip = root.findViewById(R.id.butSkip);
|
butSkip = root.findViewById(R.id.butSkip);
|
||||||
|
progressIndicator = root.findViewById(R.id.progLoading);
|
||||||
|
|
||||||
setupLengthTextView();
|
setupLengthTextView();
|
||||||
setupControlButtons();
|
setupControlButtons();
|
||||||
@ -249,27 +254,32 @@ public class AudioPlayerFragment extends Fragment implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBufferStart() {
|
public void onBufferStart() {
|
||||||
//MediaplayerActivity.this.onBufferStart();
|
progressIndicator.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBufferEnd() {
|
public void onBufferEnd() {
|
||||||
//MediaplayerActivity.this.onBufferEnd();
|
progressIndicator.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBufferUpdate(float progress) {
|
public void onBufferUpdate(float progress) {
|
||||||
//MediaplayerActivity.this.onBufferUpdate(progress);
|
sbPosition.setSecondaryProgress((int) (progress * sbPosition.getMax()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleError(int code) {
|
public void handleError(int code) {
|
||||||
//MediaplayerActivity.this.handleError(code);
|
final AlertDialog.Builder errorDialog = new AlertDialog.Builder(getContext());
|
||||||
}
|
errorDialog.setTitle(R.string.error_label);
|
||||||
|
errorDialog.setMessage(MediaPlayerError.getErrorString(getContext(), code));
|
||||||
@Override
|
errorDialog.setNeutralButton(android.R.string.ok,
|
||||||
public void onReloadNotification(int code) {
|
(dialog, which) -> {
|
||||||
//MediaplayerActivity.this.onReloadNotification(code);
|
dialog.dismiss();
|
||||||
|
((MainActivity) getActivity()).getBottomSheet()
|
||||||
|
.setState(BottomSheetBehavior.STATE_COLLAPSED);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
errorDialog.create().show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -282,36 +292,21 @@ public class AudioPlayerFragment extends Fragment implements
|
|||||||
return butPlay;
|
return butPlay;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void postStatusMsg(int msg, boolean showToast) {
|
|
||||||
//MediaplayerActivity.this.postStatusMsg(msg, showToast);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clearStatusMsg() {
|
|
||||||
//MediaplayerActivity.this.clearStatusMsg();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadMediaInfo() {
|
public boolean loadMediaInfo() {
|
||||||
updateUi();
|
updateUi();
|
||||||
return true;
|
return true;
|
||||||
}/*
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onServiceQueried() {
|
|
||||||
MediaplayerActivity.this.onServiceQueried();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onShutdownNotification() {
|
public void onShutdownNotification() {
|
||||||
finish();
|
((MainActivity) getActivity()).getBottomSheet().setState(BottomSheetBehavior.STATE_COLLAPSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlaybackEnd() {
|
public void onPlaybackEnd() {
|
||||||
finish();
|
((MainActivity) getActivity()).getBottomSheet().setState(BottomSheetBehavior.STATE_COLLAPSED);
|
||||||
}*/
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlaybackSpeedChange() {
|
public void onPlaybackSpeedChange() {
|
||||||
@ -344,7 +339,6 @@ public class AudioPlayerFragment extends Fragment implements
|
|||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setRetainInstance(true);
|
setRetainInstance(true);
|
||||||
//setHasOptionsMenu(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -134,6 +134,15 @@
|
|||||||
android:layout_centerHorizontal="true"
|
android:layout_centerHorizontal="true"
|
||||||
android:layout_centerVertical="true"/>
|
android:layout_centerVertical="true"/>
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
style="?android:attr/progressBarStyle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:id="@+id/progLoading"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/butRev"
|
android:id="@+id/butRev"
|
||||||
android:layout_width="@dimen/audioplayer_playercontrols_length"
|
android:layout_width="@dimen/audioplayer_playercontrols_length"
|
||||||
|
@ -181,11 +181,6 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
|||||||
*/
|
*/
|
||||||
public static final int NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED = 9;
|
public static final int NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED = 9;
|
||||||
|
|
||||||
/**
|
|
||||||
* Send a message to the user (with provided String resource id)
|
|
||||||
*/
|
|
||||||
public static final int NOTIFICATION_TYPE_SHOW_TOAST = 10;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returned by getPositionSafe() or getDurationSafe() if the playbackService
|
* Returned by getPositionSafe() or getDurationSafe() if the playbackService
|
||||||
* is in an invalid state.
|
* is in an invalid state.
|
||||||
|
@ -21,6 +21,7 @@ import android.widget.ImageButton;
|
|||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import de.danoeh.antennapod.core.event.MessageEvent;
|
||||||
import de.danoeh.antennapod.core.util.ThemeUtils;
|
import de.danoeh.antennapod.core.util.ThemeUtils;
|
||||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||||
|
|
||||||
@ -333,8 +334,6 @@ public class PlaybackController {
|
|||||||
case PlaybackService.NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED:
|
case PlaybackService.NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED:
|
||||||
onSetSpeedAbilityChanged();
|
onSetSpeedAbilityChanged();
|
||||||
break;
|
break;
|
||||||
case PlaybackService.NOTIFICATION_TYPE_SHOW_TOAST:
|
|
||||||
postStatusMsg(code, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -411,11 +410,10 @@ public class PlaybackController {
|
|||||||
Log.d(TAG, "status: " + status.toString());
|
Log.d(TAG, "status: " + status.toString());
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case ERROR:
|
case ERROR:
|
||||||
postStatusMsg(R.string.player_error_msg, false);
|
EventBus.getDefault().post(new MessageEvent(activity.getString(R.string.player_error_msg)));
|
||||||
handleError(MediaPlayer.MEDIA_ERROR_UNKNOWN);
|
handleError(MediaPlayer.MEDIA_ERROR_UNKNOWN);
|
||||||
break;
|
break;
|
||||||
case PAUSED:
|
case PAUSED:
|
||||||
clearStatusMsg();
|
|
||||||
checkMediaInfoLoaded();
|
checkMediaInfoLoaded();
|
||||||
onPositionObserverUpdate();
|
onPositionObserverUpdate();
|
||||||
updatePlayButtonAppearance(playResource, playText);
|
updatePlayButtonAppearance(playResource, playText);
|
||||||
@ -425,7 +423,6 @@ public class PlaybackController {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PLAYING:
|
case PLAYING:
|
||||||
clearStatusMsg();
|
|
||||||
checkMediaInfoLoaded();
|
checkMediaInfoLoaded();
|
||||||
if (!PlaybackService.isCasting() &&
|
if (!PlaybackService.isCasting() &&
|
||||||
PlaybackService.getCurrentMediaType() == MediaType.VIDEO) {
|
PlaybackService.getCurrentMediaType() == MediaType.VIDEO) {
|
||||||
@ -435,7 +432,6 @@ public class PlaybackController {
|
|||||||
updatePlayButtonAppearance(pauseResource, pauseText);
|
updatePlayButtonAppearance(pauseResource, pauseText);
|
||||||
break;
|
break;
|
||||||
case PREPARING:
|
case PREPARING:
|
||||||
postStatusMsg(R.string.player_preparing_msg, false);
|
|
||||||
checkMediaInfoLoaded();
|
checkMediaInfoLoaded();
|
||||||
if (playbackService != null) {
|
if (playbackService != null) {
|
||||||
if (playbackService.isStartWhenPrepared()) {
|
if (playbackService.isStartWhenPrepared()) {
|
||||||
@ -446,21 +442,17 @@ public class PlaybackController {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case STOPPED:
|
case STOPPED:
|
||||||
postStatusMsg(R.string.player_stopped_msg, false);
|
|
||||||
break;
|
break;
|
||||||
case PREPARED:
|
case PREPARED:
|
||||||
checkMediaInfoLoaded();
|
checkMediaInfoLoaded();
|
||||||
postStatusMsg(R.string.player_ready_msg, false);
|
|
||||||
updatePlayButtonAppearance(playResource, playText);
|
updatePlayButtonAppearance(playResource, playText);
|
||||||
onPositionObserverUpdate();
|
onPositionObserverUpdate();
|
||||||
break;
|
break;
|
||||||
case SEEKING:
|
case SEEKING:
|
||||||
onPositionObserverUpdate();
|
onPositionObserverUpdate();
|
||||||
postStatusMsg(R.string.player_seeking_msg, false);
|
|
||||||
break;
|
break;
|
||||||
case INITIALIZED:
|
case INITIALIZED:
|
||||||
checkMediaInfoLoaded();
|
checkMediaInfoLoaded();
|
||||||
clearStatusMsg();
|
|
||||||
updatePlayButtonAppearance(playResource, playText);
|
updatePlayButtonAppearance(playResource, playText);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -482,10 +474,6 @@ public class PlaybackController {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void postStatusMsg(int msg, boolean showToast) {}
|
|
||||||
|
|
||||||
public void clearStatusMsg() {}
|
|
||||||
|
|
||||||
public boolean loadMediaInfo() {
|
public boolean loadMediaInfo() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -26,9 +26,11 @@ import java.util.concurrent.TimeoutException;
|
|||||||
import de.danoeh.antennapod.core.cast.CastConsumer;
|
import de.danoeh.antennapod.core.cast.CastConsumer;
|
||||||
import de.danoeh.antennapod.core.cast.CastManager;
|
import de.danoeh.antennapod.core.cast.CastManager;
|
||||||
import de.danoeh.antennapod.core.cast.DefaultCastConsumer;
|
import de.danoeh.antennapod.core.cast.DefaultCastConsumer;
|
||||||
|
import de.danoeh.antennapod.core.event.MessageEvent;
|
||||||
import de.danoeh.antennapod.core.feed.MediaType;
|
import de.danoeh.antennapod.core.feed.MediaType;
|
||||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.core.util.NetworkUtils;
|
import de.danoeh.antennapod.core.util.NetworkUtils;
|
||||||
|
import org.greenrobot.eventbus.EventBus;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class intended to work along PlaybackService and provide support for different flavors.
|
* Class intended to work along PlaybackService and provide support for different flavors.
|
||||||
@ -106,7 +108,7 @@ public class PlaybackServiceFlavorHelper {
|
|||||||
}
|
}
|
||||||
switch (code) {
|
switch (code) {
|
||||||
case RemotePSMP.CAST_ERROR:
|
case RemotePSMP.CAST_ERROR:
|
||||||
callback.sendNotificationBroadcast(PlaybackService.NOTIFICATION_TYPE_SHOW_TOAST, resourceId);
|
EventBus.getDefault().post(new MessageEvent(context.getString(resourceId)));
|
||||||
return true;
|
return true;
|
||||||
case RemotePSMP.CAST_ERROR_PRIORITY_HIGH:
|
case RemotePSMP.CAST_ERROR_PRIORITY_HIGH:
|
||||||
Toast.makeText(context, resourceId, Toast.LENGTH_SHORT).show();
|
Toast.makeText(context, resourceId, Toast.LENGTH_SHORT).show();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user