@@ -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