Warning, /graphics/krita/3rdparty/ext_qt/0027-Android-use-EXTRA_INITIAL_URI-as-the-defaultDir.patch is written in an unsupported language. File is not indexed.
0001 From 0379cb8abaed5fafb68b07fa721800d84dd6551d Mon Sep 17 00:00:00 2001 0002 From: Sharaf Zaman <sharafzaz121@gmail.com> 0003 Date: Mon, 9 Nov 2020 08:40:57 +0000 0004 Subject: [PATCH 27/46] Android: use EXTRA_INITIAL_URI as the defaultDir 0005 0006 on API Level >= 26, Storage Access Framework attempts to use the URI to 0007 save a new file at its parent location (i.e the parent directory). 0008 --- 0009 .../qandroidplatformfiledialoghelper.cpp | 20 +++++++++++++++++++ 0010 .../qandroidplatformfiledialoghelper.h | 4 +++- 0011 2 files changed, 23 insertions(+), 1 deletion(-) 0012 0013 diff --git a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp 0014 index 05e4ccbbee..00b5b0887c 100644 0015 --- a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp 0016 +++ b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp 0017 @@ -61,6 +61,11 @@ QAndroidPlatformFileDialogHelper::QAndroidPlatformFileDialogHelper() 0018 { 0019 } 0020 0021 +void QAndroidPlatformFileDialogHelper::setDirectory(const QUrl &directory) 0022 +{ 0023 + m_directory = directory; 0024 +} 0025 + 0026 bool QAndroidPlatformFileDialogHelper::handleActivityResult(jint requestCode, jint resultCode, jobject data) 0027 { 0028 if (requestCode != REQUEST_CODE) 0029 @@ -125,6 +130,20 @@ void QAndroidPlatformFileDialogHelper::setIntentTitle(const QString &title) 0030 extraTitle.object(), QJNIObjectPrivate::fromString(title).object()); 0031 } 0032 0033 +void QAndroidPlatformFileDialogHelper::setInitialUri() 0034 +{ 0035 + if (QtAndroidPrivate::androidSdkVersion() >= 26) { 0036 + const QJNIObjectPrivate extraInitialUri = QJNIObjectPrivate::getStaticObjectField( 0037 + "android/provider/DocumentsContract", 0038 + "EXTRA_INITIAL_URI", 0039 + "Ljava/lang/String;"); 0040 + m_intent.callObjectMethod("putExtra", 0041 + "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;", 0042 + extraInitialUri.object(), 0043 + QJNIObjectPrivate::fromString(m_directory.toString()).object()); 0044 + } 0045 +} 0046 + 0047 void QAndroidPlatformFileDialogHelper::setOpenableCategory() 0048 { 0049 const QJNIObjectPrivate CATEGORY_OPENABLE = QJNIObjectPrivate::getStaticObjectField( 0050 @@ -229,6 +248,7 @@ bool QAndroidPlatformFileDialogHelper::show(Qt::WindowFlags windowFlags, Qt::Win 0051 } 0052 0053 setIntentTitle(options()->windowTitle()); 0054 + setInitialUri(); 0055 0056 QtAndroidPrivate::registerActivityResultListener(this); 0057 m_activity.callMethod<void>("startActivityForResult", "(Landroid/content/Intent;I)V", 0058 diff --git a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.h b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.h 0059 index 5a7a28a8a0..9a2e037e6f 100644 0060 --- a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.h 0061 +++ b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.h 0062 @@ -68,7 +68,7 @@ public: 0063 QList<QUrl> selectedFiles() const override { return m_selectedFile; }; 0064 void selectFile(const QUrl &file) override { Q_UNUSED(file) }; 0065 QUrl directory() const override { return QUrl(); }; 0066 - void setDirectory(const QUrl &directory) override { Q_UNUSED(directory) }; 0067 + void setDirectory(const QUrl &directory) override; 0068 bool defaultNameFilterDisables() const override { return false; }; 0069 bool handleActivityResult(jint requestCode, jint resultCode, jobject data) override; 0070 0071 @@ -76,6 +76,7 @@ private: 0072 QJNIObjectPrivate getFileDialogIntent(const QString &intentType); 0073 void takePersistableUriPermission(const QJNIObjectPrivate &uri); 0074 void setIntentTitle(const QString &title); 0075 + void setInitialUri(); 0076 void setOpenableCategory(); 0077 void setAllowMultipleSelections(bool allowMultiple); 0078 void setMimeTypes(); 0079 @@ -84,6 +85,7 @@ private: 0080 QList<QUrl> m_selectedFile; 0081 QJNIObjectPrivate m_intent; 0082 const QJNIObjectPrivate m_activity; 0083 + QUrl m_directory; 0084 }; 0085 0086 } 0087 -- 0088 2.33.0 0089