Warning, /graphics/krita/3rdparty/ext_qt/0035-Android-check-if-the-Uri-is-writable.patch is written in an unsupported language. File is not indexed.
0001 From 1348a502a6af8766c9ae6eb01b8f624e5b5e0cda Mon Sep 17 00:00:00 2001 0002 From: Sharaf Zaman <sharafzaz121@gmail.com> 0003 Date: Thu, 18 Feb 2021 09:46:45 +0000 0004 Subject: [PATCH 35/46] Android: check if the Uri is writable 0005 0006 We check if we have "w" permission on the Uri or not. We check both the 0007 explictly persisted permissions and implicity granted ones. 0008 --- 0009 .../org/qtproject/qt5/android/QtNative.java | 19 +++++++++++++++++-- 0010 .../android/androidcontentfileengine.cpp | 11 ++++++++++- 0011 2 files changed, 27 insertions(+), 3 deletions(-) 0012 0013 diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java 0014 index 38b595bfbc..2981523ab1 100644 0015 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java 0016 +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java 0017 @@ -179,13 +179,16 @@ public class QtNative 0018 return false; 0019 } 0020 0021 - int modeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION; 0022 + int modeFlags = 0; 0023 + if (openMode.startsWith("r")) { 0024 + modeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION; 0025 + } 0026 0027 if (!"r".equals(openMode)) { 0028 modeFlags |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION; 0029 } 0030 0031 - return (m_uriPermissions.get(uri) & modeFlags) != 0; 0032 + return (m_uriPermissions.get(uri) & modeFlags) == modeFlags; 0033 } 0034 0035 private static Uri getUriWithValidPermission(Context context, String uri, String openMode) 0036 @@ -351,6 +354,18 @@ public class QtNative 0037 } 0038 } 0039 0040 + public static boolean canWriteToUri(Context context, String contentUrl) 0041 + { 0042 + Uri uri = getUriWithValidPermission(context, contentUrl, "w"); 0043 + 0044 + if (uri == null) { 0045 + Log.e(QtTAG, "canWriteToUri(): No permissions to open Uri in \"w\" mode"); 0046 + return false; 0047 + } else { 0048 + return true; 0049 + } 0050 + } 0051 + 0052 public static String getFileNameFromUri(Context context, String contentUrl) 0053 { 0054 Uri uri = getUriWithValidPermission(context, contentUrl, "r"); 0055 diff --git a/src/plugins/platforms/android/androidcontentfileengine.cpp b/src/plugins/platforms/android/androidcontentfileengine.cpp 0056 index ffda6592f4..ba11a50e85 100644 0057 --- a/src/plugins/platforms/android/androidcontentfileengine.cpp 0058 +++ b/src/plugins/platforms/android/androidcontentfileengine.cpp 0059 @@ -108,7 +108,7 @@ qint64 AndroidContentFileEngine::size() const 0060 0061 AndroidContentFileEngine::FileFlags AndroidContentFileEngine::fileFlags(FileFlags type) const 0062 { 0063 - FileFlags commonFlags(ReadOwnerPerm|ReadUserPerm|ReadGroupPerm|ReadOtherPerm|ExistsFlag); 0064 + const FileFlags commonFlags(ReadOwnerPerm|ReadUserPerm|ReadGroupPerm|ReadOtherPerm|ExistsFlag); 0065 FileFlags flags; 0066 const bool exists = QJNIObjectPrivate::callStaticMethod<jboolean>( 0067 "org/qtproject/qt5/android/QtNative", "checkFileExists", 0068 @@ -116,7 +116,16 @@ AndroidContentFileEngine::FileFlags AndroidContentFileEngine::fileFlags(FileFlag 0069 QJNIObjectPrivate::fromString(m_file).object()); 0070 if (!exists) 0071 return flags; 0072 + 0073 flags = FileType | commonFlags; 0074 + 0075 + const bool canWrite = QJNIObjectPrivate::callStaticMethod<jboolean>( 0076 + "org/qtproject/qt5/android/QtNative", "canWriteToUri", 0077 + "(Landroid/content/Context;Ljava/lang/String;)Z", QtAndroidPrivate::context(), 0078 + QJNIObjectPrivate::fromString(m_file).object()); 0079 + if (canWrite) { 0080 + flags |= (WriteOwnerPerm|WriteUserPerm|WriteGroupPerm|WriteOtherPerm); 0081 + } 0082 return type & flags; 0083 } 0084 0085 -- 0086 2.33.0 0087