Вышла Jetpack Core 1.17.0 Stable где появилось новое API для работы с уведомлениями
// (Опционально) проверим, можно ли постить продвигаемые уведомления
// вернёт false, если пользователь выключил Live Updates
val notificationManager = NotificationManagerCompat.from(context)
val canPromote = notificationManager.canPostPromotedNotifications()
// Стиль ProgressStyle (сегменты/точки/иконки трекера)
val progressStyle = NotificationCompat.ProgressStyle()
.setStyledByProgress(false) // используем собственные сегменты/точки
.setProgress(600) // общая длина трека (произвольная метрика)
.setProgressTrackerIcon(IconCompat.createWithResource(context, R.drawable.ic_tracker))
.setProgressSegments(
listOf(
NotificationCompat.ProgressStyle.Segment(200).setColor(Color.GREEN),
NotificationCompat.ProgressStyle.Segment(250).setColor(Color.YELLOW),
NotificationCompat.ProgressStyle.Segment(150).setColor(Color.RED)
)
)
.setProgressPoints(
listOf(
NotificationCompat.ProgressStyle.Point(200).setColor(Color.DKGRAY),
NotificationCompat.ProgressStyle.Point(450).setColor(Color.DKGRAY)
)
)
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_delivery)
.setContentTitle("Доставка заказа") // обязательно для Live Update
.setContentText("Курьер в пути") // лаконично об этапe
.setOngoing(true) // обязательно: ongoing
.setOnlyAlertOnce(true)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setContentIntent(contentIntent)
.setStyle(progressStyle) // ProgressStyle из Jetpack Core
.setRequestPromotedOngoing(true) // ключ к Live Update
.setShortCriticalText("$etaMinutes мин") // текст в статус-чипе
.setWhen(etaWhenMillis) // для обратного отсчёта в чипе
.setShowWhen(false) // скрыть время в карточке, оставить чип
.build()
notificationManager.notify(NOTIF_ID, notification)