Skip to content

Commit ca22b2c

Browse files
committed
feat: request notification permission on bell tap
1 parent f0f37d8 commit ca22b2c

1 file changed

Lines changed: 24 additions & 1 deletion

File tree

‎app/src/main/java/dev/typetype/android/feature/channel/ChannelHeader.kt‎

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package dev.typetype.android.feature.channel
22

3+
import android.Manifest
4+
import android.content.pm.PackageManager
5+
import android.os.Build
6+
import androidx.activity.compose.rememberLauncherForActivityResult
7+
import androidx.activity.result.contract.ActivityResultContracts
38
import androidx.compose.foundation.background
49
import androidx.compose.foundation.layout.Arrangement
510
import androidx.compose.foundation.layout.Box
@@ -32,12 +37,14 @@ import androidx.compose.ui.Alignment
3237
import androidx.compose.ui.Modifier
3338
import androidx.compose.ui.draw.clip
3439
import androidx.compose.ui.layout.ContentScale
40+
import androidx.compose.ui.platform.LocalContext
3541
import androidx.compose.ui.res.pluralStringResource
3642
import androidx.compose.ui.res.stringResource
3743
import androidx.compose.ui.text.font.FontWeight
3844
import androidx.compose.ui.text.style.TextOverflow
3945
import androidx.compose.ui.unit.dp
4046
import androidx.compose.ui.unit.sp
47+
import androidx.core.content.ContextCompat
4148
import coil3.compose.AsyncImage
4249
import dev.typetype.android.R
4350
import dev.typetype.android.core.ui.share.LocalServerBaseUrl
@@ -89,6 +96,22 @@ private fun ChannelHeaderContent(
8996
expanded: Boolean,
9097
) {
9198
val serverBaseUrl = LocalServerBaseUrl.current
99+
val context = LocalContext.current
100+
val notificationPermissionLauncher = rememberLauncherForActivityResult(
101+
contract = ActivityResultContracts.RequestPermission(),
102+
) { granted ->
103+
if (granted) onToggleNotifications()
104+
}
105+
val requestNotifications: () -> Unit = {
106+
val notificationsGranted = Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU ||
107+
ContextCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) ==
108+
PackageManager.PERMISSION_GRANTED
109+
if (notificationsEnabled || notificationsGranted) {
110+
onToggleNotifications()
111+
} else {
112+
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
113+
}
114+
}
92115
Column(modifier = Modifier.fillMaxWidth()) {
93116
if (channel.bannerUrl.isNullOrBlank()) {
94117
ChannelBackButton(onNavigateBack = onNavigateBack)
@@ -136,7 +159,7 @@ private fun ChannelHeaderContent(
136159
}
137160
if (notificationsAvailable) {
138161
IconButton(
139-
onClick = onToggleNotifications,
162+
onClick = requestNotifications,
140163
enabled = !notificationsInFlight,
141164
) {
142165
Icon(

0 commit comments

Comments
 (0)