File indexing completed on 2024-05-12 04:34:10

0001 /*
0002     SPDX-FileCopyrightText: 2018 Aleix Pol <aleixpol@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "android.h"
0008 #include <QCoreApplication>
0009 #include <QDebug>
0010 #include <QJniEnvironment>
0011 #include <QJniObject>
0012 #include <QStringList>
0013 
0014 URIHandler URIHandler::handler;
0015 static AndroidInstance *s_instance = nullptr;
0016 
0017 void AndroidInstance::openFile(const QString &title, const QStringList &mimes)
0018 {
0019     s_instance = this;
0020     QJniObject activity = QJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); // activity is valid
0021     Q_ASSERT(activity.isValid());
0022 
0023     QJniEnvironment _env;
0024     QJniObject::callStaticMethod<void>("org/kde/something/OpenFileActivity",
0025                                        "openFile",
0026                                        "(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V",
0027                                        activity.object<jobject>(),
0028                                        QJniObject::fromString(title).object<jstring>(),
0029                                        QJniObject::fromString(mimes.join(QLatin1Char(';'))).object<jstring>());
0030     if (_env.checkAndClearExceptions()) {
0031         qWarning() << "couldn't launch intent";
0032     }
0033 }
0034 
0035 void AndroidInstance::handleViewIntent()
0036 {
0037     QJniObject(QNativeInterface::QAndroidApplication::context()).callMethod<void>("handleViewIntent", "()V");
0038 }
0039 
0040 void Java_org_kde_something_FileClass_openUri(JNIEnv *env, jobject /*obj*/, jstring uri)
0041 {
0042     jboolean isCopy = false;
0043     const char *utf = env->GetStringUTFChars(uri, &isCopy);
0044     const QString uriString = QString::fromUtf8(utf);
0045     if (s_instance)
0046         s_instance->openUri(QUrl(uriString));
0047     else
0048         URIHandler::handler.openUri(uriString);
0049     env->ReleaseStringUTFChars(uri, utf);
0050 }