ubuntu-touch-coreapps-reviewers team mailing list archive
-
ubuntu-touch-coreapps-reviewers team
-
Mailing list archive
-
Message #05191
[Merge] lp:~gang65/ubuntu-clock-app/ubuntu-clock-mainclock-runtime-timezone-fix into lp:ubuntu-clock-app
Bartosz Kosiorek has proposed merging lp:~gang65/ubuntu-clock-app/ubuntu-clock-mainclock-runtime-timezone-fix into lp:ubuntu-clock-app.
Commit message:
* Fix wrong date and time after changing timezone while clock running (LP: #1447441)
Requested reviews:
Nekhelesh Ramananthan (nik90): performance regression
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot): continuous-integration
Related bugs:
Bug #1447441 in Ubuntu Clock App: "Clock-App: Wrong time is displayed with digit display mode, if change timezone when app launched. "
https://bugs.launchpad.net/ubuntu-clock-app/+bug/1447441
For more details, see:
https://code.launchpad.net/~gang65/ubuntu-clock-app/ubuntu-clock-mainclock-runtime-timezone-fix/+merge/271033
* Fix wrong date and time after changing timezone while clock running (LP: #1447441)
TODO:
Test manually Daylight saving time changing.
List of all switches from/to DST is available at:
https://en.wikipedia.org/wiki/Daylight_saving_time_by_country
--
Your team Ubuntu Clock Developers is subscribed to branch lp:ubuntu-clock-app.
=== modified file 'README.unittest'
--- README.unittest 2015-09-12 11:54:16 +0000
+++ README.unittest 2015-10-08 19:57:19 +0000
@@ -21,11 +21,11 @@
If you want to run all tests, then run the following command from the builddir,
- $ make test
+ $ ctest --output-on-failure
If you want more verbose output, then run,
- $ ctest -V
+ $ ctest -VV
Running individual test cases,
==============================
@@ -34,7 +34,7 @@
unit tests folder by,
* Navigate to the tests/unit directory
- $ cd reboot/tests/unit
+ $ cd tests/unit
* Run the test by providing their filenames
$ qmltestrunner -input tst_alarmLabel.qml
=== modified file 'app/MainPage.qml'
--- app/MainPage.qml 2015-09-11 13:29:07 +0000
+++ app/MainPage.qml 2015-10-08 19:57:19 +0000
@@ -30,8 +30,14 @@
id: _mainPage
objectName: "mainPage"
- // Property to keep track of the clock time
- property var clockTime: new Date()
+ // String with not localized date and time in format "yyyy:MM:dd:hh:mm:ss", eg.: "2015:10:05:16:10:15"
+ property string notLocalizedDateTimeString
+
+ // String with localized time, eg.: "4:10 PM"
+ property string localizedTimeString
+
+ // String with localized date, eg.: "Thursday, 17 September 2015"
+ property string localizedDateString
// Property to keep track of an app cold start status
property alias isColdStart: clockPage.isColdStart
@@ -43,7 +49,7 @@
property var alarmModel
flickable: null
- bottomEdgeTitle: _mainPage.visible ? alarmUtils.set_bottom_edge_title(alarmModel, clockTime)
+ bottomEdgeTitle: _mainPage.visible ? alarmUtils.set_bottom_edge_title(alarmModel, notLocalizedDateTimeString)
: i18n.tr("No active alarms")
Component.onCompleted: {
@@ -64,7 +70,9 @@
id: navigationModel
ClockPage {
id: clockPage
- clockTime: _mainPage.clockTime
+ notLocalizedClockTimeString: _mainPage.notLocalizedDateTimeString
+ localizedClockTimeString: _mainPage.localizedTimeString
+ localizedClockDateString: _mainPage.localizedDateString
width: clockApp.width
height: listview.height
}
=== modified file 'app/alarm/AlarmPage.qml'
--- app/alarm/AlarmPage.qml 2015-08-23 00:53:57 +0000
+++ app/alarm/AlarmPage.qml 2015-10-08 19:57:19 +0000
@@ -120,7 +120,19 @@
id: alarmListView
model: alarmModel
anchors.fill: parent
- localTime: clockTime
+ localTime: {
+ var date = new Date();
+ return new Date
+ (
+ notLocalizedDateTimeString.split(":")[0],
+ notLocalizedDateTimeString.split(":")[1] - 1,
+ notLocalizedDateTimeString.split(":")[2],
+ notLocalizedDateTimeString.split(":")[3],
+ notLocalizedDateTimeString.split(":")[4],
+ notLocalizedDateTimeString.split(":")[5],
+ 0
+ )
+ }
}
Loader {
=== modified file 'app/alarm/AlarmSettingsPage.qml'
--- app/alarm/AlarmSettingsPage.qml 2015-08-26 23:35:50 +0000
+++ app/alarm/AlarmSettingsPage.qml 2015-10-08 19:57:19 +0000
@@ -231,26 +231,7 @@
SubtitledListItem {
text: i18n.tr("Change time and date")
- subText: {
- /*
- FIXME: When the upstream QT bug at
- https://bugreports.qt-project.org/browse/QTBUG-40275 is fixed
- it will be possible to receive a datetime object directly
- instead of using this hack.
- */
- var localTime = new Date
- (
- localTimeSource.localDateString.split(":")[0],
- localTimeSource.localDateString.split(":")[1]-1,
- localTimeSource.localDateString.split(":")[2],
- localTimeSource.localTimeString.split(":")[0],
- localTimeSource.localTimeString.split(":")[1],
- localTimeSource.localTimeString.split(":")[2],
- localTimeSource.localTimeString.split(":")[3]
- )
- return localTime.toLocaleString()
- }
-
+ subText: localTimeSource.localizedCurrentDateString + " " + localTimeSource.localizedCurrentTimeString
onClicked: {
Qt.openUrlExternally("settings:///system/time-date")
}
=== modified file 'app/alarm/AlarmUtils.qml'
--- app/alarm/AlarmUtils.qml 2015-08-14 05:34:49 +0000
+++ app/alarm/AlarmUtils.qml 2015-10-08 19:57:19 +0000
@@ -51,9 +51,20 @@
}
// Function to set the bottom edge title with "Next Active in..."
- function set_bottom_edge_title(alarmModel, clockTime) {
+ function set_bottom_edge_title(alarmModel, clockTimeString) {
var bottom_edge_title = i18n.tr("No active alarms")
+ var date = new Date();
+ var clockTime = new Date
+ (
+ clockTimeString.split(":")[0],
+ clockTimeString.split(":")[1] - 1,
+ clockTimeString.split(":")[2],
+ clockTimeString.split(":")[3],
+ clockTimeString.split(":")[4],
+ clockTimeString.split(":")[5],
+ 0
+ )
/*
Check if alarm model received is valid and has saved alarms and only
then proceed to find the next active alarm.
=== modified file 'app/alarm/EditAlarmPage.qml'
--- app/alarm/EditAlarmPage.qml 2015-08-28 20:06:32 +0000
+++ app/alarm/EditAlarmPage.qml 2015-10-08 19:57:19 +0000
@@ -246,14 +246,15 @@
mode: "Hours|Minutes"
date: {
if(isNewAlarm) {
+ var date = new Date();
return new Date
(
- currentTime.localDateString.split(":")[0],
- currentTime.localDateString.split(":")[1] - 1,
- currentTime.localDateString.split(":")[2],
- currentTime.localTimeString.split(":")[0],
- Math.ceil((parseInt(currentTime.localTimeString
- .split(":")[1]) + 1) / 5) * 5,
+ currentTime.notLocalizedCurrentDateTimeString.split(":")[0],
+ currentTime.notLocalizedCurrentDateTimeString.split(":")[1] - 1,
+ currentTime.notLocalizedCurrentDateTimeString.split(":")[2],
+ currentTime.notLocalizedCurrentDateTimeString.split(":")[3],
+ Math.ceil((parseInt(currentTime.notLocalizedCurrentDateTimeString
+ .split(":")[4]) + 1) / 5) * 5,
0,
0
)
=== modified file 'app/clock/ClockPage.qml'
--- app/clock/ClockPage.qml 2015-08-26 23:30:10 +0000
+++ app/clock/ClockPage.qml 2015-10-08 19:57:19 +0000
@@ -31,12 +31,31 @@
// Property to keep track of the clock mode
property alias isDigital: clock.isDigital
- // Property to keep track of the clock time
- property var clockTime: new Date()
+ // String with not localized date and time in format "yyyy:MM:dd:hh:mm:ss", eg.: "2015:10:05:16:10:15"
+ property string notLocalizedClockTimeString
+
+ // String with localized time, eg.: "4:10 PM"
+ property string localizedClockTimeString
+
+ // String with localized date, eg.: "Thursday, 17 September 2015"
+ property string localizedClockDateString
// Property to keep track of app cold start status
property alias isColdStart: clock.isColdStart
+ function get_current_utc_time() {
+ var localDate = new Date()
+ // FIXME Date() is not working correctly in runtime, when timezone is changed.
+ // To avoid issues with Date(), clock app needs to be restarted every timezone is changed
+ return new Date(localDate.getUTCFullYear(),
+ localDate.getUTCMonth(),
+ localDate.getUTCDate(),
+ localDate.getUTCHours(),
+ localDate.getUTCMinutes(),
+ localDate.getUTCSeconds(),
+ localDate.getUTCMilliseconds())
+ }
+
Component.onCompleted: {
console.log("[LOG]: Clock Page loaded")
otherElementsStartUpAnimation.start()
@@ -106,14 +125,17 @@
If Clock App is brought from background after more than 30 mins,
query the user location to ensure it is up to date.
*/
+ // FIXME Date() is not working correctly in runtime, when timezone is changed.
+ // To avoid issues with Date(), clock app needs to be restarted every timezone is changed
+ var currentUTCTime = get_current_utc_time()
if(applicationState
- && Math.abs(clock.analogTime - geoposition.lastUpdate) > 1800000) {
- if(!geoposition.active)
+ && Math.abs(currentUTCTime - geoposition.lastUpdate) > 1800000) {
+ if(!geoposition.active) {
+ console.log("[LOG]: Starting geolocation update service at UTC time: " + currentUTCTime)
geoposition.start()
- }
-
- else if (!applicationState) {
- geoposition.lastUpdate = clock.analogTime
+ }
+ } else if (!applicationState) {
+ geoposition.lastUpdate = currentUTCTime
}
}
}
@@ -161,10 +183,12 @@
objectName: "clock"
Component.onCompleted: {
- geoposition.lastUpdate = analogTime
+ geoposition.lastUpdate = get_current_utc_time()
}
- analogTime: clockTime
+ notLocalizedDateTimeString: notLocalizedClockTimeString
+ localizedTimeString: localizedClockTimeString
+ localizedDateString: localizedClockDateString
anchors {
verticalCenter: parent.top
@@ -182,7 +206,7 @@
horizontalCenter: parent.horizontalCenter
}
- text: clock.analogTime.toLocaleDateString()
+ text: clock.localizedDateString
opacity: 0
color: locationRow.visible ? Theme.palette.normal.baseText : UbuntuColors.midAubergine
=== modified file 'app/components/AnalogMode.qml'
--- app/components/AnalogMode.qml 2015-08-14 05:34:49 +0000
+++ app/components/AnalogMode.qml 2015-10-08 19:57:19 +0000
@@ -53,7 +53,12 @@
smooth: true
source: "../graphics/Hour_Hand.png"
fillMode: Image.PreserveAspectFit
- rotation: (analogTime.getHours() * 30) + (analogTime.getMinutes() / 2)
+ // notLocalizedDateTimeString.split(":")[3] is hours
+ // notLocalizedDateTimeString.split(":")[4] is minutes
+ // We need to calculate degree number for rotation (0 degrees means no rotation).
+ // Full rotate has 360 degrees and we have 12 hours in clock face,
+ // For hours: 360deg/12h=30 deg/h, for minutes 30deg/60min= 0.5 deg/min
+ rotation: (parseInt(notLocalizedDateTimeString.split(":")[3]) * 30) + (parseInt(notLocalizedDateTimeString.split(":")[4]) * 0.5)
}
Image {
@@ -65,7 +70,12 @@
smooth: true
source: "../graphics/Minute_Hand.png"
fillMode: Image.PreserveAspectFit
- rotation: (analogTime.getMinutes() * 6) + (analogTime.getSeconds() / 10)
+ // notLocalizedDateTimeString.split(":")[4] is minutes
+ // notLocalizedDateTimeString.split(":")[5] is seconds
+ // We need to calculate degree number for rotation (0 degrees means no rotation).
+ // Full rotate has 360 degrees and we have 60 miutes in clock face,
+ // For minutes: 360deg/60min=6 deg/min, for seconds 6deg/60sec= 0.1 deg/sec
+ rotation: (parseInt(notLocalizedDateTimeString.split(":")[4]) * 6) + (parseInt(notLocalizedDateTimeString.split(":")[5]) * 0.1)
}
Image {
@@ -78,7 +88,11 @@
visible: showSeconds
source: "../graphics/Second_Hand.png"
fillMode: Image.PreserveAspectFit
- rotation: visible ? analogTime.getSeconds() * 6 : 0
+ // notLocalizedDateTimeString.split(":")[5] is seconds
+ // We need to calculate degree number for rotation (0 degrees means no rotation).
+ // Full rotate has 360 degrees and we have 60 seconds in clock face,
+ // For seconds 360deg/60sec= 6 deg/sec
+ rotation: visible ? parseInt(notLocalizedDateTimeString.split(":")[5]) * 6 : 0
}
Image {
=== modified file 'app/components/Clock.qml'
--- app/components/Clock.qml 2015-08-14 05:34:49 +0000
+++ app/components/Clock.qml 2015-10-08 19:57:19 +0000
@@ -41,11 +41,14 @@
ClockCircle {
id: _outerCircle
- // Property to set the analog time
- property var analogTime
-
- // Property to set the digital time label
- property string time: Qt.formatTime(analogTime)
+ // String with not localized date and time in format "yyyy:MM:dd:hh:mm:ss", eg.: "2015:10:05:16:10:15"
+ property string notLocalizedDateTimeString
+
+ // String with localized time, eg.: "4:10 PM"
+ property string localizedTimeString
+
+ // String with localized date, eg.: "Thursday, 17 September 2015"
+ property string localizedDateString
// Property to keep track of the clock mode
property alias isDigital: clockModeFlipable.isDigital
=== modified file 'app/components/DigitalMode.qml'
--- app/components/DigitalMode.qml 2015-08-14 05:34:49 +0000
+++ app/components/DigitalMode.qml 2015-10-08 19:57:19 +0000
@@ -56,17 +56,17 @@
color: UbuntuColors.midAubergine
font.pixelSize: units.dp(1)
text: {
- if (time.search(Qt.locale().amText) !== -1) {
+ if (localizedTimeString.search(Qt.locale().amText) !== -1) {
// 12 hour format detected with the localised AM text
- return time.replace(Qt.locale().amText, "").trim()
+ return localizedTimeString.replace(Qt.locale().amText, "").trim()
}
- else if (time.search(Qt.locale().pmText) !== -1) {
+ else if (localizedTimeString.search(Qt.locale().pmText) !== -1) {
// 12 hour format detected with the localised PM text
- return time.replace(Qt.locale().pmText, "").trim()
+ return localizedTimeString.replace(Qt.locale().pmText, "").trim()
}
else {
// 24-hour format detected, return full time string
- return time
+ return localizedTimeString
}
}
}
@@ -81,11 +81,11 @@
font.pixelSize: units.dp(1)
visible: text !== ""
text: {
- if (time.search(Qt.locale().amText) !== -1) {
+ if (localizedTimeString.search(Qt.locale().amText) !== -1) {
// 12 hour format detected with the localised AM text
return Qt.locale().amText
}
- else if (time.search(Qt.locale().pmText) !== -1) {
+ else if (localizedTimeString.search(Qt.locale().pmText) !== -1) {
// 12 hour format detected with the localised PM text
return Qt.locale().pmText
}
=== modified file 'app/ubuntu-clock-app.qml'
--- app/ubuntu-clock-app.qml 2015-09-09 20:26:42 +0000
+++ app/ubuntu-clock-app.qml 2015-10-08 19:57:19 +0000
@@ -135,24 +135,17 @@
is required.
*/
- /*
- #FIXME: When the upstream QT bug at
- https://bugreports.qt-project.org/browse/QTBUG-40275 is fixed it will be
- possible to receive a datetime object directly instead of using this hack.
- */
-
alarmModel: alarmModelLoader.item
bottomEdgeEnabled: alarmModelLoader.status === Loader.Ready && alarmModelLoader.item.isReady && isClockPage
- clockTime: new Date
- (
- localTimeSource.localDateString.split(":")[0],
- localTimeSource.localDateString.split(":")[1]-1,
- localTimeSource.localDateString.split(":")[2],
- localTimeSource.localTimeString.split(":")[0],
- localTimeSource.localTimeString.split(":")[1],
- localTimeSource.localTimeString.split(":")[2],
- localTimeSource.localTimeString.split(":")[3]
- )
+
+ /*
+ FIXME: When the upstream QT bug at
+ https://bugreports.qt-project.org/browse/QTBUG-40275 is fixed
+ it will be possible to receive a datetime object directly for notLocalizedDateTimeString variable.
+ */
+ notLocalizedDateTimeString: localTimeSource.notLocalizedCurrentDateTimeString
+ localizedTimeString: localTimeSource.localizedCurrentTimeString
+ localizedDateString: localTimeSource.localizedCurrentDateString
}
}
}
=== modified file 'app/worldclock/UserWorldCityDelegate.qml'
--- app/worldclock/UserWorldCityDelegate.qml 2015-08-29 01:45:19 +0000
+++ app/worldclock/UserWorldCityDelegate.qml 2015-10-08 19:57:19 +0000
@@ -73,27 +73,13 @@
id: localTimeVisual
objectName: "localTimeVisual" + index
- /*
- This function would not be required once the upstream QT bug at
- https://bugreports.qt-project.org/browse/QTBUG-40275 is fixed.
- Due to this bug we are returning a time string instead of a
- time object which forces us to parse the string and convert it
- into a time object here.
- */
- function getTime(timeString) {
- var properTime = new Date()
- properTime.setHours(timeString.split(":")[0])
- properTime.setMinutes(timeString.split(":")[1])
- properTime.setSeconds(0)
- return properTime
- }
-
fontSize: units.dp(14)
periodFontSize: units.dp(7)
innerCircleWidth: units.gu(5)
width: units.gu(7)
- analogTime: getTime(model.localTime)
+ notLocalizedDateTimeString: model.notLocalizedZoneTime
+ localizedTimeString: model.localizedZoneTime
anchors.centerIn: parent
=== modified file 'app/worldclock/WorldCityList.qml'
--- app/worldclock/WorldCityList.qml 2015-09-03 21:07:54 +0000
+++ app/worldclock/WorldCityList.qml 2015-10-08 19:57:19 +0000
@@ -355,7 +355,7 @@
Label {
id: _localTime
- text: localTime
+ text: localizedZoneTime
anchors {
right: parent.right
rightMargin: units.gu(2)
=== modified file 'backend/modules/WorldClock/datetime.cpp'
--- backend/modules/WorldClock/datetime.cpp 2015-08-25 16:04:13 +0000
+++ backend/modules/WorldClock/datetime.cpp 2015-10-08 19:57:19 +0000
@@ -24,8 +24,10 @@
QObject(parent)
{
// Initialise the date and time at start rather than wait for a sec to do so.
- m_localtime = QDateTime::currentDateTime().toString("hh:mm:ss:z");
- m_localdate = QDateTime::currentDateTime().toString("yyyy:M:d");
+
+ m_notLocalizedCurrentDateTime = QDateTime::currentDateTime().toString("yyyy:MM:dd:hh:mm:ss");
+ m_localizedCurrentTime = QTime::currentTime().toString(Qt::DefaultLocaleShortDate);
+ m_localizedCurrentDate = QDate::currentDate().toString(Qt::DefaultLocaleLongDate);
m_updateTimer.setInterval(1000);
connect(&m_updateTimer, &QTimer::timeout, this, &DateTime::update);
@@ -33,23 +35,31 @@
m_updateTimer.start();
}
-QString DateTime::localTimeString() const
-{
- return m_localtime;
-}
-
-QString DateTime::localDateString() const
-{
- return m_localdate;
+QString DateTime::notLocalizedCurrentDateTimeString() const
+{
+ return m_notLocalizedCurrentDateTime;
+}
+
+QString DateTime::localizedCurrentTimeString() const
+{
+ return m_localizedCurrentTime;
+}
+
+QString DateTime::localizedCurrentDateString() const
+{
+ return m_localizedCurrentDate;
}
void DateTime::update()
{
- m_localtime = QDateTime::currentDateTime().toString("hh:mm:ss:z");
- emit localTimeStringChanged();
-
- m_localdate = QDateTime::currentDateTime().toString("yyyy:M:d");
- emit localDateStringChanged();
+ m_notLocalizedCurrentDateTime = QDateTime::currentDateTime().toString("yyyy:MM:dd:hh:mm:ss");
+ emit notLocalizedCurrentDateTimeStringChanged();
+
+ m_localizedCurrentTime = QTime::currentTime().toString(Qt::DefaultLocaleShortDate);
+ emit localizedCurrentTimeStringChanged();
+
+ m_localizedCurrentDate = QDate::currentDate().toString(Qt::DefaultLocaleLongDate);
+ emit localizedCurrentDateStringChanged();
}
int DateTime::updateInterval() const
=== modified file 'backend/modules/WorldClock/datetime.h'
--- backend/modules/WorldClock/datetime.h 2015-08-25 16:04:13 +0000
+++ backend/modules/WorldClock/datetime.h 2015-10-08 19:57:19 +0000
@@ -41,15 +41,20 @@
in the correct user locale.
*/
- // Property to determine the local time string (format hh:mm:ss)
- Q_PROPERTY(QString localTimeString
- READ localTimeString
- NOTIFY localTimeStringChanged)
-
- // Property to determine the local date string (format yyyy:M:d)
- Q_PROPERTY(QString localDateString
- READ localDateString
- NOTIFY localDateStringChanged)
+ // Property to determine not localized string of local time (format yyyy:MM:dd:hh:mm:ss)
+ Q_PROPERTY(QString notLocalizedCurrentDateTimeString
+ READ notLocalizedCurrentDateTimeString
+ NOTIFY notLocalizedCurrentDateTimeStringChanged)
+
+ // Property to determine the localized string of local time (format Qt::DefaultLocaleShortDate)
+ Q_PROPERTY(QString localizedCurrentTimeString
+ READ localizedCurrentTimeString
+ NOTIFY localizedCurrentTimeStringChanged)
+
+ // Property to determine the localized string of local date (format Qt::DefaultLocaleLongDate)
+ Q_PROPERTY(QString localizedCurrentDateString
+ READ localizedCurrentDateString
+ NOTIFY localizedCurrentDateStringChanged)
public:
DateTime(QObject *parent = 0);
@@ -59,18 +64,23 @@
// Function to set the update interval
void setUpdateInterval(int updateInterval);
+ QString notLocalizedCurrentDateTimeString() const;
+
// Function to read the local time string
- QString localTimeString() const;
+ QString localizedCurrentTimeString() const;
// Function to read the local date string
- QString localDateString() const;
+ QString localizedCurrentDateString() const;
signals:
+
+ void notLocalizedCurrentDateTimeStringChanged();
+
// Signal to notify the local time string change to QML
- void localTimeStringChanged();
+ void localizedCurrentTimeStringChanged();
// Signal to notify the local date string change in QML
- void localDateStringChanged();
+ void localizedCurrentDateStringChanged();
// Signal to notify the updateInterval change to QML
void updateIntervalChanged();
@@ -84,8 +94,9 @@
private:
// Private copies of the local time and date
- QString m_localtime;
- QString m_localdate;
+ QString m_notLocalizedCurrentDateTime;
+ QString m_localizedCurrentTime;
+ QString m_localizedCurrentDate;
// Private internal timer to update the values at a specified interval
QTimer m_updateTimer;
=== modified file 'backend/modules/WorldClock/timezonemodel.cpp'
--- backend/modules/WorldClock/timezonemodel.cpp 2015-08-25 16:11:38 +0000
+++ backend/modules/WorldClock/timezonemodel.cpp 2015-10-08 19:57:19 +0000
@@ -74,7 +74,7 @@
return m_citiesData.at(row).cityName;
case RoleCountryName:
return m_citiesData.at(row).countryName;
- case RoleTimeZoneId:
+ case RoleTimezoneId:
return m_citiesData.at(row).timeZone.id();
}
@@ -82,12 +82,14 @@
QDateTime worldCityTime(currentDateTime.toTimeZone(m_citiesData.at(row).timeZone));
switch (role) {
- case RoleTimeString:
+ case RoleNotLocalizedTimeString:
/*
FIXME: Until https://bugreports.qt-project.org/browse/QTBUG-40275
is fixed, we will have to return a string.
*/
- return worldCityTime.toString("hh:mm");
+ return worldCityTime.toString("yyyy:MM:dd:hh:mm:ss");
+ case RoleLocalizedTimeString:
+ return worldCityTime.time().toString(Qt::DefaultLocaleShortDate);
case RoleTimeTo:
/*
FIXME: Workaround for currentDateTime.secsTo(worldCityTime) which returns
@@ -109,8 +111,9 @@
roles.insert(RoleCityId, "cityId");
roles.insert(RoleCityName, "cityName");
roles.insert(RoleCountryName, "countryName");
- roles.insert(RoleTimeZoneId, "timezoneID");
- roles.insert(RoleTimeString, "localTime");
+ roles.insert(RoleTimezoneId, "timezoneID");
+ roles.insert(RoleNotLocalizedTimeString, "notLocalizedZoneTime");
+ roles.insert(RoleLocalizedTimeString, "localizedZoneTime");
roles.insert(RoleTimeTo, "timeTo");
return roles;
}
@@ -150,7 +153,7 @@
QModelIndex startIndex = index(0);
QModelIndex endIndex = index(m_citiesData.count() - 1);
QVector<int> roles;
- roles << RoleTimeString << RoleTimeTo;
+ roles << RoleLocalizedTimeString << RoleNotLocalizedTimeString << RoleTimeTo;
emit dataChanged(startIndex, endIndex, roles);
}
=== modified file 'backend/modules/WorldClock/timezonemodel.h'
--- backend/modules/WorldClock/timezonemodel.h 2015-08-25 16:11:38 +0000
+++ backend/modules/WorldClock/timezonemodel.h 2015-10-08 19:57:19 +0000
@@ -52,8 +52,9 @@
RoleCityId,
RoleCityName,
RoleCountryName,
- RoleTimeZoneId,
- RoleTimeString,
+ RoleTimezoneId,
+ RoleNotLocalizedTimeString,
+ RoleLocalizedTimeString,
RoleTimeTo,
};
=== modified file 'debian/changelog'
--- debian/changelog 2015-09-12 11:29:50 +0000
+++ debian/changelog 2015-10-08 19:57:19 +0000
@@ -12,7 +12,10 @@
* Fix wrong time after changing timezone, when stopwatch is running (LP: #1491024)
* Reduce size of images (with tinypng.com) to decrease click image size (LP: #1492057)
* Fix Czech Republic country name (LP: #1494004)
+ * Fix wrong date and time after changing timezone while clock running (LP: #1480546)
* Fix stopwatch issue appering during changing timezone during runtime (LP: #1493358)
+ * Fix Daylight Saving Time issues (LP: #1437805)
+ * Fix time for second location wrong after daylight saving started (LP: #1457523)
-- Bartosz Kosiorek <gang65@xxxxxxxxxxxxxx> Wed, 02 Sep 2015 15:16:29 +0200
=== modified file 'tests/manual/2014.com.ubuntu.clock:clock-tests/jobs/worldcity.pxu'
--- tests/manual/2014.com.ubuntu.clock:clock-tests/jobs/worldcity.pxu 2015-08-23 09:35:44 +0000
+++ tests/manual/2014.com.ubuntu.clock:clock-tests/jobs/worldcity.pxu 2015-10-08 19:57:19 +0000
@@ -23,3 +23,30 @@
7. Press the add city button.
The add world city page is shown with a list of cities in Espanol
+id: worldcity/timezone-change
+plugin: manual
+_summary: Test to check if clock time and world city times are correct after changing timezone during runtime
+estimated_duration: 600
+_description:
+ Test to check if clock time and world city times are correct after changing timezone during runtime
+ 1. Launch the clock app.
+ Clock app opens showing the current local time.
+ 2. Press on clock face and switch to Digital mode.
+ Main clock is showing current time in digital mode.
+ 3. Press the add city button.
+ The add world city page is shown with a list of cities.
+ 4. Select a city from different timezone.
+ The main clock page will be shown with the city you selected.
+ 5. Press the add city button.
+ The add world city page is shown with a list of cities.
+ 6. Select a city from current timezone.
+ The main clock page will be shown with the city you selected.
+ 7. Remeber time of World Cities and Main Clock
+ 8. Switch to the system settings app. Navigate to Date & Time.
+ The field with current timezone should be visible. Remember current timezone setting.
+ 9. Press the current timezone field and change system timezone to something different.
+ The timezone field now shows the newly selected timezone.
+ 10. Switch to clock app.
+ The Main Clock hours have not been changed.
+ The Main Clock shows the same time as on top bar (system time).
+ The World Clocks hours should remains unchanged.
=== modified file 'tests/unit/CMakeLists.txt'
--- tests/unit/CMakeLists.txt 2015-08-09 21:50:06 +0000
+++ tests/unit/CMakeLists.txt 2015-10-08 19:57:19 +0000
@@ -9,7 +9,7 @@
)
macro(DECLARE_QML_TEST TST_NAME TST_QML_FILE)
- if(USE_XVFB)
+ if(USE_XVFB AND XVFB_RUN_BIN)
set(COMMAND_PREFIX ${XVFB_RUN_BIN} -a -s "-screen 0 400x600x24")
else()
set(COMMAND_PREFIX "")
@@ -20,7 +20,7 @@
)
endmacro()
-if(QMLTESTRUNNER_BIN AND XVFB_RUN_BIN)
+if(QMLTESTRUNNER_BIN)
declare_qml_test("AlarmLabel" tst_alarmLabel.qml)
declare_qml_test("AlarmRepeat" tst_alarmRepeat.qml)
declare_qml_test("Alarm" tst_alarm.qml)
=== modified file 'tests/unit/MockClockApp.qml'
--- tests/unit/MockClockApp.qml 2015-08-26 23:30:10 +0000
+++ tests/unit/MockClockApp.qml 2015-10-08 19:57:19 +0000
@@ -82,16 +82,9 @@
alarmModel: alarmModelLoader.item
bottomEdgeEnabled: alarmModelLoader.status === Loader.Ready && alarmModelLoader.item.isReady && isClockPage
- clockTime: new Date
- (
- localTimeSource.localDateString.split(":")[0],
- localTimeSource.localDateString.split(":")[1]-1,
- localTimeSource.localDateString.split(":")[2],
- localTimeSource.localTimeString.split(":")[0],
- localTimeSource.localTimeString.split(":")[1],
- localTimeSource.localTimeString.split(":")[2],
- localTimeSource.localTimeString.split(":")[3]
- )
+ notLocalizedDateTimeString: localTimeSource.notLocalizedCurrentDateTimeString
+ localizedTimeString: localTimeSource.localizedCurrentTimeString
+ localizedDateString: localTimeSource.localizedCurrentDateString
}
}
}
=== modified file 'tests/unit/tst_alarm.qml'
--- tests/unit/tst_alarm.qml 2015-08-26 23:30:10 +0000
+++ tests/unit/tst_alarm.qml 2015-10-08 19:57:19 +0000
@@ -27,17 +27,6 @@
width: units.gu(40)
height: units.gu(70)
- property var clockTime: new Date
- (
- localTimeSource.localDateString.split(":")[0],
- localTimeSource.localDateString.split(":")[1]-1,
- localTimeSource.localDateString.split(":")[2],
- localTimeSource.localTimeString.split(":")[0],
- localTimeSource.localTimeString.split(":")[1],
- localTimeSource.localTimeString.split(":")[2],
- localTimeSource.localTimeString.split(":")[3]
- )
-
AlarmModel {
id: alarmModel
}
=== modified file 'tests/unit/tst_alarmUtils.qml'
--- tests/unit/tst_alarmUtils.qml 2015-08-12 16:57:29 +0000
+++ tests/unit/tst_alarmUtils.qml 2015-10-08 19:57:19 +0000
@@ -27,6 +27,7 @@
property var futureTime: new Date()
property var currentTime: new Date()
+ property var mock_notLocalizedDateTimeString: ""
AlarmUtils {
id: alarmUtils
@@ -48,6 +49,7 @@
mockAlarmDatabase.append({"name": "Alarm1", "date": futureTime, "enabled": false})
futureTime.setHours((futureTime.getHours() + 5))
mockAlarmDatabase.append({"name": "Alarm2", "date": futureTime, "enabled": true})
+ mock_notLocalizedDateTimeString = currentTime.getHours().toString() + ":" + currentTime.getMinutes().toString() + ":" +currentTime.getSeconds().toString()
}
/*
@@ -55,7 +57,7 @@
to the active alarms amongst other disabled alarms.
*/
function test_bottomEdgeTitleMustDisplayActiveAlarm() {
- var result = alarmUtils.set_bottom_edge_title(mockAlarmDatabase, currentTime)
+ var result = alarmUtils.set_bottom_edge_title(mockAlarmDatabase, mock_notLocalizedDateTimeString)
compare(result, "Next Alarm in 7h 1m", "Bottom edge title is incorrect")
}
@@ -65,7 +67,7 @@
*/
function test_bottomEdgeTitleMustDisplayNoActiveAlarm() {
mockAlarmDatabase.set(1, {"enabled": false})
- var result = alarmUtils.set_bottom_edge_title(mockAlarmDatabase, currentTime)
+ var result = alarmUtils.set_bottom_edge_title(mockAlarmDatabase, mock_notLocalizedDateTimeString)
compare(result, "No active alarms", "Bottom edge title is not correctly set when there are no enabled alarms")
mockAlarmDatabase.set(1, {"enabled": true})
}
@@ -76,7 +78,7 @@
*/
function test_bottomEdgeTitleMustDisplayNextActiveAlarm() {
mockAlarmDatabase.set(0, {"enabled": true})
- var result = alarmUtils.set_bottom_edge_title(mockAlarmDatabase, currentTime)
+ var result = alarmUtils.set_bottom_edge_title(mockAlarmDatabase, mock_notLocalizedDateTimeString)
compare(result, "Next Alarm in 2h 1m", "Bottom edge title is not correctly set to the next immediate active alarm where there are multiple active alarms.")
mockAlarmDatabase.set(0, {"enabled": false})
}
Follow ups