@@ -2,18 +2,37 @@ package com.getcode.view.login
22
33import android.Manifest
44import android.os.Build
5- import androidx.compose.runtime.*
5+ import androidx.annotation.RequiresApi
6+ import androidx.compose.runtime.Composable
7+ import androidx.compose.runtime.getValue
8+ import androidx.compose.runtime.mutableStateOf
9+ import androidx.compose.runtime.remember
10+ import androidx.compose.runtime.setValue
611import androidx.compose.ui.platform.LocalContext
7- import com.getcode.App
812import com.getcode.R
913import com.getcode.manager.TopBarManager
10- import com.getcode.ui.components.PermissionCheck
14+ import com.getcode.ui.components.PermissionResult
1115import com.getcode.ui.components.getPermissionLauncher
16+ import com.getcode.ui.components.rememberPermissionChecker
1217import com.getcode.util.launchAppSettings
1318
1419@Composable
15- fun notificationPermissionCheck (isShowError : Boolean = true, onResult : (Boolean ) -> Unit ): (Boolean ) -> Unit {
20+ fun notificationPermissionCheck (isShowError : Boolean = true, onResult : (Boolean ) -> Unit ): (shouldRequest: Boolean ) -> Unit {
21+ return if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
22+ notificationPermissionCheckApi33(isShowError, onResult)
23+ } else {
24+ notificationPermissionCheckApiLegacy(isShowError, onResult)
25+ }
26+ }
27+
28+ @RequiresApi(Build .VERSION_CODES .TIRAMISU )
29+ @Composable
30+ private fun notificationPermissionCheckApi33 (
31+ isShowError : Boolean = true,
32+ onResult : (Boolean ) -> Unit
33+ ): (shouldRequest: Boolean ) -> Unit {
1634 val context = LocalContext .current
35+ val permissionChecker = rememberPermissionChecker()
1736 var permissionRequested by remember { mutableStateOf(false ) }
1837 val onPermissionError = {
1938 TopBarManager .showMessage(
@@ -26,29 +45,65 @@ fun notificationPermissionCheck(isShowError: Boolean = true, onResult: (Boolean)
2645 )
2746 )
2847 }
29- val onPermissionResult = { isGranted: Boolean ->
48+ val onPermissionResult = { result: PermissionResult ->
49+ val isGranted = result == PermissionResult .Granted
3050 onResult(isGranted)
3151 if (! isGranted && permissionRequested && isShowError) {
3252 onPermissionError()
3353 }
3454 Unit
3555 }
36- val launcher = getPermissionLauncher(onPermissionResult)
56+
57+ val launcher = getPermissionLauncher(
58+ Manifest .permission.POST_NOTIFICATIONS , onPermissionResult
59+ )
60+
3761 val permissionCheck = { shouldRequest: Boolean ->
3862 if (Build .VERSION .SDK_INT < 33 ) {
39- onPermissionResult(true )
63+ onPermissionResult(PermissionResult . Granted )
4064 } else {
4165 permissionRequested = shouldRequest
42- PermissionCheck .requestPermission(
43- context = context,
66+ permissionChecker.request(
4467 permission = Manifest .permission.POST_NOTIFICATIONS ,
4568 shouldRequest = shouldRequest,
4669 onPermissionResult = onPermissionResult,
4770 launcher = launcher
4871 )
4972 }
73+ }
74+
75+ return permissionCheck
76+ }
5077
78+ @Composable
79+ private fun notificationPermissionCheckApiLegacy (
80+ isShowError : Boolean = true,
81+ onResult : (Boolean ) -> Unit
82+ ): (shouldRequest: Boolean ) -> Unit {
83+ val context = LocalContext .current
84+ var permissionRequested by remember { mutableStateOf(false ) }
85+ val onPermissionError = {
86+ TopBarManager .showMessage(
87+ TopBarManager .TopBarMessage (
88+ title = context.getString(R .string.action_allowPushNotifications),
89+ message = context.getString(R .string.permissions_description_push),
90+ type = TopBarManager .TopBarMessageType .ERROR ,
91+ secondaryText = context.getString(R .string.action_openSettings),
92+ secondaryAction = { context.launchAppSettings() }
93+ )
94+ )
95+ }
96+ val onPermissionResult = { result: PermissionResult ->
97+ val isGranted = result == PermissionResult .Granted
98+ onResult(isGranted)
99+ if (! isGranted && permissionRequested && isShowError) {
100+ onPermissionError()
101+ }
102+ Unit
103+ }
51104
105+ val permissionCheck = { _: Boolean ->
106+ onPermissionResult(PermissionResult .Granted )
52107 }
53108
54109 return permissionCheck
0 commit comments