11package dev.anilbeesetti.nextplayer.feature.player.service
22
3+ import android.app.NotificationChannel
4+ import android.app.NotificationManager
35import android.app.PendingIntent
46import android.content.ContentResolver
57import android.content.Intent
68import android.net.Uri
9+ import android.os.Build
710import android.os.Bundle
811import androidx.annotation.OptIn
12+ import androidx.core.app.NotificationCompat
913import androidx.core.net.toUri
1014import androidx.media3.common.AudioAttributes
1115import androidx.media3.common.C
@@ -42,7 +46,6 @@ import dev.anilbeesetti.nextplayer.core.model.DecoderPriority
4246import dev.anilbeesetti.nextplayer.core.model.LoopMode
4347import dev.anilbeesetti.nextplayer.core.model.PlayerPreferences
4448import dev.anilbeesetti.nextplayer.core.model.Resume
45- import dev.anilbeesetti.nextplayer.core.ui.R as coreUiR
4649import dev.anilbeesetti.nextplayer.feature.player.PlayerActivity
4750import dev.anilbeesetti.nextplayer.feature.player.R
4851import dev.anilbeesetti.nextplayer.feature.player.extensions.addAdditionalSubtitleConfiguration
@@ -58,8 +61,6 @@ import dev.anilbeesetti.nextplayer.feature.player.extensions.switchTrack
5861import dev.anilbeesetti.nextplayer.feature.player.extensions.uriToSubtitleConfiguration
5962import dev.anilbeesetti.nextplayer.feature.player.extensions.videoZoom
6063import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.NextRenderersFactory
61- import java.io.File
62- import javax.inject.Inject
6364import kotlinx.coroutines.CoroutineScope
6465import kotlinx.coroutines.Dispatchers
6566import kotlinx.coroutines.SupervisorJob
@@ -71,6 +72,12 @@ import kotlinx.coroutines.guava.future
7172import kotlinx.coroutines.launch
7273import kotlinx.coroutines.runBlocking
7374import kotlinx.coroutines.supervisorScope
75+ import java.io.File
76+ import javax.inject.Inject
77+ import dev.anilbeesetti.nextplayer.core.ui.R as coreUiR
78+
79+ private const val PLAYER_NOTIFICATION_CHANNEL_ID = "player_channel"
80+ private const val PLAYER_NOTIFICATION_ID = 1
7481
7582@OptIn(UnstableApi::class)
7683@AndroidEntryPoint
@@ -416,6 +423,28 @@ class PlayerService : MediaSessionService() {
416423
417424 override fun onCreate() {
418425 super.onCreate()
426+
427+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
428+ val channel = NotificationChannel(
429+ PLAYER_NOTIFICATION_CHANNEL_ID,
430+ "Next Player",
431+ NotificationManager.IMPORTANCE_LOW,
432+ ).apply {
433+ description = "Media playback notifications"
434+ }
435+ (getSystemService(NOTIFICATION_SERVICE) as NotificationManager)
436+ .createNotificationChannel(channel)
437+ }
438+
439+ val notification = NotificationCompat.Builder(this, PLAYER_NOTIFICATION_CHANNEL_ID)
440+ .setContentTitle("Next Player")
441+ .setContentText("Playing media")
442+ .setSmallIcon(R.drawable.artwork_default)
443+ .setOngoing(true)
444+ .build()
445+
446+ startForeground(PLAYER_NOTIFICATION_ID, notification)
447+
419448 val renderersFactory = NextRenderersFactory(applicationContext)
420449 .setEnableDecoderFallback(true)
421450 .setExtensionRendererMode(
0 commit comments