| 39 | } |
| 40 | |
| 41 | void shareMultipleFiles(const QStringList& filePaths, const QString& mimeType, const QString& chooserTitle) |
| 42 | { |
| 43 | if (filePaths.isEmpty()) { |
| 44 | qWarning() << "AndroidShareHelper::shareMultipleFiles: Empty file list"; |
| 45 | return; |
| 46 | } |
| 47 | |
| 48 | QJniObject activity = QNativeInterface::QAndroidApplication::context(); |
| 49 | if (!activity.isValid()) { |
| 50 | qWarning() << "AndroidShareHelper::shareMultipleFiles: Failed to get Android context"; |
| 51 | return; |
| 52 | } |
| 53 | |
| 54 | // Create Java String array |
| 55 | QJniEnvironment env; |
| 56 | jclass stringClass = env->FindClass("java/lang/String"); |
| 57 | if (!stringClass) { |
| 58 | qWarning() << "AndroidShareHelper::shareMultipleFiles: Failed to find String class"; |
| 59 | return; |
| 60 | } |
| 61 | |
| 62 | jobjectArray jFilePaths = env->NewObjectArray(filePaths.size(), stringClass, nullptr); |
| 63 | |
| 64 | for (int i = 0; i < filePaths.size(); ++i) { |
| 65 | jstring jPath = env->NewStringUTF(filePaths.at(i).toUtf8().constData()); |
| 66 | env->SetObjectArrayElement(jFilePaths, i, jPath); |
| 67 | env->DeleteLocalRef(jPath); |
| 68 | } |
| 69 | |
| 70 | // Call Java method |
| 71 | QJniObject::callStaticMethod<void>( |
| 72 | "org/speedynote/app/ShareHelper", |
| 73 | "shareMultipleFiles", |
| 74 | "(Landroid/app/Activity;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", |
| 75 | activity.object<jobject>(), |
| 76 | jFilePaths, |
| 77 | QJniObject::fromString(mimeType).object<jstring>(), |
| 78 | QJniObject::fromString(chooserTitle).object<jstring>() |
| 79 | ); |
| 80 | |
| 81 | // Clean up JNI local references |
| 82 | env->DeleteLocalRef(jFilePaths); |
| 83 | env->DeleteLocalRef(stringClass); |
| 84 | |
| 85 | if (env.checkAndClearExceptions()) { |
| 86 | qWarning() << "AndroidShareHelper::shareMultipleFiles: JNI exception occurred"; |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | bool isAvailable() |
| 91 | { |
no test coverage detected