diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 757f51d57d..e27d4fd5eb 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -30,6 +30,8 @@ * Fix potential infinite loop in `ProgressiveDownloader` caused by simultaneous download and playback with the same `PriorityTaskManager` ([#10570](https://github.com/google/ExoPlayer/pull/10570)). + * Make download notification appear immediately + ([#183](https://github.com/androidx/media/pull/183)) * Audio: * Adds `AudioOffloadListener.onExperimentalOffloadedPlayback` for the AudioTrack offload state. diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/offline/DownloadNotificationHelper.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/offline/DownloadNotificationHelper.java index c8aa4b3d37..e0fe53ef65 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/offline/DownloadNotificationHelper.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/offline/DownloadNotificationHelper.java @@ -15,15 +15,21 @@ */ package androidx.media3.exoplayer.offline; +import static androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE; + +import android.annotation.SuppressLint; import android.app.Notification; import android.app.PendingIntent; import android.content.Context; +import androidx.annotation.DoNotInline; import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import androidx.annotation.StringRes; import androidx.core.app.NotificationCompat; import androidx.media3.common.C; import androidx.media3.common.util.UnstableApi; +import androidx.media3.common.util.Util; import androidx.media3.exoplayer.R; import androidx.media3.exoplayer.scheduler.Requirements; import java.util.List; @@ -237,6 +243,19 @@ public final class DownloadNotificationHelper { notificationBuilder.setProgress(maxProgress, currentProgress, indeterminateProgress); notificationBuilder.setOngoing(ongoing); notificationBuilder.setShowWhen(showWhen); + if (Util.SDK_INT >= 31) { + Api31.setForegroundServiceBehavior(notificationBuilder); + } return notificationBuilder.build(); } + + @RequiresApi(31) + private static final class Api31 { + @SuppressLint("WrongConstant") // TODO(b/254277605): remove lint suppression + @DoNotInline + public static void setForegroundServiceBehavior( + NotificationCompat.Builder notificationBuilder) { + notificationBuilder.setForegroundServiceBehavior(FOREGROUND_SERVICE_IMMEDIATE); + } + } }