Glimpse: Make PermissionsUtils an object
No need to create an instance
Change-Id: I2c3ed795fabcdf9646a467fbb7cfeb7922cda23e
diff --git a/app/src/main/java/org/lineageos/glimpse/utils/PermissionsGatedCallback.kt b/app/src/main/java/org/lineageos/glimpse/utils/PermissionsGatedCallback.kt
index 5e6acaa..c05868a 100644
--- a/app/src/main/java/org/lineageos/glimpse/utils/PermissionsGatedCallback.kt
+++ b/app/src/main/java/org/lineageos/glimpse/utils/PermissionsGatedCallback.kt
@@ -43,12 +43,11 @@
callback,
)
- private val permissionsUtils by lazy { PermissionsUtils(getContext()) }
private val mainPermissionsRequestLauncher = caller.registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) {
if (it.isNotEmpty()) {
- if (!permissionsUtils.mainPermissionsGranted()) {
+ if (!PermissionsUtils.mainPermissionsGranted(getContext())) {
Toast.makeText(
getContext(), R.string.app_permissions_toast, Toast.LENGTH_SHORT
).show()
@@ -60,7 +59,7 @@
}
fun runAfterPermissionsCheck() {
- if (!permissionsUtils.mainPermissionsGranted()) {
+ if (!PermissionsUtils.mainPermissionsGranted(getContext())) {
mainPermissionsRequestLauncher.launch(PermissionsUtils.mainPermissions)
} else {
callback()
diff --git a/app/src/main/java/org/lineageos/glimpse/utils/PermissionsUtils.kt b/app/src/main/java/org/lineageos/glimpse/utils/PermissionsUtils.kt
index 9368848..7f2cabd 100644
--- a/app/src/main/java/org/lineageos/glimpse/utils/PermissionsUtils.kt
+++ b/app/src/main/java/org/lineageos/glimpse/utils/PermissionsUtils.kt
@@ -22,62 +22,54 @@
/**
* App's permissions utils.
*/
-class PermissionsUtils(private val context: Context) {
- fun mainPermissionsGranted() = permissionsGranted(mainPermissions)
+object PermissionsUtils {
+ fun mainPermissionsGranted(context: Context) = permissionsGranted(context, mainPermissions)
- private fun permissionGranted(permission: String) =
+ private fun permissionGranted(context: Context, permission: String) =
ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED
- private fun permissionsGranted(permissions: Array<String>) = permissions.all {
- permissionGranted(it)
+ private fun permissionsGranted(context: Context, permissions: Array<String>) = permissions.all {
+ permissionGranted(context, it)
}
- companion object {
- /**
- * Permissions required to run the app
- */
- val mainPermissions = mutableListOf<String>().apply {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
- add(Manifest.permission.READ_MEDIA_IMAGES)
- add(Manifest.permission.READ_MEDIA_VIDEO)
- } else {
- add(Manifest.permission.READ_EXTERNAL_STORAGE)
- }
-
- add(Manifest.permission.ACCESS_MEDIA_LOCATION)
- }.toTypedArray()
-
- fun showManageMediaPermissionDialogIfNeeded(context: Context) {
- val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
-
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S
- || canManageMedia(context)
- || sharedPreferences.manageMediaPermissionDialogDismissed
- ) {
- return
- }
-
- MaterialAlertDialogBuilder(context)
- .setTitle(R.string.manage_media_permission_title)
- .setMessage(R.string.manage_media_permission_message)
- .setPositiveButton(android.R.string.ok) { _, _ ->
- if (canManageMedia(context)) {
- return@setPositiveButton
- }
-
- context.startActivity(
- Intent(Settings.ACTION_REQUEST_MANAGE_MEDIA).apply {
- data = Uri.fromParts("package", context.packageName, null)
- }
- )
- }
- .setNeutralButton(android.R.string.cancel) { _, _ ->
- sharedPreferences.manageMediaPermissionDialogDismissed = true
- }
- .show()
+ /**
+ * Permissions required to run the app
+ */
+ val mainPermissions = mutableListOf<String>().apply {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ add(Manifest.permission.READ_MEDIA_IMAGES)
+ add(Manifest.permission.READ_MEDIA_VIDEO)
+ } else {
+ add(Manifest.permission.READ_EXTERNAL_STORAGE)
}
- private fun canManageMedia(context: Context) =
- Build.VERSION.SDK_INT < Build.VERSION_CODES.S || MediaStore.canManageMedia(context)
+ add(Manifest.permission.ACCESS_MEDIA_LOCATION)
+ }.toTypedArray()
+
+ fun showManageMediaPermissionDialogIfNeeded(context: Context) {
+ val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
+
+ if (canManageMedia(context) || sharedPreferences.manageMediaPermissionDialogDismissed) {
+ return
+ }
+
+ MaterialAlertDialogBuilder(context).setTitle(R.string.manage_media_permission_title)
+ .setMessage(R.string.manage_media_permission_message)
+ .setPositiveButton(android.R.string.ok) { _, _ ->
+ // If the user already opted this app for media management elsewhere (e.g. Settings)
+ // while the dialog was open we can skip requesting it again.
+ if (canManageMedia(context)) {
+ return@setPositiveButton
+ }
+
+ context.startActivity(Intent(Settings.ACTION_REQUEST_MANAGE_MEDIA).apply {
+ data = Uri.fromParts("package", context.packageName, null)
+ })
+ }.setNeutralButton(android.R.string.cancel) { _, _ ->
+ sharedPreferences.manageMediaPermissionDialogDismissed = true
+ }.show()
}
+
+ private fun canManageMedia(context: Context) =
+ Build.VERSION.SDK_INT < Build.VERSION_CODES.S || MediaStore.canManageMedia(context)
}