Merge pull request #4940 from ByteHamster/more-reliable-chapters
More reliable chapter loading
This commit is contained in:
commit
0f692be2d4
@ -108,7 +108,12 @@ public class PlaybackTest {
|
||||
}
|
||||
|
||||
private void setupPlaybackController() {
|
||||
controller = new PlaybackController(activityTestRule.getActivity());
|
||||
controller = new PlaybackController(activityTestRule.getActivity()) {
|
||||
@Override
|
||||
public void loadMediaInfo() {
|
||||
// Do nothing
|
||||
}
|
||||
};
|
||||
controller.init();
|
||||
}
|
||||
|
||||
|
@ -73,7 +73,12 @@ public class SpeedChangeTest {
|
||||
|
||||
EspressoTestUtils.tryKillPlaybackService();
|
||||
activityRule.launchActivity(new Intent().putExtra(MainActivityStarter.EXTRA_OPEN_PLAYER, true));
|
||||
controller = new PlaybackController(activityRule.getActivity());
|
||||
controller = new PlaybackController(activityRule.getActivity()) {
|
||||
@Override
|
||||
public void loadMediaInfo() {
|
||||
// Do nothing
|
||||
}
|
||||
};
|
||||
controller.init();
|
||||
controller.getMedia(); // To load media
|
||||
}
|
||||
|
@ -88,12 +88,6 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
||||
|
||||
private PlaybackController newPlaybackController() {
|
||||
return new PlaybackController(this) {
|
||||
|
||||
@Override
|
||||
public void setupGUI() {
|
||||
MediaplayerActivity.this.setupGUI();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPositionObserverUpdate() {
|
||||
MediaplayerActivity.this.onPositionObserverUpdate();
|
||||
@ -135,8 +129,8 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean loadMediaInfo() {
|
||||
return MediaplayerActivity.this.loadMediaInfo();
|
||||
public void loadMediaInfo() {
|
||||
MediaplayerActivity.this.loadMediaInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -459,16 +453,15 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
||||
* to the PlaybackService to ensure that the activity has the right
|
||||
* FeedMedia object.
|
||||
*/
|
||||
boolean loadMediaInfo() {
|
||||
void loadMediaInfo() {
|
||||
Log.d(TAG, "loadMediaInfo()");
|
||||
if(controller == null || controller.getMedia() == null) {
|
||||
return false;
|
||||
if (controller == null || controller.getMedia() == null) {
|
||||
return;
|
||||
}
|
||||
showTimeLeft = UserPreferences.shouldShowRemainingTime();
|
||||
onPositionObserverUpdate();
|
||||
checkFavorite();
|
||||
updatePlaybackSpeedButton();
|
||||
return true;
|
||||
}
|
||||
|
||||
void updatePlaybackSpeedButton() {
|
||||
|
@ -132,17 +132,13 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean loadMediaInfo() {
|
||||
if (!super.loadMediaInfo() || controller == null) {
|
||||
return false;
|
||||
}
|
||||
protected void loadMediaInfo() {
|
||||
super.loadMediaInfo();
|
||||
Playable media = controller.getMedia();
|
||||
if (media != null) {
|
||||
getSupportActionBar().setSubtitle(media.getEpisodeTitle());
|
||||
getSupportActionBar().setTitle(media.getFeedTitle());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -42,7 +42,7 @@ public class ChaptersListAdapter extends RecyclerView.Adapter<ChaptersListAdapte
|
||||
hasImages = false;
|
||||
if (media.getChapters() != null) {
|
||||
for (Chapter chapter : media.getChapters()) {
|
||||
if (!ignoreChapter(chapter) && !TextUtils.isEmpty(chapter.getImageUrl())) {
|
||||
if (!TextUtils.isEmpty(chapter.getImageUrl())) {
|
||||
hasImages = true;
|
||||
}
|
||||
}
|
||||
@ -125,14 +125,7 @@ public class ChaptersListAdapter extends RecyclerView.Adapter<ChaptersListAdapte
|
||||
if (media == null || media.getChapters() == null) {
|
||||
return 0;
|
||||
}
|
||||
// ignore invalid chapters
|
||||
int counter = 0;
|
||||
for (Chapter chapter : media.getChapters()) {
|
||||
if (!ignoreChapter(chapter)) {
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
return counter;
|
||||
return media.getChapters().size();
|
||||
}
|
||||
|
||||
static class ChapterHolder extends RecyclerView.ViewHolder {
|
||||
@ -171,22 +164,8 @@ public class ChaptersListAdapter extends RecyclerView.Adapter<ChaptersListAdapte
|
||||
notifyItemChanged(currentChapterIndex, "foo");
|
||||
}
|
||||
|
||||
private boolean ignoreChapter(Chapter c) {
|
||||
return media.getDuration() > 0 && media.getDuration() < c.getStart();
|
||||
}
|
||||
|
||||
public Chapter getItem(int position) {
|
||||
int i = 0;
|
||||
for (Chapter chapter : media.getChapters()) {
|
||||
if (!ignoreChapter(chapter)) {
|
||||
if (i == position) {
|
||||
return chapter;
|
||||
} else {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return media.getChapters().get(position);
|
||||
}
|
||||
|
||||
public interface Callback {
|
||||
|
@ -41,7 +41,7 @@ public class PlaybackControlsDialog extends DialogFragment {
|
||||
super.onStart();
|
||||
controller = new PlaybackController(getActivity()) {
|
||||
@Override
|
||||
public void setupGUI() {
|
||||
public void loadMediaInfo() {
|
||||
setupUi();
|
||||
setupAudioTracks();
|
||||
}
|
||||
|
@ -47,12 +47,12 @@ public class SleepTimerDialog extends DialogFragment {
|
||||
super.onStart();
|
||||
controller = new PlaybackController(getActivity()) {
|
||||
@Override
|
||||
public void setupGUI() {
|
||||
public void onSleepTimerUpdate() {
|
||||
updateTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSleepTimerUpdate() {
|
||||
public void loadMediaInfo() {
|
||||
updateTime();
|
||||
}
|
||||
};
|
||||
|
@ -56,12 +56,12 @@ public class VariableSpeedDialog extends DialogFragment {
|
||||
super.onStart();
|
||||
controller = new PlaybackController(getActivity()) {
|
||||
@Override
|
||||
public void setupGUI() {
|
||||
public void onPlaybackSpeedChange() {
|
||||
updateSpeed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlaybackSpeedChange() {
|
||||
public void loadMediaInfo() {
|
||||
updateSpeed();
|
||||
}
|
||||
};
|
||||
|
@ -312,12 +312,6 @@ public class AudioPlayerFragment extends Fragment implements
|
||||
|
||||
private PlaybackController newPlaybackController() {
|
||||
return new PlaybackController(getActivity()) {
|
||||
|
||||
@Override
|
||||
public void setupGUI() {
|
||||
AudioPlayerFragment.this.loadMediaInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBufferStart() {
|
||||
progressIndicator.setVisibility(View.VISIBLE);
|
||||
@ -365,9 +359,8 @@ public class AudioPlayerFragment extends Fragment implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean loadMediaInfo() {
|
||||
public void loadMediaInfo() {
|
||||
AudioPlayerFragment.this.loadMediaInfo();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -72,13 +72,7 @@ public class ChaptersFragment extends Fragment {
|
||||
super.onStart();
|
||||
controller = new PlaybackController(getActivity()) {
|
||||
@Override
|
||||
public boolean loadMediaInfo() {
|
||||
ChaptersFragment.this.loadMediaInfo();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupGUI() {
|
||||
public void loadMediaInfo() {
|
||||
ChaptersFragment.this.loadMediaInfo();
|
||||
}
|
||||
|
||||
|
@ -117,13 +117,7 @@ public class CoverFragment extends Fragment {
|
||||
super.onStart();
|
||||
controller = new PlaybackController(getActivity()) {
|
||||
@Override
|
||||
public boolean loadMediaInfo() {
|
||||
CoverFragment.this.loadMediaInfo();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupGUI() {
|
||||
public void loadMediaInfo() {
|
||||
CoverFragment.this.loadMediaInfo();
|
||||
}
|
||||
};
|
||||
|
@ -108,12 +108,7 @@ public class ExternalPlayerFragment extends Fragment {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean loadMediaInfo() {
|
||||
return ExternalPlayerFragment.this.loadMediaInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupGUI() {
|
||||
public void loadMediaInfo() {
|
||||
ExternalPlayerFragment.this.loadMediaInfo();
|
||||
}
|
||||
|
||||
@ -170,11 +165,11 @@ public class ExternalPlayerFragment extends Fragment {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean loadMediaInfo() {
|
||||
private void loadMediaInfo() {
|
||||
Log.d(TAG, "Loading media info");
|
||||
if (controller == null) {
|
||||
Log.w(TAG, "loadMediaInfo was called while PlaybackController was null!");
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (disposable != null) {
|
||||
@ -186,7 +181,6 @@ public class ExternalPlayerFragment extends Fragment {
|
||||
.subscribe(this::updateUi,
|
||||
error -> Log.e(TAG, Log.getStackTraceString(error)),
|
||||
() -> ((MainActivity) getActivity()).setPlayerVisible(false));
|
||||
return true;
|
||||
}
|
||||
|
||||
private void updateUi(Playable media) {
|
||||
|
@ -140,14 +140,8 @@ public class ItemDescriptionFragment extends Fragment {
|
||||
super.onStart();
|
||||
controller = new PlaybackController(getActivity()) {
|
||||
@Override
|
||||
public boolean loadMediaInfo() {
|
||||
public void loadMediaInfo() {
|
||||
load();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupGUI() {
|
||||
ItemDescriptionFragment.this.load();
|
||||
}
|
||||
};
|
||||
controller.init();
|
||||
|
@ -238,7 +238,12 @@ public class ItemFragment extends Fragment {
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
EventBus.getDefault().register(this);
|
||||
controller = new PlaybackController(getActivity());
|
||||
controller = new PlaybackController(getActivity()) {
|
||||
@Override
|
||||
public void loadMediaInfo() {
|
||||
// Do nothing
|
||||
}
|
||||
};
|
||||
controller.init();
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ import java.util.List;
|
||||
* Communicates with the playback service. GUI classes should use this class to
|
||||
* control playback instead of communicating with the PlaybackService directly.
|
||||
*/
|
||||
public class PlaybackController {
|
||||
public abstract class PlaybackController {
|
||||
|
||||
private static final String TAG = "PlaybackController";
|
||||
private static final int INVALID_TIME = -1;
|
||||
@ -193,7 +193,6 @@ public class PlaybackController {
|
||||
bound = activity.bindService(optionalIntent.get(), mConnection, 0);
|
||||
} else {
|
||||
status = PlayerStatus.STOPPED;
|
||||
setupGUI();
|
||||
handleStatus();
|
||||
}
|
||||
} else {
|
||||
@ -331,8 +330,6 @@ public class PlaybackController {
|
||||
}
|
||||
};
|
||||
|
||||
public void setupGUI() {}
|
||||
|
||||
public void onPositionObserverUpdate() {}
|
||||
|
||||
|
||||
@ -431,7 +428,10 @@ public class PlaybackController {
|
||||
}
|
||||
|
||||
private void checkMediaInfoLoaded() {
|
||||
mediaInfoLoaded = (mediaInfoLoaded || loadMediaInfo());
|
||||
if (!mediaInfoLoaded) {
|
||||
loadMediaInfo();
|
||||
}
|
||||
mediaInfoLoaded = true;
|
||||
}
|
||||
|
||||
private void updatePlayButtonAppearance(int resource, CharSequence contentDescription) {
|
||||
@ -446,9 +446,7 @@ public class PlaybackController {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean loadMediaInfo() {
|
||||
return false;
|
||||
}
|
||||
public abstract void loadMediaInfo();
|
||||
|
||||
public void onAwaitingVideoSurface() {}
|
||||
|
||||
@ -463,10 +461,9 @@ public class PlaybackController {
|
||||
status = info.playerStatus;
|
||||
media = info.playable;
|
||||
|
||||
setupGUI();
|
||||
handleStatus();
|
||||
// make sure that new media is loaded if it's available
|
||||
mediaInfoLoaded = false;
|
||||
handleStatus();
|
||||
|
||||
} else {
|
||||
Log.e(TAG,
|
||||
|
Loading…
x
Reference in New Issue
Block a user