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