OmniControl: fix image permissions check for custom fp icon for 14

Change-Id: I19725d472ce8cf07c721e3454e4e48f2f07f477b
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0eec2e6..a17efa3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -17,8 +17,11 @@
     <uses-permission
         android:name="android.permission.CHANGE_OVERLAY_PACKAGES"
         tools:ignore="ProtectedPermissions" />
-    <uses-permission
-        android:name="android.permission.READ_MEDIA_IMAGES" />
+
+    <!-- Devices running Android 13 (API level 33) or higher -->
+    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
+    <!-- To handle the reselection within the app on Android 14 (API level 34) -->
+    <uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
 
     <application
         android:name=".App"
diff --git a/app/src/main/java/org/omnirom/control/FingerprintSettingsFragment.kt b/app/src/main/java/org/omnirom/control/FingerprintSettingsFragment.kt
index 3d5a0a9..8bf0e73 100644
--- a/app/src/main/java/org/omnirom/control/FingerprintSettingsFragment.kt
+++ b/app/src/main/java/org/omnirom/control/FingerprintSettingsFragment.kt
@@ -17,6 +17,10 @@
  */
 package org.omnirom.control
 
+import android.Manifest.permission.READ_MEDIA_IMAGES
+import android.Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED
+
+import android.Manifest
 import android.app.Activity
 import android.content.ComponentName
 import android.content.Context
@@ -26,6 +30,7 @@
 import android.graphics.BitmapFactory
 import android.graphics.drawable.BitmapDrawable
 import android.net.Uri
+import android.os.Build
 import android.os.Bundle
 import android.os.IBinder
 import android.provider.MediaStore
@@ -43,7 +48,6 @@
 import java.io.FileOutputStream
 import java.io.IOException
 
-
 class FingerprintSettingsFragment : AbstractSettingsFragment() {
     private val TAG = "FingerprintSettingsFragment"
     private val FINGERPRINT_CUSTOM_ICON_SELECT = "custom_fingerprint_icon_select"
@@ -71,7 +75,7 @@
         }
     }
 
-    var pickImageLegacy = registerForActivityResult<String, Uri>(
+    var pickImage = registerForActivityResult<String, Uri>(
         ActivityResultContracts.GetContent()
     ) { uri: Uri? ->
         if (uri != null) {
@@ -93,30 +97,11 @@
         }
     }
 
-    private val pickImage =
-        registerForActivityResult(PickSinglePhotoContract()) { uri ->
-            Log.d(TAG, "pickImage uri = " + uri)
-            if (uri != null) {
-                // TODO we should do some check if the image is even a useful one eg size
-                try {
-                    requireContext().contentResolver.openInputStream(uri).use { inputStream ->
-                        val bitmap = BitmapFactory.decodeStream(inputStream)
-                        systemUIProxy?.setUfpsImageBitmap(bitmap)
-                        savePickerIcon(bitmap)
-                    }
-
-                    Settings.System.putString(
-                        requireContext().contentResolver,
-                        OmniSettings.OMNI_CUSTOM_FP_ICON_UPDATE,
-                        System.currentTimeMillis().toString()
-                    )
-                } catch (e: Exception) {
-                    Log.d(TAG, "pickImage", e);
-                }
-            }
+    private val mImagePermissions =
+        registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
+            pickImage.launch("image/*")
         }
 
-
     private val mSystemUIProxyService: ServiceConnection = object : ServiceConnection {
         override fun onServiceConnected(name: ComponentName, service: IBinder) {
             Log.d(
@@ -208,8 +193,7 @@
             }
 
             it.onPreferenceClickListener = Preference.OnPreferenceClickListener {
-                pickImageLegacy.launch("image/*")
-                pickImage.launch(null)
+                mImagePermissions.launch(arrayOf(READ_MEDIA_IMAGES, READ_MEDIA_VISUAL_USER_SELECTED))
                 true
             }
         }