feat(notifications): request POST_NOTIFICATIONS permission on app start

This commit is contained in:
Jens Reinemann 2026-05-18 13:54:03 +02:00
parent c39bc5e485
commit 30e86bb7e0

View file

@ -1,14 +1,19 @@
package de.bollwerk.app package de.bollwerk.app
import android.Manifest
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import de.bollwerk.app.domain.usecase.EnsureKeyPairUseCase import de.bollwerk.app.domain.usecase.EnsureKeyPairUseCase
@ -31,11 +36,16 @@ class MainActivity : ComponentActivity() {
private val _chatNavigationEvents = MutableSharedFlow<ChatDeepLink>(extraBufferCapacity = 1) private val _chatNavigationEvents = MutableSharedFlow<ChatDeepLink>(extraBufferCapacity = 1)
val chatNavigationEvents: SharedFlow<ChatDeepLink> = _chatNavigationEvents.asSharedFlow() val chatNavigationEvents: SharedFlow<ChatDeepLink> = _chatNavigationEvents.asSharedFlow()
private val notificationPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { /* no-op best effort */ }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
lifecycleScope.launch { seedDatabaseUseCase() } lifecycleScope.launch { seedDatabaseUseCase() }
lifecycleScope.launch { ensureKeyPairUseCase.execute() } lifecycleScope.launch { ensureKeyPairUseCase.execute() }
enableEdgeToEdge() enableEdgeToEdge()
requestNotificationPermissionIfNeeded()
handleChatDeepLink(intent) handleChatDeepLink(intent)
setContent { setContent {
BollwerkTheme { BollwerkTheme {
@ -44,6 +54,16 @@ class MainActivity : ComponentActivity() {
} }
} }
private fun requestNotificationPermissionIfNeeded() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS)
!= PackageManager.PERMISSION_GRANTED
) {
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
}
override fun onNewIntent(intent: Intent) { override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent) super.onNewIntent(intent)
handleChatDeepLink(intent) handleChatDeepLink(intent)