Add AppShortcut permission to permissions manager

This commit is contained in:
MM20 2022-03-20 00:54:00 +01:00
parent e04251d379
commit c920cc177c
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -4,6 +4,7 @@ import android.Manifest
import android.content.ActivityNotFoundException import android.content.ActivityNotFoundException
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.LauncherApps
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
@ -11,6 +12,7 @@ import android.os.Environment
import android.provider.Settings import android.provider.Settings
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.content.getSystemService
import de.mm20.launcher2.crashreporter.CrashReporter import de.mm20.launcher2.crashreporter.CrashReporter
import de.mm20.launcher2.ktx.checkPermission import de.mm20.launcher2.ktx.checkPermission
import de.mm20.launcher2.ktx.isAtLeastApiLevel import de.mm20.launcher2.ktx.isAtLeastApiLevel
@ -53,6 +55,7 @@ enum class PermissionGroup {
Contacts, Contacts,
ExternalStorage, ExternalStorage,
Notifications, Notifications,
AppShortcuts,
} }
internal class PermissionsManagerImpl( internal class PermissionsManagerImpl(
@ -74,6 +77,9 @@ internal class PermissionsManagerImpl(
checkPermissionOnce(PermissionGroup.Location) checkPermissionOnce(PermissionGroup.Location)
) )
private val notificationsPermissionState = MutableStateFlow(false) private val notificationsPermissionState = MutableStateFlow(false)
private val appShortcutsPermissionState = MutableStateFlow(
checkPermissionOnce(PermissionGroup.AppShortcuts)
)
override fun requestPermission(context: AppCompatActivity, permissionGroup: PermissionGroup) { override fun requestPermission(context: AppCompatActivity, permissionGroup: PermissionGroup) {
when (permissionGroup) { when (permissionGroup) {
@ -121,6 +127,10 @@ internal class PermissionsManagerImpl(
CrashReporter.logException(e) CrashReporter.logException(e)
} }
} }
PermissionGroup.AppShortcuts -> {
context.tryStartActivity(Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS))
pendingPermissionRequests.add(PermissionGroup.AppShortcuts)
}
} }
} }
@ -145,6 +155,9 @@ internal class PermissionsManagerImpl(
PermissionGroup.Notifications -> { PermissionGroup.Notifications -> {
notificationsPermissionState.value notificationsPermissionState.value
} }
PermissionGroup.AppShortcuts -> {
context.getSystemService<LauncherApps>()?.hasShortcutHostPermission() == true
}
} }
} }
@ -155,6 +168,7 @@ internal class PermissionsManagerImpl(
PermissionGroup.Contacts -> contactsPermissionState PermissionGroup.Contacts -> contactsPermissionState
PermissionGroup.ExternalStorage -> externalStoragePermissionState PermissionGroup.ExternalStorage -> externalStoragePermissionState
PermissionGroup.Notifications -> notificationsPermissionState PermissionGroup.Notifications -> notificationsPermissionState
PermissionGroup.AppShortcuts -> appShortcutsPermissionState
} }
} }
@ -171,6 +185,7 @@ internal class PermissionsManagerImpl(
PermissionGroup.Contacts -> contactsPermissionState.value = granted PermissionGroup.Contacts -> contactsPermissionState.value = granted
PermissionGroup.ExternalStorage -> externalStoragePermissionState.value = granted PermissionGroup.ExternalStorage -> externalStoragePermissionState.value = granted
PermissionGroup.Notifications -> notificationsPermissionState.value = granted PermissionGroup.Notifications -> notificationsPermissionState.value = granted
PermissionGroup.AppShortcuts -> appShortcutsPermissionState.value = granted
} }
} }
@ -182,6 +197,10 @@ internal class PermissionsManagerImpl(
externalStoragePermissionState.value = externalStoragePermissionState.value =
checkPermissionOnce(PermissionGroup.ExternalStorage) checkPermissionOnce(PermissionGroup.ExternalStorage)
} }
PermissionGroup.AppShortcuts -> {
appShortcutsPermissionState.value =
checkPermissionOnce(PermissionGroup.AppShortcuts)
}
else -> {} else -> {}
} }
iterator.remove() iterator.remove()