Adds an explainer to install UnifiedPush apps if they are not installed.

This commit is contained in:
Vitor Pamplona
2023-10-27 13:05:47 -04:00
parent 56af44b00b
commit 6a8c756f7a
7 changed files with 153 additions and 50 deletions
@@ -371,6 +371,7 @@ object LocalPreferences {
automaticallyShowUrlPreview,
automaticallyHideNavigationBars,
automaticallyShowProfilePictures,
false,
false
)
}
@@ -12,7 +12,8 @@ data class Settings(
val automaticallyShowUrlPreview: ConnectivityType = ConnectivityType.ALWAYS,
val automaticallyHideNavigationBars: BooleanType = BooleanType.ALWAYS,
val automaticallyShowProfilePictures: ConnectivityType = ConnectivityType.ALWAYS,
val dontShowPushNotificationSelector: Boolean = false
val dontShowPushNotificationSelector: Boolean = false,
val dontAskForNotificationPermissions: Boolean = false
)
enum class ThemeType(val screenCode: Int, val resourceId: Int) {
@@ -31,6 +31,7 @@ class SettingsState() {
var automaticallyHideNavigationBars by mutableStateOf(BooleanType.ALWAYS)
var automaticallyShowProfilePictures by mutableStateOf(ConnectivityType.ALWAYS)
var dontShowPushNotificationSelector by mutableStateOf<Boolean>(false)
var dontAskForNotificationPermissions by mutableStateOf<Boolean>(false)
var isOnMobileData: State<Boolean> = mutableStateOf(false)
@@ -87,6 +88,8 @@ class SharedPreferencesViewModel : ViewModel() {
sharedPrefs.automaticallyShowUrlPreview = savedSettings.automaticallyShowUrlPreview
sharedPrefs.automaticallyHideNavigationBars = savedSettings.automaticallyHideNavigationBars
sharedPrefs.automaticallyShowProfilePictures = savedSettings.automaticallyShowProfilePictures
sharedPrefs.dontShowPushNotificationSelector = savedSettings.dontShowPushNotificationSelector
sharedPrefs.dontAskForNotificationPermissions = savedSettings.dontAskForNotificationPermissions
updateLanguageInTheUI()
}
@@ -154,12 +157,19 @@ class SharedPreferencesViewModel : ViewModel() {
}
fun dontShowPushNotificationSelector() {
if (!sharedPrefs.dontShowPushNotificationSelector) {
if (sharedPrefs.dontShowPushNotificationSelector == false) {
sharedPrefs.dontShowPushNotificationSelector = true
saveSharedSettings()
}
}
fun dontAskForNotificationPermissions() {
if (sharedPrefs.dontAskForNotificationPermissions == false) {
sharedPrefs.dontAskForNotificationPermissions = true
saveSharedSettings()
}
}
fun updateConnectivityStatusState(isOnMobileDataState: State<Boolean>) {
if (sharedPrefs.isOnMobileData != isOnMobileDataState) {
sharedPrefs.isOnMobileData = isOnMobileDataState
@@ -186,7 +196,8 @@ class SharedPreferencesViewModel : ViewModel() {
sharedPrefs.automaticallyShowUrlPreview,
sharedPrefs.automaticallyHideNavigationBars,
sharedPrefs.automaticallyShowProfilePictures,
sharedPrefs.dontShowPushNotificationSelector
sharedPrefs.dontShowPushNotificationSelector,
sharedPrefs.dontAskForNotificationPermissions
)
)
}
@@ -29,6 +29,7 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.PermissionState
import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState
import com.patrykandpatrick.vico.compose.axis.axisLabelComponent
@@ -79,8 +80,6 @@ fun NotificationScreen(
WatchAccountForNotifications(notifFeedViewModel, accountViewModel)
CheckifItNeedsToRequestNotificationPermission()
val lifeCycleOwner = LocalLifecycleOwner.current
DisposableEffect(lifeCycleOwner) {
val observer = LifecycleEventObserver { _, event ->
@@ -114,26 +113,29 @@ fun NotificationScreen(
}
}
// TODO: Turn this into an Account flag
var hasAlreadyAskedNotificationPermissions = false
@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun CheckifItNeedsToRequestNotificationPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !hasAlreadyAskedNotificationPermissions) {
val notificationPermissionState = rememberPermissionState(
Manifest.permission.POST_NOTIFICATIONS
)
fun CheckifItNeedsToRequestNotificationPermission(
sharedPreferencesViewModel: SharedPreferencesViewModel
): PermissionState {
val notificationPermissionState = rememberPermissionState(
Manifest.permission.POST_NOTIFICATIONS
)
if (!notificationPermissionState.status.isGranted) {
hasAlreadyAskedNotificationPermissions = true
if (!sharedPreferencesViewModel.sharedPrefs.dontAskForNotificationPermissions) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
if (!notificationPermissionState.status.isGranted) {
sharedPreferencesViewModel.dontAskForNotificationPermissions()
// This will pause the APP, including the connection with relays.
LaunchedEffect(notificationPermissionState) {
notificationPermissionState.launchPermissionRequest()
// This will pause the APP, including the connection with relays.
LaunchedEffect(notificationPermissionState) {
notificationPermissionState.launchPermissionRequest()
}
}
}
}
return notificationPermissionState
}
@Composable