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)
 }