diff options
Diffstat (limited to 'src/corelib/time/qtimezoneprivate_android.cpp')
-rw-r--r-- | src/corelib/time/qtimezoneprivate_android.cpp | 38 |
1 files changed, 12 insertions, 26 deletions
diff --git a/src/corelib/time/qtimezoneprivate_android.cpp b/src/corelib/time/qtimezoneprivate_android.cpp index 0194352f5e..e80d15fab1 100644 --- a/src/corelib/time/qtimezoneprivate_android.cpp +++ b/src/corelib/time/qtimezoneprivate_android.cpp @@ -14,7 +14,7 @@ QT_BEGIN_NAMESPACE Q_DECLARE_JNI_CLASS(TimeZone, "java/util/TimeZone"); Q_DECLARE_JNI_CLASS(Locale, "java/util/Locale"); Q_DECLARE_JNI_CLASS(Date, "java/util/Date"); -Q_DECLARE_JNI_TYPE(StringArray, "[Ljava/lang/String;") +Q_DECLARE_JNI_CLASS(String, "java/lang/String") /* Private @@ -182,16 +182,11 @@ bool QAndroidTimeZonePrivate::isDaylightTime(qint64 atMSecsSinceEpoch) const QTimeZonePrivate::Data QAndroidTimeZonePrivate::data(qint64 forMSecsSinceEpoch) const { if (androidTimeZone.isValid()) { - Data data; - data.atMSecsSinceEpoch = forMSecsSinceEpoch; - data.standardTimeOffset = standardTimeOffset(forMSecsSinceEpoch); - data.offsetFromUtc = offsetFromUtc(forMSecsSinceEpoch); - data.daylightTimeOffset = data.offsetFromUtc - data.standardTimeOffset; - data.abbreviation = abbreviation(forMSecsSinceEpoch); - return data; - } else { - return invalidData(); + return Data(abbreviation(forMSecsSinceEpoch), forMSecsSinceEpoch, + offsetFromUtc(forMSecsSinceEpoch), + standardTimeOffset(forMSecsSinceEpoch)); } + return {}; } // java.util.TimeZone does not directly provide transitions, @@ -214,23 +209,14 @@ bool QAndroidTimeZonePrivate::isTimeZoneIdAvailable(const QByteArray &ianaId) co QList<QByteArray> QAndroidTimeZonePrivate::availableTimeZoneIds() const { + using namespace QtJniTypes; + + const QJniArray androidAvailableIdList = TimeZone::callStaticMethod<String[]>("getAvailableIDs"); + QList<QByteArray> availableTimeZoneIdList; - QJniObject androidAvailableIdList = QJniObject::callStaticMethod<QtJniTypes::StringArray>( - QtJniTypes::Traits<QtJniTypes::TimeZone>::className(), "getAvailableIDs"); - - QJniEnvironment jniEnv; - int androidTZcount = jniEnv->GetArrayLength(androidAvailableIdList.object<jarray>()); - - // need separate jobject and QJniObject here so that we can delete (DeleteLocalRef) the reference to the jobject - // (or else the JNI reference table fills after 512 entries from GetObjectArrayElement) - jobject androidTZobject; - QJniObject androidTZ; - for (int i = 0; i < androidTZcount; i++) { - androidTZobject = jniEnv->GetObjectArrayElement(androidAvailableIdList.object<jobjectArray>(), i); - androidTZ = androidTZobject; - availableTimeZoneIdList.append(androidTZ.toString().toUtf8()); - jniEnv->DeleteLocalRef(androidTZobject); - } + availableTimeZoneIdList.reserve(androidAvailableIdList.size()); + for (const auto &id : androidAvailableIdList) + availableTimeZoneIdList.append(id.toString().toUtf8()); return availableTimeZoneIdList; } |