Skip to content

Commit e379d0e

Browse files
committed
add toggle/message for enabling live update notification permission in settings
Change-Id: I822f4d1d8ad1b347ed53420fe3c8404958261d49
1 parent 652252a commit e379d0e

File tree

3 files changed

+56
-11
lines changed

3 files changed

+56
-11
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,12 @@
3838
android:theme="@style/Theme.PlatformSamples">
3939
<intent-filter>
4040
<action android:name="android.intent.action.MAIN" />
41-
4241
<category android:name="android.intent.category.LAUNCHER" />
4342
</intent-filter>
43+
<intent-filter>
44+
<action android:name="android.settings.APP_NOTIFICATION_PROMOTION_SETTINGS" />
45+
<category android:name="android.intent.category.DEFAULT" />
46+
</intent-filter>
4447
</activity>
4548

4649
<!--required for TFLite/LiteRT style transfer demo -->

samples/user-interface/live-updates/src/main/java/com/example/platform/ui/live_updates/LiveUpdateSample.kt

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ package com.example.platform.ui.live_updates
1919
import android.annotation.SuppressLint
2020
import android.app.NotificationManager
2121
import android.content.Context
22+
import android.content.Intent
2223
import android.os.Build
24+
import android.provider.Settings
2325
import androidx.annotation.RequiresApi
2426
import androidx.compose.foundation.layout.Box
2527
import androidx.compose.foundation.layout.Column
@@ -35,13 +37,16 @@ import androidx.compose.material3.SnackbarHost
3537
import androidx.compose.material3.SnackbarHostState
3638
import androidx.compose.material3.Text
3739
import androidx.compose.runtime.Composable
40+
import androidx.compose.runtime.mutableStateOf
3841
import androidx.compose.runtime.remember
3942
import androidx.compose.runtime.rememberCoroutineScope
4043
import androidx.compose.ui.Alignment
4144
import androidx.compose.ui.Modifier
4245
import androidx.compose.ui.platform.LocalContext
4346
import androidx.compose.ui.res.stringResource
4447
import androidx.compose.ui.unit.dp
48+
import androidx.lifecycle.Lifecycle
49+
import androidx.lifecycle.compose.LifecycleEventEffect
4550
import com.google.accompanist.permissions.ExperimentalPermissionsApi
4651
import com.google.accompanist.permissions.isGranted
4752
import com.google.accompanist.permissions.rememberPermissionState
@@ -66,15 +71,19 @@ fun LiveUpdateSample() {
6671
.fillMaxSize()
6772
.padding(contentPadding),
6873
) {
74+
NotificationPermission()
75+
Spacer(modifier = Modifier.height(4.dp))
76+
NotificationPostPromotedPermission()
6977
Text(stringResource( R.string.live_update_summary_text))
7078
Spacer(modifier = Modifier.height(4.dp))
71-
NotificationPermission()
72-
Button(onClick = {
73-
onCheckout()
74-
scope.launch {
75-
snackbarHostState.showSnackbar("Order placed")
76-
}
77-
}) {
79+
Button(
80+
onClick = {
81+
onCheckout()
82+
scope.launch {
83+
snackbarHostState.showSnackbar("Order placed")
84+
}
85+
},
86+
) {
7887
Text("Checkout")
7988
}
8089
}
@@ -100,27 +109,58 @@ fun NotificationPermission() {
100109
notificationPermissionState.launchPermissionRequest()
101110
},
102111
modifier = Modifier
103-
.fillMaxWidth()
112+
.fillMaxWidth(),
113+
permissionStringResourceId = R.string.permission_message,
114+
permissionRationalStringResourceId = R.string.permission_rationale,
104115
)
105116
}
106117
}
107118

119+
@RequiresApi(Build.VERSION_CODES.BAKLAVA)
120+
@Composable
121+
fun NotificationPostPromotedPermission() {
122+
val context = LocalContext.current
123+
val isPostPromotionsEnabled = remember { mutableStateOf(SnackbarNotificationManager.isPostPromotionsEnabled()) }
124+
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
125+
isPostPromotionsEnabled.value = SnackbarNotificationManager.isPostPromotionsEnabled()
126+
}
127+
if (!isPostPromotionsEnabled.value) {
128+
Text(
129+
text = stringResource(R.string.post_promoted_permission_message),
130+
modifier = Modifier.padding(horizontal = 10.dp),
131+
)
132+
Button(
133+
onClick = {
134+
val intent = Intent(Settings.ACTION_APP_NOTIFICATION_PROMOTION_SETTINGS).apply {
135+
flags = Intent.FLAG_ACTIVITY_NEW_TASK
136+
putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName)
137+
}
138+
context.startActivity(intent)
139+
},
140+
) {
141+
Text(text = stringResource(R.string.to_settings))
142+
}
143+
}
144+
}
145+
108146
@Composable
109147
private fun NotificationPermissionCard(
110148
shouldShowRationale: Boolean,
111149
onGrantClick: () -> Unit,
112150
modifier: Modifier = Modifier,
151+
permissionStringResourceId: Int,
152+
permissionRationalStringResourceId: Int,
113153
) {
114154
Card(
115155
modifier = modifier,
116156
) {
117157
Text(
118-
text = stringResource(R.string.permission_message),
158+
text = stringResource(permissionStringResourceId),
119159
modifier = Modifier.padding(16.dp),
120160
)
121161
if (shouldShowRationale) {
122162
Text(
123-
text = stringResource(R.string.permission_rationale),
163+
text = stringResource(permissionRationalStringResourceId),
124164
modifier = Modifier.padding(horizontal = 10.dp),
125165
)
126166
}

samples/user-interface/live-updates/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
<string name="permission_grant">Grant</string>
55
<string name="permission_message">Please grant the notification permission.</string>
66
<string name="permission_rationale">Notifications are used for order tracking.</string>
7+
<string name="post_promoted_permission_message">Please grant the app the Live Updates notification permission as it is essential to experiencing an enhanced order tracking user experience.</string>
8+
<string name="to_settings">Go to settings</string>
79
<string name="live_update_summary_text">Clicking the checkout button will simulate the tracking of an order with notifications styled with ProgressStyle.</string>
810
<string name="checkout">Checkout</string>
911
<string name="checking_out">Order placed</string>

0 commit comments

Comments
 (0)