8#include <QtCore/QJniEnvironment>
29QAndroidTimeZonePrivate::QAndroidTimeZonePrivate()
33 androidTimeZone = QJniObject::callStaticMethod<QtJniTypes::TimeZone>(
34 QtJniTypes::className<QtJniTypes::TimeZone>(),
"getDefault");
35 const QJniObject id = androidTimeZone.callMethod<jstring>(
"getID");
36 m_id =
id.toString().toUtf8();
40QAndroidTimeZonePrivate::QAndroidTimeZonePrivate(
const QByteArray &ianaId)
46QAndroidTimeZonePrivate::QAndroidTimeZonePrivate(
const QAndroidTimeZonePrivate &
other)
49 androidTimeZone =
other.androidTimeZone;
53QAndroidTimeZonePrivate::~QAndroidTimeZonePrivate()
60 QJniObject jbcpTag = QJniObject::fromString(locale.bcp47Name());
61 QJniObject jlocale = QJniObject::callStaticMethod<QtJniTypes::Locale>(
62 QtJniTypes::className<QtJniTypes::Locale>(),
"forLanguageTag",
63 jbcpTag.object<jstring>());
65 return zone.callMethod<jstring>(
"getDisplayName",
dst, style,
66 jlocale.object<QtJniTypes::Locale>()).toString();
69void QAndroidTimeZonePrivate::init(
const QByteArray &ianaId)
72 androidTimeZone = QJniObject::callStaticMethod<QtJniTypes::TimeZone>(
73 QtJniTypes::className<QtJniTypes::TimeZone>(),
"getTimeZone",
88 m_id =
match(androidTimeZone.callMethod<jstring>(
"getID").toString());
89 for (
int style = 1; m_id.isEmpty() && style >= 0; --style) {
90 for (
int dst = 1; m_id.isEmpty() &&
dst >= 0; --
dst) {
91 for (
int pick = 2; m_id.isEmpty() &&
pick >= 0; --
pick) {
100QAndroidTimeZonePrivate *QAndroidTimeZonePrivate::clone()
const
102 return new QAndroidTimeZonePrivate(*
this);
106QString QAndroidTimeZonePrivate::displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
111 if (androidTimeZone.isValid()) {
112 jboolean daylightTime = (timeType == QTimeZone::DaylightTime);
115 jint style = (nameType == QTimeZone::ShortName ? 0 : 1);
123QString QAndroidTimeZonePrivate::abbreviation(
qint64 atMSecsSinceEpoch)
const
125 if ( isDaylightTime( atMSecsSinceEpoch ) )
131int QAndroidTimeZonePrivate::offsetFromUtc(
qint64 atMSecsSinceEpoch)
const
135 if ( androidTimeZone.isValid() ) {
137 return androidTimeZone.callMethod<jint>(
138 "getOffset",
static_cast<jlong
>(atMSecsSinceEpoch) ) / 1000;
144int QAndroidTimeZonePrivate::standardTimeOffset(
qint64 atMSecsSinceEpoch)
const
148 if ( androidTimeZone.isValid() )
150 return androidTimeZone.callMethod<jint>(
"getRawOffset" ) / 1000;
155int QAndroidTimeZonePrivate::daylightTimeOffset(
qint64 atMSecsSinceEpoch)
const
157 return ( offsetFromUtc(atMSecsSinceEpoch) - standardTimeOffset(atMSecsSinceEpoch) );
160bool QAndroidTimeZonePrivate::hasDaylightTime()
const
162 if ( androidTimeZone.isValid() )
164 return androidTimeZone.callMethod<jboolean>(
"useDaylightTime" );
169bool QAndroidTimeZonePrivate::isDaylightTime(
qint64 atMSecsSinceEpoch)
const
171 if ( androidTimeZone.isValid() ) {
172 QJniObject jDate = QJniObject::construct<QtJniTypes::Date>(
173 static_cast<jlong
>(atMSecsSinceEpoch));
174 return androidTimeZone.callMethod<jboolean>(
"inDaylightTime",
175 jDate.object<QtJniTypes::Date>());
183 if (androidTimeZone.isValid()) {
185 data.atMSecsSinceEpoch = forMSecsSinceEpoch;
186 data.standardTimeOffset = standardTimeOffset(forMSecsSinceEpoch);
187 data.offsetFromUtc = offsetFromUtc(forMSecsSinceEpoch);
188 data.daylightTimeOffset =
data.offsetFromUtc -
data.standardTimeOffset;
189 data.abbreviation = abbreviation(forMSecsSinceEpoch);
199QByteArray QAndroidTimeZonePrivate::systemTimeZoneId()
const
202 QJniObject androidSystemTimeZone = QJniObject::callStaticMethod<QtJniTypes::TimeZone>(
203 QtJniTypes::className<QtJniTypes::TimeZone>(),
"getDefault");
204 const QJniObject id = androidSystemTimeZone.callMethod<jstring>(
"getID");
205 return id.toString().toUtf8();
211 QJniObject androidAvailableIdList = QJniObject::callStaticMethod<QtJniTypes::StringArray>(
212 QtJniTypes::className<QtJniTypes::TimeZone>(),
"getAvailableIDs");
215 int androidTZcount = jniEnv->GetArrayLength(androidAvailableIdList.object<jarray>());
219 jobject androidTZobject;
221 for (
int i = 0;
i < androidTZcount;
i++) {
222 androidTZobject = jniEnv->GetObjectArrayElement(androidAvailableIdList.object<jobjectArray>(),
i);
223 androidTZ = androidTZobject;
224 availableTimeZoneIdList.
append(androidTZ.toString().toUtf8());
225 jniEnv->DeleteLocalRef(androidTZobject);
228 return availableTimeZoneIdList;
void append(parameter_type t)
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...
int compare(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Q_QML_PRIVATE_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)
static const qint64 invalidData
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
Q_DECLARE_JNI_TYPE(File, "Ljava/io/File;")
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)