File indexing completed on 2024-04-28 04:40:43
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Nicolas Fella <nicolas.fella@gmx.de> 0003 * SPDX-FileCopyrightText: 2022 Volker Krause <vkrause@kde.org> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "androidintegration.h" 0009 0010 #include <QCoreApplication> 0011 #include <QJniObject> 0012 #include <QDebug> 0013 0014 using namespace KirigamiAddonsDateAndTime; 0015 0016 AndroidIntegration &AndroidIntegration::instance() 0017 { 0018 static AndroidIntegration instance; 0019 return instance; 0020 } 0021 0022 static void dateSelected(JNIEnv *env, jobject that, jint day, jint month, jint year) 0023 { 0024 Q_UNUSED(that); 0025 Q_UNUSED(env); 0026 Q_EMIT AndroidIntegration::instance().datePickerFinished(true, QDate(year, month, day).startOfDay()); 0027 } 0028 0029 static void dateCancelled(JNIEnv *env, jobject that) 0030 { 0031 Q_UNUSED(that); 0032 Q_UNUSED(env); 0033 Q_EMIT AndroidIntegration::instance().datePickerFinished(false, {}); 0034 } 0035 0036 static void timeSelected(JNIEnv *env, jobject that, jint hours, jint minutes) 0037 { 0038 Q_UNUSED(that); 0039 Q_UNUSED(env); 0040 Q_EMIT AndroidIntegration::instance().timePickerFinished(true, QDateTime(QDate::currentDate(), QTime(hours, minutes))); 0041 } 0042 0043 static void timeCancelled(JNIEnv *env, jobject that) 0044 { 0045 Q_UNUSED(that); 0046 Q_UNUSED(env); 0047 Q_EMIT AndroidIntegration::instance().timePickerFinished(false, {}); 0048 } 0049 0050 static const JNINativeMethod dateMethods[] = { 0051 {"dateSelected", "(III)V", (void *)dateSelected}, 0052 {"cancelled", "()V", (void *)dateCancelled} 0053 }; 0054 0055 static const JNINativeMethod timeMethods[] = { 0056 {"timeSelected", "(II)V", (void *)timeSelected}, 0057 {"cancelled", "()V", (void *)timeCancelled} 0058 }; 0059 0060 Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) 0061 { 0062 static bool initialized = false; 0063 if (initialized) { 0064 return JNI_VERSION_1_6; 0065 } 0066 initialized = true; 0067 0068 JNIEnv *env = nullptr; 0069 if (vm->GetEnv((void **)&env, JNI_VERSION_1_4) != JNI_OK) { 0070 qWarning() << "Failed to get JNI environment."; 0071 return -1; 0072 } 0073 jclass theclass = env->FindClass("org/kde/kirigamiaddons/dateandtime/DatePicker"); 0074 if (env->RegisterNatives(theclass, dateMethods, sizeof(dateMethods) / sizeof(JNINativeMethod)) < 0) { 0075 qWarning() << "Failed to register native functions."; 0076 return -1; 0077 } 0078 0079 jclass timeclass = env->FindClass("org/kde/kirigamiaddons/dateandtime/TimePicker"); 0080 if (env->RegisterNatives(timeclass, timeMethods, sizeof(timeMethods) / sizeof(JNINativeMethod)) < 0) { 0081 qWarning() << "Failed to register native functions."; 0082 return -1; 0083 } 0084 0085 return JNI_VERSION_1_4; 0086 } 0087 0088 void AndroidIntegration::showDatePicker(qint64 initialDate) 0089 { 0090 QJniObject picker("org/kde/kirigamiaddons/dateandtime/DatePicker", "(Landroid/app/Activity;J)V", QNativeInterface::QAndroidApplication::context(), initialDate); 0091 picker.callMethod<void>("doShow"); 0092 } 0093 0094 void AndroidIntegration::showTimePicker(qint64 initialTime) 0095 { 0096 QJniObject picker("org/kde/kirigamiaddons/dateandtime/TimePicker", "(Landroid/app/Activity;J)V", QNativeInterface::QAndroidApplication::context(), initialTime); 0097 picker.callMethod<void>("doShow"); 0098 } 0099 0100 #include "moc_androidintegration.cpp"