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 }