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