8#include <QtCore/QJniEnvironment>
10#include <QtCore/qjnitypes.h>
30QAndroidTimeZonePrivate::QAndroidTimeZonePrivate()
34 androidTimeZone = QJniObject::callStaticMethod<QtJniTypes::TimeZone>(
35 QtJniTypes::Traits<QtJniTypes::TimeZone>::className(),
"getDefault");
36 const QJniObject id = androidTimeZone.callMethod<jstring>(
"getID");
37 m_id =
id.toString().toUtf8();
41QAndroidTimeZonePrivate::QAndroidTimeZonePrivate(
const QByteArray &ianaId)
47QAndroidTimeZonePrivate::QAndroidTimeZonePrivate(
const QAndroidTimeZonePrivate &
other)
50 androidTimeZone =
other.androidTimeZone;
54QAndroidTimeZonePrivate::~QAndroidTimeZonePrivate()
61 QJniObject jbcpTag = QJniObject::fromString(locale.bcp47Name());
62 QJniObject jlocale = QJniObject::callStaticMethod<QtJniTypes::Locale>(
63 QtJniTypes::Traits<QtJniTypes::Locale>::className(),
"forLanguageTag",
64 jbcpTag.object<jstring>());
66 return zone.callMethod<jstring>(
"getDisplayName",
dst, style,
67 jlocale.object<QtJniTypes::Locale>()).toString();
70void QAndroidTimeZonePrivate::init(
const QByteArray &ianaId)
73 androidTimeZone = QJniObject::callStaticMethod<QtJniTypes::TimeZone>(
74 QtJniTypes::Traits<QtJniTypes::TimeZone>::className(),
"getTimeZone",
75 QJniObject::fromString(iana).object<jstring>());
89 m_id =
match(androidTimeZone.callMethod<jstring>(
"getID").toString());
90 for (
int style = 1; m_id.isEmpty() && style >= 0; --style) {
91 for (
int dst = 1; m_id.isEmpty() &&
dst >= 0; --
dst) {
92 for (
int pick = 2; m_id.isEmpty() &&
pick >= 0; --
pick) {
101QAndroidTimeZonePrivate *QAndroidTimeZonePrivate::clone()
const
103 return new QAndroidTimeZonePrivate(*
this);
107QString QAndroidTimeZonePrivate::displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
112 if (androidTimeZone.isValid()) {
113 jboolean daylightTime = (timeType == QTimeZone::DaylightTime);
116 jint style = (nameType == QTimeZone::ShortName ? 0 : 1);
124QString QAndroidTimeZonePrivate::abbreviation(
qint64 atMSecsSinceEpoch)
const
126 if ( isDaylightTime( atMSecsSinceEpoch ) )
132int QAndroidTimeZonePrivate::offsetFromUtc(
qint64 atMSecsSinceEpoch)
const
136 if ( androidTimeZone.isValid() ) {
138 return androidTimeZone.callMethod<jint>(
139 "getOffset",
static_cast<jlong
>(atMSecsSinceEpoch) ) / 1000;
145int QAndroidTimeZonePrivate::standardTimeOffset(
qint64 atMSecsSinceEpoch)
const
149 if ( androidTimeZone.isValid() )
151 return androidTimeZone.callMethod<jint>(
"getRawOffset" ) / 1000;
156int QAndroidTimeZonePrivate::daylightTimeOffset(
qint64 atMSecsSinceEpoch)
const
158 return ( offsetFromUtc(atMSecsSinceEpoch) - standardTimeOffset(atMSecsSinceEpoch) );
161bool QAndroidTimeZonePrivate::hasDaylightTime()
const
163 if ( androidTimeZone.isValid() )
165 return androidTimeZone.callMethod<jboolean>(
"useDaylightTime" );
170bool QAndroidTimeZonePrivate::isDaylightTime(
qint64 atMSecsSinceEpoch)
const
172 if ( androidTimeZone.isValid() ) {
173 QJniObject jDate = QJniObject::construct<QtJniTypes::Date>(
174 static_cast<jlong
>(atMSecsSinceEpoch));
175 return androidTimeZone.callMethod<jboolean>(
"inDaylightTime",
176 jDate.object<QtJniTypes::Date>());
184 if (androidTimeZone.isValid()) {
185 return Data(abbreviation(forMSecsSinceEpoch), forMSecsSinceEpoch,
186 offsetFromUtc(forMSecsSinceEpoch),
187 standardTimeOffset(forMSecsSinceEpoch));
195QByteArray QAndroidTimeZonePrivate::systemTimeZoneId()
const
198 QJniObject androidSystemTimeZone = QJniObject::callStaticMethod<QtJniTypes::TimeZone>(
199 QtJniTypes::Traits<QtJniTypes::TimeZone>::className(),
"getDefault");
200 const QJniObject id = androidSystemTimeZone.callMethod<jstring>(
"getID");
201 return id.toString().toUtf8();
204bool QAndroidTimeZonePrivate::isTimeZoneIdAvailable(
const QByteArray &ianaId)
const
206 QAndroidTimeZonePrivate probe(ianaId);
207 return probe.isValid();
210QList<QByteArray> QAndroidTimeZonePrivate::availableTimeZoneIds()
const
212 QList<QByteArray> availableTimeZoneIdList;
213 QJniObject androidAvailableIdList = QJniObject::callStaticMethod<QtJniTypes::StringArray>(
214 QtJniTypes::Traits<QtJniTypes::TimeZone>::className(),
"getAvailableIDs");
217 int androidTZcount = jniEnv->GetArrayLength(androidAvailableIdList.object<jarray>());
221 jobject androidTZobject;
223 for (
int i = 0;
i < androidTZcount;
i++) {
224 androidTZobject = jniEnv->GetObjectArrayElement(androidAvailableIdList.object<jobjectArray>(),
i);
225 androidTZ = androidTZobject;
226 availableTimeZoneIdList.append(androidTZ.toString().toUtf8());
227 jniEnv->DeleteLocalRef(androidTZobject);
230 return availableTimeZoneIdList;
Q_DECLARE_JNI_TYPE(StringArray, "[Ljava/lang/String;")
static QLocale system()
Returns a QLocale object initialized to the system locale.
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Q_QML_EXPORT QV4::ReturnedValue locale(QV4::ExecutionEngine *engine, const QString &localeName)
Provides locale specific properties and formatted data.
Combined button and popup list for selecting options.
static QString displayName(CGDirectDisplayID displayID)
typedef QByteArray(EGLAPIENTRYP PFNQGSGETDISPLAYSPROC)()
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
static QString getDisplayName(QJniObject zone, jint style, jboolean dst, const QLocale &locale)
QT_BEGIN_NAMESPACE Q_DECLARE_JNI_CLASS(TimeZone, "java/util/TimeZone")
static bool match(const uchar *found, uint foundLen, const char *target, uint targetLen)