# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1620595052 0 # Node ID 82cdb3ad7c25fe70e1869b314c381d9bc9d47a44 # Parent 66c490aa719dcf1ffc8dd6324917d3f2dbdab207 Android: Implement the calendar widget using CalendarView. For some reason it is not actually displaying the correct date. diff -r 66c490aa719d -r 82cdb3ad7c25 android/DWindows.kt --- a/android/DWindows.kt Sun May 09 19:27:23 2021 +0000 +++ b/android/DWindows.kt Sun May 09 21:17:32 2021 +0000 @@ -1487,6 +1487,34 @@ return retval } + fun calendarNew(cid: Int): CalendarView? + { + var calendar: CalendarView? = null + + waitOnUiThread { + calendar = CalendarView(this) + } + + return calendar + } + + fun calendarSetDate(calendar: CalendarView, date: Long) + { + waitOnUiThread { + calendar.setDate(date, true, true) + } + } + + fun calendarGetDate(calendar: CalendarView): Long + { + var date: Long = 0 + + waitOnUiThread { + date = calendar.date + } + return date + } + fun timerConnect(interval: Long, sigfunc: Long, data: Long): Timer { // creating timer task, timer diff -r 66c490aa719d -r 82cdb3ad7c25 android/dw.cpp --- a/android/dw.cpp Sun May 09 19:27:23 2021 +0000 +++ b/android/dw.cpp Sun May 09 21:17:32 2021 +0000 @@ -3238,6 +3238,19 @@ */ HWND API dw_calendar_new(ULONG cid) { + JNIEnv *env; + + if((env = (JNIEnv *)pthread_getspecific(_dw_env_key))) + { + // First get the class that contains the method you need to call + jclass clazz = _dw_find_class(env, DW_CLASS_NAME); + // Get the method that you want to call + jmethodID calendarNew = env->GetMethodID(clazz, "calendarNew", + "(I)Landroid/widget/CalendarView;"); + // Call the method on the object + jobject result = env->NewWeakGlobalRef(env->CallObjectMethod(_dw_obj, calendarNew, (int)cid)); + return result; + } return 0; } @@ -3249,6 +3262,27 @@ */ void API dw_calendar_set_date(HWND handle, unsigned int year, unsigned int month, unsigned int day) { + JNIEnv *env; + + if(handle && (env = (JNIEnv *)pthread_getspecific(_dw_env_key))) + { + time_t date; + struct tm ts = {0}; + + // Convert to Unix time + ts.tm_year = year - 1900; + ts.tm_mon = month; + ts.tm_mday = day; + date = mktime(&ts); + + // First get the class that contains the method you need to call + jclass clazz = _dw_find_class(env, DW_CLASS_NAME); + // Get the method that you want to call + jmethodID calendarSetDate = env->GetMethodID(clazz, "calendarSetDate", + "(Landroid/widget/CalendarView;J)V"); + // Call the method on the object + env->CallVoidMethod(_dw_obj, calendarSetDate, handle, (jlong)date); + } } /* @@ -3261,6 +3295,28 @@ */ void API dw_calendar_get_date(HWND handle, unsigned int *year, unsigned int *month, unsigned int *day) { + JNIEnv *env; + + if(handle && (env = (JNIEnv *)pthread_getspecific(_dw_env_key))) + { + time_t date; + struct tm ts; + + // First get the class that contains the method you need to call + jclass clazz = _dw_find_class(env, DW_CLASS_NAME); + // Get the method that you want to call + jmethodID calendarGetDate = env->GetMethodID(clazz, "calendarGetDate", + "(Landroid/widget/CalendarView;)J"); + // Call the method on the object + date = (time_t)env->CallLongMethod(_dw_obj, calendarGetDate, handle); + ts = *localtime(&date); + if(year) + *year = ts.tm_year + 1900; + if(month) + *month = ts.tm_mon; + if(day) + *day = ts.tm_mday; + } } /*