Add tasks permission to permission manager

This commit is contained in:
MM20 2025-04-25 17:40:36 +02:00
parent cabc496c27
commit da924013b6
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -20,6 +20,7 @@ import de.mm20.launcher2.ktx.isAtLeastApiLevel
import de.mm20.launcher2.ktx.tryStartActivity import de.mm20.launcher2.ktx.tryStartActivity
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import androidx.core.net.toUri
interface PermissionsManager { interface PermissionsManager {
fun requestPermission(context: AppCompatActivity, permissionGroup: PermissionGroup) fun requestPermission(context: AppCompatActivity, permissionGroup: PermissionGroup)
@ -58,6 +59,7 @@ interface PermissionsManager {
enum class PermissionGroup { enum class PermissionGroup {
Calendar, Calendar,
Tasks,
Location, Location,
Contacts, Contacts,
ExternalStorage, ExternalStorage,
@ -77,6 +79,9 @@ internal class PermissionsManagerImpl(
private val calendarPermissionState = MutableStateFlow( private val calendarPermissionState = MutableStateFlow(
checkPermissionOnce(PermissionGroup.Calendar) checkPermissionOnce(PermissionGroup.Calendar)
) )
private val tasksPermissionState = MutableStateFlow(
checkPermissionOnce(PermissionGroup.Tasks)
)
private val contactsPermissionState = MutableStateFlow( private val contactsPermissionState = MutableStateFlow(
checkPermissionOnce(PermissionGroup.Contacts) checkPermissionOnce(PermissionGroup.Contacts)
) )
@ -108,6 +113,14 @@ internal class PermissionsManagerImpl(
) )
} }
PermissionGroup.Tasks -> {
ActivityCompat.requestPermissions(
context,
taskPermissions,
permissionGroup.ordinal
)
}
PermissionGroup.Location -> { PermissionGroup.Location -> {
ActivityCompat.requestPermissions( ActivityCompat.requestPermissions(
context, context,
@ -128,7 +141,7 @@ internal class PermissionsManagerImpl(
if (isAtLeastApiLevel(Build.VERSION_CODES.R)) { if (isAtLeastApiLevel(Build.VERSION_CODES.R)) {
val intent = val intent =
Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION).also { Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION).also {
it.data = Uri.parse("package:${context.packageName}") it.data = "package:${context.packageName}".toUri()
} }
context.tryStartActivity(intent) context.tryStartActivity(intent)
pendingPermissionRequests.add(PermissionGroup.ExternalStorage) pendingPermissionRequests.add(PermissionGroup.ExternalStorage)
@ -188,6 +201,10 @@ internal class PermissionsManagerImpl(
calendarPermissions.all { context.checkPermission(it) } calendarPermissions.all { context.checkPermission(it) }
} }
PermissionGroup.Tasks -> {
taskPermissions.all { context.checkPermission(it) }
}
PermissionGroup.Location -> { PermissionGroup.Location -> {
locationPermissions.any { context.checkPermission(it) } locationPermissions.any { context.checkPermission(it) }
} }
@ -231,6 +248,7 @@ internal class PermissionsManagerImpl(
override fun hasPermission(permissionGroup: PermissionGroup): Flow<Boolean> { override fun hasPermission(permissionGroup: PermissionGroup): Flow<Boolean> {
return when (permissionGroup) { return when (permissionGroup) {
PermissionGroup.Calendar -> calendarPermissionState PermissionGroup.Calendar -> calendarPermissionState
PermissionGroup.Tasks -> tasksPermissionState
PermissionGroup.Location -> locationPermissionState PermissionGroup.Location -> locationPermissionState
PermissionGroup.Contacts -> contactsPermissionState PermissionGroup.Contacts -> contactsPermissionState
PermissionGroup.ExternalStorage -> externalStoragePermissionState PermissionGroup.ExternalStorage -> externalStoragePermissionState
@ -251,6 +269,7 @@ internal class PermissionsManagerImpl(
val granted = grantResults.all { it == PackageManager.PERMISSION_GRANTED } val granted = grantResults.all { it == PackageManager.PERMISSION_GRANTED }
when (permissionGroup) { when (permissionGroup) {
PermissionGroup.Calendar -> calendarPermissionState.value = granted PermissionGroup.Calendar -> calendarPermissionState.value = granted
PermissionGroup.Tasks -> tasksPermissionState.value = granted
PermissionGroup.Location -> locationPermissionState.value = granted PermissionGroup.Location -> locationPermissionState.value = granted
PermissionGroup.Contacts -> contactsPermissionState.value = granted PermissionGroup.Contacts -> contactsPermissionState.value = granted
PermissionGroup.ExternalStorage -> externalStoragePermissionState.value = granted PermissionGroup.ExternalStorage -> externalStoragePermissionState.value = granted
@ -278,6 +297,7 @@ internal class PermissionsManagerImpl(
companion object { companion object {
private val calendarPermissions = arrayOf(Manifest.permission.READ_CALENDAR) private val calendarPermissions = arrayOf(Manifest.permission.READ_CALENDAR)
private val taskPermissions = arrayOf("org.tasks.permission.READ_TASKS")
private val locationPermissions = arrayOf( private val locationPermissions = arrayOf(
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION Manifest.permission.ACCESS_FINE_LOCATION