TizenRefApp-7981 Implement No Contents in the AlarmsView 34/112934/1
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Fri, 3 Feb 2017 09:16:27 +0000 (11:16 +0200)
committerEugene Kurzberg <i.kurtsberg@samsung.com>
Fri, 3 Feb 2017 09:16:27 +0000 (11:16 +0200)
Change-Id: I3a9f64fce83df6dd4bae90e7cd915f72bc1f18fa
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
alarm-app/edje/list/images/alarm_no_alarm_icon.png [new file with mode: 0644]
alarm-app/edje/list/images/tw_no_item_bg.png [new file with mode: 0644]
alarm-app/inc/List/AlarmsView.h
alarm-app/res/list/edje/ListPath.h
alarm-app/res/list/edje/list-layout.edc [new file with mode: 0644]
alarm-app/src/List/AlarmsView.cpp

diff --git a/alarm-app/edje/list/images/alarm_no_alarm_icon.png b/alarm-app/edje/list/images/alarm_no_alarm_icon.png
new file mode 100644 (file)
index 0000000..8de17cd
Binary files /dev/null and b/alarm-app/edje/list/images/alarm_no_alarm_icon.png differ
diff --git a/alarm-app/edje/list/images/tw_no_item_bg.png b/alarm-app/edje/list/images/tw_no_item_bg.png
new file mode 100644 (file)
index 0000000..de5ac92
Binary files /dev/null and b/alarm-app/edje/list/images/tw_no_item_bg.png differ
index f7795c170fc832cf474e9575fb02b5546d6ae13c..67ab142502cbf628113fc7e23293800e272c19d5 100644 (file)
@@ -40,15 +40,21 @@ namespace List
                virtual void onCreated() override;
                virtual void onPageAttached(Ui::NavigatorPage *page) override;
                virtual void onNavigation(bool isCurrent) override;
+               void onUpdateFinished();
 
-               Evas_Object *createGenlist(Evas_Object *parent);
-               AlarmItem *createItem(::Model::DataItem &dataItem);
+               Ui::Genlist *createGenlist(Evas_Object *parent);
+               Evas_Object *createNoContents(Evas_Object *parent);
+               Evas_Object *createAddButton(Evas_Object *parent);
+               void updateEmptyState();
 
+               AlarmItem *createItem(::Model::DataItem &dataItem);
                void onAlarmInserted(::Model::DataItem &dataItem);
                void onAlarmUpdated(AlarmItem *item, int changes);
                void onAlarmDeleted(AlarmItem *item);
+               void onAddPressed(Evas_Object *button, void *eventInfo);
                void onFormatChanged(system_settings_key_e key);
 
+               Evas_Object *m_NoContents;
                Ui::Genlist *m_Genlist;
                Ui::GenItem *m_AddAlarmItem;
                Common::Model::AlarmProvider m_Provider;
index 7fd8f8eedf1b12b9cc952b040c68881f03e8a371..6f591d0267c8d37f0fc8dda615503fbdc408a98c 100644 (file)
 #define LIST_IMG_DIR                "list/images/"
 
 #define PATH_LIST_ITEM_STYLE        LIST_EDJ_DIR"list-item-style.edj"
+#define PATH_LIST_LAYOUT            LIST_EDJ_DIR"list-layout.edj"
+
+#define PATH_ICON_ADD_ALARM         LIST_IMG_DIR"alarm_no_alarm_icon.png"
+#define PATH_NO_ALARMS_BG           LIST_IMG_DIR"tw_no_item_bg.png"
 
 #define STYLE_ITEM_BOTTOM_BUTTON    "bottom_button"
+#define LAYOUT_NO_ALARMS            "no_alarms"
+#define LAYOUT_ADD_ALARM            "add_alarm"
 
 #endif /* LIST_PATH_H */
diff --git a/alarm-app/res/list/edje/list-layout.edc b/alarm-app/res/list/edje/list-layout.edc
new file mode 100644 (file)
index 0000000..454c2fe
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ListPath.h"
+
+#define TITLE_T 51
+#define TITLE_H 39
+
+#define ICON_R 5
+#define ICON_T (25+16)
+#define ICON_WH 98
+
+#define TEXT_T 8
+#define TEXT_H 74
+
+styles {
+       style {
+               name: "no_alarms_title";
+               base: "font=Tizen:style=Bold font_size=30 align=center color=#4dcfff";
+       }
+       style {
+               name: "no_alarms_text";
+               base: "font=Tizen:style=Regular font_size=27 align=center color=#fff";
+       }
+}
+
+collections {
+       base_scale: 1.3;
+
+       group { LAYOUT_ADD_ALARM;
+               parts {
+                       spacer { "spacer.right"; scale;
+                               desc { "default";
+                                       fixed: 1 0;
+                                       min: ICON_R 0;
+                                       align: 1.0 0.5;
+                                       rel1.relative: 1.0 0.0;
+                               }
+                       }
+                       image { "image"; scale;
+                               images.image: PATH_ICON_ADD_ALARM COMP;
+                               desc { "default";
+                                       min: ICON_WH ICON_WH;
+                                       rel2 { relative: 0.0 1.0; to_x: "spacer.right"; }
+                                       image.normal: PATH_ICON_ADD_ALARM;
+                               }
+                               desc { "pressed";
+                                       inherit: "default";
+                                       color: 255 255 255 179;
+                               }
+                       }
+               }
+               programs {
+                       program {
+                               signal: "mouse,down,*";
+                               source: "*";
+                               action: STATE_SET "pressed";
+                               target: "image";
+                       }
+                       program {
+                               signal: "mouse,up,*";
+                               source: "*";
+                               action: STATE_SET "default";
+                               target: "image";
+                       }
+               }
+       }
+
+       group { LAYOUT_NO_ALARMS;
+               parts {
+                       image { "image.bg";
+                               images.image: PATH_NO_ALARMS_BG COMP;
+                               desc { "default";
+                                       image.normal: PATH_NO_ALARMS_BG;
+                                       color: 94 94 94 76;
+                               }
+                       }
+                       spacer { "spacer.title.top"; scale;
+                               desc { "default";
+                                       fixed: 0 1;
+                                       min: 0 TITLE_T;
+                                       align: 0.5 0.0;
+                                       rel2.relative: 1.0 0.0;
+                               }
+                       }
+                       textblock { "elm.text.title"; scale;
+                               desc { "default";
+                                       fixed: 0 1;
+                                       min: 0 TITLE_H;
+                                       align: 0.5 0.0;
+                                       rel1 { relative: 0.0 1.0; to_y: "spacer.title.top"; }
+                                       rel2 { relative: 1.0 1.0; to_y: "spacer.title.top"; }
+                                       text.style: "no_alarms_title";
+                               }
+                       }
+                       spacer { "spacer.icon.top"; scale;
+                               desc { "default";
+                                       fixed: 0 1;
+                                       min: 0 ICON_T;
+                                       align: 0.5 0.0;
+                                       rel1 { relative: 0.0 1.0; to_y: "elm.text.title"; }
+                                       rel2 { relative: 1.0 1.0; to_y: "elm.text.title"; }
+                               }
+                       }
+                       swallow { "elm.swallow.icon"; scale;
+                               desc { "default";
+                                       fixed: 1 1;
+                                       align: 0.5 0.0;
+                                       rel1 { relative: 0.5 1.0; to_y: "spacer.icon.top"; }
+                                       rel2 { relative: 0.5 1.0; to_y: "spacer.icon.top"; }
+                               }
+                       }
+                       spacer { "spacer.text.top"; scale;
+                               desc { "default";
+                                       fixed: 0 1;
+                                       min: 0 TEXT_T;
+                                       align: 0.5 0.0;
+                                       rel1 { relative: 0.0 1.0; to_y: "elm.swallow.icon"; }
+                                       rel2 { relative: 1.0 1.0; to_y: "elm.swallow.icon"; }
+                               }
+                       }
+                       textblock { "elm.text"; scale;
+                               desc { "default";
+                                       fixed: 0 1;
+                                       min: 0 TEXT_H;
+                                       align: 0.5 0.0;
+                                       rel1 { relative: 0.0 1.0; to_y: "spacer.text.top"; }
+                                       rel2 { relative: 1.0 1.0; to_y: "spacer.text.top"; }
+                                       text.style: "no_alarms_text";
+                               }
+                       }
+               }
+       }
+}
index 2dbf59ebd30a1b09716d10f3741d0dbd63fc9700..635dcc94c052ee729fa6b34a86896834d54215e2 100644 (file)
 #include "List/AlarmItem.h"
 #include "List/AlarmsView.h"
 #include "List/TitleItem.h"
+#include "Input/InputView.h"
 
+#include "App/Path.h"
 #include "System/Settings.h"
 #include "Ui/Genlist.h"
 #include "Ui/GenGroupItem.h"
 #include "Ui/Window.h"
+#include "Utils/Callback.h"
+
+#include "ListPath.h"
 
 using namespace Common::Model;
 using namespace List;
@@ -43,11 +48,18 @@ AlarmsView::~AlarmsView()
 
 Evas_Object *AlarmsView::onCreate(Evas_Object *parent)
 {
-       return createGenlist(parent);
+       Evas_Object *layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "application", "default");
+
+       m_Genlist = createGenlist(layout);
+       m_NoContents = createNoContents(layout);
+
+       return layout;
 }
 
 void AlarmsView::onCreated()
 {
+       m_Provider.onUpdateFinished() += { std::bind(&AlarmsView::onUpdateFinished, this), this };
        m_Provider.onInserted() += { std::bind(&AlarmsView::onAlarmInserted, this, _1), this };
        m_Provider.initialize([this] {
                m_Genlist->insert(new TitleItem());
@@ -55,6 +67,7 @@ void AlarmsView::onCreated()
                        m_Genlist->insert(createItem(*dataItem));
                }
                m_Genlist->insert(m_AddAlarmItem = new AddAlarmItem());
+               updateEmptyState();
        });
 }
 
@@ -68,15 +81,56 @@ void AlarmsView::onNavigation(bool isCurrent)
        eext_rotary_object_event_activated_set(m_Genlist->getEvasObject(), isCurrent);
 }
 
-Evas_Object *AlarmsView::createGenlist(Evas_Object *parent)
+void AlarmsView::onUpdateFinished()
+{
+       updateEmptyState();
+}
+
+Ui::Genlist *AlarmsView::createGenlist(Evas_Object *parent)
 {
        auto surface = findParent<Ui::Window>(parent)->getCircleConformant();
 
-       m_Genlist = new Ui::Genlist();
-       m_Genlist->create(parent);
-       eext_circle_object_genlist_add(m_Genlist->getEvasObject(), surface);
+       auto genlist = new Ui::Genlist();
+       genlist->create(parent);
+       eext_circle_object_genlist_add(genlist->getEvasObject(), surface);
+
+       return genlist;
+}
+
+Evas_Object *AlarmsView::createNoContents(Evas_Object *parent)
+{
+       Evas_Object *layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, App::getResourcePath(PATH_LIST_LAYOUT).c_str(), LAYOUT_NO_ALARMS);
+       elm_object_translatable_part_text_set(layout, "elm.text.title", "WDS_ALM_HEADER_ALARM_ABB");
+       elm_object_translatable_part_text_set(layout, "elm.text", "WDS_ALM_OPT_ADD_ALARM_ABB");
+       elm_object_part_content_set(layout, "elm.swallow.icon", createAddButton(layout));
+
+       return layout;
+}
+
+Evas_Object *AlarmsView::createAddButton(Evas_Object *parent)
+{
+       Evas_Object *button = elm_button_add(parent);
+       elm_object_style_set(button, "transparent");
+       evas_object_smart_callback_add(button, "clicked",
+                       makeCallback(&AlarmsView::onAddPressed), this);
 
-       return m_Genlist->getEvasObject();
+       Evas_Object *image = elm_layout_add(button);
+       elm_layout_file_set(image, App::getResourcePath(PATH_LIST_LAYOUT).c_str(), LAYOUT_ADD_ALARM);
+       elm_object_content_set(button, image);
+
+       return button;
+}
+
+void AlarmsView::updateEmptyState()
+{
+       Evas_Object *content = m_Provider.getDataList().size() > 0
+                       ? m_Genlist->getEvasObject() : m_NoContents;
+
+       if (content != elm_object_content_get(getEvasObject())) {
+               evas_object_hide(elm_object_content_unset(getEvasObject()));
+               elm_object_content_set(getEvasObject(), content);
+       }
 }
 
 AlarmItem *AlarmsView::createItem(::Model::DataItem &dataItem)
@@ -102,6 +156,11 @@ void AlarmsView::onAlarmDeleted(AlarmItem *item)
        delete item;
 }
 
+void AlarmsView::onAddPressed(Evas_Object *button, void *eventInfo)
+{
+       getNavigator()->navigateTo(new Input::InputView({ }));
+}
+
 void AlarmsView::onFormatChanged(system_settings_key_e key)
 {
        m_Genlist->update("elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);