summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVolker Krause <vkrause@kde.org>2020-10-23 19:51:01 +0200
committerVolker Krause <vkrause@kde.org>2020-10-26 10:55:32 +0200
commit1f2c756f8e493fff3c4708399149fa3c79dd9fad (patch)
tree67a0528bb5e1397ee53dd7456ec55ff00ded1bd8 /src
parent9a0bba2fafe3487ce24f3779cbb242945c6233bb (diff)
Fix QSaveFile always failing on content: URLs
QSaveFile needs QFileInfo::isWritable() to work, which 7e5f38aec667 caused to always return false for content: URLs. (cherry picked from commit d53bbecf4c2565f2e5fd834b20ff90b073a25189) Change-Id: I2c5749a852e8233f80aba99ce2a9b6dddd132d2a Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java5
-rw-r--r--src/plugins/platforms/android/androidcontentfileengine.cpp11
2 files changed, 14 insertions, 2 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index 16b60d9845..563fc7bce6 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -327,6 +327,11 @@ public class QtNative
}
}
+ public static boolean checkIfWritable(Context context, String contentUrl)
+ {
+ return getUriWithValidPermission(context, contentUrl, "w") != null;
+ }
+
public static boolean checkIfDir(Context context, String contentUrl)
{
boolean isDir = false;
diff --git a/src/plugins/platforms/android/androidcontentfileengine.cpp b/src/plugins/platforms/android/androidcontentfileengine.cpp
index e552b8fa86..6c95a9b126 100644
--- a/src/plugins/platforms/android/androidcontentfileengine.cpp
+++ b/src/plugins/platforms/android/androidcontentfileengine.cpp
@@ -103,10 +103,17 @@ AndroidContentFileEngine::FileFlags AndroidContentFileEngine::fileFlags(FileFlag
QJNIObjectPrivate::fromString(fileName(DefaultName)).object());
if (!exists && !isDir)
return flags;
- if (isDir)
+ if (isDir) {
flags = DirectoryType | commonFlags;
- else
+ } else {
flags = FileType | commonFlags;
+ const bool writable = QJNIObjectPrivate::callStaticMethod<jboolean>(
+ "org/qtproject/qt5/android/QtNative", "checkIfWritable",
+ "(Landroid/content/Context;Ljava/lang/String;)Z", QtAndroidPrivate::context(),
+ QJNIObjectPrivate::fromString(fileName(DefaultName)).object());
+ if (writable)
+ flags |= WriteOwnerPerm|WriteUserPerm|WriteGroupPerm|WriteOtherPerm;
+ }
return type & flags;
}