diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2020-05-05 19:51:50 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2020-05-05 19:51:50 +0200 |
commit | 025e88bfe5b2345dd09c173dc28a9d9a45ed11de (patch) | |
tree | 0180b9123e479d7114b1caf2022dd8ff69162a17 /src/plugins/platforms/android | |
parent | ae7e701074be97130aa45f780e2456981850b432 (diff) | |
parent | 538223d10d133d23133db1ec7a50cb2775aca657 (diff) |
Merge remote-tracking branch 'origin/5.15' into dev
Change-Id: I003c0d6271c6444748bf30b4331eca3fb2410f44
Diffstat (limited to 'src/plugins/platforms/android')
-rw-r--r-- | src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp | 46 |
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()); } } |