Skip to content

Commit be95d7f

Browse files
authored
Merge pull request #7704 from Stypox/fix-stream-menu-crash
Fix crash when long-pressing stream while player is starting
2 parents 377914f + 71c5aaa commit be95d7f

7 files changed

Lines changed: 25 additions & 10 deletions

File tree

app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ protected void showStreamDialog(final StreamInfoItem item) {
352352
}
353353
final List<StreamDialogEntry> entries = new ArrayList<>();
354354

355-
if (PlayerHolder.getInstance().isPlayerOpen()) {
355+
if (PlayerHolder.getInstance().isPlayQueueReady()) {
356356
entries.add(StreamDialogEntry.enqueue);
357357

358358
if (PlayerHolder.getInstance().getQueueSize() > 1) {

app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ protected void showStreamDialog(final StreamInfoItem item) {
149149

150150
final ArrayList<StreamDialogEntry> entries = new ArrayList<>();
151151

152-
if (PlayerHolder.getInstance().isPlayerOpen()) {
152+
if (PlayerHolder.getInstance().isPlayQueueReady()) {
153153
entries.add(StreamDialogEntry.enqueue);
154154

155155
if (PlayerHolder.getInstance().getQueueSize() > 1) {

app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
362362
if (context == null || context.resources == null || activity == null) return
363363

364364
val entries = ArrayList<StreamDialogEntry>()
365-
if (PlayerHolder.getInstance().isPlayerOpen) {
365+
if (PlayerHolder.getInstance().isPlayQueueReady) {
366366
entries.add(StreamDialogEntry.enqueue)
367367

368368
if (PlayerHolder.getInstance().queueSize > 1) {

app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ private void showStreamDialog(final StreamStatisticsEntry item) {
338338

339339
final ArrayList<StreamDialogEntry> entries = new ArrayList<>();
340340

341-
if (PlayerHolder.getInstance().isPlayerOpen()) {
341+
if (PlayerHolder.getInstance().isPlayQueueReady()) {
342342
entries.add(StreamDialogEntry.enqueue);
343343

344344
if (PlayerHolder.getInstance().getQueueSize() > 1) {

app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -753,7 +753,7 @@ protected void showStreamItemDialog(final PlaylistStreamEntry item) {
753753

754754
final ArrayList<StreamDialogEntry> entries = new ArrayList<>();
755755

756-
if (PlayerHolder.getInstance().isPlayerOpen()) {
756+
if (PlayerHolder.getInstance().isPlayQueueReady()) {
757757
entries.add(StreamDialogEntry.enqueue);
758758

759759
if (PlayerHolder.getInstance().getQueueSize() > 1) {

app/src/main/java/org/schabi/newpipe/player/Player.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,8 @@ public final class Player implements
260260
// Playback
261261
//////////////////////////////////////////////////////////////////////////*/
262262

263-
private PlayQueue playQueue;
263+
// play queue might be null e.g. while player is starting
264+
@Nullable private PlayQueue playQueue;
264265
private PlayQueueAdapter playQueueAdapter;
265266
private StreamSegmentAdapter segmentAdapter;
266267

@@ -4226,6 +4227,7 @@ public boolean popupPlayerSelected() {
42264227
}
42274228

42284229

4230+
@Nullable
42294231
public PlayQueue getPlayQueue() {
42304232
return playQueue;
42314233
}

app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ public static synchronized PlayerHolder getInstance() {
3838
private static final boolean DEBUG = MainActivity.DEBUG;
3939
private static final String TAG = PlayerHolder.class.getSimpleName();
4040

41-
private PlayerServiceExtendedEventListener listener;
41+
@Nullable private PlayerServiceExtendedEventListener listener;
4242

4343
private final PlayerServiceConnection serviceConnection = new PlayerServiceConnection();
4444
private boolean bound;
45-
private MainPlayer playerService;
46-
private Player player;
45+
@Nullable private MainPlayer playerService;
46+
@Nullable private Player player;
4747

4848
/**
4949
* Returns the current {@link MainPlayer.PlayerType} of the {@link MainPlayer} service,
@@ -70,12 +70,25 @@ public boolean isPlayerOpen() {
7070
return player != null;
7171
}
7272

73+
/**
74+
* Use this method to only allow the user to manipulate the play queue (e.g. by enqueueing via
75+
* the stream long press menu) when there actually is a play queue to manipulate.
76+
* @return true only if the player is open and its play queue is ready (i.e. it is not null)
77+
*/
78+
public boolean isPlayQueueReady() {
79+
return player != null && player.getPlayQueue() != null;
80+
}
81+
7382
public boolean isBound() {
7483
return bound;
7584
}
7685

7786
public int getQueueSize() {
78-
return isPlayerOpen() ? player.getPlayQueue().size() : 0;
87+
if (player == null || player.getPlayQueue() == null) {
88+
// player play queue might be null e.g. while player is starting
89+
return 0;
90+
}
91+
return player.getPlayQueue().size();
7992
}
8093

8194
public void setListener(@Nullable final PlayerServiceExtendedEventListener newListener) {

0 commit comments

Comments
 (0)