Merge lp:~zsombi/ubuntu-ui-toolkit/alarm-sound-update-fix into lp:ubuntu-ui-toolkit/staging

Proposed by Zsombor Egri
Status: Merged
Approved by: Zsombor Egri
Approved revision: 1234
Merged at revision: 1239
Proposed branch: lp:~zsombi/ubuntu-ui-toolkit/alarm-sound-update-fix
Merge into: lp:ubuntu-ui-toolkit/staging
Diff against target: 206 lines (+113/-4)
6 files modified
modules/Ubuntu/Components/plugin/adapters/alarmsadapter_organizer.cpp (+79/-3)
modules/Ubuntu/Components/plugin/adapters/alarmsadapter_p.h (+3/-1)
modules/Ubuntu/Components/plugin/alarmmanager_p.cpp (+8/-0)
modules/Ubuntu/Components/plugin/alarmmanager_p.h (+2/-0)
modules/Ubuntu/Components/plugin/alarmmanager_p_p.h (+4/-0)
tests/unit/tst_alarms/tst_alarms.cpp (+17/-0)
To merge this branch: bzr merge lp:~zsombi/ubuntu-ui-toolkit/alarm-sound-update-fix
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Approve
Cris Dywan Approve
Nekhelesh Ramananthan Pending
Review via email: mp+233340@code.launchpad.net

Commit message

Organizer audible reminder wasn't updated when Alarm sound changed.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Cris Dywan (kalikiana) wrote :

I like.

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'modules/Ubuntu/Components/plugin/adapters/alarmsadapter_organizer.cpp'
--- modules/Ubuntu/Components/plugin/adapters/alarmsadapter_organizer.cpp 2014-08-22 14:48:56 +0000
+++ modules/Ubuntu/Components/plugin/adapters/alarmsadapter_organizer.cpp 2014-09-04 13:47:23 +0000
@@ -203,6 +203,15 @@
203 // save the sound as description as the audible reminder may be off203 // save the sound as description as the audible reminder may be off
204 if (alarm.changes && AlarmData::Sound) {204 if (alarm.changes && AlarmData::Sound) {
205 event.setDescription(alarm.sound.toString());205 event.setDescription(alarm.sound.toString());
206 // update audible reminder as well if alarm is enabled
207 if (alarm.enabled) {
208 QOrganizerItemAudibleReminder audible = event.detail(QOrganizerItemDetail::TypeAudibleReminder);
209 // remove the previous data, otherwise we will have two melodies
210 event.removeDetail(&audible);
211 // update sound and save
212 audible.setDataUrl(alarm.sound);
213 event.saveDetail(&audible);
214 }
206 }215 }
207216
208 // set repeating, reset recurrence no matter if we had it or not217 // set repeating, reset recurrence no matter if we had it or not
@@ -221,7 +230,7 @@
221 rule.setFrequency(QOrganizerRecurrenceRule::Daily);230 rule.setFrequency(QOrganizerRecurrenceRule::Daily);
222 } else if (alarm.days) {231 } else if (alarm.days) {
223 rule.setFrequency(QOrganizerRecurrenceRule::Weekly);232 rule.setFrequency(QOrganizerRecurrenceRule::Weekly);
224 rule.setDaysOfWeek(daysToSet(alarm));233 rule.setDaysOfWeek(daysToSet(alarm.days));
225 }234 }
226 event.setRecurrenceRule(rule);235 event.setRecurrenceRule(rule);
227 break;236 break;
@@ -274,11 +283,11 @@
274 return UCAlarm::NoError;283 return UCAlarm::NoError;
275}284}
276285
277QSet<Qt::DayOfWeek> AlarmsAdapter::daysToSet(const AlarmData &alarm) const286QSet<Qt::DayOfWeek> AlarmsAdapter::daysToSet(int days) const
278{287{
279 QSet<Qt::DayOfWeek> result;288 QSet<Qt::DayOfWeek> result;
280 for (Qt::DayOfWeek day = Qt::Monday; day <= Qt::Sunday; day = static_cast<Qt::DayOfWeek>(static_cast<int>(day) + 1)) {289 for (Qt::DayOfWeek day = Qt::Monday; day <= Qt::Sunday; day = static_cast<Qt::DayOfWeek>(static_cast<int>(day) + 1)) {
281 if (alarm.days & (1 << (static_cast<int>(day) - 1)))290 if (days & (1 << (static_cast<int>(day) - 1)))
282 result << day;291 result << day;
283 }292 }
284 return result;293 return result;
@@ -298,6 +307,73 @@
298/*-----------------------------------------------------------------------------307/*-----------------------------------------------------------------------------
299 * Abstract methods308 * Abstract methods
300 */309 */
310bool AlarmsAdapter::verifyChange(const QVariant &cookie, AlarmData::Change change, const QVariant &value)
311{
312 QOrganizerItemId id = cookie.value<QOrganizerItemId>();
313 QOrganizerTodo todo = static_cast<QOrganizerTodo>(manager->item(id));
314 if (todo.isEmpty()) {
315 return false;
316 }
317
318 switch (change) {
319 case AlarmData::Enabled:
320 {
321 QOrganizerItemVisualReminder visual = todo.detail(QOrganizerItemDetail::TypeVisualReminder);
322 QOrganizerItemAudibleReminder audible = todo.detail(QOrganizerItemDetail::TypeAudibleReminder);
323 return (visual.isEmpty() && audible.isEmpty()) == value.toBool();
324 }
325 case AlarmData::Date:
326 {
327 return todo.startDateTime() == value.toDateTime();
328 }
329 case AlarmData::Message:
330 {
331 return todo.displayLabel() == value.toString();
332 }
333 case AlarmData::Sound:
334 {
335 // it is enough to check teh audible presence, as they are added/removed in pair with visual reminder
336 QOrganizerItemAudibleReminder audible = todo.detail(QOrganizerItemDetail::TypeAudibleReminder);
337 bool result = todo.description() == value.toString();
338 if (result && !audible.isEmpty()) {
339 // check whether the reminder has the same sound
340 result = audible.dataUrl().toString() == value.toString();
341 }
342 return result;
343 }
344 case AlarmData::Type:
345 {
346 QOrganizerRecurrenceRule rule = todo.recurrenceRule();
347 QOrganizerRecurrenceRule::Frequency frequency = rule.frequency();
348 UCAlarm::AlarmType type = static_cast<UCAlarm::AlarmType>(value.toInt());
349 return (type == UCAlarm::OneTime && frequency == QOrganizerRecurrenceRule::Invalid) ||
350 (type == UCAlarm::Repeating &&
351 (frequency == QOrganizerRecurrenceRule::Daily ||
352 frequency == QOrganizerRecurrenceRule::Weekly));
353 }
354 case AlarmData::Days:
355 {
356 // this only checks the days set
357 QOrganizerRecurrenceRule rule = todo.recurrenceRule();
358 QOrganizerRecurrenceRule::Frequency frequency = rule.frequency();
359 if (frequency == QOrganizerRecurrenceRule::Invalid) {
360 return false;
361 }
362 int days = value.toInt();
363 if (days == UCAlarm::Daily && frequency == QOrganizerRecurrenceRule::Daily) {
364 return true;
365 }
366 if (frequency == QOrganizerRecurrenceRule::Weekly) {
367 return rule.daysOfWeek() == daysToSet(days);
368 }
369 return false;
370 }
371 default:
372 return false;
373 break;
374 }
375}
376
301bool AlarmsAdapter::fetchAlarms()377bool AlarmsAdapter::fetchAlarms()
302{378{
303 if (fetchRequest) {379 if (fetchRequest) {
304380
=== modified file 'modules/Ubuntu/Components/plugin/adapters/alarmsadapter_p.h'
--- modules/Ubuntu/Components/plugin/adapters/alarmsadapter_p.h 2014-08-22 13:01:29 +0000
+++ modules/Ubuntu/Components/plugin/adapters/alarmsadapter_p.h 2014-09-04 13:47:23 +0000
@@ -86,9 +86,11 @@
8686
87 void organizerEventFromAlarmData(const AlarmData &alarm, QOrganizerTodo &event);87 void organizerEventFromAlarmData(const AlarmData &alarm, QOrganizerTodo &event);
88 int alarmDataFromOrganizerEvent(const QOrganizerTodo &event, AlarmData &alarm);88 int alarmDataFromOrganizerEvent(const QOrganizerTodo &event, AlarmData &alarm);
89 QSet<Qt::DayOfWeek> daysToSet(const AlarmData &alarm) const;89 QSet<Qt::DayOfWeek> daysToSet(int days) const;
90 void daysFromSet(AlarmData &alarm, QSet<Qt::DayOfWeek> set);90 void daysFromSet(AlarmData &alarm, QSet<Qt::DayOfWeek> set);
9191
92 bool verifyChange(const QVariant &cookie, AlarmData::Change change, const QVariant &value);
93
92public Q_SLOTS:94public Q_SLOTS:
93 bool fetchAlarms();95 bool fetchAlarms();
94 void updateAlarms(QList<QOrganizerItemId> list);96 void updateAlarms(QList<QOrganizerItemId> list);
9597
=== modified file 'modules/Ubuntu/Components/plugin/alarmmanager_p.cpp'
--- modules/Ubuntu/Components/plugin/alarmmanager_p.cpp 2014-08-22 11:03:40 +0000
+++ modules/Ubuntu/Components/plugin/alarmmanager_p.cpp 2014-09-04 13:47:23 +0000
@@ -59,4 +59,12 @@
59 return d->alarmList;59 return d->alarmList;
60}60}
6161
62bool AlarmManager::verifyChange(UCAlarm *alarm, AlarmData::Change change, const QVariant &newData)
63{
64 Q_D(AlarmManager);
65 UCAlarmPrivate *pAlarm = UCAlarmPrivate::get(alarm);
66 return d->verifyChange(pAlarm->rawData.cookie, change, newData);
67}
68
69
62#include "moc_alarmmanager_p.cpp"70#include "moc_alarmmanager_p.cpp"
6371
=== modified file 'modules/Ubuntu/Components/plugin/alarmmanager_p.h'
--- modules/Ubuntu/Components/plugin/alarmmanager_p.h 2014-08-22 11:03:40 +0000
+++ modules/Ubuntu/Components/plugin/alarmmanager_p.h 2014-09-04 13:47:23 +0000
@@ -159,6 +159,8 @@
159159
160 AlarmList alarms() const;160 AlarmList alarms() const;
161161
162 bool verifyChange(UCAlarm *alarm, AlarmData::Change change, const QVariant &newData);
163
162Q_SIGNALS:164Q_SIGNALS:
163 void alarmsChanged();165 void alarmsChanged();
164 void alarmsUpdated(const QList<QVariant> &cookies);166 void alarmsUpdated(const QList<QVariant> &cookies);
165167
=== modified file 'modules/Ubuntu/Components/plugin/alarmmanager_p_p.h'
--- modules/Ubuntu/Components/plugin/alarmmanager_p_p.h 2014-08-22 11:03:40 +0000
+++ modules/Ubuntu/Components/plugin/alarmmanager_p_p.h 2014-09-04 13:47:23 +0000
@@ -43,6 +43,10 @@
43 bool completed:1;43 bool completed:1;
4444
45 virtual bool fetchAlarms() = 0;45 virtual bool fetchAlarms() = 0;
46
47 // function to verify whether the given alarm property has a given value set
48 // used for testing purposes
49 virtual bool verifyChange(const QVariant &cookie, AlarmData::Change change, const QVariant &value) = 0;
46};50};
4751
48AlarmManagerPrivate * createAlarmsAdapter(AlarmManager *alarms);52AlarmManagerPrivate * createAlarmsAdapter(AlarmManager *alarms);
4953
=== modified file 'tests/unit/tst_alarms/tst_alarms.cpp'
--- tests/unit/tst_alarms/tst_alarms.cpp 2014-08-22 13:01:29 +0000
+++ tests/unit/tst_alarms/tst_alarms.cpp 2014-09-04 13:47:23 +0000
@@ -563,6 +563,23 @@
563 QVERIFY(data.cookie.isValid());563 QVERIFY(data.cookie.isValid());
564 QCOMPARE(data.enabled, false);564 QCOMPARE(data.enabled, false);
565 }565 }
566
567 void test_change_alarm_sound()
568 {
569 UCAlarm alarm(QDateTime::currentDateTime(), UCAlarm::AutoDetect, "test_change_alarm_fields_sound");
570 alarm.save();
571 waitForRequest(&alarm);
572 QVERIFY(containsAlarm(&alarm));
573
574 // do the change
575 alarm.setSound(QUrl("file:///usr/share/sounds/ubuntu/ringtones/Celestial.ogg"));
576 alarm.save();
577 waitForRequest(&alarm);
578 QVERIFY(containsAlarm(&alarm));
579
580 //verify whether we have the desired change
581 QVERIFY(AlarmManager::instance().verifyChange(&alarm, AlarmData::Sound, QVariant::fromValue(alarm.sound())));
582 }
566};583};
567584
568QTEST_MAIN(tst_UCAlarms)585QTEST_MAIN(tst_UCAlarms)

Subscribers

People subscribed via source and target branches