Loading feature/account/accountmanager/src/main/kotlin/app/k9mail/feature/account/accountmanager/AccountManagerHelper.kt +27 −0 Original line number Diff line number Diff line Loading @@ -23,9 +23,12 @@ import android.annotation.SuppressLint import android.app.Activity import android.content.ContentResolver import android.content.Context import android.content.pm.PackageManager import android.net.ConnectivityManager import android.net.NetworkCapabilities import android.os.Build import android.os.Bundle import androidx.core.content.ContextCompat import app.k9mail.core.common.mail.Protocols import app.k9mail.feature.account.accountmanager.providersxml.DiscoveredServerSettings import app.k9mail.legacy.account.Account.DeletePolicy Loading Loading @@ -331,4 +334,28 @@ object AccountManagerHelper { } return false } fun permissionsGranted(context: Context): Boolean { // Check Android version compatibility if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { // Notification permission required on Android 13+ (Tiramisu) val notificationGranted = ContextCompat.checkSelfPermission( context, android.Manifest.permission.POST_NOTIFICATIONS ) == PackageManager.PERMISSION_GRANTED val contactsGranted = ContextCompat.checkSelfPermission( context, android.Manifest.permission.READ_CONTACTS ) == PackageManager.PERMISSION_GRANTED return notificationGranted && contactsGranted } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Check only Contacts permission for Android 6 to Android 12 return ContextCompat.checkSelfPermission( context, android.Manifest.permission.READ_CONTACTS ) == PackageManager.PERMISSION_GRANTED } return true } } feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt +5 −2 Original line number Diff line number Diff line Loading @@ -5,10 +5,12 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.navigation.NavController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import app.k9mail.feature.account.accountmanager.AccountManagerHelper import app.k9mail.feature.account.setup.navigation.AccountSetupNavHost import app.k9mail.feature.onboarding.migration.api.OnboardingMigrationManager import app.k9mail.feature.onboarding.permissions.domain.PermissionsDomainContract.UseCase.HasRuntimePermissions Loading Loading @@ -62,9 +64,10 @@ fun OnboardingNavHost( ) { val navController = rememberNavController() var accountUuid by rememberSaveable { mutableStateOf<String?>(null) } val context = LocalContext.current fun onImportSuccess() { if (hasRuntimePermissions()) { if (hasRuntimePermissions() && !AccountManagerHelper.permissionsGranted(context)) { navController.navigateToPermissions() } else { onFinish(null) Loading Loading @@ -103,7 +106,7 @@ fun OnboardingNavHost( onBack = { navController.popBackStack() }, onFinish = { createdAccountUuid: String -> accountUuid = createdAccountUuid if (hasRuntimePermissions()) { if (hasRuntimePermissions() && !AccountManagerHelper.permissionsGranted(context)) { navController.navigateToPermissions() } else { onFinish(createdAccountUuid) Loading Loading
feature/account/accountmanager/src/main/kotlin/app/k9mail/feature/account/accountmanager/AccountManagerHelper.kt +27 −0 Original line number Diff line number Diff line Loading @@ -23,9 +23,12 @@ import android.annotation.SuppressLint import android.app.Activity import android.content.ContentResolver import android.content.Context import android.content.pm.PackageManager import android.net.ConnectivityManager import android.net.NetworkCapabilities import android.os.Build import android.os.Bundle import androidx.core.content.ContextCompat import app.k9mail.core.common.mail.Protocols import app.k9mail.feature.account.accountmanager.providersxml.DiscoveredServerSettings import app.k9mail.legacy.account.Account.DeletePolicy Loading Loading @@ -331,4 +334,28 @@ object AccountManagerHelper { } return false } fun permissionsGranted(context: Context): Boolean { // Check Android version compatibility if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { // Notification permission required on Android 13+ (Tiramisu) val notificationGranted = ContextCompat.checkSelfPermission( context, android.Manifest.permission.POST_NOTIFICATIONS ) == PackageManager.PERMISSION_GRANTED val contactsGranted = ContextCompat.checkSelfPermission( context, android.Manifest.permission.READ_CONTACTS ) == PackageManager.PERMISSION_GRANTED return notificationGranted && contactsGranted } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Check only Contacts permission for Android 6 to Android 12 return ContextCompat.checkSelfPermission( context, android.Manifest.permission.READ_CONTACTS ) == PackageManager.PERMISSION_GRANTED } return true } }
feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt +5 −2 Original line number Diff line number Diff line Loading @@ -5,10 +5,12 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.navigation.NavController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import app.k9mail.feature.account.accountmanager.AccountManagerHelper import app.k9mail.feature.account.setup.navigation.AccountSetupNavHost import app.k9mail.feature.onboarding.migration.api.OnboardingMigrationManager import app.k9mail.feature.onboarding.permissions.domain.PermissionsDomainContract.UseCase.HasRuntimePermissions Loading Loading @@ -62,9 +64,10 @@ fun OnboardingNavHost( ) { val navController = rememberNavController() var accountUuid by rememberSaveable { mutableStateOf<String?>(null) } val context = LocalContext.current fun onImportSuccess() { if (hasRuntimePermissions()) { if (hasRuntimePermissions() && !AccountManagerHelper.permissionsGranted(context)) { navController.navigateToPermissions() } else { onFinish(null) Loading Loading @@ -103,7 +106,7 @@ fun OnboardingNavHost( onBack = { navController.popBackStack() }, onFinish = { createdAccountUuid: String -> accountUuid = createdAccountUuid if (hasRuntimePermissions()) { if (hasRuntimePermissions() && !AccountManagerHelper.permissionsGranted(context)) { navController.navigateToPermissions() } else { onFinish(createdAccountUuid) Loading