TizenRefApp-8028 Implement Snooze functionality in the Alert 76/115776/2
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Tue, 21 Feb 2017 08:42:12 +0000 (10:42 +0200)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Wed, 22 Feb 2017 12:23:57 +0000 (04:23 -0800)
Change-Id: I95dbd21930087711c31857f43360267620a81572
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
alarm-app/inc/Alert/AlertView.h
alarm-app/res/alert/edje/AlertLayout.h
alarm-app/res/alert/edje/alert-layout.edc
alarm-app/src/Alert/AlertView.cpp

index 76f008598de83a34ced6d44fe8d8ebdd4152b504..4e64834d2b78a15b44aa063562ced4902a8d8c28 100644 (file)
@@ -40,11 +40,15 @@ namespace Alert
                virtual Evas_Object *onCreate(Evas_Object *parent) override;
                virtual void onNavigation(bool isCurrent) override;
                virtual void onPageAttached(Ui::NavigatorPage *page) override;
+               virtual bool onBackPressed() override;
 
                Evas_Object *createButton(Evas_Object *parent, const char *iconPath, Elm_Color_RGBA color,
                                const char *pressSignal, const char *unpressSignal);
+               Evas_Object *createDismissButton(Evas_Object *parent);
+               Evas_Object *createSnoozeButton(Evas_Object *parent);
                Eina_Bool onRotaryEvent(Evas_Object *obj, Eext_Rotary_Event_Info *eventInfo);
 
+               void onCancel();
                void onDismissClicked(Evas_Object *button, void *eventInfo);
                void onSnoozeClicked(Evas_Object *button, void *eventInfo);
                static void onButtonPressed(const char *signal, Evas_Object *button, void *eventInfo);
index 27cf050885b275b49b74e32ad93b9a8468590d49..8f4fb6540d2b14a119805062e41686287d96d855 100644 (file)
 
 #include "AlertPath.h"
 
-#define LAYOUT_ALERT            "alert"
-#define PART_TIME               "text.time"
-#define PART_ORIG_TIME          "text.orig_time"
-#define PART_BUTTON_DISMISS     "swallow.button_dismiss"
-#define PART_BUTTON_SNOOZE      "swallow.button_snooze"
+#define LAYOUT_ALERT                "alert"
+#define PART_TIME                   "text.time"
+#define PART_ORIG_TIME              "text.orig_time"
+#define PART_BUTTON_DISMISS         "swallow.button_dismiss"
+#define PART_BUTTON_SNOOZE          "swallow.button_snooze"
 
-#define SIGNAL_BUTTON_PRESS     "state,pressed"
-#define SIGNAL_BUTTON_UNPRESS   "state,unpressed"
+#define COLOR_CLASS_DISMISS_VISIBLE "dismiss_visible"
+#define COLOR_CLASS_DISMISS_HIDDEN  "dismiss_hidden"
 
-#define SIGNAL_DISMISS_SHOW     "state,dismiss,default"
-#define SIGNAL_DISMISS_HIDE     "state,dismiss,hidden"
+#define COLOR_CLASS_SNOOZE_VISIBLE  "snooze_visible"
+#define COLOR_CLASS_SNOOZE_HIDDEN   "snooze_hidden"
 
-#define SIGNAL_SNOOZE_SHOW      "state,snooze,default"
-#define SIGNAL_SNOOZE_HIDE      "state,snooze,hidden"
+#define SIGNAL_BUTTON_PRESS         "state,pressed"
+#define SIGNAL_BUTTON_UNPRESS       "state,unpressed"
 
-#define TIME_TEXT_SIZE          30
-#define ORIG_TIME_TEXT_SIZE     22
+#define SIGNAL_DISMISS_SHOW         "state,dismiss,default"
+#define SIGNAL_DISMISS_HIDE         "state,dismiss,hidden"
 
-#define COLOR_BUTTON_DISMISS    222, 11, 0, 255
-#define COLOR_BUTTON_SNOOZE     255, 208, 0, 255
+#define SIGNAL_SNOOZE_SHOW          "state,snooze,default"
+#define SIGNAL_SNOOZE_HIDE          "state,snooze,hidden"
+
+#define TIME_TEXT_SIZE              30
+#define ORIG_TIME_TEXT_SIZE         22
+
+#define COLOR_BUTTON_DISMISS        222, 11, 0
+#define COLOR_BUTTON_SNOOZE         255, 208, 0
 
 #endif /* ALERT_LAYOUT_H */
index b2af5cc6c9ab58cf196866320085f0a0df22bed5..253577be2cd29a2909a9e32487dc22c379d3697b 100644 (file)
@@ -124,22 +124,22 @@ collections {
                                desc { "default";
                                        rel1 { to_x: "image.arrow4_left"; to_y: "image.arrow1_left"; }
                                        rel2 { to_x: "image.arrow1_left"; to_y: "image.arrow4_left"; }
-                                       color: 222 11 0 255;
+                                       color_class: "layout/"LAYOUT_ALERT"/"COLOR_CLASS_DISMISS_VISIBLE;
                                }
                                desc { "hidden";
                                        inherit: "default";
-                                       color: 222 11 0 0;
+                                       color_class: "layout/"LAYOUT_ALERT"/"COLOR_CLASS_DISMISS_HIDDEN;
                                }
                        }
                        rect { "rect.arrows_right.clipper";
                                desc { "default";
                                        rel1.to: "image.arrow1_right";
                                        rel2.to: "image.arrow4_right";
-                                       color: 255 208 0 255;
+                                       color_class: "layout/"LAYOUT_ALERT"/"COLOR_CLASS_SNOOZE_VISIBLE;
                                }
                                desc { "hidden";
                                        inherit: "default";
-                                       color: 255 208 0 0;
+                                       color_class: "layout/"LAYOUT_ALERT"/"COLOR_CLASS_SNOOZE_HIDDEN;
                                }
                        }
                        spacer { "spacer.left"; scale;
index 6ecc38077dd6b251529e373b303e153147c4eac0..112940385154f63a49cc218ac672da969c92a216 100644 (file)
 #include "Common/Model/AlarmConsumer.h"
 
 #include "App/Path.h"
+#include "Ui/Window.h"
 #include "Utils/Callback.h"
 #include "AlertLayout.h"
 
+#define SNOOZE_MAX_COUNT 3
+
 using namespace Alert;
 using namespace Common;
 using namespace Common::Model;
@@ -44,17 +47,19 @@ Evas_Object *AlertView::onCreate(Evas_Object *parent)
                elm_object_part_text_set(layout, PART_TIME, formatTime(m_Alarm.getDate(), TIME_TEXT_SIZE));
        }
 
-       m_DismissButton = createButton(layout, PATH_ICON_DISMISS, { COLOR_BUTTON_DISMISS },
-                       SIGNAL_SNOOZE_HIDE, SIGNAL_SNOOZE_SHOW);
-       elm_object_part_content_set(layout, PART_BUTTON_DISMISS, m_DismissButton);
-       evas_object_smart_callback_add(m_DismissButton, "clicked",
-                       makeCallback(&AlertView::onDismissClicked), this);
+       elm_object_part_content_set(layout, PART_BUTTON_DISMISS, createDismissButton(layout));
+       if (m_Alarm.getSnoozeCount() < SNOOZE_MAX_COUNT) {
+               elm_object_part_content_set(layout, PART_BUTTON_SNOOZE, createSnoozeButton(layout));
+       }
 
-       m_SnoozeButton = createButton(layout, PATH_ICON_SNOOZE, { COLOR_BUTTON_SNOOZE },
-                       SIGNAL_DISMISS_HIDE, SIGNAL_DISMISS_SHOW);
-       elm_object_part_content_set(layout, PART_BUTTON_SNOOZE, m_SnoozeButton);
-       evas_object_smart_callback_add(m_SnoozeButton, "clicked",
-                       makeCallback(&AlertView::onSnoozeClicked), this);
+       elm_object_color_class_color_set(layout, COLOR_CLASS_DISMISS_VISIBLE,
+                       COLOR_BUTTON_DISMISS, m_DismissButton ? 255 : 0);
+       elm_object_color_class_color_set(layout, COLOR_CLASS_DISMISS_HIDDEN,
+                       COLOR_BUTTON_DISMISS, 0);
+       elm_object_color_class_color_set(layout, COLOR_CLASS_SNOOZE_VISIBLE,
+                       COLOR_BUTTON_SNOOZE, m_SnoozeButton ? 255 : 0);
+       elm_object_color_class_color_set(layout, COLOR_CLASS_SNOOZE_HIDDEN,
+                       COLOR_BUTTON_SNOOZE, 0);
 
        return layout;
 }
@@ -62,6 +67,9 @@ Evas_Object *AlertView::onCreate(Evas_Object *parent)
 void AlertView::onNavigation(bool isCurrent)
 {
        eext_rotary_object_event_activated_set(getEvasObject(), isCurrent);
+       if (!isCurrent && !elm_win_focus_get(findParent<Ui::Window>()->getEvasObject())) {
+               onCancel();
+       }
 }
 
 void AlertView::onPageAttached(Ui::NavigatorPage *page)
@@ -69,6 +77,12 @@ void AlertView::onPageAttached(Ui::NavigatorPage *page)
        page->setStyle("empty");
 }
 
+bool AlertView::onBackPressed()
+{
+       onCancel();
+       return false;
+}
+
 Evas_Object *AlertView::createButton(Evas_Object *parent, const char *iconPath, Elm_Color_RGBA color,
                const char *pressSignal, const char *unpressSignal)
 {
@@ -91,6 +105,24 @@ Evas_Object *AlertView::createButton(Evas_Object *parent, const char *iconPath,
        return button;
 }
 
+Evas_Object *AlertView::createDismissButton(Evas_Object *parent)
+{
+       m_DismissButton = createButton(parent, PATH_ICON_DISMISS, { COLOR_BUTTON_DISMISS, 255 },
+                       SIGNAL_SNOOZE_HIDE, SIGNAL_SNOOZE_SHOW);
+       evas_object_smart_callback_add(m_DismissButton, "clicked",
+                       makeCallback(&AlertView::onDismissClicked), this);
+       return m_DismissButton;
+}
+
+Evas_Object *AlertView::createSnoozeButton(Evas_Object *parent)
+{
+       m_SnoozeButton = createButton(parent, PATH_ICON_SNOOZE, { COLOR_BUTTON_SNOOZE, 255 },
+                       SIGNAL_DISMISS_HIDE, SIGNAL_DISMISS_SHOW);
+       evas_object_smart_callback_add(m_SnoozeButton, "clicked",
+                       makeCallback(&AlertView::onSnoozeClicked), this);
+       return m_SnoozeButton;
+}
+
 Eina_Bool AlertView::onRotaryEvent(Evas_Object *obj, Eext_Rotary_Event_Info *eventInfo)
 {
        if (eventInfo->direction == EEXT_ROTARY_DIRECTION_CLOCKWISE) {
@@ -103,12 +135,24 @@ Eina_Bool AlertView::onRotaryEvent(Evas_Object *obj, Eext_Rotary_Event_Info *eve
        return EINA_TRUE;
 }
 
+void AlertView::onCancel()
+{
+       if (m_Alarm.getSnoozeCount() < SNOOZE_MAX_COUNT) {
+               m_Alarm.snooze();
+       } else {
+               m_Alarm.dismiss();
+       }
+       AlarmConsumer::getInstance().updateAlarm(m_Alarm, nullptr);
+       getPage()->close();
+}
+
 void AlertView::onDismissClicked(Evas_Object *button, void *eventInfo)
 {
        m_Alarm.dismiss();
        AlarmConsumer::getInstance().updateAlarm(m_Alarm, nullptr);
        getPage()->close();
 }
+
 void AlertView::onSnoozeClicked(Evas_Object *button, void *eventInfo)
 {
        m_Alarm.snooze();