diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e6e8442b..afd951f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ agp = "8.9.1" fragmentCompose = "1.8.6" kotlin = "2.1.10" -coreKtx = "1.15.0" +coreKtx = "1.17.0-alpha01" junit = "4.13.2" junitVersion = "1.2.1" espressoCore = "3.6.1" diff --git a/samples/accessibility/build.gradle.kts b/samples/accessibility/build.gradle.kts index aa8a0ad3..cca3351d 100644 --- a/samples/accessibility/build.gradle.kts +++ b/samples/accessibility/build.gradle.kts @@ -24,7 +24,7 @@ plugins { android { namespace = "com.example.platform.accessibility" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/camera/camera2/build.gradle.kts b/samples/camera/camera2/build.gradle.kts index 1f540082..ec776937 100644 --- a/samples/camera/camera2/build.gradle.kts +++ b/samples/camera/camera2/build.gradle.kts @@ -22,7 +22,7 @@ plugins { android { namespace = "com.example.platform.camera" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/camera/camerax/build.gradle.kts b/samples/camera/camerax/build.gradle.kts index 340ac61a..ca63d028 100644 --- a/samples/camera/camerax/build.gradle.kts +++ b/samples/camera/camerax/build.gradle.kts @@ -22,7 +22,7 @@ plugins { android { namespace = "com.example.platform.camerax" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/connectivity/audio/build.gradle.kts b/samples/connectivity/audio/build.gradle.kts index a32cb97c..733a4af2 100644 --- a/samples/connectivity/audio/build.gradle.kts +++ b/samples/connectivity/audio/build.gradle.kts @@ -23,7 +23,7 @@ plugins { android { namespace = "com.example.platform.connectivity.audio" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/connectivity/bluetooth/ble/build.gradle.kts b/samples/connectivity/bluetooth/ble/build.gradle.kts index 785951ef..acf0e97c 100644 --- a/samples/connectivity/bluetooth/ble/build.gradle.kts +++ b/samples/connectivity/bluetooth/ble/build.gradle.kts @@ -23,7 +23,7 @@ plugins { android { namespace = "com.example.platform.connectivity.bluetooth.ble" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/connectivity/bluetooth/companion/build.gradle.kts b/samples/connectivity/bluetooth/companion/build.gradle.kts index cc6b47b3..a2eda689 100644 --- a/samples/connectivity/bluetooth/companion/build.gradle.kts +++ b/samples/connectivity/bluetooth/companion/build.gradle.kts @@ -23,7 +23,7 @@ plugins { android { namespace = "com.example.platform.connectivity.bluetooth.companion" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/connectivity/callnotification/build.gradle.kts b/samples/connectivity/callnotification/build.gradle.kts index 6baf3622..a9ef9a6a 100644 --- a/samples/connectivity/callnotification/build.gradle.kts +++ b/samples/connectivity/callnotification/build.gradle.kts @@ -24,7 +24,7 @@ plugins { android { namespace = "com.example.platform.connectivity.callnotification" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/connectivity/telecom/build.gradle.kts b/samples/connectivity/telecom/build.gradle.kts index 998c61ac..efa9277a 100644 --- a/samples/connectivity/telecom/build.gradle.kts +++ b/samples/connectivity/telecom/build.gradle.kts @@ -25,7 +25,7 @@ plugins { android { namespace = "com.example.platform.connectivity.telecom" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/graphics/pdf/build.gradle.kts b/samples/graphics/pdf/build.gradle.kts index b0bc1b95..0aafd92a 100644 --- a/samples/graphics/pdf/build.gradle.kts +++ b/samples/graphics/pdf/build.gradle.kts @@ -24,7 +24,7 @@ plugins { android { namespace = "com.example.platform.graphics.pdf" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/graphics/ultrahdr/build.gradle.kts b/samples/graphics/ultrahdr/build.gradle.kts index f474fa67..1db48859 100644 --- a/samples/graphics/ultrahdr/build.gradle.kts +++ b/samples/graphics/ultrahdr/build.gradle.kts @@ -23,7 +23,7 @@ plugins { android { namespace = "com.example.platform.graphics.ultrahdr" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/location/build.gradle.kts b/samples/location/build.gradle.kts index c1556090..563cb301 100644 --- a/samples/location/build.gradle.kts +++ b/samples/location/build.gradle.kts @@ -22,7 +22,7 @@ plugins { android { namespace = "com.example.platform.location" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/media/ultrahdr/build.gradle.kts b/samples/media/ultrahdr/build.gradle.kts index 8feec968..5f07561c 100644 --- a/samples/media/ultrahdr/build.gradle.kts +++ b/samples/media/ultrahdr/build.gradle.kts @@ -23,7 +23,7 @@ plugins { android { namespace = "com.example.platform.media.ultrahdr" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/media/video/build.gradle.kts b/samples/media/video/build.gradle.kts index 0dc81d71..2e7a8cb1 100644 --- a/samples/media/video/build.gradle.kts +++ b/samples/media/video/build.gradle.kts @@ -23,7 +23,7 @@ plugins { android { namespace = "com.example.platform.media.video" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/privacy/data/build.gradle.kts b/samples/privacy/data/build.gradle.kts index 4333a337..f92a8ad7 100644 --- a/samples/privacy/data/build.gradle.kts +++ b/samples/privacy/data/build.gradle.kts @@ -23,7 +23,7 @@ plugins { android { namespace = "com.example.platform.privacy.data" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/privacy/permissions/build.gradle.kts b/samples/privacy/permissions/build.gradle.kts index 0fda44cf..1e0e762d 100644 --- a/samples/privacy/permissions/build.gradle.kts +++ b/samples/privacy/permissions/build.gradle.kts @@ -22,7 +22,7 @@ plugins { android { namespace = "com.example.platform.privacy.permissions" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/privacy/transparency/build.gradle.kts b/samples/privacy/transparency/build.gradle.kts index c2696825..77a47d8f 100644 --- a/samples/privacy/transparency/build.gradle.kts +++ b/samples/privacy/transparency/build.gradle.kts @@ -22,7 +22,7 @@ plugins { android { namespace = "com.example.platform.privacy.transparency" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/storage/build.gradle.kts b/samples/storage/build.gradle.kts index a01b756d..bd7145fb 100644 --- a/samples/storage/build.gradle.kts +++ b/samples/storage/build.gradle.kts @@ -24,7 +24,7 @@ plugins { android { namespace = "com.example.platform.storage" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/user-interface/appwidgets/build.gradle.kts b/samples/user-interface/appwidgets/build.gradle.kts index ebbbde79..a2ed6562 100644 --- a/samples/user-interface/appwidgets/build.gradle.kts +++ b/samples/user-interface/appwidgets/build.gradle.kts @@ -23,7 +23,7 @@ plugins { android { namespace = "com.example.platform.ui.appwidgets" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/user-interface/constraintlayout/build.gradle.kts b/samples/user-interface/constraintlayout/build.gradle.kts index 05cdb540..ddfe7ace 100644 --- a/samples/user-interface/constraintlayout/build.gradle.kts +++ b/samples/user-interface/constraintlayout/build.gradle.kts @@ -21,7 +21,7 @@ plugins { android { namespace = "com.example.platform.ui.constraintlayout" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/user-interface/draganddrop/build.gradle.kts b/samples/user-interface/draganddrop/build.gradle.kts index c3b7ba7c..419a2f9b 100644 --- a/samples/user-interface/draganddrop/build.gradle.kts +++ b/samples/user-interface/draganddrop/build.gradle.kts @@ -21,7 +21,7 @@ plugins { android { namespace = "com.example.platform.ui.draganddrop" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/user-interface/haptics/build.gradle.kts b/samples/user-interface/haptics/build.gradle.kts index 88a2d23a..155aef27 100644 --- a/samples/user-interface/haptics/build.gradle.kts +++ b/samples/user-interface/haptics/build.gradle.kts @@ -22,7 +22,7 @@ plugins { android { namespace = "com.example.platform.ui.haptics" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/user-interface/live-updates/src/main/AndroidManifest.xml b/samples/user-interface/live-updates/src/main/AndroidManifest.xml index 165bdb3a..0476851a 100644 --- a/samples/user-interface/live-updates/src/main/AndroidManifest.xml +++ b/samples/user-interface/live-updates/src/main/AndroidManifest.xml @@ -16,7 +16,8 @@ --> - + - + + \ No newline at end of file diff --git a/samples/user-interface/live-updates/src/main/java/com/example/platform/ui/live_updates/LiveUpdateSample.kt b/samples/user-interface/live-updates/src/main/java/com/example/platform/ui/live_updates/LiveUpdateSample.kt index 8eebd009..a0f6634a 100644 --- a/samples/user-interface/live-updates/src/main/java/com/example/platform/ui/live_updates/LiveUpdateSample.kt +++ b/samples/user-interface/live-updates/src/main/java/com/example/platform/ui/live_updates/LiveUpdateSample.kt @@ -48,7 +48,7 @@ import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.shouldShowRationale import kotlinx.coroutines.launch -@RequiresApi(Build.VERSION_CODES.O) +@RequiresApi(Build.VERSION_CODES.BAKLAVA) @Composable fun LiveUpdateSample() { val notificationManager = @@ -81,6 +81,7 @@ fun LiveUpdateSample() { } } +@RequiresApi(Build.VERSION_CODES.BAKLAVA) fun onCheckout() { SnackbarNotificationManager.start() } diff --git a/samples/user-interface/live-updates/src/main/java/com/example/platform/ui/live_updates/SnackbarNotificationManager.kt b/samples/user-interface/live-updates/src/main/java/com/example/platform/ui/live_updates/SnackbarNotificationManager.kt index ddcfc312..357a0168 100644 --- a/samples/user-interface/live-updates/src/main/java/com/example/platform/ui/live_updates/SnackbarNotificationManager.kt +++ b/samples/user-interface/live-updates/src/main/java/com/example/platform/ui/live_updates/SnackbarNotificationManager.kt @@ -16,18 +16,20 @@ package com.example.platform.ui.live_updates -import android.app.Notification -import android.app.Notification.ProgressStyle import android.app.NotificationChannel import android.app.NotificationManager import android.app.NotificationManager.IMPORTANCE_DEFAULT import android.content.Context +import androidx.core.app.NotificationCompat.ProgressStyle import android.graphics.Color import android.os.Build import android.os.Handler import android.os.Looper import androidx.annotation.RequiresApi +import androidx.core.app.NotificationCompat import androidx.core.graphics.drawable.IconCompat +import java.util.logging.Level +import java.util.logging.Logger object SnackbarNotificationManager { private lateinit var notificationManager: NotificationManager @@ -48,7 +50,7 @@ object SnackbarNotificationManager { private enum class OrderState(val delay: Long) { INITIALIZING(5000) { @RequiresApi(Build.VERSION_CODES.BAKLAVA) - override fun buildNotification(): Notification.Builder { + override fun buildNotification(): NotificationCompat.Builder { return buildBaseNotification(appContext, INITIALIZING) .setSmallIcon(R.drawable.ic_launcher_foreground) .setContentTitle("You order is being placed") @@ -58,7 +60,7 @@ object SnackbarNotificationManager { }, FOOD_PREPARATION(9000) { @RequiresApi(Build.VERSION_CODES.BAKLAVA) - override fun buildNotification(): Notification.Builder { + override fun buildNotification(): NotificationCompat.Builder { return buildBaseNotification(appContext, FOOD_PREPARATION) .setContentTitle("Your order is being prepared") .setContentText("Next step will be delivery") @@ -72,7 +74,7 @@ object SnackbarNotificationManager { }, FOOD_ENROUTE(13000) { @RequiresApi(Build.VERSION_CODES.BAKLAVA) - override fun buildNotification(): Notification.Builder { + override fun buildNotification(): NotificationCompat.Builder { return buildBaseNotification(appContext, FOOD_ENROUTE) .setContentTitle("Your order is on its way") .setContentText("Enroute to destination") @@ -81,7 +83,7 @@ object SnackbarNotificationManager { .setProgressTrackerIcon( IconCompat.createWithResource( appContext, R.drawable.shopping_bag - ).toIcon(appContext) + ) ) .setProgress(50) ) @@ -94,7 +96,7 @@ object SnackbarNotificationManager { }, FOOD_ARRIVING(18000) { @RequiresApi(Build.VERSION_CODES.BAKLAVA) - override fun buildNotification(): Notification.Builder { + override fun buildNotification(): NotificationCompat.Builder { return buildBaseNotification(appContext, FOOD_ARRIVING) .setContentTitle("Your order is arriving and has been dropped off") .setContentText("Enjoy & don't forget to refrigerate any perishable items.") @@ -103,7 +105,7 @@ object SnackbarNotificationManager { .setProgressTrackerIcon( IconCompat.createWithResource( appContext, R.drawable.delivery_truck - ).toIcon(appContext) + ) ) .setProgress(75) ) @@ -116,7 +118,7 @@ object SnackbarNotificationManager { }, ORDER_COMPLETE(21000) { @RequiresApi(Build.VERSION_CODES.BAKLAVA) - override fun buildNotification(): Notification.Builder { + override fun buildNotification(): NotificationCompat.Builder { return buildBaseNotification(appContext, ORDER_COMPLETE) .setContentTitle("Your order is complete.") .setContentText("Thank you for using JetSnack for your snacking needs.") @@ -125,7 +127,7 @@ object SnackbarNotificationManager { .setProgressTrackerIcon( IconCompat.createWithResource( appContext, R.drawable.check_circle - ).toIcon(appContext) + ) ) .setProgress(100) ) @@ -142,7 +144,7 @@ object SnackbarNotificationManager { fun buildBaseProgressStyle(orderState: OrderState): ProgressStyle { val pointColor = Color.valueOf(236f, 183f, 255f, 1f).toArgb() val segmentColor = Color.valueOf(134f, 247f, 250f, 1f).toArgb() - var progressStyle = ProgressStyle() + var progressStyle = NotificationCompat.ProgressStyle() .setProgressPoints( listOf( ProgressStyle.Point(25).setColor(pointColor), @@ -187,11 +189,11 @@ object SnackbarNotificationManager { } @RequiresApi(Build.VERSION_CODES.O) - fun buildBaseNotification(appContext: Context, orderState: OrderState): Notification.Builder { - var notificationBuilder = Notification.Builder(appContext, CHANNEL_ID) + fun buildBaseNotification(appContext: Context, orderState: OrderState): NotificationCompat.Builder { + val notificationBuilder = NotificationCompat.Builder(appContext, CHANNEL_ID) .setSmallIcon(R.drawable.ic_launcher_foreground) .setOngoing(true) - .setColorized(true) + .setRequestPromotedOngoing(true) when (orderState) { INITIALIZING -> {} @@ -200,27 +202,38 @@ object SnackbarNotificationManager { FOOD_ARRIVING -> notificationBuilder .addAction( - Notification.Action.Builder(null, "Got it", null).build() + NotificationCompat.Action.Builder(null, "Got it", null).build() ) .addAction( - Notification.Action.Builder(null, "Tip", null).build() + NotificationCompat.Action.Builder(null, "Tip", null).build() ) ORDER_COMPLETE -> notificationBuilder .addAction( - Notification.Action.Builder( + NotificationCompat.Action.Builder( null, "Rate delivery", null).build() ) } return notificationBuilder } - abstract fun buildNotification(): Notification.Builder + abstract fun buildNotification(): NotificationCompat.Builder } + @RequiresApi(Build.VERSION_CODES.BAKLAVA) fun start() { for (state in OrderState.entries) { val notification = state.buildNotification().build() + + Logger.getLogger("canPostPromotedNotifications") + .log( + Level.INFO, + notificationManager.canPostPromotedNotifications().toString()) + Logger.getLogger("hasPromotableCharacteristics") + .log( + Level.INFO, + notification.hasPromotableCharacteristics().toString()) + Handler(Looper.getMainLooper()).postDelayed({ notificationManager.notify(NOTIFICATION_ID, notification) }, state.delay) diff --git a/samples/user-interface/picture-in-picture/build.gradle.kts b/samples/user-interface/picture-in-picture/build.gradle.kts index 447ead35..8e7341c9 100644 --- a/samples/user-interface/picture-in-picture/build.gradle.kts +++ b/samples/user-interface/picture-in-picture/build.gradle.kts @@ -24,7 +24,7 @@ plugins { android { namespace = "com.example.android.pip" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/user-interface/predictiveback/build.gradle.kts b/samples/user-interface/predictiveback/build.gradle.kts index f4981bcc..77c48038 100644 --- a/samples/user-interface/predictiveback/build.gradle.kts +++ b/samples/user-interface/predictiveback/build.gradle.kts @@ -23,7 +23,7 @@ plugins { android { namespace = "com.example.platform.ui.predictiveback" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/user-interface/quicksettings/build.gradle.kts b/samples/user-interface/quicksettings/build.gradle.kts index f4097c6a..80b5983e 100644 --- a/samples/user-interface/quicksettings/build.gradle.kts +++ b/samples/user-interface/quicksettings/build.gradle.kts @@ -22,7 +22,7 @@ plugins { android { namespace = "com.example.platform.ui.quicksettings" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/user-interface/share/build.gradle.kts b/samples/user-interface/share/build.gradle.kts index cf40b239..baea8fd0 100644 --- a/samples/user-interface/share/build.gradle.kts +++ b/samples/user-interface/share/build.gradle.kts @@ -22,7 +22,7 @@ plugins { android { namespace = "com.example.platform.ui.share" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/user-interface/text/build.gradle.kts b/samples/user-interface/text/build.gradle.kts index afad1464..c470f201 100644 --- a/samples/user-interface/text/build.gradle.kts +++ b/samples/user-interface/text/build.gradle.kts @@ -22,7 +22,7 @@ plugins { android { namespace = "com.example.platform.ui.text" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/user-interface/window-insets/build.gradle.kts b/samples/user-interface/window-insets/build.gradle.kts index 382a99ca..bdc65cb6 100644 --- a/samples/user-interface/window-insets/build.gradle.kts +++ b/samples/user-interface/window-insets/build.gradle.kts @@ -22,7 +22,7 @@ plugins { android { namespace = "com.example.platform.ui.insets" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/samples/user-interface/windowmanager/build.gradle.kts b/samples/user-interface/windowmanager/build.gradle.kts index 006c92b0..0115aee0 100644 --- a/samples/user-interface/windowmanager/build.gradle.kts +++ b/samples/user-interface/windowmanager/build.gradle.kts @@ -21,7 +21,7 @@ plugins { android { namespace = "com.example.platform.ui.windowmanager" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21 diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index b9d33722..79fb702c 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -6,7 +6,7 @@ plugins { android { namespace = "com.example.platform.shared" - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 21