Skip to content

Commit cf8fe95

Browse files
committed
PlayerService: runtime-assert that we get passed a service
We directly call the `getService` function after receiving the argument, so resolving the WeakPointer should never return `null` in our case. Of course there could be a race condition in theory, but I feel like if that happens we have bigger problems?
1 parent 36115c3 commit cf8fe95

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,18 @@ public void onServiceDisconnected(final ComponentName name) {
220220
}
221221

222222
@Override
223-
public void onServiceConnected(final ComponentName name, final IBinder service) {
223+
public void onServiceConnected(final ComponentName name, final IBinder binder) {
224224
Log.d(TAG, "Player service is connected");
225225

226-
if (service instanceof PlayerService.LocalBinder) {
227-
player = ((PlayerService.LocalBinder) service).getService().getPlayer();
226+
if (binder instanceof PlayerService.LocalBinder) {
227+
@Nullable final PlayerService s =
228+
((PlayerService.LocalBinder) binder).getService();
229+
if (s == null) {
230+
throw new IllegalArgumentException(
231+
"PlayerService.LocalBinder.getService() must never be"
232+
+ "null after the service connects");
233+
}
234+
player = s.getPlayer();
228235
}
229236

230237
if (player == null || player.getPlayQueue() == null || player.exoPlayerIsNull()) {

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,17 +188,23 @@ public void onServiceConnected(final ComponentName compName, final IBinder servi
188188
}
189189
final PlayerService.LocalBinder localBinder = (PlayerService.LocalBinder) service;
190190

191-
playerService = localBinder.getService();
191+
@Nullable final PlayerService s = localBinder.getService();
192+
if (s == null) {
193+
throw new IllegalArgumentException(
194+
"PlayerService.LocalBinder.getService() must never be"
195+
+ "null after the service connects");
196+
}
197+
playerService = s;
192198
if (listener != null) {
193-
listener.onServiceConnected(playerService);
199+
listener.onServiceConnected(s);
194200
getPlayer().ifPresent(p -> listener.onPlayerConnected(p, playAfterConnect));
195201
}
196202
startPlayerListener();
197203
// ^ will call listener.onPlayerConnected() down the line if there is an active player
198204

199205
// notify the main activity that binding the service has completed, so that it can
200206
// open the bottom mini-player
201-
NavigationHelper.sendPlayerStartedEvent(localBinder.getService());
207+
NavigationHelper.sendPlayerStartedEvent(s);
202208
}
203209
}
204210

0 commit comments

Comments
 (0)