0
0
mirror of https://github.com/mediathekview/zapp.git synced 2024-09-20 20:23:04 +02:00

Restore buffering ui

This commit is contained in:
Christine Emrich 2018-10-07 16:06:33 +02:00
parent 4d792fe262
commit b7061331b3
5 changed files with 57 additions and 16 deletions

View File

@ -93,6 +93,9 @@ dependencies {
// joda time
implementation 'joda-time:joda-time:2.10'
// rxjava
implementation "io.reactivex.rxjava2:rxjava:2.2.2"
// about libraries view
implementation('com.mikepenz:aboutlibraries:6.2.0@aar') {
transitive = true

View File

@ -35,12 +35,13 @@ import de.christinecoenen.code.zapp.utils.system.MultiWindowHelper;
import de.christinecoenen.code.zapp.utils.video.SwipeablePlayerView;
import de.christinecoenen.code.zapp.utils.video.VideoBufferingHandler;
import de.christinecoenen.code.zapp.utils.video.VideoErrorHandler;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import timber.log.Timber;
public class MediathekPlayerActivity extends AppCompatActivity implements
PlayerControlView.VisibilityListener,
VideoErrorHandler.IVideoErrorListener,
VideoBufferingHandler.IVideoBufferingListener {
VideoErrorHandler.IVideoErrorListener {
private static final String EXTRA_SHOW = "de.christinecoenen.code.zapp.EXTRA_SHOW";
private static final String ARG_VIDEO_MILLIS = "ARG_VIDEO_MILLIS";
@ -74,6 +75,7 @@ public class MediathekPlayerActivity extends AppCompatActivity implements
@BindView(R.id.progress)
protected ProgressBar loadingIndicator;
private final CompositeDisposable disposable = new CompositeDisposable();
private MediathekShow show;
private Player player;
private BackgroundPlayerService.Binder binder;
@ -89,6 +91,10 @@ public class MediathekPlayerActivity extends AppCompatActivity implements
player.load(VideoInfo.fromShow(show));
player.resume();
Disposable bufferingDisposable = player.isBuffering()
.subscribe(MediathekPlayerActivity.this::onBufferingChanged, Timber::e);
disposable.add(bufferingDisposable);
binder.movePlaybackToForeground();
updateSubtitleButtons();
@ -250,7 +256,7 @@ public class MediathekPlayerActivity extends AppCompatActivity implements
}
}
// TODO: get handler to work again
// TODO: get error handler to work again
@Override
public void onVideoError(int messageResourceId) {
showError(messageResourceId);
@ -261,19 +267,8 @@ public class MediathekPlayerActivity extends AppCompatActivity implements
hideError();
}
@Override
public void onBufferingStarted() {
loadingIndicator.setVisibility(View.VISIBLE);
}
@Override
public void onBufferingEnded() {
loadingIndicator.setVisibility(View.INVISIBLE);
}
@Override
public void onVideoEnded() {
private void onBufferingChanged(boolean isBuffering) {
loadingIndicator.setVisibility(isBuffering ? View.VISIBLE : View.INVISIBLE);
}
@OnClick(R.id.btn_caption_disable)
@ -295,6 +290,7 @@ public class MediathekPlayerActivity extends AppCompatActivity implements
}
private void pauseActivity() {
disposable.clear();
unbindService(backgroundPlayerServiceConnection);
}

View File

@ -0,0 +1,7 @@
package de.christinecoenen.code.zapp.app.player;
public interface IVideoBufferingListener {
void onBufferingStarted();
void onBufferingEnded();
}

View File

@ -21,11 +21,13 @@ import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.util.Util;
import de.christinecoenen.code.zapp.R;
import io.reactivex.Observable;
public class Player {
private final SimpleExoPlayer player;
private final DefaultDataSourceFactory dataSourceFactory;
private final PlayerEventHandler playerEventHandler;
private VideoInfo currentVideoInfo;
private MediaSessionCompat mediaSession;
@ -51,6 +53,9 @@ public class Player {
.setContentType(C.CONTENT_TYPE_MOVIE)
.build();
player.setAudioAttributes(audioAttributes, true);
playerEventHandler = new PlayerEventHandler();
player.addAnalyticsListener(playerEventHandler);
}
public void setView(PlayerView videoView) {
@ -98,6 +103,10 @@ public class Player {
return player.getCurrentPosition();
}
public Observable<Boolean> isBuffering() {
return playerEventHandler.isBuffering();
}
SimpleExoPlayer getExoPlayer() {
return player;
}
@ -112,5 +121,6 @@ public class Player {
void destroy() {
player.release();
mediaSession.release();
}
}

View File

@ -0,0 +1,25 @@
package de.christinecoenen.code.zapp.app.player;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.analytics.AnalyticsListener;
import io.reactivex.Observable;
import io.reactivex.subjects.BehaviorSubject;
/**
* Transforms player events from exo player into RXJava observables.
*/
class PlayerEventHandler implements AnalyticsListener {
private BehaviorSubject<Boolean> isBufferingSource = BehaviorSubject.create();
Observable<Boolean> isBuffering() {
return isBufferingSource;
}
@Override
public void onPlayerStateChanged(EventTime eventTime, boolean playWhenReady, int playbackState) {
boolean isBuffering = playWhenReady && playbackState == Player.STATE_BUFFERING;
isBufferingSource.onNext(isBuffering);
}
}