Implement custom permission system for plugins

This commit is contained in:
MM20
2023-12-18 16:51:48 +01:00
parent 1c542f38ba
commit cb7f6b6693
20 changed files with 294 additions and 126 deletions
@@ -19,6 +19,8 @@ sealed class PluginState {
data object Error: PluginState()
data object NoPermission: PluginState()
companion object {
fun fromBundle(bundle: Bundle): PluginState? {
val type = bundle.getString("type") ?: return null
@@ -64,7 +64,6 @@ enum class PermissionGroup {
Notifications,
AppShortcuts,
Accessibility,
Plugins,
}
internal class PermissionsManagerImpl(
@@ -85,9 +84,6 @@ internal class PermissionsManagerImpl(
private val locationPermissionState = MutableStateFlow(
checkPermissionOnce(PermissionGroup.Location)
)
private val pluginsPermissionState = MutableStateFlow(
checkPermissionOnce(PermissionGroup.Plugins)
)
private val notificationsPermissionState = MutableStateFlow(false)
private val accessibilityPermissionState = MutableStateFlow(false)
private val appShortcutsPermissionState = MutableStateFlow(
@@ -158,14 +154,6 @@ internal class PermissionsManagerImpl(
CrashReporter.logException(e)
}
}
PermissionGroup.Plugins -> {
ActivityCompat.requestPermissions(
context,
pluginPermissions,
permissionGroup.ordinal
)
}
}
}
@@ -183,10 +171,6 @@ internal class PermissionsManagerImpl(
contactPermissions.all { context.checkPermission(it) }
}
PermissionGroup.Plugins -> {
pluginPermissions.all { context.checkPermission(it) }
}
PermissionGroup.ExternalStorage -> {
if (isAtLeastApiLevel(Build.VERSION_CODES.R)) {
Environment.isExternalStorageManager()
@@ -218,7 +202,6 @@ internal class PermissionsManagerImpl(
PermissionGroup.Notifications -> notificationsPermissionState
PermissionGroup.AppShortcuts -> appShortcutsPermissionState
PermissionGroup.Accessibility -> accessibilityPermissionState
PermissionGroup.Plugins -> pluginsPermissionState
}
}
@@ -237,7 +220,6 @@ internal class PermissionsManagerImpl(
PermissionGroup.Notifications -> notificationsPermissionState.value = granted
PermissionGroup.AppShortcuts -> appShortcutsPermissionState.value = granted
PermissionGroup.Accessibility -> accessibilityPermissionState.value = granted
PermissionGroup.Plugins -> pluginsPermissionState.value = granted
}
}
@@ -280,6 +262,5 @@ internal class PermissionsManagerImpl(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
private val pluginPermissions = arrayOf(PluginContract.Permission)
}
}
@@ -1,8 +1,6 @@
package de.mm20.launcher2.plugin.contracts
object PluginContract {
const val Permission = "de.mm20.launcher2.permission.USE_PLUGINS"
object Methods {
const val GetType = "getType"
const val GetState = "getState"