This is an automated email from the ASF dual-hosted git repository.
erisu pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/cordova-plugin-media-capture.git
The following commit(s) were added to refs/heads/master by this push:
new f21e0a0 feat(android)!: support API 33+ permissions (#262)
f21e0a0 is described below
commit f21e0a0b093f44f90548b5b0fd7ac52d817532e4
Author: ochakov <[email protected]>
AuthorDate: Thu Jul 20 09:52:13 2023 +0300
feat(android)!: support API 33+ permissions (#262)
* Replace READ_EXTERNAL_STORAGE permission with READ_MEDIA_AUDIO,
READ_MEDIA_VIDEO and READ_MEDIA_IMAGES
* Fix READ_MEDIA_* permission on older SDKs
* Do not request new permissions on older SDKs as they do not support
---
plugin.xml | 7 +++++--
src/android/Capture.java | 37 +++++++++++++++++++++++++------------
2 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/plugin.xml b/plugin.xml
index 50cb485..1455e80 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -78,8 +78,11 @@ xmlns:android="http://schemas.android.com/apk/res/android"
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.RECORD_AUDIO" />
- <uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" />
- <uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission
android:name="android.permission.READ_MEDIA_AUDIO" />
+ <uses-permission
android:name="android.permission.READ_MEDIA_IMAGES" />
+ <uses-permission
android:name="android.permission.READ_MEDIA_VIDEO" />
+ <uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
+ <uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
</config-file>
<source-file src="src/android/Capture.java"
target-dir="src/org/apache/cordova/mediacapture" />
diff --git a/src/android/Capture.java b/src/android/Capture.java
index 07b4338..f008eba 100644
--- a/src/android/Capture.java
+++ b/src/android/Capture.java
@@ -19,9 +19,7 @@
package org.apache.cordova.mediacapture;
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
-import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -79,10 +77,18 @@ public class Capture extends CordovaPlugin {
private static final int CAPTURE_PERMISSION_DENIED = 4;
private static final int CAPTURE_NOT_SUPPORTED = 20;
- private static final String[] storagePermissions = new String[]{
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
- };
+ private static String[] storagePermissions;
+ static {
+ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ storagePermissions = new String[]{
+ };
+ } else {
+ storagePermissions = new String[] {
+ Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE
+ };
+ }
+ }
private boolean cameraPermissionInManifest; // Whether or not the
CAMERA permission is declared in AndroidManifest.xml
@@ -246,15 +252,22 @@ public class Capture extends CordovaPlugin {
return isMissingPermissions;
}
- private boolean isMissingStoragePermissions(Request req) {
- return isMissingPermissions(req, new
ArrayList<>(Arrays.asList(storagePermissions)));
+ private boolean isMissingPermissions(Request req, String mediaPermission) {
+ ArrayList<String> permissions = new
ArrayList<>(Arrays.asList(storagePermissions));
+ if (mediaPermission != null && android.os.Build.VERSION.SDK_INT >=
Build.VERSION_CODES.TIRAMISU) {
+ permissions.add(mediaPermission);
+ }
+ return isMissingPermissions(req, permissions);
}
- private boolean isMissingCameraPermissions(Request req) {
+ private boolean isMissingCameraPermissions(Request req, String
mediaPermission) {
ArrayList<String> cameraPermissions = new
ArrayList<>(Arrays.asList(storagePermissions));
if (cameraPermissionInManifest) {
cameraPermissions.add(Manifest.permission.CAMERA);
}
+ if (mediaPermission != null && android.os.Build.VERSION.SDK_INT >=
Build.VERSION_CODES.TIRAMISU) {
+ cameraPermissions.add(mediaPermission);
+ }
return isMissingPermissions(req, cameraPermissions);
}
@@ -262,7 +275,7 @@ public class Capture extends CordovaPlugin {
* Sets up an intent to capture audio. Result handled by
onActivityResult()
*/
private void captureAudio(Request req) {
- if (isMissingStoragePermissions(req)) return;
+ if (isMissingPermissions(req, Manifest.permission.READ_MEDIA_AUDIO))
return;
try {
Intent intent = new
Intent(android.provider.MediaStore.Audio.Media.RECORD_SOUND_ACTION);
@@ -287,7 +300,7 @@ public class Capture extends CordovaPlugin {
* Sets up an intent to capture images. Result handled by
onActivityResult()
*/
private void captureImage(Request req) {
- if (isMissingCameraPermissions(req)) return;
+ if (isMissingCameraPermissions(req,
Manifest.permission.READ_MEDIA_IMAGES)) return;
// Save the number of images currently on disk for later
this.numPics = queryImgDB(whichContentStore()).getCount();
@@ -314,7 +327,7 @@ public class Capture extends CordovaPlugin {
* Sets up an intent to capture video. Result handled by
onActivityResult()
*/
private void captureVideo(Request req) {
- if (isMissingCameraPermissions(req)) return;
+ if (isMissingCameraPermissions(req,
Manifest.permission.READ_MEDIA_VIDEO)) return;
Intent intent = new
Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]