Skip to content

Commit 36115c3

Browse files
committed
PlayerService: remove !! where possible
It’s a bit unwieldy in places, but should improve the safety of the code in the face of possible race conditions.
1 parent be373dc commit 36115c3

1 file changed

Lines changed: 36 additions & 37 deletions

File tree

app/src/main/java/org/schabi/newpipe/player/PlayerService.kt

Lines changed: 36 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -82,35 +82,35 @@ class PlayerService : MediaBrowserServiceCompat() {
8282

8383
mediaBrowserImpl = MediaBrowserImpl(
8484
this,
85-
Consumer { parentId: String? ->
85+
Consumer { parentId: String ->
8686
this.notifyChildrenChanged(
87-
parentId!!
87+
parentId
8888
)
8989
}
9090
)
9191

9292
// see https://developer.android.com/training/cars/media#browser_workflow
93-
mediaSession = MediaSessionCompat(this, "MediaSessionPlayerServ")
94-
setSessionToken(mediaSession!!.sessionToken)
95-
sessionConnector = MediaSessionConnector(mediaSession!!)
96-
sessionConnector!!.setMetadataDeduplicationEnabled(true)
93+
val session = MediaSessionCompat(this, "MediaSessionPlayerServ")
94+
mediaSession = session
95+
setSessionToken(session.sessionToken)
96+
val connector = MediaSessionConnector(session)
97+
sessionConnector = connector
98+
connector.setMetadataDeduplicationEnabled(true)
9799

98100
mediaBrowserPlaybackPreparer = MediaBrowserPlaybackPreparer(
99101
this,
100-
BiConsumer { message: String?, code: Int? ->
101-
sessionConnector!!.setCustomErrorMessage(
102+
BiConsumer { message: String, code: Int ->
103+
connector.setCustomErrorMessage(
102104
message,
103-
code!!
105+
code
104106
)
105107
},
106-
Runnable { sessionConnector!!.setCustomErrorMessage(null) },
108+
Runnable { connector.setCustomErrorMessage(null) },
107109
Consumer { playWhenReady: Boolean? ->
108-
if (player != null) {
109-
player!!.onPrepare()
110-
}
110+
player?.onPrepare()
111111
}
112112
)
113-
sessionConnector!!.setPlaybackPreparer(mediaBrowserPlaybackPreparer)
113+
connector.setPlaybackPreparer(mediaBrowserPlaybackPreparer)
114114

115115
// Note: you might be tempted to create the player instance and call startForeground here,
116116
// but be aware that the Android system might start the service just to perform media
@@ -153,16 +153,18 @@ class PlayerService : MediaBrowserServiceCompat() {
153153
player!!.UIs().get(NotificationPlayerUi::class.java)
154154
?.createNotificationAndStartForeground()
155155

156-
if (playerWasNull && onPlayerStartedOrStopped != null) {
156+
val startedOrStopped = onPlayerStartedOrStopped
157+
if (playerWasNull && startedOrStopped != null) {
157158
// notify that a new player was created (but do it after creating the foreground
158159
// notification just to make sure we don't incur, due to slowness, in
159160
// "Context.startForegroundService() did not then call Service.startForeground()")
160-
onPlayerStartedOrStopped!!.accept(player)
161+
startedOrStopped.accept(player)
161162
}
162163
}
163164

165+
val p = player
164166
if (Intent.ACTION_MEDIA_BUTTON == intent.action &&
165-
(player == null || player!!.playQueue == null)
167+
(p == null || p.playQueue == null)
166168
) {
167169
/*
168170
No need to process media button's actions if the player is not working, otherwise
@@ -174,7 +176,6 @@ class PlayerService : MediaBrowserServiceCompat() {
174176
return START_NOT_STICKY
175177
}
176178

177-
val p = player
178179
if (p != null) {
179180
p.handleIntent(intent)
180181
p.UIs().get(MediaSessionPlayerUi::class.java)
@@ -189,17 +190,19 @@ class PlayerService : MediaBrowserServiceCompat() {
189190
Log.d(TAG, "stopForImmediateReusing() called")
190191
}
191192

192-
if (player != null && !player!!.exoPlayerIsNull()) {
193+
val p = player
194+
if (p != null && !p.exoPlayerIsNull()) {
193195
// Releases wifi & cpu, disables keepScreenOn, etc.
194196
// We can't just pause the player here because it will make transition
195197
// from one stream to a new stream not smooth
196-
player!!.smoothStopForImmediateReusing()
198+
p.smoothStopForImmediateReusing()
197199
}
198200
}
199201

200202
override fun onTaskRemoved(rootIntent: Intent?) {
201203
super.onTaskRemoved(rootIntent)
202-
if (player != null && !player!!.videoPlayerSelected()) {
204+
val p = player
205+
if (p != null && !p.videoPlayerSelected()) {
203206
return
204207
}
205208
onDestroy()
@@ -215,23 +218,22 @@ class PlayerService : MediaBrowserServiceCompat() {
215218

216219
cleanup()
217220

218-
mediaBrowserPlaybackPreparer!!.dispose()
219-
mediaSession!!.release()
220-
mediaBrowserImpl!!.dispose()
221+
mediaBrowserPlaybackPreparer?.dispose()
222+
mediaSession?.release()
223+
mediaBrowserImpl?.dispose()
221224
}
222225

223226
private fun cleanup() {
224-
if (player != null) {
225-
if (onPlayerStartedOrStopped != null) {
226-
// notify that the player is being destroyed
227-
onPlayerStartedOrStopped!!.accept(null)
228-
}
229-
player!!.saveAndShutdown()
227+
val p = player
228+
if (p != null) {
229+
// notify that the player is being destroyed
230+
onPlayerStartedOrStopped?.accept(null)
231+
p.saveAndShutdown()
230232
player = null
231233
}
232234

233235
// Should already be handled by MediaSessionPlayerUi, but just to be sure.
234-
mediaSession!!.setActive(false)
236+
mediaSession?.setActive(false)
235237

236238
// Should already be handled by NotificationUtil.cancelNotificationAndStopForeground() in
237239
// NotificationPlayerUi, but let's make sure that the foreground service is stopped.
@@ -311,10 +313,7 @@ class PlayerService : MediaBrowserServiceCompat() {
311313
*/
312314
fun setPlayerListener(listener: Consumer<Player?>?) {
313315
this.onPlayerStartedOrStopped = listener
314-
if (listener != null) {
315-
// if there is no player, then `null` will be sent here, to ensure the state is synced
316-
listener.accept(player)
317-
}
316+
listener?.accept(player)
318317
}
319318

320319
//endregion
@@ -332,15 +331,15 @@ class PlayerService : MediaBrowserServiceCompat() {
332331
parentId: String,
333332
result: Result<List<MediaBrowserCompat.MediaItem>>
334333
) {
335-
mediaBrowserImpl!!.onLoadChildren(parentId, result)
334+
mediaBrowserImpl?.onLoadChildren(parentId, result)
336335
}
337336

338337
override fun onSearch(
339338
query: String,
340339
extras: Bundle?,
341340
result: Result<List<MediaBrowserCompat.MediaItem>>
342341
) {
343-
mediaBrowserImpl!!.onSearch(query, result)
342+
mediaBrowserImpl?.onSearch(query, result)
344343
} //endregion
345344

346345
companion object {

0 commit comments

Comments
 (0)