summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2020-05-05 19:51:50 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2020-05-05 19:51:50 +0200
commit025e88bfe5b2345dd09c173dc28a9d9a45ed11de (patch)
tree0180b9123e479d7114b1caf2022dd8ff69162a17 /src/plugins/platforms/android
parentae7e701074be97130aa45f780e2456981850b432 (diff)
parent538223d10d133d23133db1ec7a50cb2775aca657 (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Diffstat (limited to 'src/plugins/platforms/android')
-rw-r--r--src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp46
1 files changed, 40 insertions, 6 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp
index 7b5f2f16f8..2e29a22cf7 100644
--- a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp
+++ b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp
@@ -42,6 +42,10 @@
#include <androidjnimain.h>
#include <jni.h>
+#include <QMimeType>
+#include <QMimeDatabase>
+#include <QRegularExpression>
+
QT_BEGIN_NAMESPACE
namespace QtAndroidFileDialogHelper {
@@ -147,17 +151,47 @@ void QAndroidPlatformFileDialogHelper::setAllowMultipleSelections(bool allowMult
allowMultipleSelections.object(), allowMultiple);
}
+QStringList nameFilterExtensions(const QString nameFilters)
+{
+ QStringList ret;
+#if QT_CONFIG(regularexpression)
+ QRegularExpression re("(\\*\\.?\\w*)");
+ QRegularExpressionMatchIterator i = re.globalMatch(nameFilters);
+ while (i.hasNext())
+ ret << i.next().captured(1);
+#endif // QT_CONFIG(regularexpression)
+ ret.removeAll("*");
+ return ret;
+}
+
void QAndroidPlatformFileDialogHelper::setMimeTypes()
{
+ QStringList mimeTypes = options()->mimeTypeFilters();
+ const QString nameFilter = options()->initiallySelectedNameFilter();
+
+ if (mimeTypes.isEmpty() && !nameFilter.isEmpty()) {
+ QMimeDatabase db;
+ for (const QString &filter : nameFilterExtensions(nameFilter))
+ mimeTypes.append(db.mimeTypeForFile(filter).name());
+ }
+
+ QString type = !mimeTypes.isEmpty() ? mimeTypes.at(0) : QLatin1String("*/*");
m_intent.callObjectMethod("setType", "(Ljava/lang/String;)Landroid/content/Intent;",
- QJNIObjectPrivate::fromString("*/*").object());
+ QJNIObjectPrivate::fromString(type).object());
+
+ if (!mimeTypes.isEmpty()) {
+ const QJNIObjectPrivate extraMimeType = QJNIObjectPrivate::getStaticObjectField(
+ JniIntentClass, "EXTRA_MIME_TYPES", "Ljava/lang/String;");
+
+ QJNIObjectPrivate mimeTypesArray = QJNIObjectPrivate::callStaticObjectMethod(
+ "org/qtproject/qt5/android/QtNative",
+ "getStringArray",
+ "(Ljava/lang/String;)[Ljava/lang/String;",
+ QJNIObjectPrivate::fromString(mimeTypes.join(",")).object());
- const QJNIObjectPrivate extraMimeType = QJNIObjectPrivate::getStaticObjectField(
- JniIntentClass, "EXTRA_MIME_TYPES", "Ljava/lang/String;");
- for (const QString &type : options()->mimeTypeFilters()) {
m_intent.callObjectMethod(
- "putExtra", "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;",
- extraMimeType.object(), QJNIObjectPrivate::fromString(type).object());
+ "putExtra", "(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/Intent;",
+ extraMimeType.object(), mimeTypesArray.object());
}
}