summaryrefslogtreecommitdiffstats
path: root/src/corelib/time/qtimezoneprivate_android.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/time/qtimezoneprivate_android.cpp')
-rw-r--r--src/corelib/time/qtimezoneprivate_android.cpp38
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;
}