Quickpanel for iot profile 27/218327/1
authordivyanshugautam17 <divyanshu.gm@samsung.com>
Thu, 21 Nov 2019 08:49:44 +0000 (14:19 +0530)
committerdivyanshugautam17 <divyanshu.gm@samsung.com>
Thu, 21 Nov 2019 08:49:44 +0000 (14:19 +0530)
Change-Id: I815ab0762f9572d72c815d67deef61e56910a4de

447 files changed:
.cproject [new file with mode: 0755]
.exportMap [new file with mode: 0755]
.gitignore [new file with mode: 0755]
.project [new file with mode: 0755]
.tproject [new file with mode: 0755]
AUTHORS [new file with mode: 0755]
Build/appendix.mk [new file with mode: 0755]
Build/basedef.mk [new file with mode: 0755]
Build/build_c.mk [new file with mode: 0755]
Build/build_edc.mk [new file with mode: 0755]
Build/build_po.mk [new file with mode: 0755]
Build/flags.mk [new file with mode: 0755]
Build/funcs.mk [new file with mode: 0755]
Build/makefile [new file with mode: 0755]
Build/makefile.mk [new file with mode: 0755]
Build/platform.mk [new file with mode: 0755]
Build/prepost.mk [new file with mode: 0755]
Build/tooldef.mk [new file with mode: 0755]
CMakeLists.txt [new file with mode: 0755]
LICENSE [new file with mode: 0755]
NOTICE [new file with mode: 0755]
Notification_TestSample/.cproject [new file with mode: 0755]
Notification_TestSample/.exportMap [new file with mode: 0755]
Notification_TestSample/.project [new file with mode: 0755]
Notification_TestSample/.tproject [new file with mode: 0755]
Notification_TestSample/inc/notification/etc-notifications.h [new file with mode: 0755]
Notification_TestSample/inc/notification/notification-common.h [new file with mode: 0755]
Notification_TestSample/inc/notification/notification-defines.h [new file with mode: 0755]
Notification_TestSample/inc/notification/notifications.h [new file with mode: 0755]
Notification_TestSample/inc/notification/ongoing-notifications.h [new file with mode: 0755]
Notification_TestSample/inc/notification_testsample.h [new file with mode: 0755]
Notification_TestSample/inc/view.h [new file with mode: 0755]
Notification_TestSample/inc/view_defines.h [new file with mode: 0755]
Notification_TestSample/res/edje/noti.edc [new file with mode: 0755]
Notification_TestSample/res/edje/noti.edj [new file with mode: 0755]
Notification_TestSample/shared/res/images/icon1.png [new file with mode: 0755]
Notification_TestSample/shared/res/images/icon2.png [new file with mode: 0755]
Notification_TestSample/shared/res/images/mainmenu.png [new file with mode: 0755]
Notification_TestSample/shared/res/images/messages_btn_send.png [new file with mode: 0755]
Notification_TestSample/shared/res/images/noti_calendar.png [new file with mode: 0755]
Notification_TestSample/shared/res/images/thumbnail1.jpg [new file with mode: 0755]
Notification_TestSample/shared/res/notification-testsample.png [new file with mode: 0755]
Notification_TestSample/shared/res/sounds/sound.mp3 [new file with mode: 0755]
Notification_TestSample/src/main.c [new file with mode: 0755]
Notification_TestSample/src/notification/etc-notifications.c [new file with mode: 0755]
Notification_TestSample/src/notification/notifications.c [new file with mode: 0755]
Notification_TestSample/src/notification/ongoing-notifications.c [new file with mode: 0755]
Notification_TestSample/src/view.c [new file with mode: 0755]
Notification_TestSample/tizen-manifest.xml [new file with mode: 0755]
build_def.prop [new file with mode: 0755]
inc/accessibility.h [new file with mode: 0755]
inc/activenoti.h [new file with mode: 0755]
inc/animated_icon.h [new file with mode: 0755]
inc/animated_image.h [new file with mode: 0755]
inc/common.h [new file with mode: 0755]
inc/common_uic.h [new file with mode: 0755]
inc/datetime.h [new file with mode: 0755]
inc/emergency_mode.h [new file with mode: 0755]
inc/handler_controller.h [new file with mode: 0755]
inc/keyboard.h [new file with mode: 0755]
inc/list_util.h [new file with mode: 0755]
inc/media.h [new file with mode: 0755]
inc/minictrl.h [new file with mode: 0755]
inc/modules.h [new file with mode: 0755]
inc/noti.h [new file with mode: 0755]
inc/noti_led.h [new file with mode: 0755]
inc/noti_list_item.h [new file with mode: 0755]
inc/noti_listbox.h [new file with mode: 0755]
inc/noti_node.h [new file with mode: 0755]
inc/noti_section.h [new file with mode: 0755]
inc/noti_util.h [new file with mode: 0755]
inc/noti_view.h [new file with mode: 0755]
inc/noti_win.h [new file with mode: 0755]
inc/page_base.h [new file with mode: 0755]
inc/pager.h [new file with mode: 0755]
inc/pager_common.h [new file with mode: 0755]
inc/preference.h [new file with mode: 0755]
inc/quickpanel-ui.h [new file with mode: 0755]
inc/quickpanel_def.h [new file with mode: 0755]
inc/reminder.h [new file with mode: 0755]
inc/setting_module_api.h [new file with mode: 0755]
inc/setting_utils.h [new file with mode: 0755]
inc/settings.h [new file with mode: 0755]
inc/settings_gridbox.h [new file with mode: 0755]
inc/settings_icon_common.h [new file with mode: 0755]
inc/settings_view_featured.h [new file with mode: 0755]
inc/sim_controller.h [new file with mode: 0755]
inc/uninstall.h [new file with mode: 0755]
inc/util-time.h [new file with mode: 0755]
inc/vi_manager.h [new file with mode: 0755]
inc/voice_control.h [new file with mode: 0755]
packaging/org.tizen.quickpanel.manifest [new file with mode: 0755]
packaging/org.tizen.quickpanel.spec [new file with mode: 0755]
project_def.prop [new file with mode: 0755]
quickpanel.xml [new file with mode: 0755]
res/edje/color_classes.edc [new file with mode: 0755]
res/edje/quickpanel.edc [new file with mode: 0755]
res/edje/quickpanel_activenoti.edc [new file with mode: 0755]
res/edje/quickpanel_animated_icon.edc [new file with mode: 0755]
res/edje/quickpanel_brightness.edc [new file with mode: 0755]
res/edje/quickpanel_datetime.edc [new file with mode: 0755]
res/edje/quickpanel_images.edc [new file with mode: 0755]
res/edje/quickpanel_listitem_noti.edc [new file with mode: 0755]
res/edje/quickpanel_listitem_ongoing.edc [new file with mode: 0755]
res/edje/quickpanel_minictrl.edc [new file with mode: 0755]
res/edje/quickpanel_noti_section.edc [new file with mode: 0755]
res/edje/quickpanel_setting.edc [new file with mode: 0755]
res/edje/quickpanel_theme.edc [new file with mode: 0755]
res/edje/quickpanel_theme_progressbar.edc [new file with mode: 0755]
res/edje/quickpanel_theme_slider.edc [new file with mode: 0755]
res/edje/quickpanel_voice_control.edc [new file with mode: 0755]
res/images/Q02_quickpanel_button_press_01_center.png [new file with mode: 0755]
res/images/Q02_quickpanel_button_press_01_left.png [new file with mode: 0755]
res/images/Q02_quickpanel_button_press_01_right.png [new file with mode: 0755]
res/images/bg_press.#.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_00.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_01.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_02.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_03.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_04.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_05.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_06.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_07.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_08.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_09.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_10.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_11.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_12.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_13.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_14.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_15.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_16.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_17.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_18.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_19.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_20.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_21.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_22.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_23.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_24.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_25.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_26.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_27.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_28.png [new file with mode: 0755]
res/images/core_activity_Indicator_medium_29.png [new file with mode: 0755]
res/images/core_icon_badge_container.#.png [new file with mode: 0755]
res/images/core_list_button_bg.#.png [new file with mode: 0755]
res/images/core_progress_bar.#.png [new file with mode: 0755]
res/images/core_progress_bar.png [new file with mode: 0755]
res/images/core_progressbar_bg.#.png [new file with mode: 0755]
res/images/core_progressbar_bg.png [new file with mode: 0755]
res/images/core_slider_center_point_bg.png [new file with mode: 0755]
res/images/core_slider_handle_normal.png [new file with mode: 0755]
res/images/core_slider_handle_press.png [new file with mode: 0755]
res/images/core_theme_bg_01.png [new file with mode: 0755]
res/images/handler_bg.#.png [new file with mode: 0755]
res/images/handler_bg_ef.#.png [new file with mode: 0755]
res/images/handler_btn.png [new file with mode: 0755]
res/images/handler_btn_02.png [new file with mode: 0755]
res/images/icon_arrow_down.png [new file with mode: 0755]
res/images/icon_arrow_up.png [new file with mode: 0755]
res/images/icon_bg.png [new file with mode: 0755]
res/images/icon_bg_press.png [new file with mode: 0755]
res/images/icon_indicator_setting.png [new file with mode: 0755]
res/images/icon_press.png [new file with mode: 0755]
res/images/line_indicator_divider.png [new file with mode: 0755]
res/images/quick_button_each_bg.png [new file with mode: 0755]
res/images/quick_button_each_bg_land.png [new file with mode: 0755]
res/images/quick_button_each_ef.png [new file with mode: 0755]
res/images/quick_button_each_ef_land.png [new file with mode: 0755]
res/images/quick_button_over.png [new file with mode: 0755]
res/images/quick_button_over_land.png [new file with mode: 0755]
res/images/quick_icon_brightness.png [new file with mode: 0755]
res/images/quick_icon_brightness_00.png [new file with mode: 0755]
res/images/quick_icon_brightness_01.png [new file with mode: 0755]
res/images/quick_icon_brightness_02.png [new file with mode: 0755]
res/images/quick_icon_brightness_03.png [new file with mode: 0755]
res/images/quick_icon_brightness_04.png [new file with mode: 0755]
res/images/quick_icon_brightness_05.png [new file with mode: 0755]
res/images/quick_icon_brightness_06.png [new file with mode: 0755]
res/images/quick_icon_brightness_07.png [new file with mode: 0755]
res/images/quick_icon_brightness_08.png [new file with mode: 0755]
res/images/quick_icon_brightness_09.png [new file with mode: 0755]
res/images/quick_icon_brightness_10.png [new file with mode: 0755]
res/images/quick_icon_brightness_11.png [new file with mode: 0755]
res/images/quick_menu_divide.png [new file with mode: 0755]
res/images/quick_menu_divide_highlight.png [new file with mode: 0755]
res/images/quick_menu_touch.png [new file with mode: 0755]
res/images_icon/Q02_Notification_brightness.png [new file with mode: 0755]
res/images_icon/noti_download_01.png [new file with mode: 0755]
res/images_icon/noti_download_02.png [new file with mode: 0755]
res/images_icon/noti_download_03.png [new file with mode: 0755]
res/images_icon/noti_download_04.png [new file with mode: 0755]
res/images_icon/noti_download_05.png [new file with mode: 0755]
res/images_icon/noti_download_complete.png [new file with mode: 0755]
res/images_icon/noti_install_01.png [new file with mode: 0755]
res/images_icon/noti_install_02.png [new file with mode: 0755]
res/images_icon/noti_install_03.png [new file with mode: 0755]
res/images_icon/noti_install_04.png [new file with mode: 0755]
res/images_icon/noti_install_05.png [new file with mode: 0755]
res/images_icon/noti_install_complete.png [new file with mode: 0755]
res/images_icon/noti_upload_01.png [new file with mode: 0755]
res/images_icon/noti_upload_02.png [new file with mode: 0755]
res/images_icon/noti_upload_03.png [new file with mode: 0755]
res/images_icon/noti_upload_04.png [new file with mode: 0755]
res/images_icon/noti_upload_05.png [new file with mode: 0755]
res/images_icon/noti_upload_complete.png [new file with mode: 0755]
res/images_icon/quick_button_icon_bg.png [new file with mode: 0755]
res/images_icon/quick_icon_auto_rotate.png [new file with mode: 0755]
res/images_icon/quick_icon_bluetooth.png [new file with mode: 0755]
res/images_icon/quick_icon_location.png [new file with mode: 0755]
res/images_icon/quick_icon_mobile_data.png [new file with mode: 0755]
res/images_icon/quick_icon_sf_vf.png [new file with mode: 0755]
res/images_icon/quick_icon_sf_vn.png [new file with mode: 0755]
res/images_icon/quick_icon_sn_vf.png [new file with mode: 0755]
res/images_icon/quick_icon_wifi.png [new file with mode: 0755]
res/images_icon/voice_control_icon_mic.png [new file with mode: 0755]
res/po/CMakeLists.txt [new file with mode: 0755]
res/po/ar.po [new file with mode: 0755]
res/po/az.po [new file with mode: 0755]
res/po/bg.po [new file with mode: 0755]
res/po/ca.po [new file with mode: 0755]
res/po/cs.po [new file with mode: 0755]
res/po/da.po [new file with mode: 0755]
res/po/de.po [new file with mode: 0755]
res/po/el_GR.po [new file with mode: 0755]
res/po/en.po [new file with mode: 0755]
res/po/en_PH.po [new file with mode: 0755]
res/po/en_US.po [new file with mode: 0755]
res/po/es_ES.po [new file with mode: 0755]
res/po/es_US.po [new file with mode: 0755]
res/po/et.po [new file with mode: 0755]
res/po/eu.po [new file with mode: 0755]
res/po/fi.po [new file with mode: 0755]
res/po/fr.po [new file with mode: 0755]
res/po/fr_CA.po [new file with mode: 0755]
res/po/ga.po [new file with mode: 0755]
res/po/gl.po [new file with mode: 0755]
res/po/hr.po [new file with mode: 0755]
res/po/hu.po [new file with mode: 0755]
res/po/hy.po [new file with mode: 0755]
res/po/is.po [new file with mode: 0755]
res/po/it_IT.po [new file with mode: 0755]
res/po/ja_JP.po [new file with mode: 0755]
res/po/ka.po [new file with mode: 0755]
res/po/kk.po [new file with mode: 0755]
res/po/ko_KR.po [new file with mode: 0755]
res/po/lt.po [new file with mode: 0755]
res/po/lv.po [new file with mode: 0755]
res/po/mk.po [new file with mode: 0755]
res/po/nb.po [new file with mode: 0755]
res/po/nl.po [new file with mode: 0755]
res/po/pl.po [new file with mode: 0755]
res/po/pt_BR.po [new file with mode: 0755]
res/po/pt_PT.po [new file with mode: 0755]
res/po/ro.po [new file with mode: 0755]
res/po/ru_RU.po [new file with mode: 0755]
res/po/sk.po [new file with mode: 0755]
res/po/sl.po [new file with mode: 0755]
res/po/sr.po [new file with mode: 0755]
res/po/sv.po [new file with mode: 0755]
res/po/tr_TR.po [new file with mode: 0755]
res/po/uk.po [new file with mode: 0755]
res/po/uz.po [new file with mode: 0755]
res/po/zh_CN.po [new file with mode: 0755]
res/po/zh_HK.po [new file with mode: 0755]
res/po/zh_TW.po [new file with mode: 0755]
shared/res/noti_icons/Calendar/noti_calendar.png [new file with mode: 0755]
shared/res/noti_icons/Calendar/noti_calendar_02.png [new file with mode: 0755]
shared/res/noti_icons/Calendar/noti_calendar_alarm.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_download_01.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_download_02.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_download_03.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_download_04.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_download_05.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_download_complete.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_download_failed.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_syncing.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_upload_01.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_upload_02.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_upload_03.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_upload_04.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_upload_05.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_upload_complete.png [new file with mode: 0755]
shared/res/noti_icons/Common/noti_upload_failed.png [new file with mode: 0755]
shared/res/noti_icons/Contact/noti_contact_default.png [new file with mode: 0755]
shared/res/noti_icons/Contact/noti_icon_missed.png [new file with mode: 0755]
shared/res/noti_icons/E-mail/noti_email.png [new file with mode: 0755]
shared/res/noti_icons/E-mail/noti_email_delivery_report.png [new file with mode: 0755]
shared/res/noti_icons/E-mail/noti_email_read_report.png [new file with mode: 0755]
shared/res/noti_icons/E-mail/noti_email_scheduled.png [new file with mode: 0755]
shared/res/noti_icons/E-mail/noti_email_sent.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_accessory_connected.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_all_connected.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_auto_rejected.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_backup.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_camera_connected.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_chat.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_data_usage_warning.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_desktop_mode.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_dormant_mode.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_download_booster.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_ecb_mode.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_error.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_firewall_activated.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_fm_radio.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_gqs_on.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_gqs_searching.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_im.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_keyboard.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_keyboard_connected.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_mms_delivery_report.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_multiple_devices_connected.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_near_by_device.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_no_sim_full.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_print.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_print_waiting.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_rcs_chat.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_rcs_file_transfer.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_safe_mode.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_screen_recorder.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_screen_recorder_dim.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_side_sync.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_sim_toolkit.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_smart_stay.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_smemo_sync.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_spen.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_sync_error.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_tethering_usb_fail.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_tty_mode.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_tv.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_updated_complete.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_updated_failed.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_usb_connected.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_usb_mass_storage_connected.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_video.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_voice_mail.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_voice_mail_01.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_voice_mail_02.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_voice_mail_03.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_voice_memo.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_voice_recorder_paused.png [new file with mode: 0755]
shared/res/noti_icons/Etc/noti_voice_recorder_play.png [new file with mode: 0755]
shared/res/noti_icons/Lock screen/noti_message.png [new file with mode: 0755]
shared/res/noti_icons/Lock screen/noti_missed_call.png [new file with mode: 0755]
shared/res/noti_icons/Low battery&charge/noti_battery_charge.png [new file with mode: 0755]
shared/res/noti_icons/Low battery&charge/noti_battery_fully_charging.png [new file with mode: 0755]
shared/res/noti_icons/Low battery&charge/noti_battery_loading.png [new file with mode: 0755]
shared/res/noti_icons/Low battery&charge/noti_charging_battery_low.png [new file with mode: 0755]
shared/res/noti_icons/Low battery&charge/noti_charging_cable_disconnected.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message_OTA.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message_cb-msg.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message_delivery_report.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message_failed.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message_mms_failed.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message_mms_problem.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message_read_report.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message_reply.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message_scheduled.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message_sending.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_message_sim-card.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_mms.png [new file with mode: 0755]
shared/res/noti_icons/Message/noti_voice_mail.png [new file with mode: 0755]
shared/res/noti_icons/Multi SIM/noti_no_sim.png [new file with mode: 0755]
shared/res/noti_icons/Multi SIM/noti_sim_full.png [new file with mode: 0755]
shared/res/noti_icons/Private mode/noti_private_mode.png [new file with mode: 0755]
shared/res/noti_icons/Tethering/Icon_tethering_unknown_usb_fail.png [new file with mode: 0755]
shared/res/noti_icons/Tethering/noti_tethering.png [new file with mode: 0755]
shared/res/noti_icons/Tethering/noti_tethering_all.png [new file with mode: 0755]
shared/res/noti_icons/Tethering/noti_tethering_bt.png [new file with mode: 0755]
shared/res/noti_icons/Tethering/noti_tethering_usb.png [new file with mode: 0755]
shared/res/noti_icons/Tethering/noti_tethering_usb_fail.png [new file with mode: 0755]
shared/res/noti_icons/Tethering/noti_tethering_wifi.png [new file with mode: 0755]
shared/res/noti_icons/Tizen store/noti_tizen_store.png [new file with mode: 0755]
shared/res/noti_icons/USB/noti_usb_connected.png [new file with mode: 0755]
shared/res/noti_icons/USB/noti_usb_fail.png [new file with mode: 0755]
shared/res/noti_icons/USB/noti_usb_mass_storage_connected.png [new file with mode: 0755]
shared/res/noti_icons/USB/noti_usb_otg_connected.png [new file with mode: 0755]
shared/res/noti_icons/USB/noti_usb_otg_power_fail.png [new file with mode: 0755]
shared/res/noti_icons/USB/noti_usb_otg_unknown_fail.png [new file with mode: 0755]
shared/res/noti_icons/USB/noti_usb_pc_connected.png [new file with mode: 0755]
shared/res/noti_icons/USB/noti_usb_unknown_fail.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wifi.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wifi_available_networks.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wifi_availablility_check1.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wifi_direct.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wifi_direct_auto_off.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wifi_in_range.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wifi_network_available.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wifi_no_detected.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wifi_no_sign.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wifi_on.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wifi_translate.png [new file with mode: 0755]
shared/res/noti_icons/Wi-Fi/noti_wiif_off.png [new file with mode: 0755]
shared/res/noti_icons/messages_btn_send.png [new file with mode: 0755]
shared/res/noti_icons/quickpanel_icon_default.png [new file with mode: 0755]
shared/res/quickpanel.png [new file with mode: 0755]
src/accessibility.c [new file with mode: 0755]
src/common.c [new file with mode: 0755]
src/common_uic.c [new file with mode: 0755]
src/datetime/datetime.c [new file with mode: 0755]
src/datetime/util-time.c [new file with mode: 0755]
src/device/brightness.c [new file with mode: 0755]
src/handler_controller.c [new file with mode: 0755]
src/list_util.c [new file with mode: 0755]
src/media.c [new file with mode: 0755]
src/minictrl/minictrl.c [new file with mode: 0755]
src/modules.c [new file with mode: 0755]
src/notifications/activenoti.c [new file with mode: 0755]
src/notifications/animated_image.c [new file with mode: 0755]
src/notifications/noti.c [new file with mode: 0755]
src/notifications/noti_list_item.c [new file with mode: 0755]
src/notifications/noti_listbox.c [new file with mode: 0755]
src/notifications/noti_node.c [new file with mode: 0755]
src/notifications/noti_section.c [new file with mode: 0755]
src/notifications/noti_util.c [new file with mode: 0755]
src/notifications/noti_view.c [new file with mode: 0755]
src/notifications/noti_view_listype.c [new file with mode: 0755]
src/notifications/noti_view_ongoing.c [new file with mode: 0755]
src/notifications/noti_win.c [new file with mode: 0755]
src/page/page_base.c [new file with mode: 0755]
src/page/pager.c [new file with mode: 0755]
src/page/pager_common.c [new file with mode: 0755]
src/preference.c [new file with mode: 0755]
src/quickpanel-ui.c [new file with mode: 0755]
src/service/animated_icon.c [new file with mode: 0755]
src/service/emergency_mode.c [new file with mode: 0755]
src/service/keyboard.c [new file with mode: 0755]
src/service/noti_led.c [new file with mode: 0755]
src/service/reminder.c [new file with mode: 0755]
src/service/uninstall.c [new file with mode: 0755]
src/settings/modules/bluetooth.c [new file with mode: 0755]
src/settings/modules/gps.c [new file with mode: 0755]
src/settings/modules/rotate-lock.c [new file with mode: 0755]
src/settings/modules/sound-profile.c [new file with mode: 0755]
src/settings/modules/wifi.c [new file with mode: 0755]
src/settings/setting_module_api.c [new file with mode: 0755]
src/settings/setting_utils.c [new file with mode: 0755]
src/settings/settings.c [new file with mode: 0755]
src/settings/settings_gridbox.c [new file with mode: 0755]
src/settings/settings_icon_common.c [new file with mode: 0755]
src/settings/settings_view_featured.c [new file with mode: 0755]
src/sim_controller.c [new file with mode: 0755]
src/vi/vi_manager.c [new file with mode: 0755]
src/voice_control.c [new file with mode: 0755]
tizen-manifest.xml [new file with mode: 0755]

diff --git a/.cproject b/.cproject
new file mode 100755 (executable)
index 0000000..50c120a
--- /dev/null
+++ b/.cproject
@@ -0,0 +1,651 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+       <storageModule moduleId="org.eclipse.cdt.core.settings">
+               <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.app.debug.780449129">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.780449129" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.tizen.nativecore.NativeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                               <configuration artifactName="quickpanel" buildArtefactType="org.tizen.nativecore.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.app,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.780449129" name="Debug" parent="org.tizen.nativecore.config.sbi.gcc45.app.debug">
+                                       <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.debug.780449129." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug.810067637" name="Tizen Native Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug">
+                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.909528476" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder autoBuildTarget="all" buildPath="${workspace_loc:/quickpanel}/Debug" enableAutoBuild="true" id="org.tizen.nativecore.target.sbi.gnu.builder.720118893" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.1258790658" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.566775211" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+                                                               <option id="gnu.cpp.compiler.option.optimization.level.582362516" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+                                                               <option defaultValue="gnu.cpp.compiler.debugging.level.max" id="sbi.gnu.cpp.compiler.option.debugging.level.core.1008560656" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" valueType="enumerated"/>
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.compiler.option.misc.pic.core.461457342" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.1239579316" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-4.0-device.core.private.20170909_1_llvm40.armel.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1515854709" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/asp/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/aul/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/auth-fw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/call-manager&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cbhm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/chromium-ewk&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/csr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-buffer-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ector-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/emile-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/pkgmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/privacy-privilege-manager/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/rua/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/tzsh&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui-viewmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vulkan&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/yaca&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.1435534993" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-mthumb"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.1126073773" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.core.2098433627" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.66384365" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+                                                       </tool>
+                                                       <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.2085557568" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+                                                               <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.173554546" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+                                                               <option defaultValue="gnu.c.debugging.level.max" id="sbi.gnu.c.compiler.option.debugging.level.core.1590988572" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" valueType="enumerated"/>
+                                                               <option defaultValue="false" id="sbi.gnu.c.compiler.option.misc.pic.core.107325970" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.c.compiler.option.2080445473" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-4.0-device.core.private.20170909_1_llvm40.armel.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.40960272" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/asp/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/aul/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/auth-fw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/call-manager&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cbhm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/chromium-ewk&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/csr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-buffer-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ector-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/emile-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/pkgmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/privacy-privilege-manager/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/rua/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/tzsh&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui-viewmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vulkan&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/yaca&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.610695851" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-mthumb"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.548865700" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.core.1829071584" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.656556134" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1471032022" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1115854386" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.linker.option.shared_flag.core.69493624" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.linker.option.noundefined.core.586503206" name="Report unresolved symbol references (-Wl,--no-undefined)" superClass="sbi.gnu.cpp.linker.option.noundefined.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.1984487424" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --version-script=&quot;${PROJ_PATH}/.exportMap&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.link.option.paths.1984265159" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1950282114" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool command="arm-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1434972678" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1176980736" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.517561677" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.1311067825" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.1620319258" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.cpp.39086987" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.1109648020" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.po.compiler.544652631" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.1295563375" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler">
+                                                               <option command="-id " id="sbi.gnu.edc.compiler.option.misc.id.1915405270" name="Image Path (-id)" superClass="sbi.gnu.edc.compiler.option.misc.id" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}/edje/images&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}/res/images&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}/res/images_icon&quot;"/>
+                                                               </option>
+                                                       </tool>
+                                               </toolChain>
+                                       </folderInfo>
+                                       <sourceEntries>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+                                               <entry excluding="edje/quickpanel_theme_slider.edc|edje/quickpanel_theme_progressbar.edc|edje/quickpanel_setting.edc|edje/quickpanel_page_setting_all.edc|edje/quickpanel_listitem_ongoing.edc|edje/quickpanel_listitem_noti.edc|edje/quickpanel_images.edc|edje/quickpanel_noti_section.edc|edje/quickpanel_minictrl.edc|edje/quickpanel_datetime.edc|edje/quickpanel_brightness.edc|edje/quickpanel_animated_icon.edc" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="shared"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+                                       </sourceEntries>
+                               </configuration>
+                       </storageModule>
+                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+               <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.app.release.843831137">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.release.843831137" moduleId="org.eclipse.cdt.core.settings" name="Release">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.tizen.nativecore.NativeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                               <configuration artifactName="org.tizen.quickpanel" buildArtefactType="org.tizen.nativecore.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.app,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.app.release.843831137" name="Release" parent="org.tizen.nativecore.config.sbi.gcc45.app.release">
+                                       <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.release.843831137." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.release.1826477497" name="Tizen Native Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.app.release">
+                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.1020293216" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder buildPath="${workspace_loc:/quickpanel}/Release" id="org.tizen.nativecore.target.sbi.gnu.builder.860104924" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.2030966305" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1264132036" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+                                                               <option id="gnu.cpp.compiler.option.optimization.level.1715081643" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+                                                               <option defaultValue="gnu.cpp.compiler.debugging.level.default" id="sbi.gnu.cpp.compiler.option.debugging.level.core.709346086" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" valueType="enumerated"/>
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.compiler.option.misc.pic.core.1735437208" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.1012888787" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-3.0-emulator.core_llvm37.i386.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1978776815" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES3&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cbhm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/chromium-ewk&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/csr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-buffer-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ector-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/emile-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/tzsh&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui-viewmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vulkan&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/yaca&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.72950796" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.1998800028" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1025517249" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1221989408" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+                                                       </tool>
+                                                       <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.747650133" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+                                                               <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1572396702" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+                                                               <option defaultValue="gnu.c.debugging.level.default" id="sbi.gnu.c.compiler.option.debugging.level.core.1904699126" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" valueType="enumerated"/>
+                                                               <option defaultValue="false" id="sbi.gnu.c.compiler.option.misc.pic.core.1896592001" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.c.compiler.option.731593944" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-3.0-emulator.core_llvm37.i386.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.877846936" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES3&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cbhm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/chromium-ewk&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/csr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-buffer-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ector-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/emile-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/tzsh&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui-viewmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vulkan&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/yaca&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.971311635" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.451527870" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.core.932109569" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.722034854" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.368208497" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.845630373" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.linker.option.shared_flag.core.2024497271" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.linker.option.noundefined.core.1955579877" name="Report unresolved symbol references (-Wl,--no-undefined)" superClass="sbi.gnu.cpp.linker.option.noundefined.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.290713675" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --version-script=&quot;${PROJ_PATH}/.exportMap&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.link.option.paths.318906471" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1250041467" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1988295396" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1840842826" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.1574962899" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.666808311" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.1180391645" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.cpp.1566509298" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.235650557" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.po.compiler.257944799" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.1396507457" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+                                               </toolChain>
+                                       </folderInfo>
+                                       <sourceEntries>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="shared"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+                                       </sourceEntries>
+                               </configuration>
+                       </storageModule>
+                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+       </storageModule>
+       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+               <project id="quickpanel.org.tizen.nativecore.target.sbi.gcc45.app.981226620" name="Tizen Native Application" projectType="org.tizen.nativecore.target.sbi.gcc45.app"/>
+       </storageModule>
+       <storageModule moduleId="scannerConfiguration">
+               <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+               <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.app.debug.780449129">
+                       <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+               </scannerConfigBuildInfo>
+               <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.app.release.843831137">
+                       <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+               </scannerConfigBuildInfo>
+       </storageModule>
+       <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+       <storageModule moduleId="refreshScope" versionNumber="2">
+               <configuration configurationName="Debug">
+                       <resource resourceType="PROJECT" workspacePath="/quickpanel"/>
+               </configuration>
+               <configuration configurationName="Release">
+                       <resource resourceType="PROJECT" workspacePath="/quickpanel"/>
+               </configuration>
+       </storageModule>
+       <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+</cproject>
diff --git a/.exportMap b/.exportMap
new file mode 100755 (executable)
index 0000000..43e310e
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       global: main;
+       local: *;
+};
diff --git a/.gitignore b/.gitignore
new file mode 100755 (executable)
index 0000000..3b8cabe
--- /dev/null
@@ -0,0 +1,6 @@
+/Debug
+/SA_Report
+.svace-dir
+.sign
+.sdk_delta.info
+.rds_delta
diff --git a/.project b/.project
new file mode 100755 (executable)
index 0000000..04f89ce
--- /dev/null
+++ b/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>quickpanel</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.tizen.nativecore.apichecker.apicheckerbuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+                       <triggers>full,incremental,</triggers>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.cdt.core.cnature</nature>
+               <nature>org.eclipse.cdt.core.ccnature</nature>
+               <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+               <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+               <nature>org.tizen.nativecore.apichecker.apicheckernature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>0</id>
+                       <name></name>
+                       <type>26</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-projectRelativePath-matches-false-false-*/.tpk</arguments>
+                       </matcher>
+               </filter>
+               <filter>
+                       <id>0</id>
+                       <name></name>
+                       <type>6</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-project_def.prop</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/.tproject b/.tproject
new file mode 100755 (executable)
index 0000000..468a834
--- /dev/null
+++ b/.tproject
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<tproject xmlns="http://www.tizen.org/tproject">
+    <platforms>
+        <platform>
+            <name>mobile-4.0</name>
+        </platform>
+    </platforms>
+    <package>
+        <blacklist/>
+        <resFallback autoGen="true"/>
+    </package>
+</tproject>
diff --git a/AUTHORS b/AUTHORS
new file mode 100755 (executable)
index 0000000..24aebc0
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,2 @@
+youngsub ko <ys4610.ko at samsung dot com>
+seung taek jung <seungtaek.chung at samsung dot com>
diff --git a/Build/appendix.mk b/Build/appendix.mk
new file mode 100755 (executable)
index 0000000..2e06c34
--- /dev/null
@@ -0,0 +1 @@
+# Appendix\r
diff --git a/Build/basedef.mk b/Build/basedef.mk
new file mode 100755 (executable)
index 0000000..a762983
--- /dev/null
@@ -0,0 +1,34 @@
+# Add inputs and outputs from these tool invocations to the build variables
+
+
+OS_NAME := $(shell $(UNAME))
+
+
+#ifeq ($(origin BUILD_CONFIG), undefined)
+BUILD_CONFIG ?= Debug
+#endif
+
+#ifeq ($(origin ARCH), undefined)
+ARCH ?= i386
+#endif
+
+#ifeq ($(origin PROJPATH), undefined)
+PROJPATH ?= .
+#endif
+
+
+#ifeq ($(origin PROJ_PATH), undefined)
+PROJ_PATH ?= $(PROJPATH)
+#endif
+
+#ifeq ($(strip $(OUTPUT_DIR)),)
+#OUTPUT_DIR ?= $(PROJ_PATH)/$(BUILD_CONFIG)
+#endif
+
+#ifeq ($(strip $(BUILD_ARCH)),)
+BUILD_ARCH ?= $(ARCH)
+#endif
+
+#ifeq ($(strip $(ENVENTOR_PATH)),)
+ENVENTOR_PATH ?= $(SDK_TOOLPATH)/enventor
+#endif
diff --git a/Build/build_c.mk b/Build/build_c.mk
new file mode 100755 (executable)
index 0000000..5fffeea
--- /dev/null
@@ -0,0 +1,113 @@
+# C/C++ build script
+
+
+_FUNC_EXT2O = $(patsubst %.$(3),$(1)/%.o,$(2))
+_FUNC_C2O = $(call _FUNC_EXT2O,$(1),$(2),c)
+_FUNC_CPP2O = $(call _FUNC_EXT2O,$(1),$(2),cpp)
+
+
+# parameter :
+#  $(1) - C/C++ soruce file
+#  $(2) - output path
+#  $(3) - .ext
+#  $(4) - unique id
+CONVERT_ESC_EXT_TO_O = $(addprefix $(2)/,$(notdir $(patsubst %.$(3),%-$(4).o,$(1))))
+
+#CONVERT_ESC_C_TO_O = $(call CONVERT_ESC_EXT_TO_O,$(1),$(2),c)
+#CONVERT_ESC_CPP_TO_O = $(call CONVERT_ESC_EXT_TO_O,$(1),$(2),cpp)
+
+
+# parameter :
+#  $(1) - encoded one C/C++ soruce file
+#  $(2) - output path
+#  $(3) - ext title (C/C++)
+#  $(4) - ext (c/cpp)
+#  $(5) - compiler ($(CC)/$(CXX))
+#  $(6) - build opt
+#  $(7) - build opt file
+# output :
+#  $(8) - output files list
+define C_BUILD_PROC_RAW
+$(call CONVERT_ESC_EXT_TO_O,$(1),$(2),$(4),$(8)) : $(call DECODE_4MAKE,$(1)) $(7)
+       @echo '  Building file: $$<'
+       @echo '  Invoking: $(3) Compiler'
+       $$(call MAKEDIRS,$$(@D))
+       $(5) -c "$$<" -o "$$@" $(6) -Wp,@$(7)
+       @echo '  Finished building: $$<'
+$(9) += $(call CONVERT_ESC_EXT_TO_O,$(1),$(2),$(4),$(8))
+endef
+
+
+# parameter :
+#  $(1) - output paths
+#  $(2) - src paths
+#  $(3) - inc paths
+#  $(4) - inc files
+#  $(5) - Defs
+#  $(6) - UnDefs
+#  $(7) - compiler opt
+#  $(8) - compiler opt file
+#  $(9) - ext title (C/C++)
+#  $(10) - ext (c/cpp)
+#  $(11) - compiler ($(CC)/$(CXX))
+# output :
+#  $(12) - OBJS
+# return :
+#  none
+define C_PROC_RAW
+
+_OUTPUT_DIR := $$(strip $(1))#
+_SRCS := $(2)#
+_INCS := $(3)#
+_INC_FILES := $(4)#
+_DEFS := $(5)#
+_UNDEFS := $(6)#
+
+_OPT := $(7)
+_OPT_FILE := $(8)
+
+_EXT_TITLE := $(9)
+_EXT := $(10)
+_COMPILER := $(11)
+
+#_OUTPUT_FILES := $(12)
+
+_ENC_SRCS := $$(call ENCODE_4MAKE,$$(_SRCS))
+_ENC_SRCS := $$(filter %.$$(_EXT),$$(_ENC_SRCS))
+
+ifneq ($$(strip $$(_SRCS)),)
+
+_NORMAL_SRCS := $$(filter-out %*.$$(_EXT),$$(_ENC_SRCS))
+_WIDLCARD_SRCS := $$(filter %*.$$(_EXT),$$(_ENC_SRCS))
+
+_ALL_SRCS := $$(call DECODE_4MAKE,$$(_NORMAL_SRCS)) \
+             $$(foreach var,$$(_WIDLCARD_SRCS),$$(call FIND_FILES_4MAKE,$$(call DECODE_4MAKE,$$(var))))
+
+ifneq ($$(strip $$(_ALL_SRCS)),)
+
+_ENC_SRCS := $$(call ENCODE_4MAKE,$$(_ALL_SRCS))
+
+_CDEFS := $$(CDEFS)
+_CDEFS += $$(addprefix -D,$$(_DEFS))
+_CDEFS += $$(addprefix -U,$$(_UNDEFS))
+
+_ENC_C_INCS := $$(call ENCODE_4MAKE,$$(_INCS))
+_ENC_C_INCS := $$(addprefix -I,$$(_ENC_C_INCS))
+
+_ENC_INC_FILES := $$(call ENCODE_4MAKE,$$(_INC_FILES))
+_ENC_INC_FILES += $$(addprefix -include,$$(_ENC_INC_FILES))
+
+_C_INCS := $$(call DECODE_4MAKE,$$(_ENC_C_INCS) $$(_ENC_C_INC_FILES))
+
+_DEFS := $$(_CDEFS) $$(_C_INCS) -I"pch" $$(_OPT)
+
+_UNIQUE_ID = $$(firstword $$(shell echo $$(var) | $$(CKSUM)))
+
+$$(foreach var,$$(_ENC_SRCS),$$(eval $$(call C_BUILD_PROC_RAW,$$(var),$$(_OUTPUT_DIR),$$(_EXT_TITLE),$$(_EXT),$$(_COMPILER),$$(_DEFS),$$(_OPT_FILE),$$(_UNIQUE_ID),$(12))))
+
+endif  # (_(strip _(_ALL_SRCS)),)
+
+endif  # (_(strip _(_SRCS)),)
+
+
+endef
diff --git a/Build/build_edc.mk b/Build/build_edc.mk
new file mode 100755 (executable)
index 0000000..6f85fdd
--- /dev/null
@@ -0,0 +1,81 @@
+# EDC build script
+
+
+FUNC_EDC2EDJ = $(patsubst %.edc,$(2)/%.edj,$(1))
+
+# parameter :
+#  $(1) - C/C++ soruce file
+#  $(2) - output path
+CONVERT_ESC_EDC_TO_EDJ = $(call CONVERT_4MAKE_TO_OUT,$(call FUNC_EDC2EDJ,$(1),$(2)))
+
+
+# parameter :
+#  $(1) - encoded one C/C++ soruce file
+#  $(2) - output path
+#  $(3) - build opt
+# output :
+#  $(4) - output files list
+define EDJ_BUILD_PROC_RAW
+$(call CONVERT_ESC_EDC_TO_EDJ,$(1),$(2)) : $(call DECODE_4MAKE,$(1))
+       @echo '  Building file: $$<'
+       @echo '  Invoking: EDC Resource Compiler'
+       $$(call MAKEDIRS,$$(@D))
+       $$(EDJE_CC) $(3) "$$<" "$$@"
+       @echo '  Finished building: $$<'
+$(4) += $(call CONVERT_ESC_EDC_TO_EDJ,$(1),$(2))
+endef
+
+
+# parameter :
+#  $(1) - output paths
+#  $(2) - src paths
+#  $(3) - image inc paths
+#  $(4) - sound inc paths
+#  $(5) - font inc paths
+# output :
+#  $(6) - OBJS 
+# return :
+#  none
+define EDJ_PROC_RAW
+
+_OUTPUT_DIR := $$(strip $(1))#
+_SRCS := $(2)# 
+_IMAGE_DIRS := $(3)# 
+_SOUND_DIRS := $(4)# 
+_FONT_DIRS := $(5)# 
+
+ifneq ($$(strip $$(_SRCS)),)
+
+_ENC_SRCS := $$(call ENCODE_4MAKE,$$(_SRCS)) 
+
+_NORMAL_SRCS := $$(filter-out %*.edc,$$(_ENC_SRCS))
+_WIDLCARD_SRCS := $$(filter %*.edc,$$(_ENC_SRCS))
+
+_ALL_SRCS := $$(call DECODE_4MAKE,$$(_NORMAL_SRCS)) \
+             $$(foreach var,$$(_WIDLCARD_SRCS),$$(call FIND_FILES_4MAKE,$$(call DECODE_4MAKE,$$(var))))
+
+ifneq ($$(strip $$(_ALL_SRCS)),)
+
+_ENC_SRCS := $$(call ENCODE_4MAKE,$$(_ALL_SRCS)) 
+
+_COMPILER_FLAGS := -id "$$(ENVENTOR_SHARED_RES_PATH)/images"
+_COMPILER_FLAGS += -sd "$$(ENVENTOR_SHARED_RES_PATH)/sounds"
+_COMPILER_FLAGS += -fd "$$(ENVENTOR_SHARED_RES_PATH)/fonts"
+
+ifneq ($$(strip $$(_IMAGE_DIRS)),)
+_COMPILER_FLAGS += $$(addprefix -id ,$$(_IMAGE_DIRS))
+endif
+ifneq ($$(strip $$(_SOUND_DIRS)),)
+_COMPILER_FLAGS += $$(addprefix -sd ,$$(_SOUND_DIRS))
+endif
+ifneq ($$(strip $$(_FONT_DIRS)),)
+_COMPILER_FLAGS += $$(addprefix -fd ,$$(_FONT_DIRS))
+endif
+
+$$(foreach var,$$(_ENC_SRCS),$$(eval $$(call EDJ_BUILD_PROC_RAW,$$(var),$$(_OUTPUT_DIR),$$(_COMPILER_FLAGS),$(6))))
+
+endif  # (_(strip _(_ALL_SRCS)),)
+
+endif  # (_(strip _(_SRCS)),)
+
+endef
diff --git a/Build/build_po.mk b/Build/build_po.mk
new file mode 100755 (executable)
index 0000000..d88d71a
--- /dev/null
@@ -0,0 +1,64 @@
+# PO build script
+
+
+_FUNC_PO2MO = $(patsubst %.po,$(2)/res/locale/%/LC_MESSAGES/$(3).mo,$(notdir $(1)))
+
+
+# parameter :
+#  $(1) - C/C++ soruce file
+#  $(2) - output path
+#  $(3) - app name
+CONVERT_ESC_PO_TO_MO = $(call CONVERT_4MAKE_TO_OUT,$(call _FUNC_PO2MO,$(1),$(2),$(3)))
+
+
+# parameter :
+#  $(1) - encoded one C/C++ soruce file
+#  $(2) - output path
+#  $(3) - app name
+# output :
+#  $(4) - output files list
+define MO_BUILD_PROC_RAW
+$(call CONVERT_ESC_PO_TO_MO,$(1),$(2),$(3)) : $(call DECODE_4MAKE,$(1))
+       @echo '  Building file: $$<'
+       @echo '  Invoking: msgfmt String Formatter'
+       $$(call MAKEDIRS,$$(@D))
+       $$(MSGFMT) -o "$$@" "$$<"
+       @echo '  Finished building: $$<'
+$(4) += $(call CONVERT_ESC_PO_TO_MO,$(1),$(2),$(3))
+endef
+
+# parameter :
+#  $(1) - output dir
+#  $(2) - src paths
+#  $(3) - app name
+# output :
+#  $(4) - OBJS 
+
+define MO_PROC_RAW
+
+_OUTPUT_DIR := $(1)
+_SRCS := $(2)
+_APPNAME := $(3)
+
+ifneq ($$(strip $$(_SRCS)),)
+
+_ENC_SRCS := $$(call ENCODE_4MAKE,$$(_SRCS)) 
+
+_NORMAL_SRCS := $$(filter-out %*.po,$$(_ENC_SRCS))
+_WIDLCARD_SRCS := $$(filter %*.po,$$(_ENC_SRCS))
+
+_ALL_SRCS := $$(call DECODE_4MAKE,$$(_NORMAL_SRCS)) \
+             $$(foreach var,$$(_WIDLCARD_SRCS),$$(call FIND_FILES_4MAKE,$$(call DECODE_4MAKE,$$(var))))
+
+ifneq ($$(strip $$(_ALL_SRCS)),)
+
+_ENC_SRCS := $$(call ENCODE_4MAKE,$$(_ALL_SRCS)) 
+
+$$(foreach var,$$(_ENC_SRCS),$$(eval $$(call MO_BUILD_PROC_RAW,$$(var),$$(_OUTPUT_DIR),$$(_APPNAME),$(4))))
+
+endif  # (_(strip _(_ALL_SRCS)),)
+
+endif  # (_(strip _(_SRCS)),)
+
+endef
diff --git a/Build/flags.mk b/Build/flags.mk
new file mode 100755 (executable)
index 0000000..0ee8efb
--- /dev/null
@@ -0,0 +1,16 @@
+
+DEBUG_OP = -g3 
+CPP_DEBUG_OP = 
+
+OPTIMIZATION_OP = -O0 
+CPP_OPTIMIZATION_OP = 
+
+COMPILE_FLAGS = $(DEBUG_OP) $(OPTIMIZATION_OP) -Wall -c -fmessage-length=0 
+
+CPP_COMPILE_FLAGS = $(CPP_DEBUG_OP) $(CPP_OPTIMIZATION_OP) 
+
+LINK_FLAGS = 
+
+AR_FLAGS = 
+
+EDC_COMPILE_FLAGS = 
\ No newline at end of file
diff --git a/Build/funcs.mk b/Build/funcs.mk
new file mode 100755 (executable)
index 0000000..3ba778b
--- /dev/null
@@ -0,0 +1,50 @@
+
+BSLASH := \\#
+NULL_CHAR := #
+SPACE := \ #
+COLON := :#
+DOTDOT := ..#
+SPACE_ESC := &sp;#
+COLON_ESC := &co;#
+SPACE_OUT := ~sp~#
+COLON_OUT := ~co~#
+DOTDOT_OUT := ~dtdt~#
+
+BSLASH2SLASH = $(subst $(BSLASH),/,$(1))
+
+REMOVE_TAIL = $(patsubst %/,%,$(1))
+
+#LOWER_CASE = $(shell echo translit($(1),[A-Z],[a-z])|$(M4))
+LOWER_CASE = $(shell echo $(1)|$(TR) [A-Z] [a-z])
+
+#ifneq ($(findstring Windows,$(OS)),)
+# ...
+#endif
+
+FIND_FILES = $(shell $(FIND) $(1)/$(2) | $(SED) 's/^$(subst /,$(BSLASH)/,$(1))$(BSLASH)///')
+FIND_FILES_ESC = $(shell $(FIND) $(1)/$(2) | $(SED) 's/^$(subst /,$(BSLASH)/,$(1))$(BSLASH)///' -e 's/:/$(BSLASH)&co;/g' -e 's/$(BSLASH) /$(BSLASH)&sp;/g')
+FIND_FILES_4MAKE = $(shell $(FIND) $(1)/$(2) | $(SED) 's/^$(subst /,$(BSLASH)/,$(1))$(BSLASH)///')
+
+FIND_FILES_ABS = $(shell $(FIND) $(1))
+FIND_FILES_ABS_4MAKE = $(shell $(FIND) $(1) -e 's/$(BSLASH) /$(BSLASH)&sp;/g')
+FIND_FILES_ABS_ESC = $(shell $(FIND) $(1) -e 's/:/$(BSLASH)&co;/g' -e 's/$(BSLASH) /$(BSLASH)&sp;/g')
+
+FIND_FILES_4MAKE = $(shell $(FIND) $(1) | $(SED) 's/ /\\\ /g')
+
+#ENCODE_ESC = $(shell echo $(1) | $(SED) -e 's/:/$(BSLASH)&co;/g' -e 's/$(BSLASH) /$(BSLASH)&sp;/g')
+#DECODE_ESC = $(shell echo $(1) | $(SED) -e 's/$(BSLASH)&co;/:/g' -e 's/$(BSLASH)&sp;/$(BSLASH) / g')
+ENCODE_ESC = $(subst $(SPACE),$(SPACE_ESC),$(subst $(COLON),$(COLON_ESC),$(1)))
+DECODE_ESC = $(subst $(COLON_ESC),$(COLON),$(subst $(SPACE_ESC),$(SPACE),$(1)))
+ENCODE_4MAKE = $(subst $(SPACE),$(SPACE_ESC),$(1))
+DECODE_4MAKE = $(subst $(SPACE_ESC),$(SPACE),$(1))
+
+CONVERT_TO_OUT = $(subst $(DOTDOT),$(DOTDOT_OUT),$(subst $(COLON),$(COLON_OUT),$(subst $(SPACE),$(SPACE_OUT),$(1))))
+CONVERT_ESC_TO_OUT = $(subst $(DOTDOT),$(DOTDOT_OUT),$(subst $(COLON_ESC),$(COLON_OUT),$(subst $(SPACE_ESC),$(SPACE_OUT),$(1))))
+CONVERT_4MAKE_TO_OUT = $(subst $(DOTDOT),$(DOTDOT_OUT),$(subst $(COLON),$(COLON_OUT),$(subst $(SPACE_ESC),$(SPACE_OUT),$(1))))
+
+PROC_NO_EXIST = $(if $(wildcard $(1)),,$(call $(2),$(1)))
+define MAKEDIRS0
+       @echo '  Building directory: $(1)'
+       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(1))
+endef
+MAKEDIRS = $(call PROC_NO_EXIST,$(1),MAKEDIRS0)
diff --git a/Build/makefile b/Build/makefile
new file mode 100755 (executable)
index 0000000..f491b50
--- /dev/null
@@ -0,0 +1,34 @@
+# 
+# Usege : make -f <proj_root>/Build/makefile -C <proj_root> 
+#
+BUILD_SCRIPT_VERSION := 1.1.0
+
+.PHONY : app_version app_build app_clean build_version
+
+
+all : app_build
+
+clean : app_clean
+
+version : build_version
+
+#PROJ_ROOT = .
+BUILD_ROOT := $(PROJ_PATH)/Build#
+
+ifeq ($(MAKE_NAME),mingw32-make)
+ifneq ($(SHELL),)
+OPTIONS += --eval="SHELL=$(SHELL)"
+endif
+endif
+
+app_build :
+       @echo $(MAKE) -f "$(BUILD_ROOT)/makefile.mk"
+       @$(MAKE_BIN) -f "$(BUILD_ROOT)/makefile.mk" -C "$(PROJ_PATH)" $(OPTIONS)
+
+app_clean :
+       @$(MAKE) -f "$(BUILD_ROOT)/makefile.mk" -C "$(PROJ_PATH)" $(OPTIONS) clean
+
+build_version :
+       @echo makefile : $(BUILD_SCRIPT_VERSION)
+       @$(MAKE) -f "$(BUILD_ROOT)/makefile.mk" -C "$(PROJ_PATH)" $(OPTIONS) version
diff --git a/Build/makefile.mk b/Build/makefile.mk
new file mode 100755 (executable)
index 0000000..205a3ad
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Usege : make -f <proj_root>/Build/makefile -C <proj_root>
+#
+
+BUILD_SCRIPT_VERSION := 1.2.3
+
+.PHONY : app_version app_clean build_version
+
+
+all : app_build
+
+clean : app_clean
+
+version : build_version
+
+
+#PROJ_ROOT := $(call BSLASH2SLASH,$(PROJ_PATH))
+PROJ_ROOT := .
+BUILD_ROOT := $(PROJ_ROOT)/Build
+
+include $(BUILD_ROOT)/basedef.mk
+
+include $(PROJ_ROOT)/project_def.prop
+-include $(PROJ_ROOT)/build_def.prop
+
+include $(BUILD_ROOT)/funcs.mk
+
+-include $(BUILD_ROOT)/tooldef.mk
+-include $(BUILD_ROOT)/flags.mk
+-include $(BUILD_ROOT)/platform.mk
+
+
+APPTYPE := $(type)
+
+OUTPUT_DIR := $(PROJ_ROOT)/$(BUILD_CONFIG)
+OBJ_OUTPUT := $(OUTPUT_DIR)/objs
+
+LOWER_APPNAME := $(call LOWER_CASE,$(APPNAME))
+APPID2 := $(subst $(basename $(APPID)).,,$(APPID))
+
+ifeq ($(strip $(APPTYPE)),app)
+APPFILE := $(OUTPUT_DIR)/$(LOWER_APPNAME)
+endif
+ifeq ($(strip $(APPTYPE)),staticLib)
+APPFILE := $(OUTPUT_DIR)/lib$(LOWER_APPNAME).a
+endif
+ifeq ($(strip $(APPTYPE)),sharedLib)
+APPFILE := $(OUTPUT_DIR)/lib$(LOWER_APPNAME).so
+endif
+
+ifneq ($(strip $(PLATFORM_INCS)),)
+PLATFORM_INCS_FILE := $(OBJ_OUTPUT)/platform_incs_file.inc
+endif
+
+include $(BUILD_ROOT)/build_c.mk
+
+
+ifeq ($(strip $(APPTYPE)),app)
+EXT_OP := -fPIE
+endif
+ifeq ($(strip $(APPTYPE)),staticLib)
+EXT_OP := -fPIE
+endif
+ifeq ($(strip $(APPTYPE)),sharedLib)
+EXT_OP := -fPIC
+endif
+
+C_OPT := $(COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) $(EXT_OP) --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT) $(USER_C_OPTS)
+CPP_OPT := $(CPP_COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) $(EXT_OP) --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT) $(USER_CPP_OPTS)
+C_OPT_FILE := $(PLATFORM_INCS_FILE)
+
+OBJS := #
+
+# Global C/C++
+ifeq ($(strip $(USER_ROOT)),)
+USER_ROOT := $(PROJ_ROOT)
+endif
+$(eval $(call C_PROC_RAW,$(OBJ_OUTPUT),$(USER_SRCS),$(USER_INC_DIRS),$(USER_INC_FILES),$(USER_DEFS),$(USER_UNDEFS),$(C_OPT),$(C_OPT_FILE),C,c,$(CC),OBJS))
+$(foreach ext,cpp cxx cc c++ C,$(eval $(call C_PROC_RAW,$(OBJ_OUTPUT),$(USER_SRCS),$(USER_INC_DIRS),$(USER_CPP_INC_FILES),$(USER_CPP_DEFS),$(USER_CPP_UNDEFS),$(CPP_OPT),$(C_OPT_FILE),C++,$(ext),$(CXX),OBJS)))
+
+# Individual C/C++
+ifneq ($(strip $(USER_EXT_C_KEYS)),)
+$(foreach var,$(USER_EXT_C_KEYS),$(eval $(call C_PROC_RAW,$(OBJ_OUTPUT),$(USER_EXT_$(var)_SRCS),$(USER_EXT_$(var)_INC_DIRS),$(USER_EXT_$(var)_INC_FILES),$(USER_EXT_$(var)_DEFS),$(USER_EXT_$(var)_UNDEFS),$(C_OPT),$(C_OPT_FILE),C,c,$(CC),OBJS)))
+$(foreach ext,cpp cxx cc c++ C,$(foreach var,$(USER_EXT_C_KEYS),$(eval $(call C_PROC_RAW,$(OBJ_OUTPUT),$(USER_EXT_$(var)_SRCS),$(USER_EXT_$(var)_INC_DIRS),$(USER_EXT_$(var)_CPP_INC_FILES),$(USER_EXT_$(var)_CPP_DEFS),$(USER_EXT_$(var)_CPP_UNDEFS),$(CPP_OPT),$(C_OPT_FILE),C++,$(ext),$(CXX),OBJS))))
+endif
+
+
+ifneq ($(strip $(USER_LIB_DIRS)),)
+_ENC_USER_LIB_DIRS := $(call ENCODE_4MAKE,$(USER_LIB_DIRS))
+_ENC_USER_LIB_DIRS := $(addprefix -L,$(_ENC_USER_LIB_DIRS))
+LIBPATHS := $(call DECODE_4MAKE,$(_ENC_USER_LIB_DIRS))
+endif
+
+LIBS += $(addprefix -l,$(USER_LIBS))
+
+UOBJS += $(USER_OBJS)
+
+M_OPT = -MMD -MP -MF"$(@:%.o=%.d)"
+
+DEPS := $(OBJS:.o=.d)
+
+ifneq ($(strip $(DEPS)),)
+-include $(PROJ_ROOT)/Build/$(DEPS)
+endif
+
+
+ifeq ($(strip $(APPTYPE)),app)
+$(APPFILE) : $(OBJS) $(UOBJS)
+       @echo '  Building target: $@'
+       @echo '  Invoking: C/C++ Linker'
+       $(call MAKEDIRS,$(@D))
+       $(CXX) -o $(APPFILE) $(OBJS) $(UOBJS) $(LIBPATHS) -Xlinker --as-needed $(LIBS) $(LINK_FLAGS) $(TC_LINKER_MISC) $(RS_LINKER_MISC) -pie -lpthread --sysroot="$(SYSROOT)" -Xlinker --version-script="$(PROJ_ROOT)/.exportMap" $(RS_LIB_PATHS) $(RS_LIBRARIES) -Xlinker -rpath="/opt/usr/apps/$(APPID)/lib" -Werror-implicit-function-declaration $(USER_LINK_OPTS)
+       @echo '  Finished building target: $@'
+endif
+ifeq ($(strip $(APPTYPE)),staticLib)
+$(APPFILE) : $(OBJS) $(UOBJS)
+       @echo '  Building target: $@'
+       @echo '  Invoking: Archive utility'
+       $(call MAKEDIRS,$(@D))
+       $(AR) -r $(APPFILE) $(OBJS) $(UOBJS) $(AR_FLAGS) $(USER_LINK_OPTS)
+       @echo '  Finished building target: $@'
+endif
+ifeq ($(strip $(APPTYPE)),sharedLib)
+$(APPFILE) : $(OBJS) $(UOBJS)
+       @echo '  Building target: $@'
+       @echo '  Invoking: C/C++ Linker'
+       $(call MAKEDIRS,$(@D))
+       $(CXX) -o $(APPFILE) $(OBJS) $(UOBJS) $(LIBPATHS) -Xlinker --as-needed $(LIBS) $(LINK_FLAGS) $(TC_LINKER_MISC) $(RS_LINKER_MISC) -shared -lpthread --sysroot="$(SYSROOT)" $(RS_LIB_PATHS) $(RS_LIBRARIES) $(USER_LINK_OPTS)
+       @echo '  Finished building target: $@'
+endif
+
+
+$(OBJ_OUTPUT) :
+       $(call MAKEDIRS,$@)
+
+$(OUTPUT_DIR) :
+       $(call MAKEDIRS,$@)
+
+
+ifneq ($(strip $(PLATFORM_INCS)),)
+$(PLATFORM_INCS_FILE) : $(OBJ_OUTPUT)
+       @echo '  Building inc file: $@'
+ifneq ($(findstring Windows,$(OS)),)
+ifneq ($(findstring 3.82,$(MAKE_VERSION)),)
+       $(file > $@,$(PLATFORM_INCS))
+else
+       @echo $(PLATFORM_INCS) > $@
+endif
+else
+       @echo $(PLATFORM_INCS) > $@
+endif
+endif
+
+
+include $(BUILD_ROOT)/build_edc.mk
+
+#ifeq ($(strip $(ENVENTOR_SHARED_RES_PATH)),)
+ENVENTOR_SHARED_RES_PATH ?= $(ENVENTOR_PATH)/share/enventor
+#endif
+
+EDJ_FILES :=
+
+# Global EDCs
+ifneq ($(strip $(USER_EDCS)),)
+$(eval $(call EDJ_PROC_RAW,$(OUTPUT_DIR),$(USER_EDCS),$(USER_EDCS_IMAGE_DIRS),$(USER_EDCS_SOUND_DIRS),$(USER_EDCS_FONT_DIRS),EDJ_FILES))
+endif
+
+# Individual EDCs
+ifneq ($(strip $(USER_EXT_EDC_KEYS)),)
+$(foreach var,$(USER_EXT_EDC_KEYS),$(eval $(call EDJ_PROC_RAW,$(OUTPUT_DIR),$(USER_EXT_$(var)_EDCS),$(USER_EXT_$(var)_EDCS_IMAGE_DIRS),$(USER_EXT_$(var)_EDCS_SOUND_DIRS),$(USER_EXT_$(var)_EDCS_FONT_DIRS),EDJ_FILES)))
+endif
+
+
+include $(BUILD_ROOT)/build_po.mk
+
+MO_FILES :=
+
+# Global POs
+ifneq ($(strip $(USER_POS)),)
+$(eval $(call MO_PROC_RAW,$(OUTPUT_DIR),$(USER_POS),$(APPID2),MO_FILES))
+endif
+
+
+secondary-outputs : $(EDJ_FILES) $(MO_FILES)
+
+-include appendix.mk
+
+app_build : $(OUTPUT_DIR) $(APPFILE) secondary-outputs
+       @echo ========= done =========
+
+
+app_clean :
+       rm -f $(APPFILE)
+       rm -rf $(OUTPUT_DIR)
+
+build_version :
+       @echo makefile.mk : $(BUILD_SCRIPT_VERSION)
diff --git a/Build/platform.mk b/Build/platform.mk
new file mode 100755 (executable)
index 0000000..294a38a
--- /dev/null
@@ -0,0 +1,15 @@
+# Add inputs and outputs from these tool invocations to the build variables
+
+SYSROOT = $(SBI_SYSROOT)
+
+USR_INCS := $(addprefix -I $(SYSROOT),$(PLATFORM_INCS_EX))
+
+ifeq ($(strip $(PLATFORM_LIB_PATHS)),)
+RS_LIB_PATHS := "$(SYSROOT)/usr/lib"
+else
+RS_LIB_PATHS := $(addprefix -L$(SYSROOT),$(PLATFORM_LIB_PATHS))
+endif
+
+RS_LIBRARIES := $(addprefix -l,$(RS_LIBRARIES_EX))
+
+PLATFORM_INCS = $(USR_INCS) -I"$(SDK_PATH)/library"
diff --git a/Build/prepost.mk b/Build/prepost.mk
new file mode 100755 (executable)
index 0000000..a8a4d87
--- /dev/null
@@ -0,0 +1,7 @@
+# Add pre/post build process
+
+PREBUILD_COMMAND =
+PREBUILD_DESC =
+
+POSTBUILD_COMMAND =
+POSTBUILD_DESC =
diff --git a/Build/tooldef.mk b/Build/tooldef.mk
new file mode 100755 (executable)
index 0000000..c62243c
--- /dev/null
@@ -0,0 +1,70 @@
+# Add inputs and outputs from these tool invocations to the build variables
+
+ifneq ($(strip $(SHELL_BIN)),)
+SHELL = $(SHELL_BIN)
+else
+SHELL = sh
+endif
+
+ifneq ($(strip $(MKDIR_BIN)),)
+MKDIR = $(MKDIR_BIN)
+MKDIR_OP = -p
+else
+MKDIR = mkdir
+MKDIR_OP = -p
+endif
+
+ifneq ($(strip $(UNAME_BIN)),)
+UNAME = $(UNAME_BIN)
+else
+UNAME = uname
+endif
+
+ifneq ($(strip $(M4_BIN)),)
+M4 = $(M4_BIN)
+else
+M4 = m4
+endif
+
+ifneq ($(strip $(TR_BIN)),)
+TR = $(TR_BIN)
+else
+TR = tr
+endif
+
+ifneq ($(strip $(FIND_BIN)),)
+FIND = $(FIND_BIN)
+else
+FIND = find
+endif
+
+ifneq ($(strip $(SED_BIN)),)
+SED = $(SED_BIN)
+else
+SED = sed
+endif
+
+ifneq ($(strip $(GREP_BIN)),)
+GREP = $(GREP_BIN)
+else
+GREP = grep
+endif
+
+ifneq ($(strip $(EDJE_CC_BIN)),)
+EDJE_CC = $(EDJE_CC_BIN)
+else
+EDJE_CC = edje_cc
+endif
+
+ifneq ($(strip $(MSGFMT_BIN)),)
+MSGFMT = $(MSGFMT_BIN)
+else
+MSGFMT = msgfmt
+endif
+
+ifneq ($(strip $(CKSUM_BIN)),)
+CKSUM = $(CKSUM_BIN)
+else
+CKSUM = cksum
+endif
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..debe87c
--- /dev/null
@@ -0,0 +1,238 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(quickpanel C)
+
+#AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/test TEST_SRCS)
+
+
+SET(PACKAGE ${PROJECT_NAME})
+SET(PREFIX "${CMAKE_INSTALL_PREFIX}/apps/${PKGNAME}")
+SET(BINDIR "${PREFIX}/bin")
+SET(RES_DIR "${PREFIX}/res")
+SET(LOCALEDIR "${RES_DIR}/locale")
+SET(ICONDIR "${RES_DIR}/icons")
+SET(EDJ_DIR "${RES_DIR}/edje")
+SET(DESKTOPDIR "/usr/share/applications")
+SET(MANIFESTXMLDIR "/usr/share/packages")
+SET(SHARED_DIR "${PREFIX}/shared/res")
+
+IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+       SET(CMAKE_BUILD_TYPE "Release")
+ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
+
+SET(SRCS
+       src/modules.c
+       src/accessibility.c
+       src/voice_control.c
+       src/media.c
+       src/datetime/util-time.c
+       src/datetime/datetime.c
+       src/sim_controller.c
+       src/minictrl/minictrl.c
+       src/preference.c
+       src/notifications/noti_list_item.c
+       src/notifications/animated_image.c
+       src/notifications/activenoti.c
+       src/notifications/noti_view_listype.c
+       src/notifications/noti_view_ongoing.c
+       src/notifications/noti_node.c
+       src/notifications/noti_section.c
+       src/notifications/noti_win.c
+       src/notifications/noti_listbox.c
+       src/notifications/noti_util.c
+       src/notifications/noti_view.c
+       src/notifications/noti.c
+       src/device/brightness.c
+       src/settings/modules/rotate-lock.c
+       src/settings/modules/bluetooth.c
+       src/settings/modules/gps.c
+       src/settings/modules/wifi.c
+       src/settings/modules/sound-profile.c
+       src/settings/settings_icon_common.c
+       src/settings/settings_gridbox.c
+       src/settings/settings_view_featured.c
+       src/settings/setting_module_api.c
+       src/settings/settings.c
+       src/settings/setting_utils.c
+       src/vi/vi_manager.c
+       src/common_uic.c
+       src/handler_controller.c
+       src/service/animated_icon.c
+       src/service/emergency_mode.c
+       src/service/uninstall.c
+       src/service/reminder.c
+       src/service/keyboard.c
+       src/service/noti_led.c
+       src/page/pager.c
+       src/page/page_base.c
+       src/page/pager_common.c
+       src/quickpanel-ui.c
+       src/common.c
+       src/list_util.c
+)
+
+
+INCLUDE_DIRECTORIES(
+               ${CMAKE_CURRENT_SOURCE_DIR}/inc
+               ${CMAKE_CURRENT_SOURCE_DIR}/src
+               ${CMAKE_CURRENT_SOURCE_DIR}/res
+               ${CMAKE_CURRENT_SOURCE_DIR}/src/minictrl
+               ${CMAKE_CURRENT_SOURCE_DIR}/src/notifications
+               ${CMAKE_CURRENT_SOURCE_DIR}/src/service
+               ${CMAKE_CURRENT_SOURCE_DIR}/src/settings
+               ${CMAKE_CURRENT_SOURCE_DIR}/src/settings/modules
+               ${CMAKE_CURRENT_SOURCE_DIR}/src/vi
+               ${CMAKE_CURRENT_SOURCE_DIR}/src/page
+               ${CMAKE_CURRENT_SOURCE_DIR}/src/datetime
+#              ${CMAKE_CURRENT_SOURCE_DIR}/data
+               )
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+       capi-appfw-application
+       capi-appfw-preference
+       capi-appfw-app-manager
+       capi-system-runtime-info
+       capi-system-info
+       capi-system-device
+       capi-location-manager
+       capi-network-tethering
+       capi-network-bluetooth
+       capi-network-connection
+       capi-network-wifi-manager
+       capi-media-player
+       capi-media-camera
+       capi-media-sound-manager
+       capi-media-metadata-extractor
+       capi-system-system-settings
+       capi-base-utils-i18n
+       capi-ui-efl-util
+       capi-telephony
+       tapi
+       feedback
+       notification
+       badge
+       vconf
+       evas
+       ecore
+       edje
+       ecore-input
+       elementary
+       dlog
+       syspopup-caller
+       minicontrol-viewer
+       minicontrol-monitor
+       capi-appfw-package-manager
+       iniparser
+       alarm-service
+       voice-control-setting
+       tzsh-quickpanel-service
+       dpm
+       efl-extension
+       appcore-efl
+)
+
+FOREACH(flag ${pkgs_CFLAGS} ${x11_pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -g -O2 -fpie -Werror")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_C_FLAGS_RELEASE "-O2")
+
+FIND_PROGRAM(UNAME NAMES uname)
+EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")
+IF("${ARCH}" STREQUAL "arm")
+       ADD_DEFINITIONS("-DTARGET")
+       MESSAGE("add -DTARGET")
+ENDIF("${ARCH}" STREQUAL "arm")
+
+ADD_DEFINITIONS("-DQP_SETTING_ENABLE")
+ADD_DEFINITIONS("-DQP_BRIGHTNESS_ENABLE")
+ADD_DEFINITIONS("-DQP_MINICTRL_ENABLE")
+ADD_DEFINITIONS("-DQP_SCREENREADER_ENABLE")
+#ADD_DEFINITIONS("-DQP_SERVICE_NOTI_LED_ENABLE")
+ADD_DEFINITIONS("-DQP_ANIMATED_IMAGE_ENABLE")
+ADD_DEFINITIONS("-DQP_REMINDER_ENABLE")
+#ADD_DEFINITIONS("-DQP_EMERGENCY_MODE_ENABLE")
+ADD_DEFINITIONS("-DQP_VOICE_CONTROL_ENABLE")
+
+ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE}\"")
+ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"")
+ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
+ADD_DEFINITIONS("-DRES_DIR=\"${RES_DIR}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
+ADD_DEFINITIONS("-DICONDIR=\"${ICONDIR}\"")
+ADD_DEFINITIONS("-DEDJ_DIR=\"${EDJ_DIR}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DSHARED_DIR=\"${SHARED_DIR}\"")
+
+#ADD_DEFINITIONS("-DFILE_DEBUG")
+ADD_DEFINITIONS("-D_DLOG_USED")
+#ADD_DEFINITIONS("-DHAVE_X")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} ${x11_pkgs_LDFLAGS} "-pie")
+
+
+MESSAGE("START EDJ BUILD")
+
+MESSAGE("EDJE_CC CUSTOM FLAG : ${EDJEFLAGS}")
+
+ADD_CUSTOM_TARGET(quickpanel.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images_icon  -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images "${EDJEFLAGS}"
+               ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/quickpanel.edc
+               ${CMAKE_CURRENT_BINARY_DIR}/quickpanel.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/quickpanel.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} quickpanel.edj)
+
+ADD_CUSTOM_TARGET(quickpanel_activenoti.edj
+                COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images_icon  -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images "${EDJEFLAGS}"
+                ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/quickpanel_activenoti.edc
+                ${CMAKE_CURRENT_BINARY_DIR}/quickpanel_activenoti.edj
+                DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/quickpanel_activenoti.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} quickpanel_activenoti.edj)
+
+ADD_CUSTOM_TARGET(quickpanel_voice_control.edj
+                COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images_icon  -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images "${EDJEFLAGS}"
+                ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/quickpanel_voice_control.edc
+                ${CMAKE_CURRENT_BINARY_DIR}/quickpanel_voice_control.edj
+                DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/quickpanel_voice_control.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} quickpanel_voice_control.edj)
+
+
+
+ADD_CUSTOM_TARGET(quickpanel_theme.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images_icon -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images "${EDJEFLAGS}"
+               ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/quickpanel_theme.edc
+               ${CMAKE_CURRENT_BINARY_DIR}/quickpanel_theme.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/quickpanel_theme.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} quickpanel_theme.edj)
+
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/quickpanel.edj DESTINATION ${EDJ_DIR})
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/quickpanel_activenoti.edj DESTINATION ${EDJ_DIR})
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/quickpanel_voice_control.edj DESTINATION ${EDJ_DIR})
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/quickpanel_theme.edj DESTINATION ${EDJ_DIR})
+INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/icons DESTINATION ${RES_DIR} FILES_MATCHING PATTERN "*.png")
+
+
+CONFIGURE_FILE(${PROJECT_NAME}.xml ${CMAKE_CURRENT_BINARY_DIR}/org.tizen.${PROJECT_NAME}.xml)
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.tizen.${PROJECT_NAME}.xml DESTINATION ${MANIFESTXMLDIR})
+#CONFIGURE_FILE(tizen-manifest.xml ${CMAKE_CURRENT_BINARY_DIR}/org.tizen.${PROJECT_NAME}.xml)
+#INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.tizen.${PROJECT_NAME}.xml DESTINATION ${MANIFESTXMLDIR})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
+
+# icons for notification
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/shared/res/noti_icons/ DESTINATION ${SHARED_DIR}/noti_icons FILES_MATCHING PATTERN "*.png")
+
+# Language
+MESSAGE("ADD_SUBDIRECTORY PO")
+ADD_SUBDIRECTORY(res/po)
+
diff --git a/LICENSE b/LICENSE
new file mode 100755 (executable)
index 0000000..47680a4
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,203 @@
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   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.
\ No newline at end of file
diff --git a/NOTICE b/NOTICE
new file mode 100755 (executable)
index 0000000..e0db2cf
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,3 @@
+Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+Except as noted, this software is licensed under Apache License, Version 2.
+Please, see the LICENSE file for Apache License terms and conditions.
\ No newline at end of file
diff --git a/Notification_TestSample/.cproject b/Notification_TestSample/.cproject
new file mode 100755 (executable)
index 0000000..242a4eb
--- /dev/null
@@ -0,0 +1,637 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+       <storageModule moduleId="org.eclipse.cdt.core.settings">
+               <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.app.debug.623840356">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.623840356" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.tizen.nativecore.NativeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                               <configuration artifactName="notification-testsample" buildArtefactType="org.tizen.nativecore.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.app,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.623840356" name="Debug" parent="org.tizen.nativecore.config.sbi.gcc45.app.debug">
+                                       <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.debug.623840356." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug.789082172" name="Tizen Native Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug">
+                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.1513861718" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder autoBuildTarget="all" buildPath="${workspace_loc:/NotificationManager}/Debug" enableAutoBuild="true" id="org.tizen.nativecore.target.sbi.gnu.builder.728564006" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.1562889175" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1843741939" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+                                                               <option id="gnu.cpp.compiler.option.optimization.level.958069946" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+                                                               <option defaultValue="gnu.cpp.compiler.debugging.level.max" id="sbi.gnu.cpp.compiler.option.debugging.level.core.1304689426" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" valueType="enumerated"/>
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.compiler.option.misc.pic.core.297678407" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.468281428" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-4.0-device.core.private.20170909_1_llvm40.armel.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.828368370" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/asp/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/aul/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/auth-fw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/call-manager&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cbhm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/chromium-ewk&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/csr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-buffer-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ector-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/emile-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/pkgmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/privacy-privilege-manager/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/rua/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/tzsh&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui-viewmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vulkan&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/yaca&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.1898593833" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-mthumb"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.1979662586" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.core.239953035" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1480463000" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+                                                       </tool>
+                                                       <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1369315599" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+                                                               <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.1065904963" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+                                                               <option defaultValue="gnu.c.debugging.level.max" id="sbi.gnu.c.compiler.option.debugging.level.core.1625170570" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" valueType="enumerated"/>
+                                                               <option defaultValue="false" id="sbi.gnu.c.compiler.option.misc.pic.core.1289700766" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.c.compiler.option.1250562695" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-4.0-device.core.private.20170909_1_llvm40.armel.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1601601524" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/asp/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/aul/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/auth-fw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/call-manager&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cbhm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/chromium-ewk&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/csr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-buffer-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ector-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/email-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/emile-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/msg-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/pkgmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/privacy-privilege-manager/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/rua/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony-client&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/tzsh&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ug-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui-viewmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vconf&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vulkan&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/yaca&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.293706034" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-mthumb"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.1651395889" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.core.1312267624" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1421791057" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1114561777" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1190097251" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.linker.option.shared_flag.core.2095877856" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.linker.option.noundefined.core.879054202" name="Report unresolved symbol references (-Wl,--no-undefined)" superClass="sbi.gnu.cpp.linker.option.noundefined.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.1749954949" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --version-script=&quot;${PROJ_PATH}/.exportMap&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.link.option.paths.2049080024" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.496484676" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool command="arm-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1272181041" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.256801543" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.232042945" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.152133104" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.953008194" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.cpp.923766897" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.757962707" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.po.compiler.1469051548" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.1028761320" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+                                               </toolChain>
+                                       </folderInfo>
+                                       <sourceEntries>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="shared"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+                                       </sourceEntries>
+                               </configuration>
+                       </storageModule>
+                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+               <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.app.release.1148513101">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.release.1148513101" moduleId="org.eclipse.cdt.core.settings" name="Release">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.tizen.nativecore.NativeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                               <configuration artifactName="notificationmanager" buildArtefactType="org.tizen.nativecore.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.app,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.app.release.1148513101" name="Release" parent="org.tizen.nativecore.config.sbi.gcc45.app.release">
+                                       <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.release.1148513101." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.release.687691478" name="Tizen Native Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.app.release">
+                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.629758008" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder buildPath="${workspace_loc:/NotificationManager}/Release" id="org.tizen.nativecore.target.sbi.gnu.builder.1300703392" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.333403981" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.609862454" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+                                                               <option id="gnu.cpp.compiler.option.optimization.level.1250095982" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+                                                               <option defaultValue="gnu.cpp.compiler.debugging.level.none" id="sbi.gnu.cpp.compiler.option.debugging.level.core.37764030" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" valueType="enumerated"/>
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.compiler.option.misc.pic.core.1499285505" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.260836896" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-3.0-emulator.core_llvm40.i386.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.319873996" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES3&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cbhm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/chromium-ewk&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/csr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-buffer-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ector-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/emile-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/tzsh&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui-viewmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vulkan&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/yaca&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.687679131" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.968054647" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1261033911" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1133013084" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+                                                       </tool>
+                                                       <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1341139138" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+                                                               <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1455977851" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+                                                               <option defaultValue="gnu.c.debugging.level.default" id="sbi.gnu.c.compiler.option.debugging.level.core.1052810075" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" valueType="enumerated"/>
+                                                               <option defaultValue="false" id="sbi.gnu.c.compiler.option.misc.pic.core.1891260970" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.c.compiler.option.916186759" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-3.0-emulator.core_llvm40.i386.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1343987867" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/EGL&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/GLES3&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/KHR&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cbhm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/chromium-ewk&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/csr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-buffer-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ector-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/emile-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/tzsh&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui-viewmgr&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/vulkan&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/yaca&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.367810683" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.540612600" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.core.627100180" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.530447134" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.611535173" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.494349497" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.linker.option.shared_flag.core.1002334075" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.linker.option.noundefined.core.282850357" name="Report unresolved symbol references (-Wl,--no-undefined)" superClass="sbi.gnu.cpp.linker.option.noundefined.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.1470342027" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --version-script=&quot;${PROJ_PATH}/.exportMap&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.link.option.paths.1677423231" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1543299353" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool command="i586-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.871503607" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1590226076" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.1362173157" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.1681660918" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.297584562" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.cpp.454040138" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.2048923727" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.po.compiler.2141764248" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.635432903" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+                                               </toolChain>
+                                       </folderInfo>
+                                       <sourceEntries>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="shared"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+                                       </sourceEntries>
+                               </configuration>
+                       </storageModule>
+                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+       </storageModule>
+       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+               <project id="NotificationManager.org.tizen.nativecore.target.sbi.gcc45.app.2018545091" name="Tizen Native Application" projectType="org.tizen.nativecore.target.sbi.gcc45.app"/>
+       </storageModule>
+       <storageModule moduleId="scannerConfiguration">
+               <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+               <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.app.release.1148513101">
+                       <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+               </scannerConfigBuildInfo>
+               <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.app.debug.623840356">
+                       <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+               </scannerConfigBuildInfo>
+       </storageModule>
+       <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+       <storageModule moduleId="refreshScope"/>
+</cproject>
diff --git a/Notification_TestSample/.exportMap b/Notification_TestSample/.exportMap
new file mode 100755 (executable)
index 0000000..43e310e
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       global: main;
+       local: *;
+};
diff --git a/Notification_TestSample/.project b/Notification_TestSample/.project
new file mode 100755 (executable)
index 0000000..f4645be
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>Notification_TestSample</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+                       <triggers>full,incremental,</triggers>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.cdt.core.cnature</nature>
+               <nature>org.eclipse.cdt.core.ccnature</nature>
+               <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+               <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>0</id>
+                       <name></name>
+                       <type>26</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-projectRelativePath-matches-false-false-*/.tpk</arguments>
+                       </matcher>
+               </filter>
+               <filter>
+                       <id>0</id>
+                       <name></name>
+                       <type>6</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-project_def.prop</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/Notification_TestSample/.tproject b/Notification_TestSample/.tproject
new file mode 100755 (executable)
index 0000000..468a834
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<tproject xmlns="http://www.tizen.org/tproject">
+    <platforms>
+        <platform>
+            <name>mobile-4.0</name>
+        </platform>
+    </platforms>
+    <package>
+        <blacklist/>
+        <resFallback autoGen="true"/>
+    </package>
+</tproject>
diff --git a/Notification_TestSample/inc/notification/etc-notifications.h b/Notification_TestSample/inc/notification/etc-notifications.h
new file mode 100755 (executable)
index 0000000..9839ea9
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2016 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.
+ */
+
+#if !defined(_ETC_NOTIFICATIONS_H)
+#define _ETC_NOTIFICATIONS_H
+
+#include "notification/notification-common.h"
+
+const notification_data *etc_notification_list_get(int *size);
+void etc_notification_set_callbacks(launch_cb launch_func, badge_cb badge_func);
+
+#endif
diff --git a/Notification_TestSample/inc/notification/notification-common.h b/Notification_TestSample/inc/notification/notification-common.h
new file mode 100755 (executable)
index 0000000..d031d01
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2016 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.
+ */
+
+#if !defined(_NOTIFICATION_COMMON_H)
+#define _NOTIFICATION_COMMON_H
+
+#include <notification.h>
+#include <linux/limits.h>
+#include <stdlib.h>
+
+#define TEXT_SHORT_LEN 256
+#define TEXT_MAX_LEN 1024
+
+typedef struct _notification_data notification_data;
+typedef void (*notification_cb)(notification_data *);
+typedef bool (*badge_cb)(unsigned int *count, bool step);
+typedef void (*launch_cb)(notification_h notification, const char *argument, const char *pkgname,
+                                                       const char *uri_text, const char *mime_text, const char *operation,
+                                                       const char **array_result, const char **array_key);
+
+struct _notification_data {
+       char name[TEXT_SHORT_LEN];
+       notification_h notification;
+       int press_count;
+       double progress_value;
+       notification_cb callback;
+       char result_text[TEXT_MAX_LEN];
+};
+
+/**
+ * @brief Get shared resources folder absolute path
+ * @return Absolute path to shared resources folder
+ */
+static inline const char *get_shared_res_path(void)
+{
+       static char shared_res_folder_path[PATH_MAX] = { '\0' };
+       if (shared_res_folder_path[0] == '\0') {
+               char *resource_path_buf = app_get_shared_resource_path();
+               strncpy(shared_res_folder_path, resource_path_buf, PATH_MAX-1);
+               free(resource_path_buf);
+       }
+       return shared_res_folder_path;
+}
+
+#endif
diff --git a/Notification_TestSample/inc/notification/notification-defines.h b/Notification_TestSample/inc/notification/notification-defines.h
new file mode 100755 (executable)
index 0000000..edd35e9
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2016 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.
+ */
+
+#if !defined(_NOTIFICATION_DEFINES_H)
+#define _NOTIFICATION_DEFINES_H
+
+#define SERVICE_DATA_TEXT APP_CONTROL_DATA_TEXT
+#define SERVICE_DATA_TO APP_CONTROL_DATA_TO
+#define MAIN_MENU_PATH "images/mainmenu.png"
+#define THUMBNAIL_PATH "images/thumbnail1.jpg"
+#define ICON1_PATH "images/icon1.png"
+#define ICON2_PATH "images/icon2.png"
+#define ICON3_PATH "images/messages_btn_send.png"
+#define SOUND_PATH "sounds/sound.mp3"
+#define SETTING_PKGNAME "org.tizen.setting"
+#define MESSAGE_PKGNAME "org.tizen.message"
+#define GALLERY_PKGNAME "org.tizen.gallery"
+
+#define MESSAGE_POST "message_post"
+#define RECEIVED_DATA "Received_data"
+
+static const char *result_1_text = "Hello there.";
+static const char *result_2_text = "WhoIsIt";
+
+/* Result message text constants */
+static const char *result_message = "ResultMessage =";
+static const char *result_message_success_text = "SUCCESS";
+static const char *result_message_failure_text = "FAILURE";
+static const char *notify_message_text = "The notify message is";
+static const char *launch_argument_text = "launchArgument is";
+static const char *badge_is_text = "Badge is";
+static const char *app_message_text = "AppMessage";
+static const char *ongoing_activity_progress_text = "Ongoing Activity Progress is";
+static const char *ongoing_by_app_control_text = "OngoingByAppControl";
+static const char *title_text = "Title";
+static const char *percentage_content_text = "Progress(%). Press count #";
+static const char *byte_content_text = "Progress(Byte). Press count #";
+static const char *text_content_text = "Text. Press count #";
+static const char *remove_ongoing_notification_text = "All Notifications have been removed.";
+static const char *remove_ongoing_notification_by_app_control_text = "OngoingNotificationByAppControl has been removed.";
+static const char *remove_ongoing_notification_by_app_id_text = "OngoingNotificationByAppId has been removed.";
+static const double percentage_max = 1.0;
+static const double percentage_increment = 0.1;
+static const double percentage_multiplier = 100;
+static const double byte_max = 7000000;
+static const double byte_increment = 78461;
+static const int invalid_argument = -1;
+static const char *alert_text = "Alert Text";
+static const char *long_length_text = "Actually on my way to pick my shoes up. See you.";
+static const char *notification_app = "NotificationApp";
+static const char *number_alert_text = "17 AlertText";
+static const char *first_line = "First line";
+static const char *other_columns = "Other columns";
+static const char *second_length = "Second long length sting";
+static const char *line_text = "line";
+static const char *app_control_to_me = "AppControl to me";
+static const char *notify_with_request = "New Notification arrived with NotificationRequest by AppId.";
+static const char *operation_id_is_text = "operationId is";
+static const char *uri_is_text = "uri is";
+static const char *target_app_id_text = "The target AppId is";
+static const char *app_id_is_text = "AppId is";
+static const char *icon_path_is_text = "Icon path is";
+static const char *remove_text = "Individual notification has been removed.";
+static const char *operation_id_text = "http://tizen.org/appcontrol/operation/notification_temporary";
+static const char *extra_data_tizen_org = "http://tizen.org/appcontrol/data/notification";
+static const char *uri_text = "mailto:test@tizen.org";
+static const char *sms_uri_text = "sms:1234567890";
+static const char *mime_text = "audio/mp4";
+static const char *app_control_request = "AppControlRequestReceived";
+static const char *req_id = "reqId:";
+static const char *operation_id = "operationId:";
+static const char *uri_data_text = "pUriData:";
+static const char *mime_type = "pMimeType:";
+static const char *extra_data = "ExtraData:";
+static const char *key_value = "(Key/Value):";
+static const char *Call = "call";
+static const char *Reply = "Reply";
+static const char *View = "View";
+static const char *Send = "Send";
+static const char *Setting = "Setting";
+static const char *Message = "Message";
+static const char *Gallery = "Gallery";
+
+
+#endif
diff --git a/Notification_TestSample/inc/notification/notifications.h b/Notification_TestSample/inc/notification/notifications.h
new file mode 100755 (executable)
index 0000000..ef62d1d
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2016 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.
+ */
+
+#if !defined(_NOTIFICATIONS_H)
+#define _NOTIFICATIONS_H
+
+#include "notification/notification-common.h"
+
+void notification_set_callbacks(launch_cb launch_func, badge_cb badge_func);
+notification_data *notification_list_get(int *size);
+void delete_all_notifications();
+
+#endif
diff --git a/Notification_TestSample/inc/notification/ongoing-notifications.h b/Notification_TestSample/inc/notification/ongoing-notifications.h
new file mode 100755 (executable)
index 0000000..40a7360
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2016 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.
+ */
+
+#if !defined(_ONGOING_NOTIFICATIONS_H)
+#define _ONGOING_NOTIFICATIONS_H
+
+#include "notification/notification-common.h"
+
+void ongoing_notification_set_callbacks(launch_cb launch_func, badge_cb badge_func);
+const notification_data *ongoing_notification_list_get(int *size);
+void delete_all_ongoing_notifications(void);
+
+#endif
diff --git a/Notification_TestSample/inc/notification_testsample.h b/Notification_TestSample/inc/notification_testsample.h
new file mode 100755 (executable)
index 0000000..fb2afd7
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+#if !defined(_NOTIFICATIONMANAGER_H_)
+#define _NOTIFICATIONMANAGER_H_
+
+#include <app.h>
+#include <dlog.h>
+
+#if !defined(PACKAGE)
+#define PACKAGE "org.example.notification_testsample"
+#endif
+
+#ifdef  LOG_TAG
+#undef  LOG_TAG
+#endif
+#define LOG_TAG "notification_testsample"
+
+#endif
diff --git a/Notification_TestSample/inc/view.h b/Notification_TestSample/inc/view.h
new file mode 100755 (executable)
index 0000000..77ffb83
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+#if !defined(_VIEW_H)
+#define _VIEW_H
+
+Eina_Bool view_create(void *user_data);
+Evas_Object *view_create_win(const char *pkg_name);
+Evas_Object *view_create_conformant(Evas_Object *win);
+Evas_Object *view_create_layout(Evas_Object *parent, const char *edj_file_name, const char *edj_group);
+Evas_Object *view_create_background(Evas_Object *parent, const char *part_name);
+Evas_Object *view_create_naviframe(Evas_Object *parent, const char *part_name);
+Evas_Object *view_create_toolbar(Evas_Object *parent);
+Evas_Object *view_create_list(Evas_Object *parent);
+bool view_display_notification(notification_data *notify_data);
+void view_rise_window(void);
+void view_destroy(void);
+
+#endif
diff --git a/Notification_TestSample/inc/view_defines.h b/Notification_TestSample/inc/view_defines.h
new file mode 100755 (executable)
index 0000000..917ef33
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+#if !defined(_VIEW_DEFINES_H)
+#define _VIEW_DEFINES_H
+
+#define EDJ_NOTI "edje/noti.edj"
+#define GRP_NOTI "noti"
+#define PART_NOTI_TITLE "noti_title"
+#define PART_NOTI_TEXT_CONTENT "noti_content"
+
+#endif
diff --git a/Notification_TestSample/res/edje/noti.edc b/Notification_TestSample/res/edje/noti.edc
new file mode 100755 (executable)
index 0000000..eea6465
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 "../../inc/view_defines.h"
+
+styles {
+   style {
+      name: "text_content";
+               base: "font=Tizen font_size=25 color=#ffffff wrap=mixed ellipsis=0";
+   }
+}
+
+collections {
+   group {
+      name: GRP_NOTI;
+      parts {
+         part {
+            name: PART_NOTI_TITLE;
+            type: TEXT;
+            description {
+               state: "default" 0.0;
+               rel1 { relative: 0.05 0.1; }
+               rel2 { relative: 0.95 0.5; }
+               text {
+                  text: "";
+                  size: 30;
+                  align: 0.5 1.0;
+                  ellipsis: 1;
+               }
+            }
+         }
+
+         part {
+            name: PART_NOTI_TEXT_CONTENT;
+            type: TEXTBLOCK;
+            description {
+               state: "default" 0.0;
+               rel1 { relative: 0.05 0.5; }
+               rel2 { relative: 0.95 1.0; }
+               text {
+                  style: "text_content";
+                  align: 0.0 1.0;
+               }
+            }
+         }
+      }
+   }
+}
diff --git a/Notification_TestSample/res/edje/noti.edj b/Notification_TestSample/res/edje/noti.edj
new file mode 100755 (executable)
index 0000000..3617633
Binary files /dev/null and b/Notification_TestSample/res/edje/noti.edj differ
diff --git a/Notification_TestSample/shared/res/images/icon1.png b/Notification_TestSample/shared/res/images/icon1.png
new file mode 100755 (executable)
index 0000000..09b6c5a
Binary files /dev/null and b/Notification_TestSample/shared/res/images/icon1.png differ
diff --git a/Notification_TestSample/shared/res/images/icon2.png b/Notification_TestSample/shared/res/images/icon2.png
new file mode 100755 (executable)
index 0000000..fb37e30
Binary files /dev/null and b/Notification_TestSample/shared/res/images/icon2.png differ
diff --git a/Notification_TestSample/shared/res/images/mainmenu.png b/Notification_TestSample/shared/res/images/mainmenu.png
new file mode 100755 (executable)
index 0000000..647c3f9
Binary files /dev/null and b/Notification_TestSample/shared/res/images/mainmenu.png differ
diff --git a/Notification_TestSample/shared/res/images/messages_btn_send.png b/Notification_TestSample/shared/res/images/messages_btn_send.png
new file mode 100755 (executable)
index 0000000..7d70cc0
Binary files /dev/null and b/Notification_TestSample/shared/res/images/messages_btn_send.png differ
diff --git a/Notification_TestSample/shared/res/images/noti_calendar.png b/Notification_TestSample/shared/res/images/noti_calendar.png
new file mode 100755 (executable)
index 0000000..4a0ab30
Binary files /dev/null and b/Notification_TestSample/shared/res/images/noti_calendar.png differ
diff --git a/Notification_TestSample/shared/res/images/thumbnail1.jpg b/Notification_TestSample/shared/res/images/thumbnail1.jpg
new file mode 100755 (executable)
index 0000000..66e4aa1
Binary files /dev/null and b/Notification_TestSample/shared/res/images/thumbnail1.jpg differ
diff --git a/Notification_TestSample/shared/res/notification-testsample.png b/Notification_TestSample/shared/res/notification-testsample.png
new file mode 100755 (executable)
index 0000000..647c3f9
Binary files /dev/null and b/Notification_TestSample/shared/res/notification-testsample.png differ
diff --git a/Notification_TestSample/shared/res/sounds/sound.mp3 b/Notification_TestSample/shared/res/sounds/sound.mp3
new file mode 100755 (executable)
index 0000000..79ba4a4
Binary files /dev/null and b/Notification_TestSample/shared/res/sounds/sound.mp3 differ
diff --git a/Notification_TestSample/src/main.c b/Notification_TestSample/src/main.c
new file mode 100755 (executable)
index 0000000..ecb0d7b
--- /dev/null
@@ -0,0 +1,320 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <system_settings.h>
+#include <badge.h>
+
+#include "notification_testsample.h"
+#include "notification/notifications.h"
+#include "notification/ongoing-notifications.h"
+#include "notification/notification-defines.h"
+#include "notification/notification-common.h"
+#include "notification/etc-notifications.h"
+#include "view.h"
+
+static struct app_info {
+       int service_request_count;
+} s_info = {
+       .service_request_count = 0,
+};
+
+static bool badge_update_cb(unsigned int *count, bool step);
+static void notification_launch_cb(notification_h notification, const char *argument, const char *pkgname,
+                                                                       const char *uri_text, const char *mime_text, const char *operation,
+                                                                       const char **array_result, const char **array_key);
+static bool _create_notification_data(notification_data **notify_data);
+static void _free_strings_array(char **strings, int length);
+static bool _report_app_control_error(int err_code, const char *err_message);
+
+/**
+ * @brief Hook to take necessary actions before main event loop starts.
+ * Initialize UI resources and application's data.
+ * If this function returns true, the main loop of application starts.
+ * If this function returns false, the application is terminated.
+ */
+static bool app_create(void *user_data)
+{
+       int ret = badge_add(PACKAGE);
+       if (ret != BADGE_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "badge_new() failed. Err = %d", ret);
+
+       notification_set_callbacks(notification_launch_cb, badge_update_cb);
+       ongoing_notification_set_callbacks(notification_launch_cb, badge_update_cb);
+       etc_notification_set_callbacks(notification_launch_cb, badge_update_cb);
+
+       return (bool)view_create(NULL);
+}
+
+/**
+ * @brief This callback function is called when another application
+ * sends a launch request to the application.
+ */
+static void app_control(app_control_h app_control, void *user_data)
+{
+       char *extra_data = NULL;
+       char *uri = NULL;
+       char *operation = NULL;
+       char *mime = NULL;
+       char **result_service_data = NULL;
+       char **result_service_data_to = NULL;
+       int length = 0;
+       char extra_data_to[TEXT_SHORT_LEN] = { '\0'};
+       char extra_data_text[TEXT_SHORT_LEN] = {'\0'};
+       notification_data *notify_data = NULL;
+       int ret;
+
+       ret = app_control_get_extra_data(app_control, MESSAGE_POST, &extra_data);
+       if (_report_app_control_error(ret, "app_control_get_extra_data() failed")) {
+               if (!_create_notification_data(&notify_data)) {
+                       view_rise_window();
+                       return;
+               }
+
+               _report_app_control_error(app_control_get_uri(app_control, &uri), "app_control_get_uri() failed");
+               _report_app_control_error(app_control_get_operation(app_control, &operation), "app_control_get_operation() failed");
+               _report_app_control_error(app_control_get_mime(app_control, &mime), "app_control_get_mime() failed");
+
+               ret = app_control_get_extra_data_array(app_control, SERVICE_DATA_TEXT, &result_service_data, &length);
+               if (_report_app_control_error(ret, "app_control_get_extra_data_array() failed")) {
+                       snprintf(extra_data_text, TEXT_SHORT_LEN, "# 1%s (%s | %s)<br>", key_value, SERVICE_DATA_TEXT, result_service_data[0]);
+                       _free_strings_array(result_service_data, length);
+               }
+
+               ret = app_control_get_extra_data_array(app_control, SERVICE_DATA_TO, &result_service_data_to, &length);
+               if (_report_app_control_error(ret, "app_control_get_extra_data_array() failed")) {
+                       snprintf(extra_data_to, TEXT_SHORT_LEN, "# 2%s (%s | %s)", key_value, SERVICE_DATA_TEXT, result_service_data_to[0]);
+                       _free_strings_array(result_service_data_to, length);
+               }
+
+               snprintf(notify_data->name, TEXT_SHORT_LEN, "%s", app_control_request);
+               snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s %i<br>%s %s<br>%s %s<br>%s %s<br><br>%s<br># 0%s (%s | %s)<br>%s%s",
+                               req_id, ++s_info.service_request_count, operation_id, operation, uri_data_text, uri,
+                               mime_type, mime, extra_data, key_value, extra_data_tizen_org, extra_data, extra_data_text, extra_data_to);
+
+               free(operation);
+               free(uri);
+               free(mime);
+               free(extra_data);
+
+               view_display_notification(notify_data);
+               free(notify_data);
+       }
+
+       view_rise_window();
+}
+
+/**
+ * @brief This callback function is called each time
+ * the application is completely obscured by another application
+ * and becomes invisible to the user.
+ */
+static void app_pause(void *user_data)
+{
+       /* Take necessary actions when application becomes invisible. */
+}
+
+/**
+ * @brief This callback function is called each time
+ * the application becomes visible to the user.
+ */
+static void app_resume(void *user_data)
+{
+       /* Take necessary actions when application becomes visible. */
+}
+
+/**
+ * @brief This callback function is called once after the main loop of the application exits.
+ */
+static void app_terminate(void *user_data)
+{
+       view_destroy();
+}
+
+/**
+ * @brief This function will be called when the language is changed.
+ */
+static void ui_app_lang_changed(app_event_info_h event_info, void *user_data)
+{
+       /* APP_EVENT_LANGUAGE_CHANGED */
+       char *locale = NULL;
+
+       system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
+
+       if (locale != NULL) {
+               elm_language_set(locale);
+               free(locale);
+       }
+
+       return;
+}
+
+/**
+ * @brief Main function of the application.
+ */
+int main(int argc, char *argv[])
+{
+       int ret;
+
+       ui_app_lifecycle_callback_s event_callback = {0, };
+       app_event_handler_h handlers[5] = {NULL, };
+
+       event_callback.create = app_create;
+       event_callback.terminate = app_terminate;
+       event_callback.pause = app_pause;
+       event_callback.resume = app_resume;
+       event_callback.app_control = app_control;
+
+       /*
+        * If you want to handle more events,
+        * please check the application lifecycle guide.
+        */
+       ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, NULL);
+
+       ret = ui_app_main(argc, argv, &event_callback, NULL);
+       if (ret != APP_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "ui_app_main() failed. err = %d", ret);
+
+       return ret;
+}
+
+/**
+ * @brief Internal function which modifies the badge counter value.
+ * @param[out] count The badge counter value.
+ * @return This function returns 'true' if the badge counter was successfully updated,
+ * otherwise 'false' is returned.
+ */
+static bool badge_update_cb(unsigned int *count, bool step)
+{
+       int ret = badge_get_count(PACKAGE, count);
+       if (ret != BADGE_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "badge_get_count() failed. Err = %d", ret);
+               return false;
+       }
+
+       if (step) {
+               (*count)++;
+       } else if (*count > 0) {
+               (*count)--;
+       } else {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Cannot decrease the badge counter.");
+               return false;
+       }
+
+       ret = badge_set_count(PACKAGE, *count);
+       if (ret != BADGE_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "badge_set_count() failed. Err = %d", ret);
+               return false;
+       }
+
+       return true;
+}
+
+/**
+ * @brief Internal function which sets the launch arguments for the application
+ * which is to be launched after notification is selected from the Notification Tray.
+ * @param[in] notification Notification handle.
+ * @param[in] argument Extra data.
+ * @param[in] pkgname Name of the package containing the application to be launched.
+ * @param[in] uri_text Uri text.
+ * @param[in] mime_text Mime information.
+ * @param[in] operation Operation to be performed.
+ * @param[in] array_result Array of extra data.
+ * @param[in] array_key The array of keys for extra data array items identification.
+ */
+static void notification_launch_cb(notification_h notification, const char *argument, const char *pkgname,
+                                                                       const char *uri_text, const char *mime_text, const char *operation,
+                                                                       const char **array_result, const char **array_key)
+{
+       int i = 0;
+       app_control_h service = NULL;
+       int ret = app_control_create(&service);
+       if (ret != APP_CONTROL_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "app_control_create() failed. Err = %d", ret);
+               return;
+       }
+
+       if (uri_text)
+               app_control_set_uri(service, uri_text);
+
+       if (mime_text)
+               app_control_set_mime(service, mime_text);
+
+       if (pkgname)
+               app_control_set_app_id(service, pkgname);
+
+       if (argument)
+               app_control_add_extra_data(service, MESSAGE_POST, argument);
+
+       if (operation)
+               app_control_set_operation(service, operation);
+
+       if (array_result && array_key)
+               for (i = 0; array_key[i] && array_result[i]; i++)
+                       app_control_add_extra_data_array(service, array_key[i], &array_result[i], 1);
+
+       notification_set_launch_option(notification, NOTIFICATION_LAUNCH_OPTION_APP_CONTROL, service);
+       app_control_destroy(service);
+}
+
+/**
+ * @brief Internal function which allocates the memory for notification data structure.
+ * @param[out] notify_data The newly allocated notification data structure.
+ * @return This function returns 'true' if the notification data structure was
+ * successfully allocated, otherwise 'false' is returned.
+ */
+static bool _create_notification_data(notification_data **notify_data)
+{
+       *notify_data = (notification_data *)malloc(sizeof(notification_data));
+       if (!*notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Memory allocation failed.");
+               return false;
+       }
+
+       return true;
+}
+
+/**
+ * @brief Internal function which frees all the strings stored in an array.
+ * @param[in] strings The array of strings to be freed.
+ * @param[in] length The length of the array.
+ */
+static void _free_strings_array(char **strings, int length)
+{
+       int i;
+
+       for (i = 0; i < length; i++)
+                       free(strings[i]);
+
+       free(strings);
+}
+
+/**
+ * @brief Internal function which supports checking and reporting errors
+ * spawned by app-control API functions.
+ * @param[in] err_code The error code spawned by app-control API function.
+ * @param[in] err_message The message to be logged in case err_code differs from
+ * APP_CONTROL_ERROR_NONE.
+ * @return This function returns 'true' if err_code is equal to APP_CONTROL_ERROR_NONE,
+ * otherwise 'false' is returned.
+ */
+static bool _report_app_control_error(int err_code, const char *err_message)
+{
+       if (err_code != APP_CONTROL_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "%s. Err = %d", err_message, err_code);
+
+       return (err_code == APP_CONTROL_ERROR_NONE);
+}
diff --git a/Notification_TestSample/src/notification/etc-notifications.c b/Notification_TestSample/src/notification/etc-notifications.c
new file mode 100755 (executable)
index 0000000..d75b402
--- /dev/null
@@ -0,0 +1,552 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+/* common header */
+#include <stdio.h>
+
+#include "notification_testsample.h"
+#include "notification/notifications.h"
+#include "notification/etc-notifications.h"
+#include "notification/notification-defines.h"
+
+#define NOFIFICATIONS_COUNT 7
+
+enum notification_item {
+       NOTIFICATION_ENTRY_TYPE = 0,
+       NOTIFICATION_BUTTON_TYPE,
+       NOTIFICATION_BUTTON_ENTRY_TYPE,
+       NOTIFICATION_FOR_LOCKSCREEN,
+       NOTIFICATION_FOR_INDICATOR,
+       NOTIFICATION_FOR_TICKER,
+       NOTIFICATION_FOR_APPLIST_ALL,
+       };
+
+
+static notification_h _create_notification(const char *icon_path, const char *title_text, const char *content_text, const char *sound_path);
+static bool _delete_notification(enum notification_item type);
+static bool _delete_notification_items(void);
+
+static void _notify_entry_type_noti_cb(notification_data *notify_data);
+static void _notify_button_type_noti_cb(notification_data *notify_data);
+static void _notify_button_entry_type_cb(notification_data *notify_data);
+static void _notify_for_lockscreen_cb(notification_data *notify_data);
+static void _notify_for_indicator_cb(notification_data *notify_data);
+static void _notify_for_ticker_cb(notification_data *notify_data);
+static void _notify_for_all_applist_cb(notification_data *notify_data);
+
+
+
+static struct noti_info {
+       launch_cb launch_func_cb;
+       badge_cb badge_func_cb;
+       notification_data noti[NOFIFICATIONS_COUNT];
+} s_info = {
+       .launch_func_cb = NULL,
+       .badge_func_cb = NULL,
+       .noti = {{ "Entry type Active notification", NULL, 0, 0, _notify_entry_type_noti_cb, },
+                               { "Button type Active notification", NULL, 0, 0, _notify_button_type_noti_cb, },
+                               { "Button-Entry type Active notification", NULL, 0, 0, _notify_button_entry_type_cb, },
+                               { "Notification for Lockscreen", NULL, 0, 0, _notify_for_lockscreen_cb , },
+                               { "Notification for Indicator", NULL, 0, 0, _notify_for_indicator_cb , },
+                               { "Notification for Ticker", NULL, 0, 0, _notify_for_ticker_cb , },
+                               { "Notification for All (except active notification)", NULL, 0, 0, _notify_for_all_applist_cb , },
+                       }
+};
+
+
+void etc_notification_set_callbacks(launch_cb launch_func, badge_cb badge_func)
+{
+       s_info.launch_func_cb = launch_func;
+       s_info.badge_func_cb = badge_func;
+}
+
+
+const notification_data *etc_notification_list_get(int *size)
+{
+       *size = NOFIFICATIONS_COUNT;
+       return s_info.noti;
+}
+
+
+static char *_get_image_path(char* icon_path)
+{
+       int size_of_buffer = 0;
+       char *full_icon_path = NULL;
+
+       if (icon_path) {
+               size_of_buffer = strlen(icon_path) + strlen(get_shared_res_path()) + 1;
+               full_icon_path = calloc(sizeof(char), size_of_buffer);
+
+               if (full_icon_path)
+                       snprintf(full_icon_path, size_of_buffer, "%s%s", get_shared_res_path(), icon_path);
+       }
+
+       return full_icon_path;
+}
+
+
+app_control_h _create_app_control_by_contents(const char *pkgname, const char *operation, const char *uri_text)
+{
+       app_control_h service = NULL;
+       int app_control_err = APP_CONTROL_ERROR_NONE;
+
+       app_control_err = app_control_create(&service);
+       if (app_control_err != APP_CONTROL_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "app_control_create() failed. Err = %d", app_control_err);
+               return NULL;
+       }
+
+       if (pkgname)
+               app_control_set_app_id(service, pkgname);
+
+       if (operation)
+               app_control_set_operation(service, operation);
+
+       if (uri_text)
+               app_control_set_uri(service, uri_text);
+
+       return service;
+}
+
+
+static void _notify_entry_type_noti_cb(notification_data *notify_data)
+{
+       app_control_h app_control_for_body = NULL, app_control_for_text_input_button = NULL;
+       int noti_err = NOTIFICATION_ERROR_NONE;
+       int app_control_err = APP_CONTROL_ERROR_NONE;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notify_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       _delete_notification_items();
+
+       notify_data->notification = _create_notification(ICON1_PATH, title_text, long_length_text, NULL);
+       if (notify_data->notification == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_create_notification() failed.");
+               return;
+       }
+
+       notification_set_display_applist(notify_data->notification, NOTIFICATION_DISPLAY_APP_ACTIVE);
+
+       notification_set_text_input(notify_data->notification, 160);
+
+       /* make app_control for the body contents */
+       app_control_for_body = _create_app_control_by_contents(MESSAGE_PKGNAME, APP_CONTROL_OPERATION_COMPOSE, sms_uri_text);
+
+       notification_set_launch_option(notify_data->notification, NOTIFICATION_LAUNCH_OPTION_APP_CONTROL, app_control_for_body);
+
+       /* make app_control for the send button */
+       app_control_err = app_control_create(&app_control_for_text_input_button);
+       if (app_control_err != APP_CONTROL_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "app_control_create failed[%d]\n", app_control_err);
+               goto FINISH_OFF;
+       }
+
+       noti_err = notification_set_event_handler(notify_data->notification, NOTIFICATION_EVENT_TYPE_CLICK_ON_TEXT_INPUT_BUTTON, app_control_for_text_input_button);
+       if (noti_err != NOTIFICATION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_set_event_handler failed[%d]", noti_err);
+
+       notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_TEXT_INPUT_BUTTON, Send, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+       notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_TEXT_INPUT_PLACEHOLDER, "Text Messages", NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+
+
+       noti_err = notification_post(notify_data->notification);
+       if (noti_err != NOTIFICATION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_post failed[%d]", noti_err);
+
+
+FINISH_OFF:
+
+       if (app_control_for_body)
+               app_control_destroy(app_control_for_body);
+
+       if (app_control_for_text_input_button)
+               app_control_destroy(app_control_for_text_input_button);
+
+}
+
+
+static void _notify_button_type_noti_cb(notification_data *notify_data)
+{
+       int noti_err = NOTIFICATION_ERROR_NONE;
+
+       app_control_h app_control_for_button1 = NULL, app_control_for_button2 = NULL, app_control_for_button3 = NULL;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notify_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       _delete_notification_items();
+
+       /* create notification for active noti */
+       notify_data->notification = _create_notification(ICON2_PATH, title_text, long_length_text, NULL);
+       if (notify_data->notification == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_create_notification() failed.");
+               return;
+       }
+
+       notification_set_display_applist(notify_data->notification, NOTIFICATION_DISPLAY_APP_ACTIVE);
+
+
+       /* make app_control handle for button1 */
+       app_control_for_button1 = _create_app_control_by_contents(SETTING_PKGNAME, NULL, NULL);
+
+       noti_err = notification_set_event_handler(notify_data->notification, NOTIFICATION_EVENT_TYPE_CLICK_ON_BUTTON_1, app_control_for_button1);
+       if (noti_err != NOTIFICATION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_set_event_handler failed[%d]", noti_err);
+               goto FINISH_OFF;
+       }
+
+       notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_BUTTON_1, Setting, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+
+
+       /* make app_control handle for button2 */
+       app_control_for_button2 = _create_app_control_by_contents(MESSAGE_PKGNAME, NULL, NULL);
+
+       noti_err = notification_set_event_handler(notify_data->notification, NOTIFICATION_EVENT_TYPE_CLICK_ON_BUTTON_2, app_control_for_button2);
+       if (noti_err != NOTIFICATION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_set_event_handler failed[%d]", noti_err);
+               goto FINISH_OFF;
+       }
+
+       notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_BUTTON_2, Message, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+
+
+       /* make app_control handle for button3 */
+       app_control_for_button3 = _create_app_control_by_contents(GALLERY_PKGNAME, NULL, NULL);
+
+       noti_err = notification_set_event_handler(notify_data->notification, NOTIFICATION_EVENT_TYPE_CLICK_ON_BUTTON_3, app_control_for_button3);
+       if (noti_err != NOTIFICATION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_set_event_handler failed[%d]", noti_err);
+               goto FINISH_OFF;
+       }
+
+       notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_BUTTON_3, Gallery, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+
+       /* post notification */
+       noti_err = notification_post(notify_data->notification);
+       if (noti_err != NOTIFICATION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_post failed[%d]", noti_err);
+
+
+FINISH_OFF:
+       if (app_control_for_button1)
+               app_control_destroy(app_control_for_button1);
+
+       if (app_control_for_button2)
+               app_control_destroy(app_control_for_button2);
+
+       if (app_control_for_button3)
+               app_control_destroy(app_control_for_button3);
+
+}
+
+
+static void _notify_button_entry_type_cb(notification_data *notify_data)
+{
+       app_control_h app_control_for_body = NULL, app_control_for_message = NULL, app_control_for_reply_button = NULL, app_control_for_setting_button = NULL;
+
+       int noti_err = NOTIFICATION_ERROR_NONE;
+       int size_of_buffer = 0;
+       char *full_icon_path = NULL;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notify_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       _delete_notification_items();
+
+       /* create notification for active noti */
+       notify_data->notification = _create_notification(ICON1_PATH, title_text, alert_text, NULL);
+       if (notify_data->notification == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_create_notification() failed.");
+               return;
+       }
+
+       notification_set_display_applist(notify_data->notification, NOTIFICATION_DISPLAY_APP_ACTIVE);
+
+
+       /* make app_control handle for the body contents */
+       app_control_for_body = _create_app_control_by_contents(MESSAGE_PKGNAME, APP_CONTROL_OPERATION_COMPOSE, sms_uri_text);
+
+       noti_err = notification_set_launch_option(notify_data->notification, NOTIFICATION_LAUNCH_OPTION_APP_CONTROL, app_control_for_body);
+       if (noti_err != NOTIFICATION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_set_launch_option failed[%d]", noti_err);
+               goto FINISH_OFF;
+       }
+
+
+       /* make app_control handle for button1 */
+       app_control_for_message = _create_app_control_by_contents(MESSAGE_PKGNAME, NULL, NULL);
+
+       noti_err = notification_set_event_handler(notify_data->notification, NOTIFICATION_EVENT_TYPE_CLICK_ON_BUTTON_1, app_control_for_message);
+       if (noti_err != NOTIFICATION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_set_event_handler failed[%d]", noti_err);
+               goto FINISH_OFF;
+       }
+
+       notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_BUTTON_1, Message, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+
+
+       /* make app_control handle for button2 */
+       app_control_for_reply_button = _create_app_control_by_contents(NULL, NULL, NULL);
+
+       noti_err = notification_set_event_handler(notify_data->notification, NOTIFICATION_EVENT_TYPE_CLICK_ON_BUTTON_2, app_control_for_reply_button);
+       if (noti_err != NOTIFICATION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_set_event_handler failed[%d]", noti_err);
+               goto FINISH_OFF;
+       }
+
+       notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_BUTTON_2, Reply, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+
+
+       /* make_app_control handle for button3 */
+       app_control_for_setting_button = _create_app_control_by_contents(SETTING_PKGNAME, NULL, NULL);
+
+       noti_err = notification_set_event_handler(notify_data->notification, NOTIFICATION_EVENT_TYPE_CLICK_ON_BUTTON_3, app_control_for_setting_button);
+       if (noti_err != NOTIFICATION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_set_event_handler failed[%d]", noti_err);
+               goto FINISH_OFF;
+       }
+
+       notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_BUTTON_3, Setting, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+
+
+       /* set text input layout */
+       notification_set_text_input(notify_data->notification, 100);
+
+       noti_err = notification_set_event_handler(notify_data->notification, NOTIFICATION_EVENT_TYPE_CLICK_ON_TEXT_INPUT_BUTTON, app_control_for_reply_button);
+       if (noti_err != NOTIFICATION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_set_event_handler failed[%d]", noti_err);
+
+       notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_TEXT_INPUT_BUTTON, Send, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+       notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_TEXT_INPUT_PLACEHOLDER, "Text Messages", NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+
+       size_of_buffer = strlen(ICON3_PATH) + strlen(get_shared_res_path()) + 1;
+       full_icon_path = calloc(sizeof(char), size_of_buffer);
+       if (full_icon_path) {
+               snprintf(full_icon_path, size_of_buffer, "%s%s", get_shared_res_path(), ICON3_PATH);
+               notification_set_image(notify_data->notification, NOTIFICATION_IMAGE_TYPE_TEXT_INPUT_BUTTON, full_icon_path);
+               free(full_icon_path);
+       }
+
+
+       /* post notification */
+       noti_err = notification_post(notify_data->notification);
+       /* create notification for active noti */
+       if (noti_err != NOTIFICATION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_post failed[%d]", noti_err);
+               goto FINISH_OFF;
+       }
+
+
+FINISH_OFF:
+
+       if (app_control_for_body)
+               app_control_destroy(app_control_for_body);
+
+       if (app_control_for_reply_button)
+               app_control_destroy(app_control_for_reply_button);
+
+       if (app_control_for_setting_button)
+               app_control_destroy(app_control_for_setting_button);
+
+}
+
+
+static void _notify_for_lockscreen_cb(notification_data *notify_data)
+{
+
+       int noti_err = NOTIFICATION_ERROR_NONE;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notify_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       /* create notification for active noti */
+       notify_data->notification = _create_notification(THUMBNAIL_PATH, title_text, alert_text, NULL);
+       if (notify_data->notification == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_create_notification() failed.");
+               return;
+       }
+
+       notification_set_display_applist(notify_data->notification, NOTIFICATION_DISPLAY_APP_LOCK);
+
+       /* post notification */
+       noti_err = notification_post(notify_data->notification);
+       if (noti_err != NOTIFICATION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_post failed[%d]", noti_err);
+}
+
+
+static void _notify_for_indicator_cb(notification_data *notify_data)
+{
+
+       int noti_err = NOTIFICATION_ERROR_NONE;
+       char *full_icon_path = NULL;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notify_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       _delete_notification(NOTIFICATION_FOR_INDICATOR);
+
+       /* create notification for active noti */
+       notify_data->notification = _create_notification(NULL, title_text, alert_text, NULL);
+       if (notify_data->notification == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_create_notification() failed.");
+               return;
+       }
+
+       notification_set_display_applist(notify_data->notification, NOTIFICATION_DISPLAY_APP_INDICATOR);
+       full_icon_path = _get_image_path(ICON1_PATH);
+       notification_set_image(notify_data->notification, NOTIFICATION_IMAGE_TYPE_ICON_FOR_INDICATOR, full_icon_path);
+
+       /* post notification */
+       noti_err = notification_post(notify_data->notification);
+       if (noti_err != NOTIFICATION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_post failed[%d]", noti_err);
+       }
+
+       if (full_icon_path)
+               free(full_icon_path);
+
+}
+
+
+static void _notify_for_ticker_cb(notification_data *notify_data)
+{
+       int noti_err = NOTIFICATION_ERROR_NONE;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notify_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       _delete_notification(NOTIFICATION_FOR_TICKER);
+
+       /* create notification for active noti */
+       notify_data->notification = _create_notification(ICON1_PATH, title_text, alert_text, NULL);
+       if (notify_data->notification == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_create_notification() failed.");
+               return;
+       }
+
+       notification_set_display_applist(notify_data->notification, NOTIFICATION_DISPLAY_APP_TICKER);
+
+       /* post notification */
+       noti_err = notification_post(notify_data->notification);
+       if (noti_err != NOTIFICATION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_post failed[%d]", noti_err);
+}
+
+
+static void _notify_for_all_applist_cb(notification_data *notify_data)
+{
+       int noti_err = NOTIFICATION_ERROR_NONE;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notify_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       _delete_notification(NOTIFICATION_FOR_APPLIST_ALL);
+
+       /* create notification for active noti */
+       notify_data->notification = _create_notification(ICON1_PATH, title_text, alert_text, NULL);
+
+       notification_set_display_applist(notify_data->notification, NOTIFICATION_DISPLAY_APP_ALL);
+
+       /* post notification */
+       noti_err = notification_post(notify_data->notification);
+       if (noti_err != NOTIFICATION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_post failed[%d]", noti_err);
+
+}
+
+
+static notification_h _create_notification(const char *icon_path, const char *title_text, const char *content_text, const char *sound_path)
+{
+       int size_of_buffer = 0;
+       char *full_icon_path = NULL;
+       char *full_sound_path = NULL;
+
+       notification_h notify = notification_create(NOTIFICATION_TYPE_NOTI);
+       if (!notify) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_create(NOTIFICATION_TYPE_NOTI) failed.");
+               return NULL;
+       }
+
+       if (icon_path) {
+               size_of_buffer = strlen(icon_path) + strlen(get_shared_res_path()) + 1;
+               full_icon_path = calloc(sizeof(char), size_of_buffer);
+               if (full_icon_path) {
+                       snprintf(full_icon_path, size_of_buffer, "%s%s", get_shared_res_path(), icon_path);
+                       notification_set_image(notify, NOTIFICATION_IMAGE_TYPE_ICON, full_icon_path);
+                       free(full_icon_path);
+               }
+       }
+
+       if (sound_path) {
+               size_of_buffer = strlen(icon_path) + strlen(get_shared_res_path()) + 1;
+               full_sound_path = calloc(sizeof(char), size_of_buffer);
+               if (full_sound_path) {
+                       snprintf(full_sound_path, size_of_buffer, "%s%s", get_shared_res_path(), sound_path);
+                       notification_set_sound(notify, NOTIFICATION_SOUND_TYPE_USER_DATA, full_sound_path);
+                       free(full_sound_path);
+               }
+       }
+
+       notification_set_text(notify, NOTIFICATION_TEXT_TYPE_TITLE, title_text, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+       notification_set_text(notify, NOTIFICATION_TEXT_TYPE_CONTENT, content_text, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+
+       return notify;
+}
+
+
+static bool _delete_notification(enum notification_item type)
+{
+       int err = NOTIFICATION_ERROR_NONE;
+       notification_data *data = NULL;
+
+       if ((int)type < NOFIFICATIONS_COUNT)
+               data = &s_info.noti[type];
+
+       if (data && data->notification) {
+               err = notification_delete(data->notification);
+               data->notification = NULL;
+       }
+
+       return (err == NOTIFICATION_ERROR_NONE);
+}
+
+
+static bool _delete_notification_items(void)
+{
+       bool is_success;
+
+       is_success = _delete_notification(NOTIFICATION_ENTRY_TYPE);
+       is_success = _delete_notification(NOTIFICATION_BUTTON_TYPE) && is_success;
+       is_success = _delete_notification(NOTIFICATION_BUTTON_ENTRY_TYPE) && is_success;
+
+       return is_success;
+}
diff --git a/Notification_TestSample/src/notification/notifications.c b/Notification_TestSample/src/notification/notifications.c
new file mode 100755 (executable)
index 0000000..90fe53f
--- /dev/null
@@ -0,0 +1,397 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <notification.h>
+#include <stdio.h>
+#include "notification_testsample.h"
+#include "notification/notifications.h"
+#include "notification/notification-defines.h"
+
+#define NOFIFICATIONS_COUNT 8
+
+enum notification_item {NOTIFICATION = 0, NOTIFICATION_NORMAL = 1, NOTIFICATION_BY_APP_CONTROL = 2, NOTIFICATION_BY_APP_ID = 4};
+
+static void _notify_cb(notification_data *notify_data);
+static void _notify_normal_cb(notification_data *notify_data);
+static void _notify_by_app_control_cb(notification_data *notify_data);
+static void _remove_notification_cb(notification_data *notify_data);
+static void _notify_by_app_id_cb(notification_data *notify_data);
+static void _remove_notification_by_app_id_cb(notification_data *notify_data);
+static void _set_badge_number_by_app_id_cb(notification_data *notify_data);
+static void _remove_badge_number_by_app_id_cb(notification_data *notify_data);
+static notification_h _create_notification(const char *icon_path, const char *title_text, const char *content_text, const char *sound_path);
+static bool _delete_notification(enum notification_item type);
+static bool _delete_notification_items(void);
+static bool _delete_notification_by_app_id(void);
+
+static struct noti_info {
+       launch_cb launch_func_cb;
+       badge_cb badge_func_cb;
+       notification_data noti[NOFIFICATIONS_COUNT];
+} s_info = {
+       .launch_func_cb = NULL,
+       .badge_func_cb = NULL,
+       .noti = {{ "Notify", NULL, 0, 0, _notify_cb, },
+                               { "Notify(normal)", NULL, 0, 0, _notify_normal_cb, },
+                               { "NotifyByAppControl", NULL, 0, 0, _notify_by_app_control_cb, },
+                               { "RemoveNotification", NULL, 0, 0, _remove_notification_cb, },
+                               { "NotifyByAppId", NULL, 0, 0, _notify_by_app_id_cb, },
+                               { "RemoveNotificationByAppId", NULL, 0, 0, _remove_notification_by_app_id_cb, },
+                               { "SetBadgeNumberByAppId", NULL, 0, 0, _set_badge_number_by_app_id_cb, },
+                               { "RemoveBadgeNumberByAppId", NULL, 0, 0, _remove_badge_number_by_app_id_cb, },},
+};
+
+/**
+ * @brief Assigns the callback functions.
+ * @param[in] launch_func The callback function to be invoked on notification post.
+ * @param[in] badge_func The callback function to be invoked on badge counter modification request.
+ */
+void notification_set_callbacks(launch_cb launch_func, badge_cb badge_func)
+{
+       s_info.launch_func_cb = launch_func;
+       s_info.badge_func_cb = badge_func;
+}
+
+/**
+ * @brief Obtains the list of all supported notifications.
+ * @param[out] size The number is supported notifications.
+ * @return This function returns an array of all the supported notifications.
+ */
+notification_data *notification_list_get(int *size)
+{
+       *size = NOFIFICATIONS_COUNT;
+       return s_info.noti;
+}
+
+/**
+ * @brief Deletes all the posted notifications.
+ */
+void delete_all_notifications(void)
+{
+       _delete_notification(NOTIFICATION);
+       _delete_notification(NOTIFICATION_NORMAL);
+       _delete_notification(NOTIFICATION_BY_APP_CONTROL);
+       _delete_notification(NOTIFICATION_BY_APP_ID);
+}
+
+/**
+ * @brief Internal callback function which posts a common notification.
+ * This callback function is invoked when the user selects "Notify" item
+ * from the list in "Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _notify_cb(notification_data *notify_data)
+{
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notify_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       _delete_notification_items();
+
+       notify_data->notification = _create_notification(MAIN_MENU_PATH, title_text, alert_text, NULL);
+       if (notify_data->notification) {
+               if (s_info.launch_func_cb)
+                       s_info.launch_func_cb(notify_data->notification, app_message_text, PACKAGE, NULL, NULL, NULL, NULL, NULL);
+               notification_post(notify_data->notification);
+       }
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br><br>%s<br>%s<br><br>%s<br>%s<br>", result_message,
+                       (notify_data->notification) ? result_message_success_text : result_message_failure_text,
+                       notify_message_text, alert_text, launch_argument_text,
+                       app_message_text);
+}
+
+/**
+ * @brief Internal callback function which posts a normal notification.
+ * This callback function is invoked when the user selects "Notify(normal)" item
+ * from the list in "Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _notify_normal_cb(notification_data *notify_data)
+{
+       int size_of_buffer = 0;
+       char *full_thumbnail_path = NULL;
+       unsigned int count = 0;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notify_normal_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       _delete_notification_items();
+
+       notify_data->notification = _create_notification(ICON2_PATH, title_text, alert_text, SOUND_PATH);
+       if (notify_data->notification) {
+               if (s_info.launch_func_cb)
+                       s_info.launch_func_cb(notify_data->notification, app_message_text, PACKAGE, NULL, NULL, NULL, NULL, NULL);
+
+               size_of_buffer = strlen(THUMBNAIL_PATH) + strlen(get_shared_res_path()) + 1;
+               full_thumbnail_path = calloc(sizeof(char), size_of_buffer);
+               if (full_thumbnail_path) {
+                       snprintf(full_thumbnail_path, size_of_buffer, "%s%s", get_shared_res_path(), THUMBNAIL_PATH);
+                       notification_set_image(notify_data->notification, NOTIFICATION_IMAGE_TYPE_BACKGROUND, full_thumbnail_path);
+                       free(full_thumbnail_path);
+               }
+
+               notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_INFO_2, second_length, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+               notification_set_text(notify_data->notification, NOTIFICATION_TEXT_TYPE_INFO_SUB_2, line_text, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+               notification_post(notify_data->notification);
+               if (s_info.badge_func_cb)
+                       s_info.badge_func_cb(&count, true);
+       }
+}
+
+/**
+ * @brief Internal callback function which posts a app-control notification.
+ * This callback function is invoked when the user selects "NotifyByAppControl" item
+ * from the list in "Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _notify_by_app_control_cb(notification_data *notify_data)
+{
+       const char *array_result[] = { result_1_text, result_2_text, NULL };
+       const char *array_key[] = { SERVICE_DATA_TEXT, SERVICE_DATA_TO, NULL };
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notify_by_app_control_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       _delete_notification_items();
+
+       notify_data->notification = _create_notification(ICON2_PATH, notification_app, app_control_to_me, NULL);
+       if (notify_data->notification) {
+               if (s_info.launch_func_cb)
+                       s_info.launch_func_cb(notify_data->notification, app_message_text, PACKAGE, uri_text, mime_text, operation_id_text, array_result, array_key);
+               notification_post(notify_data->notification);
+       }
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br><br>%s<br>%s<br><br>%s<br>%s<br><br>%s<br>%s<br>",
+                       result_message, (notify_data->notification) ? result_message_success_text : result_message_failure_text,
+                       notify_message_text, app_control_to_me, operation_id_is_text,
+                       operation_id_text, uri_is_text, uri_text);
+}
+
+/**
+ * @brief Internal callback function which removes the notification.
+ * This callback function is invoked when the user selects "RemoveNotification" item
+ * from the list in "Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _remove_notification_cb(notification_data *notify_data)
+{
+       bool is_success;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "remove_notification_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       is_success = _delete_notification_items();
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br><br>%s<br>", result_message,
+                       (is_success) ? result_message_success_text : result_message_failure_text, remove_text);
+}
+
+/**
+ * @brief Internal callback function which posts the notification by application ID.
+ * This callback function is invoked when the user selects "NotifyByAppId" item
+ * from the list in "Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _notify_by_app_id_cb(notification_data *notify_data)
+{
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notify_by_app_id_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       _delete_notification_by_app_id();
+
+       notify_data->notification = _create_notification(ICON2_PATH, title_text, notify_with_request, NULL);
+       if (notify_data->notification) {
+               if (s_info.launch_func_cb)
+                       s_info.launch_func_cb(notify_data->notification, app_message_text, SETTING_PKGNAME, NULL, NULL, NULL, NULL, NULL);
+               notification_post(notify_data->notification);
+       }
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br><br>%s<br>%s<br><br>%s<br>%s<br>", result_message,
+                       (notify_data->notification) ? result_message_success_text : result_message_failure_text,
+                       app_id_is_text, SETTING_PKGNAME, icon_path_is_text, ICON2_PATH);
+}
+
+/**
+ * @brief Internal callback function which removes the notification posted by application ID.
+ * This callback function is invoked when the user selects "RemoveNotificationByAppId" item
+ * from the list in "Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _remove_notification_by_app_id_cb(notification_data *notify_data)
+{
+       bool is_success;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "remove_notification_by_app_id_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       is_success = _delete_notification_by_app_id();
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br><br>%s<br><br>%s<br>%s<br>", result_message,
+                       (is_success) ? result_message_success_text : result_message_failure_text,
+                       remove_text, target_app_id_text, SETTING_PKGNAME);
+}
+
+/**
+ * @brief Internal callback function which sets the badge counter by application ID.
+ * This callback function is invoked when the user selects "SetBadgeNumberByAppId" item
+ * from the list in "Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _set_badge_number_by_app_id_cb(notification_data *notify_data)
+{
+       unsigned int count = 0;
+       bool is_success = false;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "set_badge_number_by_app_id_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       if (s_info.badge_func_cb)
+               is_success = s_info.badge_func_cb(&count, true);
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br><br>%s<br>%d<br><br>%s<br>%s<br>", result_message,
+                       (is_success) ? result_message_success_text : result_message_failure_text,
+                       badge_is_text, count, app_id_is_text, PACKAGE);
+}
+
+/**
+ * @brief Internal callback function which removes the badge by application ID.
+ * This callback function is invoked when the user selects "RemoveBadgeNumberByAppId" item
+ * from the list in "Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _remove_badge_number_by_app_id_cb(notification_data *notify_data)
+{
+       unsigned int count = 0;
+       bool is_success = false;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "remove_badge_number_by_app_id_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       if (s_info.badge_func_cb)
+               is_success = s_info.badge_func_cb(&count, false);
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br> <br>%s<br>%d<br> <br>%s<br>%s<br>", result_message,
+                       (is_success) ? result_message_success_text : result_message_failure_text, badge_is_text, count, app_id_is_text, PACKAGE);
+}
+
+/**
+ * @brief Internal function which creates the notification.
+ * @param[in] icon_path The path to the icon file to be added to the notification.
+ * @param[in] title_text The text to be set as a notification's title.
+ * @param[in] content_text The text to be set as a notification's content.
+ * @param[in] sound_path The path to the sound file to be played when notification arrives.
+ * @return The notification handle is returned or NULL on error.
+ */
+static notification_h _create_notification(const char *icon_path, const char *title_text, const char *content_text, const char *sound_path)
+{
+       int size_of_buffer = 0;
+       char *full_icon_path = NULL;
+       char *full_sound_path = NULL;
+
+       notification_h notify = notification_create(NOTIFICATION_TYPE_NOTI);
+       if (!notify) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_create(NOTIFICATION_TYPE_NOTI) failed.");
+               return NULL;
+       }
+
+       if (icon_path) {
+               size_of_buffer = strlen(icon_path) + strlen(get_shared_res_path()) + 1;
+               full_icon_path = calloc(sizeof(char), size_of_buffer);
+               if (full_icon_path) {
+                       snprintf(full_icon_path, size_of_buffer, "%s%s", get_shared_res_path(), icon_path);
+                       notification_set_image(notify, NOTIFICATION_IMAGE_TYPE_ICON, full_icon_path);
+                       free(full_icon_path);
+               }
+       }
+
+       if (sound_path) {
+               size_of_buffer = strlen(icon_path) + strlen(get_shared_res_path()) + 1;
+               full_sound_path = calloc(sizeof(char), size_of_buffer);
+               if (full_sound_path) {
+                       snprintf(full_sound_path, size_of_buffer, "%s%s", get_shared_res_path(), sound_path);
+                       notification_set_sound(notify, NOTIFICATION_SOUND_TYPE_USER_DATA, full_sound_path);
+                       free(full_sound_path);
+               }
+       }
+
+       notification_set_text(notify, NOTIFICATION_TEXT_TYPE_TITLE, title_text, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+       notification_set_text(notify, NOTIFICATION_TEXT_TYPE_CONTENT, content_text, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+
+       return notify;
+}
+
+/**
+ * @brief Internal function which deletes the notification of specified type.
+ * @param[in] type The type of notification to be deleted.
+ * @return This function returns 'true' on successful notification removal,
+ * otherwise 'false' is returned.
+ */
+static bool _delete_notification(enum notification_item type)
+{
+       int err = NOTIFICATION_ERROR_NONE;
+       notification_data *data = NULL;
+
+       if ((int)type < NOFIFICATIONS_COUNT)
+               data = &s_info.noti[type];
+
+       if (data && data->notification) {
+               err = notification_delete(data->notification);
+               data->notification = NULL;
+       }
+
+       return (err == NOTIFICATION_ERROR_NONE);
+}
+
+/**
+ * @brief Internal function which deletes all the common, normal and app-control
+ * notifications.
+ * @return This function returns 'true' on successful notifications removal,
+ * otherwise 'false' is returned.
+ */
+static bool _delete_notification_items(void)
+{
+       bool is_success;
+
+       is_success = _delete_notification(NOTIFICATION);
+       is_success = _delete_notification(NOTIFICATION_NORMAL) && is_success;
+       is_success = _delete_notification(NOTIFICATION_BY_APP_CONTROL) && is_success;
+
+       return is_success;
+}
+
+/**
+ * @brief Internal function which deletes the notification posted by application ID.
+ * @return This function returns 'true' on successful notification removal,
+ * otherwise 'false' is returned.
+ */
+static bool _delete_notification_by_app_id(void)
+{
+       return _delete_notification(NOTIFICATION_BY_APP_ID);
+}
diff --git a/Notification_TestSample/src/notification/ongoing-notifications.c b/Notification_TestSample/src/notification/ongoing-notifications.c
new file mode 100755 (executable)
index 0000000..d74f1ad
--- /dev/null
@@ -0,0 +1,458 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <notification.h>
+#include <badge.h>
+#include <math.h>
+#include <stdio.h>
+#include "notification_testsample.h"
+#include "notification/ongoing-notifications.h"
+#include "notification/notification-defines.h"
+
+#define NOFIFICATIONS_COUNT 8
+
+enum ongoing_notification {ONGOING_NOTIFICATION_PERCENT = 0, ONGOING_NOTIFICATION_BYTE = 1, ONGOING_NOTIFICATION_TEXT = 2,
+                                                       ONGOING_NOTIFICATION_BY_APP_CONTROL = 4, ONGOING_NOTIFICATION_BY_APP_ID = 6};
+
+static void _ongoing_notification_cb(notification_data *notify_data);
+static void _ongoing_notification_byte_cb(notification_data *notify_data);
+static void _ongoing_notification_text_cb(notification_data *notify_data);
+static void _remove_ongoing_notification_cb(notification_data *notify_data);
+static void _ongoing_notification_by_app_control_cb(notification_data *notify_data);
+static void _remove_notification_by_app_control_cb(notification_data *notify_data);
+static void _ongoing_notification_by_app_id_cb(notification_data *notify_data);
+static void _remove_ongoing_notification_by_app_id_cb(notification_data *notify_data);
+static notification_h _create_ongoing_notification(const char *image_path, const char *title_text);
+static bool _delete_ongoing_notification(enum ongoing_notification type);
+static void _notification_content_text_set(notification_h notification, const char *content_text, int press_count);
+
+static struct noti_info {
+       launch_cb launch_func_cb;
+       badge_cb badge_func_cb;
+       notification_data noti[NOFIFICATIONS_COUNT];
+} s_info = {
+       .launch_func_cb = NULL,
+       .badge_func_cb = NULL,
+       .noti = {{ "OngoingNotification(%)", NULL,  0, 0, _ongoing_notification_cb, },
+                               { "OngoingNotification(byte)", NULL,  0, 0, _ongoing_notification_byte_cb, },
+                               { "OngoingNotification(text)", NULL,  0, 0, _ongoing_notification_text_cb, },
+                               { "RemoveOngoingNotification", NULL,  0, 0, _remove_ongoing_notification_cb, },
+                               { "OngoingNotificationByAppControl", NULL,  0, 0, _ongoing_notification_by_app_control_cb, },
+                               { "RemoveNotificationByAppControl", NULL,  0, 0, _remove_notification_by_app_control_cb, },
+                               { "OngoingNotificationByAppId", NULL,  0, 0, _ongoing_notification_by_app_id_cb, },
+                               { "RemoveNotificationByAppId", NULL,  0, 0, _remove_ongoing_notification_by_app_id_cb, },},
+};
+
+/**
+ * @brief Assigns the callback functions.
+ * @param[in] launch_func The callback function to be invoked on ongoing notification post.
+ * @param[in] badge_func The callback function to be invoked on badge counter modification request.
+ */
+void ongoing_notification_set_callbacks(launch_cb launch_func, badge_cb badge_func)
+{
+       s_info.launch_func_cb = launch_func;
+       s_info.badge_func_cb = badge_func;
+}
+
+/**
+ * @brief Obtains the list of all supported ongoing notifications.
+ * @param[out] size The number is supported ongoing notifications.
+ * @return This function returns an array of all the supported ongoing notifications.
+ */
+const notification_data *ongoing_notification_list_get(int *size)
+{
+       *size = NOFIFICATIONS_COUNT;
+       return s_info.noti;
+}
+
+/**
+ * @brief Deletes all the posted ongoing notifications.
+ */
+void delete_all_ongoing_notifications(void)
+{
+       _delete_ongoing_notification(ONGOING_NOTIFICATION_PERCENT);
+       _delete_ongoing_notification(ONGOING_NOTIFICATION_BYTE);
+       _delete_ongoing_notification(ONGOING_NOTIFICATION_TEXT);
+       _delete_ongoing_notification(ONGOING_NOTIFICATION_BY_APP_CONTROL);
+       _delete_ongoing_notification(ONGOING_NOTIFICATION_BY_APP_ID);
+}
+
+/**
+ * @brief Internal callback function which posts a progress ongoing notification.
+ * This callback function is invoked when the user selects "OngoingNotification(%)" item
+ * from the list in "Ongoing Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _ongoing_notification_cb(notification_data *notify_data)
+{
+       char launch_argument[TEXT_SHORT_LEN] = {'\0'};
+       bool to_post = false;
+       int value;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_ongoing_notification_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       notify_data->press_count++;
+       if (!notify_data->notification) {
+               to_post = true;
+               notify_data->notification = _create_ongoing_notification(ICON2_PATH, notify_data->name);
+               if (!notify_data->notification)
+                       return;
+       }
+
+       notify_data->progress_value += percentage_increment;
+       if (notify_data->progress_value > percentage_max)
+               notify_data->progress_value = 0;
+
+       notification_set_progress(notify_data->notification, notify_data->progress_value);
+       _notification_content_text_set(notify_data->notification, percentage_content_text, notify_data->press_count);
+
+       value = round(percentage_multiplier * notify_data->progress_value);
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br> <br>%s<br>%s%d<br> <br>%s<br>%s = %d<br> <br>%s<br>%d<br>", result_message,
+                       (notify_data->notification) ? result_message_success_text : result_message_failure_text,
+                                       notify_message_text, percentage_content_text, notify_data->press_count, launch_argument_text, app_message_text, value,
+                                       ongoing_activity_progress_text, value);
+
+       snprintf(launch_argument, TEXT_SHORT_LEN, "%s = %d", app_message_text, value);
+
+       if (s_info.launch_func_cb)
+               s_info.launch_func_cb(notify_data->notification, launch_argument, PACKAGE, NULL, NULL, NULL, NULL, NULL);
+
+       if (to_post)
+               notification_post(notify_data->notification);
+       else
+               notification_update(notify_data->notification);
+}
+
+/**
+ * @brief Internal callback function which posts a byte ongoing notification.
+ * This callback function is invoked when the user selects "OngoingNotification(byte)" item
+ * from the list in "Ongoing Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _ongoing_notification_byte_cb(notification_data *notify_data)
+{
+       char launch_argument[TEXT_SHORT_LEN] = {'\0'};
+       bool to_post = false;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_ongoing_notification_byte_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       notify_data->press_count++;
+       if (!notify_data->notification) {
+               to_post = true;
+               notify_data->notification = _create_ongoing_notification(ICON2_PATH, notify_data->name);
+               if (!notify_data->notification)
+                       return;
+       }
+
+       if (notify_data->progress_value > byte_max)
+               notify_data->progress_value = 0;
+
+       notification_set_size(notify_data->notification, notify_data->progress_value);
+       _notification_content_text_set(notify_data->notification, byte_content_text, notify_data->press_count);
+
+       snprintf(launch_argument, TEXT_SHORT_LEN, "%s = %d", app_message_text, (int)round(notify_data->progress_value));
+
+       if (s_info.launch_func_cb)
+               s_info.launch_func_cb(notify_data->notification, launch_argument, PACKAGE, NULL, NULL, NULL, NULL, NULL);
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br><br>%s<br>%s%d<br> <br>%s<br>%s = %d<br><br>%s<br>%d<br>", result_message,
+                       (notify_data->notification) ? result_message_success_text : result_message_failure_text,
+                       notify_message_text, percentage_content_text, notify_data->press_count, launch_argument_text, app_message_text, (int)round(notify_data->progress_value),
+                       ongoing_activity_progress_text, (int)round(notify_data->progress_value));
+
+       notify_data->progress_value += byte_increment;
+       if (to_post)
+               notification_post(notify_data->notification);
+       else
+               notification_update(notify_data->notification);
+}
+
+/**
+ * @brief Internal callback function which posts a text ongoing notification.
+ * This callback function is invoked when the user selects "OngoingNotification(text)" item
+ * from the list in "Ongoing Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _ongoing_notification_text_cb(notification_data *notify_data)
+{
+       bool to_post = false;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_ongoing_notification_text_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       notify_data->press_count++;
+       if (!notify_data->notification) {
+               to_post = true;
+               notify_data->notification = _create_ongoing_notification(ICON2_PATH, notify_data->name);
+               if (!notify_data->notification)
+                       return;
+       }
+
+       notification_set_layout(notify_data->notification, NOTIFICATION_LY_ONGOING_EVENT);
+       _notification_content_text_set(notify_data->notification, text_content_text, notify_data->press_count);
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br><br>%s<br>%s%d<br><br>%s<br>%s<br>", result_message,
+                       (notify_data->notification) ? result_message_success_text : result_message_failure_text,
+                       notify_message_text, text_content_text, notify_data->press_count, launch_argument_text, app_message_text);
+
+       if (s_info.launch_func_cb)
+               s_info.launch_func_cb(notify_data->notification, app_message_text, PACKAGE, NULL, NULL, NULL, NULL, NULL);
+
+       if (to_post)
+               notification_post(notify_data->notification);
+       else
+               notification_update(notify_data->notification);
+}
+
+/**
+ * @brief Internal callback function which removes ongoing progress/byte/text notification.
+ * This callback function is invoked when the user selects "RemoveOngoingNotification" item
+ * from the list in "Ongoing Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _remove_ongoing_notification_cb(notification_data *notify_data)
+{
+       bool is_success;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_remove_ongoing_notification_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       is_success = _delete_ongoing_notification(ONGOING_NOTIFICATION_PERCENT);
+       is_success = _delete_ongoing_notification(ONGOING_NOTIFICATION_BYTE) && is_success;
+       is_success = _delete_ongoing_notification(ONGOING_NOTIFICATION_TEXT) && is_success;
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br><br>%s<br>", result_message,
+                       (is_success) ? result_message_success_text : result_message_failure_text, remove_ongoing_notification_text);
+}
+
+/**
+ * @brief Internal callback function which posts a ongoing notification by app-control.
+ * This callback function is invoked when the user selects "OngoingNotificationByAppControl" item
+ * from the list in "Ongoing Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _ongoing_notification_by_app_control_cb(notification_data *notify_data)
+{
+       int value;
+       bool to_post = false;
+       unsigned int count = 0;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_ongoing_notification_by_app_control_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       notify_data->press_count++;
+       if (!notify_data->notification) {
+               to_post = true;
+               notify_data->notification = _create_ongoing_notification(ICON1_PATH, notify_data->name);
+               if (!notify_data->notification)
+                       return;
+       }
+
+       notify_data->progress_value += percentage_increment;
+       if (notify_data->progress_value > percentage_max)
+               notify_data->progress_value = 0;
+
+       notification_set_progress(notify_data->notification, notify_data->progress_value);
+       _notification_content_text_set(notify_data->notification, percentage_content_text, notify_data->press_count);
+
+       if (s_info.badge_func_cb)
+               s_info.badge_func_cb(&count, true);
+
+       value = round(percentage_multiplier * notify_data->progress_value);
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br> <br>%s<br>%s%d<br> <br>%s<br>%s = %d<br> <br>%s<br>%d<br>", result_message,
+                       (notify_data->notification) ? result_message_success_text : result_message_failure_text,
+                       notify_message_text, percentage_content_text, notify_data->press_count, launch_argument_text, ongoing_by_app_control_text, value,
+                       ongoing_activity_progress_text, value);
+
+       if (s_info.launch_func_cb)
+               s_info.launch_func_cb(notify_data->notification, ongoing_by_app_control_text, PACKAGE, uri_text, mime_text, operation_id_text, NULL, NULL);
+
+       if (to_post)
+               notification_post(notify_data->notification);
+       else
+               notification_update(notify_data->notification);
+}
+
+/**
+ * @brief Internal callback function which removes the ongoing notification posted by app-control.
+ * This callback function is invoked when the user selects "RemoveNotificationByAppControl" item
+ * from the list in "Ongoing Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _remove_notification_by_app_control_cb(notification_data *notify_data)
+{
+       bool result;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_remove_notification_by_app_control_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       result = _delete_ongoing_notification(ONGOING_NOTIFICATION_BY_APP_CONTROL);
+       badge_remove(PACKAGE);
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br><br>%s<br>", result_message,
+                       (result) ? result_message_success_text : result_message_failure_text, remove_ongoing_notification_by_app_control_text);
+}
+
+/**
+ * @brief Internal callback function which posts ongoing notification by application ID.
+ * This callback function is invoked when the user selects "OngoingNotificationByAppId" item
+ * from the list in "Ongoing Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _ongoing_notification_by_app_id_cb(notification_data *notify_data)
+{
+       bool to_post = false;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_ongoing_notification_by_app_id_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       notify_data->press_count++;
+       if (!notify_data->notification) {
+               to_post = true;
+               notify_data->notification = _create_ongoing_notification(ICON1_PATH, notify_data->name);
+               if (!notify_data->notification)
+                       return;
+       }
+
+       if (notify_data->progress_value > byte_max)
+               notify_data->progress_value = 0;
+
+       notification_set_size(notify_data->notification, notify_data->progress_value);
+       _notification_content_text_set(notify_data->notification, byte_content_text,
+                       notify_data->press_count);
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br> <br>%s<br>%s%d<br> <br>%s<br>%s = %d<br> <br>%s<br>%d<br>", result_message,
+                       (notify_data->notification) ? result_message_success_text : result_message_failure_text,
+                       notify_message_text, byte_content_text, notify_data->press_count, launch_argument_text, app_message_text, (int)round(notify_data->progress_value),
+                       ongoing_activity_progress_text, (int)round(notify_data->progress_value));
+
+       if (s_info.launch_func_cb)
+               s_info.launch_func_cb(notify_data->notification, app_message_text, SETTING_PKGNAME, NULL, NULL, NULL, NULL, NULL);
+
+       notify_data->progress_value += byte_increment;
+       if (to_post)
+               notification_post(notify_data->notification);
+       else
+               notification_update(notify_data->notification);
+}
+
+/**
+ * @brief Internal callback function which removes ongoing notification posted by application ID.
+ * This callback function is invoked when the user selects "RemoveNotificationByAppId" item
+ * from the list in "Ongoing Notification" tab.
+ * @param[in] notify_data Pointer to the notification data.
+ */
+static void _remove_ongoing_notification_by_app_id_cb(notification_data *notify_data)
+{
+       bool result;
+
+       if (!notify_data) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "_ongoing_notification_by_app_id_cb() failed. Invalid input argument.");
+               return;
+       }
+
+       result = _delete_ongoing_notification(ONGOING_NOTIFICATION_BY_APP_ID);
+
+       snprintf(notify_data->result_text, TEXT_MAX_LEN, "%s%s<br><br>%s<br>", result_message,
+                       (result) ? result_message_success_text : result_message_failure_text, remove_ongoing_notification_by_app_id_text);
+}
+
+/**
+ * @brief Internal function which creates an ongoing notification.
+ * @param[in] image_path The path to the image file to be added to the notification.
+ * @param[in] title_text The text to be set as a notification's title.
+ * @return The ongoing notification handle is returned or NULL on error.
+ */
+static notification_h _create_ongoing_notification(const char *image_path, const char *title_text)
+{
+       int size_of_buffer = 0;
+       char *full_icon_path = NULL;
+       notification_h ongoing_notification = notification_create(NOTIFICATION_TYPE_ONGOING);
+       if (!ongoing_notification) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "notification_create(NOTIFICATION_TYPE_ONGOING) failed.");
+               return NULL;
+       }
+
+       if (image_path) {
+               size_of_buffer = strlen(image_path) + strlen(get_shared_res_path()) + 1;
+               full_icon_path = calloc(sizeof(char), size_of_buffer);
+               if (full_icon_path) {
+                       snprintf(full_icon_path, size_of_buffer, "%s%s", get_shared_res_path(), image_path);
+                       notification_set_image(ongoing_notification, NOTIFICATION_IMAGE_TYPE_ICON, full_icon_path);
+                       free(full_icon_path);
+               }
+       }
+
+       notification_set_property(ongoing_notification, NOTIFICATION_PROP_DISABLE_TICKERNOTI);
+       notification_set_text(ongoing_notification, NOTIFICATION_TEXT_TYPE_TITLE, title_text, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+
+       return ongoing_notification;
+}
+
+/**
+ * @brief Internal function which deletes the ongoing notification of specified type.
+ * @param[in] type The type of the ongoing notification to be deleted.
+ * @return This function returns 'true' on successful notification removal,
+ * otherwise 'false' is returned.
+ */
+static bool _delete_ongoing_notification(enum ongoing_notification type)
+{
+       int err = NOTIFICATION_ERROR_NONE;
+       notification_data *data = NULL;
+
+       if ((int)type < NOFIFICATIONS_COUNT)
+               data = &s_info.noti[type];
+
+       if (data && data->notification) {
+               err = notification_delete(data->notification);
+               data->notification = NULL;
+               data->press_count = 0;
+               data->progress_value = 0;
+       }
+
+       return (err == NOTIFICATION_ERROR_NONE);
+}
+
+/**
+ * @brief Internal function which sets the text content of the ongoing notification.
+ * @param[in] notification The notification handle which text content is to be set.
+ * @param[in] content_text The text to be set as a content of the ongoing notification.
+ * @param[in] press_count The counter to be set in notification text content body.
+ */
+static void _notification_content_text_set(notification_h notification, const char *content_text, int press_count)
+{
+       char text[TEXT_SHORT_LEN] = {'\0'};
+       snprintf(text, sizeof(text), "%s%d", content_text, press_count);
+       notification_set_text(notification, NOTIFICATION_TEXT_TYPE_CONTENT, text, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+}
diff --git a/Notification_TestSample/src/view.c b/Notification_TestSample/src/view.c
new file mode 100755 (executable)
index 0000000..7cdff8a
--- /dev/null
@@ -0,0 +1,449 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <efl_extension.h>
+#include <Elementary.h>
+#include "notification_testsample.h"
+#include "notification/notifications.h"
+#include "notification/ongoing-notifications.h"
+#include "notification/notification-common.h"
+#include "notification/etc-notifications.h"
+#include "view.h"
+#include "view_defines.h"
+#include <app.h>
+
+
+typedef enum {NT_NONE, NT_NOTIFICATION, NT_ONGOING_NOTIFICATION, NT_ETC_NOTIFICATION} notification_t;
+
+static struct view_info {
+       Evas_Object *win;
+       Evas_Object *conform;
+       Evas_Object *navi;
+} s_info = {
+       .win = NULL,
+       .conform = NULL,
+       .navi = NULL,
+};
+
+static void _delete_win_request_cb(void *data, Evas_Object *obj, void *event_info);
+static void _navi_back_cb(void *data, Evas_Object *obj, void *event_info);
+static void _toolbar_tab_changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void _noti_list_item_selected_cb(void *data, Evas_Object *obj, void *event_info);
+static void _get_app_resource(const char *edj_file_in, char *edj_path_out);
+static bool _create_main_layout(void);
+
+/**
+ * @brief Creates essential objects: window, conformant and layout.
+ */
+Eina_Bool view_create(void *user_data)
+{
+       s_info.win = view_create_win(PACKAGE);
+       if (s_info.win == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "failed to create a window.");
+               return EINA_FALSE;
+       }
+
+       s_info.conform = view_create_conformant(s_info.win);
+       if (s_info.conform == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "failed to create a conformant");
+               return EINA_FALSE;
+       }
+
+       if (!view_create_background(s_info.conform, "elm.swallow.bg"))
+               return EINA_FALSE;
+
+       s_info.navi = view_create_naviframe(s_info.conform, "elm.swallow.content");
+       if (!s_info.navi)
+               return EINA_FALSE;
+
+       if (!_create_main_layout())
+               return EINA_FALSE;
+
+       evas_object_show(s_info.win);
+
+       return EINA_TRUE;
+}
+
+/**
+ * @brief Creates a basic window named package.
+ * @param[in] pkg_name Name of the window
+ */
+Evas_Object *view_create_win(const char *pkg_name)
+{
+       Evas_Object *win = NULL;
+
+       win = elm_win_add(NULL, pkg_name, ELM_WIN_BASIC);
+
+       elm_win_conformant_set(win, EINA_TRUE);
+       elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
+       elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_OPAQUE);
+       elm_win_autodel_set(win, EINA_TRUE);
+
+
+
+       if (elm_win_wm_rotation_supported_get(win)) {
+               int rots[4] = { 0, 90, 180, 270 };
+               elm_win_wm_rotation_available_rotations_set(win, rots, 4);
+       }
+
+
+       evas_object_smart_callback_add(win, "delete,request", _delete_win_request_cb, NULL);
+
+       return win;
+}
+
+/**
+ * @brief Creates a conformant without indicator for mobile app.
+ * @param[in] win The object to which you want to set this conformant
+ * Conformant is mandatory for base GUI to have proper size
+ */
+Evas_Object *view_create_conformant(Evas_Object *win)
+{
+       Evas_Object *conform = NULL;
+
+       if (win == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "window is NULL.");
+               return NULL;
+       }
+
+       conform = elm_conformant_add(win);
+       evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(win, conform);
+
+       evas_object_show(conform);
+
+       return conform;
+}
+
+/**
+ * @brief Creates a layout object for parent object based on provided EDJE script.
+ * @param[in] parent The parent object for layout object.
+ * @param[in] edj_file_name The relative path to the layout EDJE script.
+ * @param[in] edj_group The name of the group to be loaded from the EDJE script.
+ * @return The function returns layout object if it was created successfully,
+ * otherwise 'NULL' is returned.
+ */
+Evas_Object *view_create_layout(Evas_Object *parent, const char *edj_file_name, const char *edj_group)
+{
+       char edj_path[PATH_MAX] = {0, };
+       Evas_Object *layout = NULL;
+
+       if (!parent || !edj_file_name || !edj_group) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Wrong input arguments.");
+               return NULL;
+       }
+
+       _get_app_resource(edj_file_name, edj_path);
+
+       layout = elm_layout_add(parent);
+       if (!layout) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Function elm_layout_add() failed.");
+               return NULL;
+       }
+
+       elm_layout_theme_set(layout, "layout", "application", "default");
+
+       if (!elm_layout_file_set(layout, edj_path, edj_group)) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Function elm_layout_file_set() failed.");
+               evas_object_del(layout);
+               return NULL;
+       }
+
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       return layout;
+}
+
+/**
+ * @brief Creates a background for parent object and sets it to designated part.
+ * @param[in] parent The parent object for background.
+ * @param[in] part_name The name of the part within parent object
+ * where the background is to be set,
+ * @return This function returns a background object if is was successfully created,
+ * otherwise NULL is returned.
+ */
+Evas_Object *view_create_background(Evas_Object *parent, const char *part_name)
+{
+       Evas_Object *bg = elm_bg_add(parent);
+       if (!bg) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "elm_bg_add() failed.");
+               return NULL;
+       }
+
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(bg);
+
+       elm_object_part_content_set(parent, part_name, bg);
+
+       return bg;
+}
+
+/**
+ * @brief Creates a naviframe for parent object and sets it to designated part.
+ * @param[in] parent The parent object for naviframe.
+ * @param[in] part_name The name of the part within parent object
+ * where the naviframe is to be set,
+ * @return This function returns a naviframe object if is was successfully created,
+ * otherwise NULL is returned.
+ */
+Evas_Object *view_create_naviframe(Evas_Object *parent, const char *part_name)
+{
+       Evas_Object *navi = elm_naviframe_add(parent);
+       if (!navi) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "elm_naviframe_add() failed.");
+               return NULL;
+       }
+
+       elm_naviframe_prev_btn_auto_pushed_set(navi, EINA_FALSE);
+
+       eext_object_event_callback_add(navi, EEXT_CALLBACK_BACK, _navi_back_cb, NULL);
+       elm_object_part_content_set(s_info.conform, part_name, navi);
+
+       return navi;
+}
+
+/**
+ * @brief Creates a toolbar for parent object.
+ * @param[in] parent The parent object for toolbar.
+ * @return This function returns a toolbar object if is was successfully created,
+ * otherwise NULL is returned.
+ */
+Evas_Object *view_create_toolbar(Evas_Object *parent)
+{
+       Evas_Object *toolbar = elm_toolbar_add(parent);
+       if (!toolbar) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "elm_toolbar_add() failed.");
+               return NULL;
+       }
+
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       elm_object_style_set(toolbar, "tabbar");
+
+       evas_object_show(toolbar);
+
+       return toolbar;
+}
+
+/**
+ * @brief Creates a list for parent object.
+ * @param[in] parent The parent object for a list.
+ * @return This function returns a list object if is was successfully created,
+ * otherwise NULL is returned.
+ */
+Evas_Object *view_create_list(Evas_Object *parent)
+{
+       Evas_Object *list = elm_list_add(parent);
+       if (!list) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "elm_list_add() failed.");
+               return NULL;
+       }
+
+       elm_list_go(list);
+       evas_object_show(list);
+
+       return list;
+}
+
+/**
+ * @brief Creates a new layout object to display the notification and sets it
+ * to the naviframe object. The previously set layout is prior dismissed.
+ * @param[in] notify_data The notification details to be displayed.
+ * @return This function returns 'true' if the layout was successfully displayed,
+ * otherwise NULL is returned.
+ */
+bool view_display_notification(notification_data *notify_data)
+{
+       static Evas_Object *layout = NULL;
+
+       if (layout)
+               evas_object_del(layout);
+
+       layout = view_create_layout(s_info.navi, EDJ_NOTI, GRP_NOTI);
+       if (!layout)
+               return false;
+
+       elm_naviframe_item_push(s_info.navi, "Notify result", NULL, NULL, layout, NULL);
+
+       elm_object_part_text_set(layout, PART_NOTI_TITLE, notify_data->name);
+       elm_object_part_text_set(layout, PART_NOTI_TEXT_CONTENT, notify_data->result_text);
+
+       return true;
+}
+
+/**
+ * @brief Rises the main window.
+ */
+void view_rise_window(void)
+{
+       elm_win_raise(s_info.win);
+}
+
+/**
+ * @brief Destroys window and frees its resources.
+ */
+void view_destroy(void)
+{
+       if (s_info.win == NULL)
+               return;
+
+       evas_object_del(s_info.win);
+}
+
+/**
+ * @brief Internal callback function invoked when the main window needs to be destroyed.
+ * @param[in] data The user data passed to the evas_object_smart_callback_add() function.
+ * @param[in] obj The object invoking this callback function.
+ * @param[in] event_info The structure containing the information on this event.
+ */
+static void _delete_win_request_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ui_app_exit();
+}
+
+/**
+ * @brief Internal callback function invoked when the HW Back button is pressed.
+ * @param[in] data The user data passed to the eext_object_event_callback_add() function.
+ * @param[in] obj The object invoking this callback function.
+ * @param[in] event_info The structure containing the information on this event.
+ */
+static void _navi_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (elm_naviframe_top_item_get(s_info.navi) == elm_naviframe_bottom_item_get(s_info.navi))
+               elm_win_lower(s_info.win);
+       else
+               elm_naviframe_item_pop(s_info.navi);
+}
+
+/**
+ * @brief Internal callback function invoked when the toolbar's tab is changed.
+ * Internally, this function creates a new content for selected toolbar's tab.
+ * @param[in] data The user data passed to the elm_toolbar_item_append() function.
+ * @param[in] obj The object invoking this callback function.
+ * @param[in] event_info The structure containing the information on this event.
+ */
+static void _toolbar_tab_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       static notification_t current_noti_type = NT_NONE;
+       notification_t noti_type = (notification_t)data;
+       const notification_data *notification_list = NULL;
+       Elm_Object_Item *item;
+       Evas_Object *list;
+       int size = 0;
+       int i;
+
+       if (current_noti_type == noti_type)
+               return;
+
+       item = elm_naviframe_top_item_get(s_info.navi);
+       list = elm_object_item_part_content_unset(item, "default");
+       if (list)
+               evas_object_del(list);
+
+       list = view_create_list(s_info.navi);
+       if (!list) {
+               current_noti_type = NT_NONE;
+               return;
+       }
+
+       elm_object_item_part_content_set(item, "default", list);
+
+       switch (noti_type) {
+       case NT_NOTIFICATION:
+               notification_list = notification_list_get(&size);
+               break;
+       case NT_ONGOING_NOTIFICATION:
+               notification_list = ongoing_notification_list_get(&size);
+               break;
+       case NT_ETC_NOTIFICATION:
+               notification_list = etc_notification_list_get(&size);
+               break;
+       default:
+               current_noti_type = NT_NONE;
+               break;
+       }
+
+       for (i = 0; i < size; i++)
+               elm_list_item_append(list, notification_list[i].name, NULL, NULL, _noti_list_item_selected_cb, &notification_list[i]);
+
+       current_noti_type = noti_type;
+}
+
+/**
+ * @brief Internal callback function invoked when the notification list's item
+ * is selected by the user.
+ * Internally, this function creates a new layout to display notification details.
+ * @param[in] data The user data passed to the elm_list_item_append() function.
+ * @param[in] obj The object invoking this callback function.
+ * @param[in] event_info The structure containing the information on this event.
+ */
+static void _noti_list_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       notification_data *notification_info = (notification_data *)data;
+
+       elm_list_item_selected_set(event_info, EINA_FALSE);
+
+       if (notification_info->callback)
+               notification_info->callback(notification_info);
+
+       dlog_print(DLOG_ERROR, LOG_TAG, "notification_info.name %s", notification_info->name);
+
+       if (strcmp(notification_info->name, "notify for lockscreen") != 0)
+               view_display_notification(notification_info);
+}
+
+/**
+ * @brief Internal function which creates fully qualified path to the provided resource file.
+ * @param[in] edj_file_in The file name.
+ * @param[out] edj_path_out The fully qualified path to the edj_file_in file.
+ */
+static void _get_app_resource(const char *edj_file_in, char *edj_path_out)
+{
+       char *res_path = app_get_resource_path();
+       if (res_path) {
+               snprintf(edj_path_out, PATH_MAX, "%s%s", res_path, edj_file_in);
+               free(res_path);
+       }
+}
+
+/**
+ * @brief Internal function which creates the main layout of the application.
+ * The naviframe is used as a container for toolbar and genlist objects.
+ * @return This function returns 'true' if the main layout was successfully created,
+ * otherwise 'false' is returned.
+ */
+static bool _create_main_layout(void)
+{
+       Elm_Object_Item *item;
+       Evas_Object *toolbar;
+
+       toolbar = view_create_toolbar(s_info.navi);
+       if (!toolbar)
+               return false;
+
+       item = elm_naviframe_item_push(s_info.navi, NULL, NULL, NULL, NULL, "tabbar/notitle");
+       elm_object_item_part_content_set(item, "tabbar", toolbar);
+
+       item = elm_toolbar_item_append(toolbar, NULL, "etc notification", _toolbar_tab_changed_cb, (void *)NT_ETC_NOTIFICATION);
+                       elm_toolbar_item_append(toolbar, NULL, "Notification", _toolbar_tab_changed_cb, (void *)NT_NOTIFICATION);
+       elm_toolbar_item_append(toolbar, NULL, "Ongoing notification", _toolbar_tab_changed_cb, (void *)NT_ONGOING_NOTIFICATION);
+
+
+       elm_toolbar_item_selected_set(item, EINA_TRUE);
+
+       return true;
+}
diff --git a/Notification_TestSample/tizen-manifest.xml b/Notification_TestSample/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..c0b2707
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="4.0" package="org.example.notification-testsample" version="1.0.0">
+    <profile name="mobile"/>
+    <ui-application appid="org.example.notification-testsample" exec="notification-testsample" multiple="false" nodisplay="false" taskmanage="true" type="capp">
+        <label>notification-testsample</label>
+        <icon>notification-testsample.png</icon>
+    </ui-application>
+    <privileges>
+        <privilege>http://tizen.org/privilege/appdir.shareddata</privilege>
+        <privilege>http://tizen.org/privilege/notification</privilege>
+    </privileges>
+</manifest>
diff --git a/build_def.prop b/build_def.prop
new file mode 100755 (executable)
index 0000000..6bb5e2f
--- /dev/null
@@ -0,0 +1,6 @@
+
+# Add pre/post build process
+PREBUILD_DESC = 
+PREBUILD_COMMAND = 
+POSTBUILD_DESC = 
+POSTBUILD_COMMAND = 
diff --git a/inc/accessibility.h b/inc/accessibility.h
new file mode 100755 (executable)
index 0000000..22f3747
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+#ifndef __ACCESSIBILITY_H__
+#define __ACCESSIBILITY_H__
+
+typedef enum {
+       SCREEN_READER_OBJ_TYPE_ELM_OBJECT,
+       SCREEN_READER_OBJ_TYPE_EDJ_OBJECT,
+} screen_reader_object_type_e;
+
+extern Evas_Object *quickpanel_accessibility_screen_reader_object_get(void *obj, screen_reader_object_type_e type, const char *part, Evas_Object *parent);
+extern Evas_Object *quickpanel_accessibility_ui_get_focus_object(Evas_Object *parent);
+extern char *quickpanel_accessibility_info_cb(void *data, Evas_Object *obj);
+extern char *quickpanel_accessibility_info_cb_s(void *data, Evas_Object *obj);
+extern void quickpanel_accessibility_screen_reader_data_set(Evas_Object *view, const char *part, char *type, char *info);
+
+#endif                         /* __ACCESSIBILITY_H__ */
diff --git a/inc/activenoti.h b/inc/activenoti.h
new file mode 100755 (executable)
index 0000000..c4b80d7
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+#ifndef __ACTIVENOTI_H__
+#define __ACTIVENOTI_H__
+
+extern void quickpanel_activenoti_set_display_mode(bool is_landscape);
+#endif
+
diff --git a/inc/animated_icon.h b/inc/animated_icon.h
new file mode 100755 (executable)
index 0000000..e7d4297
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef _QP_SERVICE_ANIMATED_ICON_DEF_
+#define _QP_SERVICE_ANIMATED_ICON_DEF_
+
+
+typedef enum _qp_animated_icon_type {
+       QP_ANIMATED_ICON_NONE = -1,
+       QP_ANIMATED_ICON_DOWNLOAD = 1,
+       QP_ANIMATED_ICON_UPLOAD,
+       QP_ANIMATED_ICON_INSTALL,
+} qp_animated_icon_type;
+
+extern Evas_Object *quickpanel_animated_icon_get(Evas_Object *parent, const char *path);
+extern int quickpanel_animated_icon_is_same_icon(Evas_Object *view, const char *path);
+
+#endif
diff --git a/inc/animated_image.h b/inc/animated_image.h
new file mode 100755 (executable)
index 0000000..2fe6e1e
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+#ifndef __QUICKPANEL_ANIMATED_IMAGE_H__
+#define __QUICKPANEL_ANIMATED_IMAGE_H__
+
+extern void quickpanel_animated_image_add(Evas_Object *image);
+extern char *quickpanel_animated_image_get_groupname(const char *path);
+
+#endif
diff --git a/inc/common.h b/inc/common.h
new file mode 100755 (executable)
index 0000000..80e52bc
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QP_COMMON_H_
+#define __QP_COMMON_H_
+
+
+#define QP_OK  (0)
+#define QP_FAIL        (-1)
+#define QP_UTIL_PHONE_NUMBER_MAX_LEN   40
+#define EDATA_BACKKEY_CB "bk_cb"
+
+#if !defined(_DLOG_USED)
+#define _DLOG_USED
+#endif
+
+
+#ifdef _DLOG_USED
+
+#undef LOG_TAG
+#define LOG_TAG "QUICKPANEL"
+
+#include <dlog.h>
+#include <unistd.h>
+
+
+#define HAPI __attribute__((visibility("hidden")))
+
+#ifndef __MODULE__
+#define __MODULE__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
+#endif
+
+#undef LOG_
+#define LOG_(prio, tag, fmt, arg...) \
+       ({ do { \
+               dlog_print(prio, tag, "%s: %s(%d) > " fmt, __MODULE__, __func__, __LINE__, ##arg);\
+       } while (0); })
+
+#define DBG(format, arg...) LOG_(DLOG_DEBUG, LOG_TAG, format, ##arg)
+#define INFO(format, arg...) LOG_(DLOG_INFO, LOG_TAG, format, ##arg)
+#define WARN(format, arg...) LOG_(DLOG_WARN, LOG_TAG, format, ##arg)
+#define ERR(format, arg...) LOG_(DLOG_ERROR, LOG_TAG, format, ##arg)
+
+#endif /*_DLOG_USED*/
+
+
+#define msgif(cond, str, args...) do { \
+       if (cond) { \
+               ERR(str, ##args);\
+       } \
+} while (0);
+
+#define retif(cond, ret, str, args...) do { \
+       if (cond) { \
+               ERR(str, ##args);\
+               return ret;\
+       } \
+} while (0);
+
+#define retif_nomsg(cond, ret) do { \
+       if (cond) { \
+               return ret;\
+       } \
+} while (0);
+
+#define gotoif(cond, target, str, args...) do { \
+       if (cond) { \
+               WARN(str, ##args); \
+               goto target; \
+       } \
+} while (0);
+
+extern void quickpanel_common_util_char_trim(char *text);
+extern void quickpanel_common_util_char_replace(char *text, char s, char t);
+extern void quickpanel_common_util_add_char_to_each_charactor(char *dst, const char *src, char t);
+extern int quickpanel_common_util_is_phone_number(const char *address);
+extern void quickpanel_common_util_phone_number_tts_make(char *dst, const char *src, int size);
+extern void quickpanel_common_ui_set_current_popup(Evas_Object *popup, Evas_Smart_Cb func_close);
+extern void quickpanel_common_ui_del_current_popup(void);
+extern void *quickpanel_common_ui_get_buffer_from_image(const char *file_path, size_t *memfile_size, char *ext, int ext_size);
+extern char *quickpanel_common_ui_get_pkginfo_icon(const char *pkgid);
+extern char *quickpanel_common_ui_get_pkginfo_label(const char *pkgid);
+extern char *quickpanel_common_ui_get_appinfo_icon(const char *pkgid);
+extern void quickpanel_common_inform_launch_app_result(const char *pkgname, int retcode);
+extern int quickpanel_common_send_message_to_app(const char *app_id, const char *operation, const char *key, const char *value);
+extern int quickpanel_common_launch_app(char *app_id, void *data);
+
+enum app_subdir {
+       APP_DIR_DATA,
+       APP_DIR_CACHE,
+       APP_DIR_RESOURCE,
+       APP_DIR_SHARED_DATA,
+       APP_DIR_SHARED_RESOURCE,
+       APP_DIR_SHARED_TRUSTED,
+       APP_DIR_EXTERNAL_DATA,
+       APP_DIR_EXTERNAL_CACHE,
+};
+
+const char *util_get_file_path(enum app_subdir dir, const char *relative);
+
+#define util_get_data_file_path(x) util_get_file_path(APP_DIR_DATA, (x))
+#define util_get_cache_file_path(x) util_get_file_path(APP_DIR_CACHE, (x))
+#define util_get_res_file_path(x) util_get_file_path(APP_DIR_RESOURCE, (x))
+#define util_get_shared_data_file_path(x) util_get_file_path(APP_DIR_SHARED_DATA, (x))
+#define util_get_shared_res_file_path(x) util_get_file_path(APP_DIR_SHARED_RESOURCE, (x))
+#define util_get_trusted_file_path(x) util_get_file_path(APP_DIR_SHARED_TRUSTED, (x))
+#define util_get_external_data_file_path(x) util_get_file_path(APP_DIR_EXTERNAL_DATA, (x))
+#define util_get_external_cache_file_path(x) util_get_file_path(APP_DIR_EXTERNAL_CACHE, (x))
+
+
+
+#endif                         /* __QP_COMMON_H_ */
diff --git a/inc/common_uic.h b/inc/common_uic.h
new file mode 100755 (executable)
index 0000000..890c4bd
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QP_COMMON_UIC_H_
+#define __QP_COMMON_UIC_H_
+
+typedef enum {
+       OPENED_NO_REASON = 0,
+       OPENED_BY_CMD_HIDE_LAUNCH = 1,
+       OPENED_BY_CMD_SHOW_SETTINGS = 2,
+} qp_open_reason;
+
+
+extern Evas_Object *quickpanel_uic_load_edj(Evas_Object * parent, const char *file, const char *group, int is_just_load);
+extern int quickpanel_uic_is_emul(void);
+extern int quickpanel_uic_is_suspended(void);
+extern int quickpanel_uic_is_opened(void);
+extern void quickpanel_uic_initial_resize(Evas_Object *obj, int height);
+extern void quickpanel_uic_close_quickpanel(bool is_check_lock, int is_delay_needed);
+extern void quickpanel_uic_open_quickpanel(int reason);
+extern void quickpanel_uic_toggle_openning_quickpanel(void);
+extern void quickpanel_uic_opened_reason_set(int reason);
+extern int quickpanel_uic_opened_reason_get(void);
+
+
+#endif                         /* __QP_COMMON_UIC_H_ */
diff --git a/inc/datetime.h b/inc/datetime.h
new file mode 100755 (executable)
index 0000000..1ab4c40
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __DATETIME_H__
+#define __DATETIME_H__
+
+extern void quickpanel_datetime_datentime_event_set(int is_clickable);
+extern void quickpanel_datetime_editing_icon_visibility_set(int is_visible);
+extern void quickpanel_datetime_view_update(char *date, char *time, char *meridiem, int meridiem_type);
+
+#endif /* __DATETIME_H__ */
diff --git a/inc/emergency_mode.h b/inc/emergency_mode.h
new file mode 100755 (executable)
index 0000000..957a069
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+#ifndef _QP_EMERGENCY_MODE_DEF_
+#define _QP_EMERGENCY_MODE_DEF_
+
+#define PACKAGE_EMERGENCY_MODE_SETTING "setting-emergency-efl"
+
+extern void quickpanel_emergency_mode_init(void *data);
+extern void quickpanel_emergency_mode_fini(void *data);
+extern int quickpanel_emergency_mode_is_permitted_app(const char *appid);
+extern int quickpanel_emergency_mode_is_on(void);
+extern int quickpanel_emergency_mode_notification_filter(notification_h noti, int is_delete);
+extern int quickpanel_emergency_mode_syspopup_launch(void);
+
+#endif
diff --git a/inc/handler_controller.h b/inc/handler_controller.h
new file mode 100755 (executable)
index 0000000..b3df8e3
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef HANDLER_CONTROLLER_H_
+#define HANDLER_CONTROLLER_H_
+
+extern void quickpanel_handler_text_set(char *text);
+extern void quickpanel_handler_set_visibility(Eina_Bool visible);
+
+#endif /* HANDLER_CONTROLLER_H_ */
diff --git a/inc/keyboard.h b/inc/keyboard.h
new file mode 100755 (executable)
index 0000000..7d0f956
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+
+#ifndef _QP_SERVICE_KEYBOARD_DEF_
+#define _QP_SERVICE_KEYBOARD_DEF_
+
+
+extern void quickpanel_keyboard_init(void *data);
+extern void quickpanel_keyboard_fini(void *data);
+extern void quickpanel_keyboard_openning_init(void *data);
+extern void quickpanel_keyboard_closing_fini(void *data);
+
+#endif
diff --git a/inc/list_util.h b/inc/list_util.h
new file mode 100755 (executable)
index 0000000..1069414
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef _QP_LIST_UTIL_DEF_
+#define _QP_LIST_UTIL_DEF_
+
+typedef enum {
+       QP_ITEM_TYPE_NONE = -1,
+       QP_ITEM_TYPE_SETTING = 0,
+       QP_ITEM_TYPE_BRIGHTNESS,
+       QP_ITEM_TYPE_VOICE_CONTOL,
+       QP_ITEM_TYPE_FACTORY,
+       QP_ITEM_TYPE_MULTIWINDOW,
+       QP_ITEM_TYPE_EARJACK,
+       QP_ITEM_TYPE_MINICTRL_ONGOING,
+       QP_ITEM_TYPE_MINICTRL_MIDDLE,
+       QP_ITEM_TYPE_ONGOING_NOTI_GROUP,
+       QP_ITEM_TYPE_ONGOING_NOTI,
+       QP_ITEM_TYPE_NOTI_GROUP,
+       QP_ITEM_TYPE_NOTI,
+       QP_ITEM_TYPE_BAR,
+       QP_ITEM_TYPE_MAX,
+} qp_item_type_e;
+
+typedef struct _qp_item_count {
+       int group;
+       int ongoing;
+       int noti;
+       int minicontrol;
+} qp_item_count;
+
+extern void quickpanel_list_util_set_item_type(Evas_Object *item, qp_item_type_e type);
+extern void quickpanel_list_util_del_item_type(Evas_Object *item);
+extern void quickpanel_list_util_item_unpack_by_object(Evas_Object *list , Evas_Object *item, int is_unpack_only, int is_hide);
+extern void quickpanel_list_util_sort_insert(Evas_Object *list, Evas_Object *new_obj);
+
+extern Elm_Transit *quickpanel_list_util_get_reorder_transit(Evas_Object *item, Elm_Transit *transit, int distance);
+extern void quickpanel_list_util_scroll_freeze_set(Eina_Bool is_freeze);
+
+#endif /* _QP_LIST_UTIL_DEF_ */
+
diff --git a/inc/media.h b/inc/media.h
new file mode 100755 (executable)
index 0000000..05bf7b8
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+#ifndef __QUICKPANEL_MEDIA_H__
+#define __QUICKPANEL_MEDIA_H__
+
+#define QP_PLAY_DURATION_LIMIT 15
+
+extern int quickpanel_media_player_play(sound_type_e sound_type, const char *sound_file);
+extern void quickpanel_media_player_stop(void);
+extern int quickpanel_media_is_sound_enabled(void);
+extern int quickpanel_media_is_vib_enabled(void);
+extern void quickpanel_media_play_feedback(void);
+extern int quickpanel_media_set_mute_toggle(void);
+extern void quickpanel_media_player_id_set(int id);
+extern int quickpanel_media_player_id_get(void);
+extern Eina_Bool quickpanel_media_playable_check(const char *file_path);
+extern int quickpanel_media_player_is_drm_error(int error_code);
+extern void quickpanel_media_init(void);
+extern void quickpanel_media_fini(void);
+
+#endif
diff --git a/inc/minictrl.h b/inc/minictrl.h
new file mode 100755 (executable)
index 0000000..acd4875
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef _QP_MINICONTROL_DEF_
+#define _QP_MINICONTROL_DEF_
+
+extern void quickpanel_minictrl_rotation_report(int angle);
+
+#endif
diff --git a/inc/modules.h b/inc/modules.h
new file mode 100755 (executable)
index 0000000..60b28d0
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QP_MODULES_H__
+#define __QP_MODULES_H__
+
+extern int quickpanel_modules_init(void *data);
+extern int quickpanel_modules_fini(void *data);
+extern int quickpanel_modules_suspend(void *data);
+extern int quickpanel_modules_resume(void *data);
+extern int quickpanel_modules_hib_enter(void *data);
+extern int quickpanel_modules_hib_leave(void *data);
+extern void quickpanel_modules_lang_change(void *data);
+extern void quickpanel_modules_refresh(void *data);
+extern int quickpanel_modules_opened(void *data);
+extern int quickpanel_modules_closed(void *data);
+
+#endif /* __QP_MODULES_H__ */
diff --git a/inc/noti.h b/inc/noti.h
new file mode 100755 (executable)
index 0000000..602e49f
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __NOTI_H__
+#define __NOTI_H__
+
+#define NOTI_PRESS_BG 0
+#define NOTI_PRESS_BUTTON_1 1
+
+#define QP_PRELOAD_NOTI_ICON_PATH "/usr/apps/org.tizen.quickpanel/shared/res/noti_icons"
+
+extern int quickpanel_noti_get_count(void);
+extern int quickpanel_noti_get_geometry(int *limit_h, int *limit_partial_h, int *limit_partial_w);
+extern void quickpanel_noti_closing_trigger_set(void);
+
+extern noti_node_item *quickpanel_noti_node_get_by_priv_id(int priv_id);
+extern noti_node_item *quickpanel_noti_node_get_first_noti(void);
+
+extern void quickpanel_noti_set_clear_all_status();
+
+extern void quickpanel_noti_on_clear_all_clicked(void *data, Evas_Object *obj, void *info);
+extern void quickpanel_noti_on_noti_setting_clicked(void *data, Evas_Object *obj, void *info);
+extern int quickpanel_noti_get_type_count(notification_type_e noti_type);
+extern void quickpanel_noti_init_noti_section(void);
+extern void quickpanel_noti_update_by_system_time_changed_setting_cb(system_settings_key_e  key, void *data);
+extern void quickpanel_noti_update_by_system_time_changed_vconf_cb(keynode_t *key, void *data);
+extern void quickpanel_noti_update_for_dismiss_ticker();
+extern void quickpanel_noti_update_list();
+
+#endif
diff --git a/inc/noti_led.h b/inc/noti_led.h
new file mode 100755 (executable)
index 0000000..672e4be
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef _QP_NOTI_LED_DEF_
+#define _QP_NOTI_LED_DEF_
+
+extern void quickpanel_noti_led_init(void *data, void *noti_node);
+extern void quickpanel_noti_led_fini(void *data);
+extern void quickpanel_noti_led_proc(notification_h noti, int op_type);
+
+#endif
diff --git a/inc/noti_list_item.h b/inc/noti_list_item.h
new file mode 100755 (executable)
index 0000000..84d762d
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QUICKPANEL_NOTI_LIST_ITEM_H__
+#define __QUICKPANEL_NOTI_LIST_ITEM_H__
+
+#define STATE_NORMAL 1
+#define STATE_DELETING 0
+
+#define E_DATA_NOTI_LIST_ITEM_H "noti_list_item"
+
+typedef Evas_Object *(*creater_cb)(notification_h, Evas_Object *);
+typedef void (*action_cb)(noti_node_item *, notification_ly_type_e, Evas_Object *);
+typedef void (*response_cb)(noti_node_item *, Evas_Object *);
+
+typedef enum _qp_notilistitem_state_type {
+       NOTILISTITEM_STATE_NORMAL = 0,
+       NOTILISTITEM_STATE_GETSTURE_WAIT,
+       NOTILISTITEM_STATE_GETSTURE_CANCELED,
+       NOTILISTITEM_STATE_DELETED,
+} qp_notilistitem_state_type;
+
+typedef struct _Noti_View_H {
+       char *name;
+
+       /* func */
+       creater_cb create;
+       action_cb update;
+       action_cb remove;
+} Noti_View_H;
+
+typedef struct _noti_list_item_h {
+       int status;
+       int priv_id;
+       notification_ly_type_e layout;
+       noti_node_item *noti_node;
+
+       response_cb selected_cb;
+       response_cb button_1_cb;
+       response_cb deleted_cb;
+
+       QP_VI *vi;
+       Evas_Object *gesture_layer;
+
+       int obj_w;
+       int obj_h;
+       int press_x;
+       int press_y;
+       int distance;
+       int need_to_cancel_press;
+       qp_notilistitem_state_type state;
+} noti_list_item_h;
+
+extern Evas_Object *quickpanel_noti_list_item_create(Evas_Object *parent, notification_h noti);
+extern void quickpanel_noti_list_item_update(Evas_Object *item);
+extern void quickpanel_noti_list_item_remove(Evas_Object *item);
+
+extern void quickpanel_noti_list_item_node_set(Evas_Object *item, noti_node_item *noti_node);
+extern void *quickpanel_noti_list_item_node_get(Evas_Object *item);
+extern int quickpanel_noti_list_item_get_status(Evas_Object *item);
+extern void quickpanel_noti_list_item_set_status(Evas_Object *item, int status);
+
+extern void quickpanel_noti_list_item_set_item_selected_cb(Evas_Object *item, response_cb selected_cb);
+extern void quickpanel_noti_list_item_set_item_button_1_cb(Evas_Object *item, response_cb callback);
+extern void quickpanel_noti_list_item_set_item_deleted_cb(Evas_Object *item, response_cb callback);
+
+extern noti_list_item_h *quickpanel_noti_list_item_handler_get(Evas_Object *item);
+#endif
diff --git a/inc/noti_listbox.h b/inc/noti_listbox.h
new file mode 100755 (executable)
index 0000000..15e0950
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QUICKPANEL_NOTI_LISTBOX_H__
+#define __QUICKPANEL_NOTI_LISTBOX_H__
+
+#define LISTBOX_INSERT_AFTER -1
+#define LISTBOX_PREPEND 1
+#define LISTBOX_APPEND 0
+
+extern Evas_Object *quickpanel_noti_listbox_create(Evas_Object *parent, void *data, qp_item_type_e item_type);
+extern void quickpanel_noti_listbox_remove(Evas_Object *listbox);
+extern void quickpanel_noti_listbox_add_item(Evas_Object *listbox, Evas_Object *item, int is_prepend, Evas_Object *noti_section);
+extern void quickpanel_noti_listbox_remove_item(Evas_Object *listbox, Evas_Object *item, int with_animation);
+extern void quickpanel_noti_listbox_rotation(Evas_Object *listbox, int angle);
+extern void quickpanel_noti_listbox_remove_all_item(Evas_Object *listbox, int with_animation);
+extern void quickpanel_noti_listbox_set_item_deleted_cb(Evas_Object *listbox, void(*deleted_cb)(void *data, Evas_Object *obj));
+extern void quickpanel_noti_listbox_update(Evas_Object *listbox);
+extern void quickpanel_noti_listbox_update_item(Evas_Object *listbox, Evas_Object *item);
+extern int quickpanel_noti_listbox_get_item_count(Evas_Object *listbox);
+extern void quickpanel_noti_listbox_items_visibility_set(Evas_Object *listbox, int is_visible);
+extern int quickpanel_noti_listbox_get_geometry(Evas_Object *listbox, int *limit_h, int *limit_partial_h, int *limit_partial_w);
+extern void quickpanel_noti_listbox_closing_trigger_set(Evas_Object *listbox);
+extern void quickpanel_noti_listbox_update_item_background_color(void);
+#endif
diff --git a/inc/noti_node.h b/inc/noti_node.h
new file mode 100755 (executable)
index 0000000..474ba2c
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QUICKPANEL_NOTI_NODE_H__
+#define __QUICKPANEL_NOTI_NODE_H__
+
+typedef struct _noti_node {
+       GHashTable *table;
+       int n_ongoing;
+       int n_noti;
+} noti_node;
+
+typedef struct _noti_node_item {
+       notification_h noti;
+       void *view;
+} noti_node_item;
+
+extern void quickpanel_quickpanel_noti_node_create(noti_node **handle);
+extern void quickpanel_noti_node_destroy(noti_node **handle);
+extern noti_node_item *quickpanel_noti_node_add(noti_node *handle, notification_h noti, void *view);
+extern void quickpanel_noti_node_remove(noti_node *handle, int priv_id);
+extern void quickpanel_noti_node_remove_all(noti_node *handle);
+extern noti_node_item *quickpanel_noti_node_get(noti_node *handle, int priv_id);
+extern int quickpanel_noti_node_get_item_count(noti_node *handle, notification_type_e noti_type);
+extern void quickpanel_noti_node_create(noti_node **handle);
+
+#endif
diff --git a/inc/noti_section.h b/inc/noti_section.h
new file mode 100755 (executable)
index 0000000..681a587
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QUICKPANEL_NOTI_SECTION_H__
+#define __QUICKPANEL_NOTI_SECTION_H__
+
+extern Evas_Object *quickpanel_noti_section_create(Evas_Object *parent, qp_item_type_e type);
+extern void quickpanel_noti_section_update(Evas_Object *noti_section, int noti_count);
+extern void quickpanel_noti_section_remove(Evas_Object *noti_section) ;
+extern void quickpanel_noti_section_set_deleted_cb(Evas_Object *noti_section, Evas_Object_Event_Cb func, void *data);
+
+#endif
diff --git a/inc/noti_util.h b/inc/noti_util.h
new file mode 100755 (executable)
index 0000000..1133566
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef _QP_NOTI_UTIL_DEF_
+#define _QP_NOTI_UTIL_DEF_
+
+#define QP_SHARED_ICON_FOLDER_NAME "noti_icons"
+#define QP_DEFAULT_ICON_NAME   "noti_icons/quickpanel_icon_default.png"
+
+extern int quickpanel_noti_util_get_event_count_from_noti(notification_h noti);
+extern int quickpanel_noti_util_get_event_count_by_pkgname(const char *pkgname);
+extern char *quickpanel_noti_util_get_time(time_t t, char *buf, int buf_len);
+extern char *quickpanel_noti_util_get_text(notification_h noti, notification_text_type_e text_type);
+extern char *quickpanel_noti_util_get_hidden_text(notification_h noti, notification_text_type_e text_type);
+extern char *quickpanel_noti_util_get_icon_from_app_info(notification_h noti);
+extern char *quickpanel_noti_util_get_icon_from_noti_info(notification_h noti, notification_image_type_e type);
+extern void quickpanel_noti_util_set_hidden_icon(Evas_Object *item, notification_h noti);
+extern void quickpanel_noti_util_set_icon(Evas_Object *item, notification_h noti);
+extern qp_privacy_mode quickpanel_noti_util_get_noti_privacy_mode(notification_h noti);
+
+#endif
diff --git a/inc/noti_view.h b/inc/noti_view.h
new file mode 100755 (executable)
index 0000000..7367de5
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+#ifndef _QP_NOTI_VIEW_H_
+#define _QP_NOTI_VIEW_H_
+
+extern int quickpanel_noti_view_is_view_handler_changed(Evas_Object *item, notification_h noti);
+
+#endif
diff --git a/inc/noti_win.h b/inc/noti_win.h
new file mode 100755 (executable)
index 0000000..4351d94
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __NOTI_WIN_H__
+#define __NOTI_WIN_H__
+
+enum Noti_Orient {
+       NOTI_ORIENT_TOP = 0,
+       NOTI_ORIENT_BOTTOM,
+       NOTI_ORIENT_LAST
+} ;
+
+enum noti_layout_type {
+       NOTI_LAYOUT_DEFAULT = 0,
+       NOTI_LAYOUT_ENTRY,
+       NOTI_LAYOUT_BUTTON,
+} ;
+
+/* Creates and return a new window (of widget type elm_win) of width equal to
+   root window
+ */
+extern Evas_Object *quickpanel_noti_win_add(Evas_Object *parent);
+
+/* Sets an Evas Object as content of the notification window created using
+   noti_win_add
+ */
+extern void quickpanel_noti_win_content_set(Evas_Object *obj, Evas_Object *content);
+
+/* Sets the orientation of the notification window, this can be of type
+   Noti_Orient
+ */
+extern void quickpanel_noti_win_orient_set(Evas_Object *obj, enum Noti_Orient orient);
+
+/* Sets the notification window size*/
+extern void quickpanel_noti_win_resize_height(Evas_Object *obj, enum noti_layout_type type, int entry_extended_size, bool force);
+#endif
diff --git a/inc/page_base.h b/inc/page_base.h
new file mode 100755 (executable)
index 0000000..3afb671
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QUICKPANEL_PAGE_BASE_H__
+#define __QUICKPANEL_PAGE_BASE_H__
+
+extern Evas_Object *quickpanel_page_base_create(Evas_Object *parent, void *data);
+extern Evas_Object *quickpanel_page_base_view_get(const char *view_name);
+extern void quickpanel_page_secured_lock_set(qp_secured_lock_state_e state);
+extern void quickpanel_page_secured_lock_text_set(void);
+
+#endif
diff --git a/inc/pager.h b/inc/pager.h
new file mode 100755 (executable)
index 0000000..a2516b9
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QUICKPANEL_PAGER_H__
+#define __QUICKPANEL_PAGER_H__
+
+
+typedef struct _QP_Page_Handler {
+       int status;
+       char *name;
+       /* func */
+       void (*content_resize)(int width, int height, const char *signal);
+       void (*mapbuf_enable_set)(Eina_Bool is_enable);
+       int (*down_cb)(void *, void *);
+       int (*move_cb)(void *, void *);
+       int (*up_cb)(void *, void *);
+       int (*scroll_start_cb)(void *, void *);
+       int (*scroll_done_cb)(void *, void *);
+       int (*page_changed_cb)(void *, void *);
+} QP_Page_Handler;
+
+typedef enum _qp_pager_page_type {
+       PAGE_IDX_MAIN = 0,
+       PAGE_IDX_EDITING,       // Not supported
+} qp_pager_page_type;
+
+extern Evas_Object *quickpanel_pager_new(Evas_Object *parent, void *data);
+extern void quickpanel_pager_destroy(void);
+extern Evas_Object *quickpanel_pager_view_get(const char *view_name);
+extern int quickpanel_pager_current_page_get(void);
+extern void quickpanel_pager_page_set(int page_index, int need_resize);
+
+#endif
diff --git a/inc/pager_common.h b/inc/pager_common.h
new file mode 100755 (executable)
index 0000000..9917104
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QUICKPANEL_PAGER_COMMON_H__
+#define __QUICKPANEL_PAGER_COMMON_H__
+
+extern void quickpanel_page_handler_set(Evas_Object *page, QP_Page_Handler *handler);
+extern QP_Page_Handler *quickpanel_page_handler_get(Evas_Object *page);
+extern void quickpanel_page_scroll_hold_set(Eina_Bool is_freeze);
+extern void quickpanel_page_scroll_freeze_set(Eina_Bool is_freeze);
+extern void quickpanel_page_get_touched_pos(int *x, int *y);
+extern void quickpanel_page_get_recoordinated_pos(int local_x, int local_y, int *x, int *y);
+extern void quickpanel_page_editing_icon_visible_status_update(void);
+
+#endif
diff --git a/inc/preference.h b/inc/preference.h
new file mode 100755 (executable)
index 0000000..2192ae9
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QP_PREFERENCE_H_
+#define __QP_PREFERENCE_H_
+
+#define PREF_LEN_VALUE_MAX 256
+
+#define PREF_SECTION "quickpanel"
+#define PREF_BRIGHTNESS_KEY "brightness"
+#define PREF_QUICKSETTING_ORDER_KEY "quicksetting_order"
+#define PREF_QUICKSETTING_FEATURED_NUM_KEY "quicksetting_featured_num"
+#define PREF_SHORTCUT_ENABLE_KEY "shortcut_enable"
+#define PREF_SHORTCUT_EARPHONE_ORDER_KEY "shortcut_earphone"
+
+#define PREF_BRIGHTNESS PREF_SECTION":"PREF_BRIGHTNESS_KEY
+#define PREF_QUICKSETTING_ORDER PREF_SECTION":"PREF_QUICKSETTING_ORDER_KEY
+#define PREF_QUICKSETTING_FEATURED_NUM PREF_SECTION":"PREF_QUICKSETTING_FEATURED_NUM_KEY
+#define PREF_SHORTCUT_ENABLE PREF_SECTION":"PREF_SHORTCUT_ENABLE_KEY
+#define PREF_SHORTCUT_EARPHONE_ORDER PREF_SECTION":"PREF_SHORTCUT_EARPHONE_ORDER_KEY
+
+extern int quickpanel_preference_get(const char *key, char **value);
+extern const char *quickpanel_preference_default_get(const char *key);
+extern int quickpanel_preference_set(const char *key, char *value);
+
+#endif
diff --git a/inc/quickpanel-ui.h b/inc/quickpanel-ui.h
new file mode 100755 (executable)
index 0000000..5ab922d
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QUICKPANEL_UI_H__
+#define __QUICKPANEL_UI_H__
+
+#if !defined(PACKAGE)
+#  define PACKAGE      "quickpanel"
+#endif
+
+
+#  define EDJDIR       "edje"
+#  define RESDIR       "res"
+
+
+#if !defined(QP_SCREENREADER_ENABLE)
+       #define QP_SCREENREADER_ENABLE
+#endif
+
+#if 0//!defined(QP_EMERGENCY_MODE_ENABLE)
+       #define QP_EMERGENCY_MODE_ENABLE
+#endif
+
+#if !defined(QP_REMINDER_ENABLE)
+       #define QP_REMINDER_ENABLE
+#endif
+
+#if !defined(QP_SETTING_ENABLE)
+       #define QP_SETTING_ENABLE
+#endif
+
+#if !defined(QP_BRIGHTNESS_ENABLE)
+       #define QP_BRIGHTNESS_ENABLE
+#endif
+
+#if !defined(QP_MINICTRL_ENABLE)
+       #define QP_MINICTRL_ENABLE
+#endif
+
+#if !defined(QP_ANIMATED_IMAGE_ENABLE)
+       #define QP_ANIMATED_IMAGE_ENABLE
+#endif
+
+#if !defined(PROGRESSBAR_ENABLED)
+       #define PROGRESSBAR_ENABLED
+#endif
+
+#if !defined(QP_VOICE_CONTROL_ENABLE)
+       #define QP_VOICE_CONTROL_ENABLE
+#endif
+
+/* EDJ theme */
+#define DEFAULT_EDJ            EDJDIR"/"PACKAGE".edj"
+#define DEFAULT_THEME_EDJ      EDJDIR"/"PACKAGE"_theme.edj"
+#define ACTIVENOTI_EDJ         EDJDIR"/"PACKAGE"_activenoti.edj"
+
+#define _EDJ(o) elm_layout_edje_get(o)
+
+#undef _
+#define _(str) gettext(str)
+#define _NOT_LOCALIZED(str) (str)
+
+#define STR_ATOM_WINDOW_INPUT_REGION    "_E_COMP_WINDOW_INPUT_REGION"
+#define STR_ATOM_WINDOW_CONTENTS_REGION "_E_COMP_WINDOW_CONTENTS_REGION"
+
+#define MAX_NAM_LEN 4096
+#define MAX_FILE_PATH_LEN 1024
+
+#define INDICATOR_COVER_W 64
+#define INDICATOR_COVER_H 60
+
+#define _NEWLINE '\n'
+#define _SPACE ' '
+
+#if !defined(VENDOR)
+#define QP_PKG_QUICKPANEL      "org.tizen.quickpanel"
+#define QP_SETTING_PKG_SETTING "org.tizen.setting"
+#define QP_SETTING_PKG_NOTI    "org.tizen.setting-notification"
+#define QP_MINIAPPTRAY_PKG "org.tizen.mini-apps"
+#else
+#define QP_PKG_QUICKPANEL      VENDOR".quickpanel"
+#define QP_SETTING_PKG_SETTING VENDOR".setting"
+#define QP_MINIAPPTRAY_PKG VENDOR".mini-apps"
+#endif
+#define QP_SEARCH_PKG "org.tizen.sfinder"
+
+
+typedef enum {
+       QP_LOCKSCREEN_STATE_UNLOCK,
+       QP_LOCKSCREEN_STATE_LOCK
+} qp_lock_state_e;
+
+typedef enum {
+       QP_PRIVACY_MODE_SHOW_ALL,
+       QP_PRIVACY_MODE_HIDE_CONTENT,
+       QP_PRIVACY_MODE_DO_NOT_SHOW,
+} qp_privacy_mode;
+
+
+struct appdata {
+       Evas_Object *win;
+       tzsh_h tzsh;
+       tzsh_quickpanel_service_h quickpanel_service;
+
+       Evas_Object *view_root;
+       Evas_Object *view_page_zero;
+       Evas_Object *ly; //view_base
+
+       Evas *evas;
+
+       Evas_Object *scroller;
+       Evas_Object *list;
+       Evas_Object *popup;
+       int angle;
+       double scale;
+       char *theme;
+
+       int win_width;
+       int win_height;
+       int gl_limit_height;
+       int gl_distance_from_top;
+       int gl_distance_to_bottom;
+
+       int is_emul; /* 0 : target, 1 : emul */
+       int is_suspended;
+       int is_opened;
+       int opening_reason;
+
+       Ecore_Event_Handler *hdl_client_message;
+       Ecore_Event_Handler *hdl_hardkey_down;
+       Ecore_Event_Handler *hdl_hardkey_up;
+       Eina_Bool is_hardkey_cancel;
+       qp_lock_state_e is_lock_launched;
+       qp_privacy_mode system_privacy_mode;
+};
+
+typedef struct _QP_Module {
+       char *name;
+       /* func */
+       int (*init) (void *);
+       void (*init_job_cb) (void *);
+       int (*fini) (void *);
+       int (*suspend) (void *);
+       int (*resume) (void *);
+       int (*hib_enter) (void *);
+       int (*hib_leave) (void *);
+       void (*lang_changed) (void *);
+       void (*refresh) (void *);
+       unsigned int (*get_height) (void *);
+       void (*qp_opened) (void *);
+       void (*qp_closed) (void *);
+       void (*mw_enabled) (void *);
+       void (*mw_disabled) (void *);
+
+       /* do not modify this area */
+       /* internal data */
+       Eina_Bool state;
+} QP_Module;
+
+typedef enum {
+       QP_SECURED_LOCK_OFF,
+       QP_SECURED_LOCK_ON
+} qp_secured_lock_state_e;
+
+extern qp_secured_lock_state_e quickpanel_get_secured_lock_state(void);
+extern void *quickpanel_get_app_data(void);
+extern Elm_Transit *quickpanel_brightness_transparent_background_set(bool on);
+
+#define APP_CONTROL_OPERATION_SECURED_LOCK "http://tizen.org/appcontrol/operation/secured_lock"
+#define QP_QUICK_SETTINGS "qp_quick_settings"
+#define QP_QUICK_SETTINGS_EVENT_CLICKED "_clicked"
+#define QP_QUICK_SETTINGS_EVENT_LONGPRESSED "_longpressed"
+
+#endif                         /* __QUICKPANEL_UI_H__ */
diff --git a/inc/quickpanel_def.h b/inc/quickpanel_def.h
new file mode 100755 (executable)
index 0000000..affcb77
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+
+#ifndef __QUICKPANEL_EDC_DEF_H__
+#define __QUICKPANEL_EDC_DEF_H__
+
+#define QP_BACKGROUND_COLOR "B011"
+
+#define QP_WIN_W 480
+#define QP_WIN_H 800
+
+#define QP_BG_VISIBILITY       1
+#define QP_BG_COLOR    "AO001"
+
+#define QP_INDICATOR_H 0
+#define QP_HANDLE_H    50
+
+#define QP_SPN_H 41 //66
+#define QP_SPN_TEXT_W 343 //520
+
+#define QP_DATE_H      50
+
+#define QP_COLOR_BLACK 0 0 0 255
+
+#define QP_SETTING_NUM_PORTRAIT_ICONS 5
+#define QP_SETTING_NUM_MINIMUM_ICON 8
+#define QP_SETTING_NUM_TOTAL_ICON 8
+
+#define QP_SETTING_MARGIN_L_W_P 0
+#define QP_SETTING_MARGIN_L_W_L 0
+#define QP_SETTING_MARGIN_R_W_P 0
+#define QP_SETTING_MARGIN_R_W_L 0
+
+#define QP_SETTING_DIVIDER_W_P 0
+#define QP_SETTING_DIVIDER_W_L 0
+#define QP_SETTING_ICON_MIN_H 66//154
+
+#define QP_SETTING_BG_H        151
+#define QP_SETTING_ICON_DRAGGING_BG_CORRECTION_W_P 0
+#define QP_SETTING_ICON_DRAGGING_BG_CORRECTION_W_L 0
+#define QP_SETTING_ICON_DRAGGING_BG_MIN_H 72
+#define QP_SETTING_ICON_DRAGGING_MARGIN 0
+
+// WVGA
+#define QP_SETTING_ICON_MIN_WH_WVGA 66
+#define QP_SETTING_ICON_BG_MIN_W_P_WVGA 96
+#define QP_SETTING_ICON_BG_MIN_W_P_TEXT_OFFSET_WVGA 7
+#define QP_SETTING_ICON_BG_MIN_W_L_WVGA 100
+#define QP_SETTING_ICON_BG_MIN_W_L_TEXT_OFFSET_WVGA 4
+#define QP_SETTING_ICON_DRAGGING_BG_MIN_W_WVGA 66
+
+// HD
+#define QP_SETTING_ICON_MIN_WH_HD 72
+#define QP_SETTING_ICON_BG_MIN_W_P_HD 109
+#define QP_SETTING_ICON_BG_MIN_W_P_TEXT_OFFSET_HD 0
+#define QP_SETTING_ICON_BG_MIN_W_L_HD 107
+#define QP_SETTING_ICON_BG_MIN_W_L_TEXT_OFFSET_HD 0
+#define QP_SETTING_ICON_DRAGGING_BG_MIN_W_HD 72
+
+#define QP_THEME_BRIGHTNESS_BG_COLOR "B011"
+
+#define QP_THEME_BG_VISIBILITY                         0
+#define QP_THEME_BG_COLOR                              "B011"
+#define QP_THEME_BANDED_COLOR  "B0211"
+#define QP_THEME_ITEM_BG_COLOR "B041"
+#define QP_THEME_ITEM_BG_PRESS_COLOR "B041P"
+#define QP_THEME_ITEM_BG_PRESS_DIM_COLOR "AO013DP"
+#define QP_THEME_SECTION_ICON_DIVIDER_COLOR "AO003"
+
+#define QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT 0
+#define QP_THEME_LIST_ITEM_BRIGHTNESS_HEIGHT   76
+#define QP_THEME_LIST_ITEM_MULTIWINDOW_HEIGHT 96 //135
+#define QP_THEME_LIST_ITEM_SHORCUT_SOUND_HEIGHT 96 //135
+#define QP_THEME_LIST_ITEM_SHORCUT_FEATURED_HEIGHT 96 //84
+#define QP_THEME_LIST_ITEM_MINICONTRL_HEIGHT 115 //180
+#define QP_THEME_LIST_ITEM_ONGOING_PROGRESS_HEIGHT 96//135
+#define QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT 96 //135
+#define QP_THEME_LIST_ITEM_ONGOING_EVENT_LINE3_HEIGHT 96
+#define QP_THEME_LIST_ITEM_NOTI_SECTION_HEIGHT 51 //80
+#define QP_THEME_LIST_ITEM_NOTIFICATION_LISTTYPE_HEIGHT 96
+#define QP_THEME_LIST_ITEM_NOTIFICATION_LEGACY_SINGLE_MULTI_HEIGHT 96 //246
+
+#define QP_THEME_LIST_ITEM_ICON_COLOR  "W0661"
+
+#define BOX_PART_ICON "object.icon"
+#define BOX_PART_ICON_SUB "object.icon.sub"
+#define BOX_ICON_BG_SIZE_W 70
+#define BOX_ICON_BG_SIZE_H 70
+#define BOX_ICON_SIZE_W 70
+#define BOX_ICON_SIZE_H 70
+#define BOX_ICON_SUB_SIZE_W 29 //44
+#define BOX_ICON_SUB_SIZE_H 29 //44
+#define BOX_TEXT_TOP_PADDING 15
+#define BOX_ICON_TOP_PADDING 13
+
+
+#define BOX_COLOR_BG QP_THEME_ITEM_BG_COLOR
+#define BOX_COLOR_BG_HIGHLIGHT QP_THEME_ITEM_BG_PRESS_COLOR
+#define BOX_COLOR_BG_HIGHLIGHT_DIM QP_THEME_ITEM_BG_PRESS_DIM_COLOR
+#define BOX_WIDTH_P 224 //340
+#define BOX_HEIGHT_P 183 //278
+#define BOX_WIDTH_L 269 //408
+#define BOX_HEIGHT_L 183 //278
+
+#define BOX_MARGIN_L_TEXT_H 10 //16
+#define BOX_MARGIN_R_TEXT_H 6 //10
+#define BOX_TEXT_CONTENTS_HEIGHT 25 //38
+#define BOX_TEXT_INFO_HEIGHT 25 //38
+#define BOX_TEXT_SUB_PADDING_WIDTH -2 //-3
+
+#endif /*__QUICKPANEL_EDC_DEF_H__*/
diff --git a/inc/reminder.h b/inc/reminder.h
new file mode 100755 (executable)
index 0000000..1ced530
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef _QP_REMINDER_DEF_
+#define _QP_REMINDER_DEF_
+
+extern void quickpanel_reminder_init(void *data);
+extern void quickpanel_reminder_fini(void *data);
+extern void quickpanel_reminder_start(void *data);
+extern void quickpanel_reminder_stop(void *data);
+
+#endif
diff --git a/inc/setting_module_api.h b/inc/setting_module_api.h
new file mode 100755 (executable)
index 0000000..057803a
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __SETTING_MODULE_API_H__
+#define __SETTING_MODULE_API_H__
+
+#define FLAG_VALUE_VOID 0xDEADDEAD
+
+#define FLAG_ENABLE 1
+#define FLAG_DISABLE 0
+
+#define FLAG_TURN_ON 1
+#define FLAG_TURN_OFF 0
+
+#define DPM_SYSPOPUP "org.tizen.dpm-syspopup"
+
+typedef enum _qp_setting_icon_container_type {
+       QP_SETTING_ICON_CONTAINER_NONE = -1,
+       QP_SETTING_ICON_CONTAINER_FEATURED = 0,
+       QP_SETTING_ICON_CONTAINER_ALL_LIST,
+} qp_setting_icon_container_type;
+
+typedef enum _qp_setting_icon_event_type {
+       QP_SETTING_ICON_CLICKED,
+       QP_SETTING_ICON_LONGPRESSED,
+} qp_setting_icon_event_type;
+
+
+extern Evas_Object *quickpanel_setting_module_icon_create(QP_Module_Setting *module, Evas_Object *parent);
+extern void quickpanel_setting_module_icon_add(QP_Module_Setting *module, Evas_Object *icon, qp_setting_icon_container_type container_type);
+extern void quickpanel_setting_module_icon_remove(QP_Module_Setting *module, Evas_Object *icon);
+extern void quickpanel_setting_module_icon_state_set(QP_Module_Setting *module, int state);
+extern int quickpanel_setting_module_icon_state_get(QP_Module_Setting *module);
+extern Evas_Object *quickpanel_setting_module_icon_get(QP_Module_Setting *module, qp_setting_icon_container_type container_type);
+extern void quickpanel_setting_module_icon_view_update(QP_Module_Setting *module, int flag_extra_1, int flag_extra_2);
+extern void quickpanel_setting_module_icon_view_update_text(QP_Module_Setting *module);
+extern void quickpanel_setting_module_icon_status_update(QP_Module_Setting *module, int flag_extra_1, int flag_extra_2);
+extern int quickpanel_setting_module_is_icon_clickable(QP_Module_Setting *module);
+extern int quickpanel_setting_module_is_immediate_actionable(QP_Module_Setting *module, qp_setting_icon_event_type event_type);
+extern void quickpanel_setting_module_icon_timer_add(QP_Module_Setting *module);
+extern void quickpanel_setting_module_icon_timer_del(QP_Module_Setting *module);
+extern void quickpanel_setting_module_progress_mode_set(QP_Module_Setting *module, int is_enable, int is_request_on);
+extern void quickpanel_setting_module_icon_destroy(QP_Module_Setting *module, Evas_Object *icon);
+extern QP_Module_Setting *quickpanel_setting_module_get_from_icon(Evas_Object *icon);
+extern void quickpanel_setting_module_syspopup_launch(char *appid, char *key, char *value);
+extern int quickpanel_setting_module_dpm_state_get(char *module_name, int *state);
+extern void quickpanel_setting_module_operate(const char *module_name);
+extern void quickpanel_setting_module_longpress_operate(const char *module_name);
+
+#endif /* __SETTING_MODULE_API_H__ */
diff --git a/inc/setting_utils.h b/inc/setting_utils.h
new file mode 100755 (executable)
index 0000000..620c1ea
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __SETTING_UTILS_H__
+#define __SETTING_UTILS_H__
+
+
+#define TIMER_CONTINUE 1
+#define TIMER_STOP     0
+#define TIMER_COUNT    10
+
+#define QP_SETTING_BASE_PART "qp.base.setting.swallow"
+#define QP_SETTING_SCROLLER_PART_HD "setting.container.swallow.hd"
+#define QP_SETTING_SCROLLER_PART_WVGA "setting.container.swallow.wvga"
+#define QP_SETTING_CONTAINER_ICON_PART "setting.icon.swallow"
+#define QP_SETTING_BRIGHTNESS_PART_HD "brightness.container.swallow.hd"
+#define QP_SETTING_BRIGHTNESS_PART_WVGA "brightness.container.swallow.wvga"
+
+extern int quickpanel_setting_start(Evas_Object *base);
+extern int quickpanel_setting_stop(Evas_Object *base, int is_bring_in);
+
+extern Evas_Object *quickpanel_setting_scroller_get(Evas_Object *base);
+extern int quickpanel_setting_set_scroll_page_width(void *data);
+extern int quickpanel_setting_layout_set(Evas_Object *base, Evas_Object *setting);
+extern Evas_Object *quickpanel_setting_layout_get(Evas_Object *base, const char *setting_part);
+
+extern int quickpanel_setting_layout_remove(Evas_Object *base);
+extern int quickpanel_setting_icon_text_set(Evas_Object *icon, const char *text, int state);
+extern void quickpanel_setting_icon_access_text_set(Evas_Object *icon, const char *text);
+extern int quickpanel_setting_icon_content_set(Evas_Object *icon, Evas_Object *content);
+
+extern Evas_Object *quickpanel_setting_box_get(Evas_Object *base);
+extern Evas_Object *quickpanel_setting_icon_new(Evas_Object *parent);
+extern Evas_Object *quickpanel_setting_icon_image_new(Evas_Object *parent, const char *img_path);
+extern int quickpanel_setting_icon_pack(Evas_Object *box, Evas_Object *icon, int is_attach_divider);
+extern void quickpanel_setting_icon_unpack_all(Evas_Object *box);
+extern int quickpanel_setting_container_rotation_set(Evas_Object *base, int angle);
+extern int quickpanel_setting_icons_rotation_set(Evas_Object *base, int angle);
+extern int quickpanel_setting_icons_dragging_set(Evas_Object *icon, int is_on);
+extern int quickpanel_setting_icons_screen_mode_set(Evas_Object *icon, int screen_mode);
+extern void quickpanel_setting_icons_emit_sig(Evas_Object *icon, const char *signal);
+extern Evas_Object *quickpanel_setting_icon_content_get(Evas_Object *icon);
+extern int quickpanel_setting_icon_content_set(Evas_Object *icon, Evas_Object *content);
+
+extern int quickpanel_setting_icon_state_set(Evas_Object *icon, int is_on);
+extern int quickpanel_setting_icon_state_progress_set(Evas_Object *icon);
+
+// Do not use full window popup in quickpanel
+extern void quickpanel_setting_create_confirm_popup(Evas_Object *parent, char *title, char *text, Evas_Smart_Cb func);
+extern void quickpanel_setting_create_2button_confirm_popup(Evas_Object *parent, char *title, char *text, char *btn1_text, Evas_Smart_Cb btn1_func, char *btn2_text, Evas_Smart_Cb btn2_func);
+extern void quickpanel_setting_create_timeout_popup(Evas_Object *parent, char *msg);
+
+extern int quickpanel_setting_scroll_page_get(void *data);
+extern Eina_Bool quickpanel_setting_get_secured_lock_state(void);
+extern void quickpanel_setting_show_not_supported_message(void);
+#endif /* __SETTING_UTILS_H__ */
diff --git a/inc/settings.h b/inc/settings.h
new file mode 100755 (executable)
index 0000000..1668683
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __SETTING_H__
+#define __SETTING_H__
+
+#define MODULE_BLANK "blank"
+#define FILE_QP_BUTTON_ORDER_INI DATADIR_RW"/qp_setting_order.ini"
+#define E_DATA_MODULE_INFO "module_info"
+
+#define ICON_VIEW_STATE_OFF 0
+#define ICON_VIEW_STATE_ON 1
+#define ICON_VIEW_STATE_DIM 2
+
+#define STATE_ICON_NOT_LOADED 0
+#define STATE_ICON_IDLE 1
+#define STATE_ICON_BUSY 2
+
+
+#define QS_NOT_SUPPORT_MSG _NOT_LOCALIZED("Not supported")
+
+typedef enum _qp_setting_icon_state_type {
+       QP_SETTING_ICON_STATE_NOT_LOADED,
+       QP_SETTING_ICON_STATE_IDLE,
+       QP_SETTING_ICON_STATE_BUSY,
+} qp_setting_icon_state_type;
+
+typedef enum _qp_setting_icon_image_type {
+       QP_SETTING_ICON_NORMAL,
+       QP_SETTING_ICON_HIGHLIGHT,
+       QP_SETTING_ICON_DIM,
+} qp_setting_icon_image_type;
+
+typedef  struct _Setting_Activity_Handler {
+       char *command;
+       void (*handler)(void *data);
+} Setting_Activity_Handler;
+
+typedef struct _QP_Module_Setting QP_Module_Setting;
+typedef struct _QP_Setting_Loaded_Item QP_Setting_Loaded_Item;
+
+struct _QP_Module_Setting {
+       char *name;
+       char *setting_pkgname;
+       int is_disable_feedback;
+
+       /* func */
+       int (*init) (void *);
+       int (*fini) (void *);
+       int (*suspend) (void *);
+       int (*resume) (void *);
+       int (*hib_enter) (void *);
+       int (*hib_leave) (void *);
+       void (*lang_changed) (void *);
+       void (*refresh) (void *);
+       void (*qp_opened) (void *);
+       void (*qp_closed) (void *);
+
+       const char *(*label_get) (void);
+       const char *(*icon_get) (qp_setting_icon_image_type type);
+       int (*supported_get) (void);
+       void (*view_update)(Evas_Object *, int, int, int);
+       void (*status_update)(QP_Module_Setting *, int, int);
+       void (*state_change) (QP_Module_Setting *);
+
+       int (*handler_ipc)(const char *, void *);
+       Edje_Signal_Cb handler_press;
+       void (*handler_longpress) (void *);
+
+       /* do not modify this area */
+       /* internal data */
+       Eina_Bool is_loaded;
+       QP_Setting_Loaded_Item *loader;
+       Eina_List *view_list;
+};
+
+struct _QP_Setting_Loaded_Item {
+       QP_Module_Setting *module;
+       void *app_data;
+       int state_icon;
+
+       Evas_Object *view;
+       Ecore_Timer *timer;
+       int state;
+       void *extra_handler_1;
+};
+
+extern void quickpanel_setting_save_list_to_file(Eina_List *list, int num_featured);
+extern int quickpanel_settings_featured_list_validation_check(char *order);
+extern void quickpanel_settings_featured_list_get(Eina_List **list);
+extern void quickpanel_settings_all_list_get(Eina_List **list);
+
+extern QP_Module_Setting *quickpanel_settings_module_get_by_name(const char *name);
+extern int quickpanel_settings_module_count_get(void);
+
+#endif
diff --git a/inc/settings_gridbox.h b/inc/settings_gridbox.h
new file mode 100755 (executable)
index 0000000..deb94a6
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+
+#ifndef __QUICKPANEL_SETTINGS_GRIDBOX_H__
+#define __QUICKPANEL_SETTINGS_GRIDBOX_H__
+
+#define SETTINGS_GRIDBOX_PREPEND 1
+#define SETTINGS_GRIDBOX_APPEND 0
+#define SETTINGS_GRIDBOX_ITEM_ICON "item_icon"
+#define SETTINGS_GRIDBOX_ITEM_DIVIDER "item_divider"
+
+extern Evas_Object *quickpanel_settings_gridbox_create(Evas_Object *parent, void *data);
+extern void quickpanel_settings_gridbox_remove(Evas_Object *gridbox);
+extern void quickpanel_settings_gridbox_item_add(Evas_Object *gridbox, Evas_Object *item, const char *item_type, int is_prepend);
+extern void quickpanel_settings_gridbox_item_remove(Evas_Object *gridbox, Evas_Object *item);
+extern void quickpanel_settings_gridbox_item_remove_all(Evas_Object *gridbox);
+extern void quickpanel_settings_gridbox_rotation(Evas_Object *gridbox, int angle);
+extern int quickpanel_settings_gridbox_item_count_get(Evas_Object *gridbox);
+extern int quickpanel_settings_gridbox_item_index_get(Evas_Object *gridbox, int touch_x, int touch_y);
+extern void quickpanel_settings_gridbox_unpack_all(Evas_Object *gridbox);
+
+#endif
diff --git a/inc/settings_icon_common.h b/inc/settings_icon_common.h
new file mode 100755 (executable)
index 0000000..d3bcb11
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __SETTING_ICON_COMMON_H__
+#define __SETTING_ICON_COMMON_H__
+
+extern int quickpanel_setting_icon_click_cb_add(Evas_Object *icon, Edje_Signal_Cb func, void *data);
+extern int quickpanel_setting_icon_click_cb_without_feedback_add(Evas_Object *icon, Edje_Signal_Cb func, void *data);
+extern int quickpanel_setting_icon_click_cb_del(Evas_Object *icon, Edje_Signal_Cb func);
+extern void quickpanel_setting_icon_handler_longpress(const char *pkgname, const char *key, const char *value);
+
+#endif /* __SETTING_ICON_COMMON_H__ */
diff --git a/inc/settings_view_featured.h b/inc/settings_view_featured.h
new file mode 100755 (executable)
index 0000000..5a94f9b
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+
+#ifndef __SETTING_VIEW_FEATURED_H__
+#define __SETTING_VIEW_FEATURED_H__
+
+extern Eina_Bool quickpanel_settings_is_in_left_edge(void);
+extern void quickpanel_setting_view_featured_reload(Eina_List *list_all_module, int num_featured);
+extern void quickpanel_setting_view_featured_initial_focus_set(void);
+extern void quickpanel_setting_view_featured_brightness_init(Evas_Object *brightness_view);
+
+#endif /* __SETTING_VIEW_FEATURED_H__ */
diff --git a/inc/sim_controller.h b/inc/sim_controller.h
new file mode 100755 (executable)
index 0000000..d43e9a6
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __SIM_CONTROL_H__
+#define __SIM_CONTROL_H__
+
+/**
+ * @brief Sim number
+ */
+typedef enum {
+       QUICKPANEL_PRIMARY_SIM = 0,
+       QUICKPANEL_SECONDARY_SIM,
+       QUICKPANEL_SIM_MAX,
+} quickpanel_sim_num_e;
+
+
+extern void sim_controller_init(Evas_Object *master_layout);
+extern void sim_controller_deinit(void);
+extern void sim_controller_on_language_change(void);
+
+#endif
diff --git a/inc/uninstall.h b/inc/uninstall.h
new file mode 100755 (executable)
index 0000000..cbbad32
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef _QP_SERVICE_UNINSTALL_DEF_
+#define _QP_SERVICE_UNINSTALL_DEF_
+
+
+extern void quickpanel_uninstall_init(void *data);
+extern void quickpanel_uninstall_fini(void *data);
+
+#endif
diff --git a/inc/util-time.h b/inc/util-time.h
new file mode 100755 (executable)
index 0000000..0af29c6
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __UTIL_TIME_H__
+#define __UTIL_TIME_H__
+
+#define UTIL_TIME_MERIDIEM_TYPE_NONE 0
+#define UTIL_TIME_MERIDIEM_TYPE_PRE 1
+#define UTIL_TIME_MERIDIEM_TYPE_POST 2
+
+enum qp_time_format {
+       QP_TIME_FORMAT_UNKNOWN,
+       QP_TIME_FORMAT_12,
+       QP_TIME_FORMAT_24,
+};
+
+extern void quickpanel_util_time_timer_enable_set(int is_enable);
+extern void quickpanel_util_time_formatted_date_get(void *data, time_t time, char *buf, int buf_len);
+
+#endif                         /* __UTIL_TIME_H__ */
diff --git a/inc/vi_manager.h b/inc/vi_manager.h
new file mode 100755 (executable)
index 0000000..08c67a7
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef __QUICKPANEL_VI_MANAGER_H__
+#define __QUICKPANEL_VI_MANAGER_H__
+
+
+typedef Eina_Bool(*vi_cb)(void *data);
+
+typedef enum _qp_vim_state_type {
+       VIM_STATE_NOT_READY = 0,
+       VIM_STATE_READY,
+       VIM_STATE_WORKING,
+       VIM_STATE_SUSPENDED,
+} qp_vim_state_type;
+
+typedef enum _qp_vi_state_type {
+       VI_STATE_NOT_READY = 0,
+       VI_STATE_READY = 1,
+       VI_STATE_RUNNING,
+       VI_STATE_DONE,
+       VI_STATE_INTERRUPTED,
+} qp_vi_state_type;
+
+typedef enum _qp_vi_op_type {
+       VI_OP_NONE = -1,
+       VI_OP_INSERT = 0,
+       VI_OP_UPDATE,
+       VI_OP_DELETE,
+       VI_OP_DELETE_ALL,
+       VI_OP_REORDER,
+       VI_OP_ROTATION,
+       VI_OP_RESIZE,
+} qp_vi_op_type;
+
+typedef struct _QP_VI {
+       qp_vi_state_type state;
+       qp_vi_op_type op_type;
+       qp_item_type_e item_type;
+       void *container;
+       void *target;
+       vi_cb init_cb;
+       vi_cb job_cb;
+       vi_cb done_cb;
+       vi_cb interrupt_cb;
+       int disable_interrupt_userevent;
+       int disable_freezing;
+       void *extra_data_1;
+       void *extra_data_2;
+       int extra_flag_1;
+       int extra_flag_2;
+} QP_VI;
+
+typedef  struct _qp_vi_op_table {
+       qp_vi_op_type op_type;
+       void (*handler)(void *data);
+} qp_vi_op_table;
+
+extern QP_VI *quickpanel_vi_new(void);
+extern QP_VI *quickpanel_vi_new_with_data(qp_vi_op_type op_type, qp_item_type_e item_type, void *container, void *target, vi_cb init_cb, vi_cb job_cb, vi_cb done_cb, vi_cb interrupt_cb, void *extra_data_1, void *extra_data_2, int extra_flag_1, int extra_flag_2);
+extern void quickpanel_vi_start(QP_VI *vi);
+extern void quickpanel_vi_interrupt(QP_VI *vi);
+extern void quickpanel_vi_done(QP_VI *vi);
+extern void quickpanel_vim_set_state_ready(void);
+extern void quickpanel_vim_set_state_suspend(void);
+extern double quickpanel_vim_get_duration(qp_vi_op_type op_type);
+extern void quickpanel_vi_done_cb_for_transit(void *data, Elm_Transit *transit);
+extern Elm_Transit_Tween_Mode quickpanel_vim_get_tweenmode(qp_vi_op_type op_type);
+
+extern void quickpanel_vi_user_event_add(QP_VI *vi);
+extern void quickpanel_vi_user_event_del(QP_VI *vi);
+extern void quickpanel_vi_object_event_freeze_set(Evas_Object *obj, Eina_Bool freeze);
+
+#endif
diff --git a/inc/voice_control.h b/inc/voice_control.h
new file mode 100755 (executable)
index 0000000..d47609b
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef VOICE_CONTROL_VIEW_H_
+#define VOICE_CONTROL_VIEW_H_
+
+#define VOICE_CONTOL_EDJ       EDJDIR"/quickpanel_voice_control.edj"
+
+#define QP_VOICE_CONTOL_HEIGHT 80
+#define VOICE_CONTOL_REF_APP "org.tizen.voice-control-panel"
+
+
+#endif /* VOICE_CONTROL_VIEW_H_ */
+
diff --git a/packaging/org.tizen.quickpanel.manifest b/packaging/org.tizen.quickpanel.manifest
new file mode 100755 (executable)
index 0000000..a76fdba
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+       <request>
+               <domain name="_" />
+       </request>
+</manifest>
diff --git a/packaging/org.tizen.quickpanel.spec b/packaging/org.tizen.quickpanel.spec
new file mode 100755 (executable)
index 0000000..871c76d
--- /dev/null
@@ -0,0 +1,107 @@
+%bcond_with wayland
+%define __usrdir /usr/lib/systemd/user
+%define alias org.tizen.quickpanel
+
+Name: org.tizen.quickpanel-profile_mobile
+Summary: Quick access panel for the notifications and various kinds of services.
+Version: 0.8.0
+Release: 1
+Group: Applications/Core Applications
+License: Flora-1.1
+Provides: org.tizen.quickpanel = %{version}-%{release}
+Source0: %{name}-%{version}.tar.gz
+Source103: org.tizen.quickpanel.manifest
+
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(capi-system-runtime-info)
+BuildRequires: pkgconfig(capi-system-info)
+BuildRequires: pkgconfig(capi-system-device)
+BuildRequires: pkgconfig(capi-location-manager)
+BuildRequires: pkgconfig(capi-network-wifi-manager)
+BuildRequires: pkgconfig(capi-network-bluetooth)
+BuildRequires: pkgconfig(capi-network-tethering)
+BuildRequires: pkgconfig(capi-network-connection)
+BuildRequires: pkgconfig(capi-media-player)
+BuildRequires: pkgconfig(capi-media-camera)
+BuildRequires: pkgconfig(capi-media-sound-manager)
+BuildRequires: pkgconfig(capi-media-metadata-extractor)
+BuildRequires: pkgconfig(capi-system-system-settings)
+BuildRequires: pkgconfig(capi-base-utils-i18n)
+BuildRequires: pkgconfig(capi-ui-efl-util)
+BuildRequires: pkgconfig(capi-telephony)
+BuildRequires: pkgconfig(tapi)
+BuildRequires: pkgconfig(feedback)
+BuildRequires: pkgconfig(notification)
+BuildRequires: pkgconfig(badge)
+BuildRequires: pkgconfig(vconf)
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(ecore)
+BuildRequires: pkgconfig(edje)
+BuildRequires: pkgconfig(capi-base-utils-i18n)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(bundle)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(syspopup-caller)
+BuildRequires: pkgconfig(minicontrol-viewer)
+BuildRequires: pkgconfig(minicontrol-monitor)
+BuildRequires: pkgconfig(iniparser)
+BuildRequires: pkgconfig(capi-appfw-package-manager)
+BuildRequires: pkgconfig(alarm-service)
+BuildRequires: pkgconfig(voice-control-setting)
+BuildRequires: pkgconfig(tzsh-quickpanel-service)
+BuildRequires: pkgconfig(capi-appfw-app-manager)
+BuildRequires: pkgconfig(capi-appfw-preference)
+BuildRequires: pkgconfig(dpm)
+BuildRequires: pkgconfig(efl-extension)
+BuildRequires: pkgconfig(appcore-efl)
+BuildRequires: gettext-tools
+BuildRequires: cmake
+BuildRequires: edje-tools
+BuildRequires: hash-signer
+Requires(post): /usr/bin/vconftool
+
+%description
+Quick Panel
+
+%prep
+%setup -q
+
+cp %SOURCE103 %{alias}.manifest
+
+%build
+%if 0%{?sec_build_binary_debug_enable}
+export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE"
+export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE"
+%endif
+
+LDFLAGS+="-Wl,--rpath=%{alias}/lib -Wl,--as-needed";
+export LDFLAGS
+export WINSYS="wayland"
+export WAYLAND_SUPPORT=On
+export X11_SUPPORT=Off
+
+%cmake . -DPKGNAME=%{alias} -DWINSYS=${WINSYS}
+
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+%define tizen_sign 1
+%define tizen_sign_base /usr/apps/%{alias}
+%define tizen_sign_level platform
+%define tizen_author_sign 1
+%define tizen_dist_sign 1
+
+%post
+
+%files
+%manifest %{alias}.manifest
+%defattr(-,root,root,-)
+#%attr(755,-,-) %{_sysconfdir}/init.d/quickpanel
+%{_prefix}/apps/%{alias}
+%{_prefix}/share/packages/%{alias}.xml
+/usr/apps/%{alias}/author-signature.xml
+/usr/apps/%{alias}/signature1.xml
+%license LICENSE
diff --git a/project_def.prop b/project_def.prop
new file mode 100755 (executable)
index 0000000..f86f6ed
--- /dev/null
@@ -0,0 +1,63 @@
+
+# Project Name
+APPNAME = quickpanel
+
+# Project Type
+type = app
+
+# Project Profile
+profile = mobile-4.0
+
+# C/CPP Sources
+USER_SRCS = src/notifications/noti_win.c src/settings/settings_icon_common.c src/device/brightness.c src/common.c src/notifications/noti_listbox.c src/settings/modules/sound-profile.c src/notifications/animated_image.c src/notifications/noti_util.c src/vi/vi_manager.c src/notifications/noti_section.c src/service/keyboard.c src/settings/settings_gridbox.c src/settings/modules/rotate-lock.c src/voice_control.c src/datetime/datetime.c src/sim_controller.c src/service/animated_icon.c src/settings/modules/gps.c src/service/reminder.c src/preference.c src/accessibility.c src/notifications/noti_view_listype.c src/settings/setting_module_api.c src/notifications/noti_list_item.c src/notifications/noti_node.c src/common_uic.c src/datetime/util-time.c src/handler_controller.c src/settings/modules/wifi.c src/list_util.c src/notifications/noti_view.c src/settings/setting_utils.c src/quickpanel-ui.c src/service/noti_led.c src/settings/modules/bluetooth.c src/page/pager_common.c src/minictrl/minictrl.c src/service/uninstall.c src/service/emergency_mode.c src/page/page_base.c src/page/pager.c src/settings/settings.c src/modules.c src/media.c src/settings/settings_view_featured.c src/notifications/activenoti.c src/notifications/noti_view_ongoing.c src/notifications/noti.c 
+
+# EDC Sources
+USER_EDCS =  
+
+# PO Sources
+USER_POS = res/po/ca.po res/po/fr.po res/po/nl.po res/po/sk.po res/po/ar.po res/po/hu.po res/po/da.po res/po/en.po res/po/ja_JP.po res/po/lt.po res/po/nb.po res/po/sv.po res/po/zh_TW.po res/po/fr_CA.po res/po/de.po res/po/fi.po res/po/zh_HK.po res/po/bg.po res/po/sr.po res/po/ga.po res/po/lv.po res/po/sl.po res/po/en_PH.po res/po/zh_CN.po res/po/uk.po res/po/ro.po res/po/eu.po res/po/it_IT.po res/po/kk.po res/po/ru_RU.po res/po/el_GR.po res/po/et.po res/po/is.po res/po/ka.po res/po/pt_BR.po res/po/cs.po res/po/pl.po res/po/gl.po res/po/hy.po res/po/en_US.po res/po/es_ES.po res/po/tr_TR.po res/po/pt_PT.po res/po/az.po res/po/ko_KR.po res/po/es_US.po res/po/mk.po res/po/uz.po res/po/hr.po 
+
+# User Defines
+USER_DEFS = TIZEN_DEPRECATION DEPRECATION_WARNING 
+USER_CPP_DEFS = 
+
+# User Undefines
+USER_UNDEFS = 
+USER_CPP_UNDEFS = 
+
+# User Libraries
+USER_LIBS = 
+
+# User Objects
+USER_OBJS = 
+
+# User Includes
+## C Compiler
+USER_C_INC_DIRS = inc 
+USER_INC_FILES = 
+## C++ Compiler
+USER_CPP_INC_DIRS = 
+USER_CPP_INC_FILES = 
+
+USER_INC_DIRS = $(USER_C_INC_DIRS) $(USER_CPP_INC_DIRS)
+
+# User Library Path
+USER_LIB_DIRS = 
+
+# EDC Resource Path
+USER_EDCS_IMAGE_DIRS = ${OUTPUT_DIR} edje/images res/images res/images_icon 
+USER_EDCS_SOUND_DIRS = ${OUTPUT_DIR} edje/sounds 
+USER_EDCS_FONT_DIRS = ${OUTPUT_DIR} edje/fonts 
+
+# EDC Flags
+USER_EXT_EDC_KEYS = EDC0 
+
+USER_EXT_EDC0_EDCS = res/edje/quickpanel.edc res/edje/quickpanel_voice_control.edc res/edje/quickpanel_activenoti.edc res/edje/color_classes.edc res/edje/quickpanel_theme.edc 
+USER_EXT_EDC0_EDCS_IMAGE_DIRS = ${OUTPUT_DIR} edje/images res/images res/images_icon 
+USER_EXT_EDC0_EDCS_SOUND_DIRS = ${OUTPUT_DIR} edje/sounds 
+USER_EXT_EDC0_EDCS_FONT_DIRS = ${OUTPUT_DIR} edje/fonts 
+
+# Resource Filter
+USER_RES_INCLUDE = 
+USER_RES_EXCLUDE = 
+
diff --git a/quickpanel.xml b/quickpanel.xml
new file mode 100755 (executable)
index 0000000..6131a25
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="@PKGNAME@" version="0.8.0" install-location="internal-only" api-version="3.0">
+       <label>@PROJECT_NAME@</label>
+       <author email="yjoo93.park@samsung.com" href="www.samsung.com">Youngjoo Park</author>
+       <author email="jin0.kim@samsung.com" href="www.samsung.com">Jinyoung Kim</author>
+       <description>@PROJECT_NAME@</description>
+       <ui-application appid="@PKGNAME@" exec="@BINDIR@/@PROJECT_NAME@" nodisplay="true" multiple="false" type="capp" taskmanage="false" process-pool="true" hw-acceleration="on">
+               <label>@PROJECT_NAME@</label>
+               <background-category value="system"/>
+       </ui-application>
+       <privileges>
+               <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+               <privilege>http://tizen.org/privilege/system</privilege>
+               <privilege>http://tizen.org/privilege/systemsettings.admin</privilege>
+               <privilege>http://tizen.org/privilege/location</privilege>
+               <privilege>http://tizen.org/privilege/location.enable</privilege>
+               <privilege>http://tizen.org/privilege/bluetooth</privilege>
+               <privilege>http://tizen.org/privilege/bluetooth.admin</privilege>
+               <privilege>http://tizen.org/privilege/notification</privilege>
+               <privilege>http://tizen.org/privilege/telephony</privilege>
+               <privilege>http://tizen.org/privilege/telephony.admin</privilege>
+               <privilege>http://tizen.org/privilege/tethering.admin</privilege>
+               <privilege>http://tizen.org/privilege/wifidirect</privilege>
+               <privilege>http://tizen.org/privilege/network.set</privilege>
+               <privilege>http://tizen.org/privilege/network.get</privilege>
+               <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
+               <privilege>http://tizen.org/privilege/display</privilege>
+               <privilege>http://tizen.org/privilege/haptic</privilege>
+               <privilege>http://tizen.org/privilege/led</privilege>
+               <privilege>http://tizen.org/privilege/keygrab</privilege>
+               <privilege>http://tizen.org/privilege/window.priority.set</privilege>
+               <privilege>http://tizen.org/privilege/call</privilege>
+               <privilege>http://tizen.org/privilege/mediastorage</privilege>
+       </privileges>
+</manifest>
diff --git a/res/edje/color_classes.edc b/res/edje/color_classes.edc
new file mode 100755 (executable)
index 0000000..7c546f3
--- /dev/null
@@ -0,0 +1,407 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+color_classes {
+       color_class {
+               name: "AO007L1";
+               color: 18 75 107 255;
+       }
+       color_class {
+               name: "AO007L2";
+               color: 255 255 255 51;
+       }
+       color_class {
+               name: "AO021P";
+               color: 20 107 147 76;
+       }
+       color_class {
+               name: "AO025";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "AO027";
+               color: 255 255 255 76;
+       }
+       color_class {
+               name: "AO033";
+               color: 0 0 0 12;
+       }
+       color_class {
+               name: "AO001L1";
+               color: 19 147 156 255;
+       }
+       color_class {
+               name: "AO001L1D";
+               color: 18 75 107 127;
+       }
+       color_class {
+               name: "AO001L1P";
+               color: 17 121 124 255;
+       }
+       color_class {
+               name: "AO002";
+               color: 159 239 0 255;
+       }
+       color_class {
+               name: "AO003";
+               color: 255 255 255 127;
+       }
+       color_class {
+               name: "AO003D";
+               color: 255 255 255 76;
+       }
+       color_class {
+               name: "AO003E1";
+               color: 255 255 255 165;
+       }
+       color_class {
+               name: "AO004";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "AO004D";
+               color: 88 144 170 255;
+       }
+       color_class {
+               name: "AO005L2";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "AO005L1";
+               color: 16 81 112 255;
+       }
+       color_class {
+               name: "AO005L1D";
+               color: 178 178 178 76;
+       }
+       color_class {
+               name: "AO005L3";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "AO005L4";
+               color: 255 255 255 51;
+       }
+       color_class {
+               name: "AO008";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "AO010";
+               color: 224 33 33 255;
+       }
+       color_class {
+               name: "AO031";
+               color: 20 107 147 255;
+       }
+       color_class {
+               name: "AO032";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "AO011L1";
+               color: 20 107 147 153;
+       }
+       color_class {
+               name: "AO011L1P";
+               color: 66 162 206 255;
+       }
+       color_class {
+               name: "AO011L1D";
+               color: 20 107 147 153;
+       }
+       color_class {
+               name: "AO011L1E01";
+               color: 20 107 147 255;
+       }
+       color_class {
+               name: "AO011i";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "AO011iD";
+               color: 255 255 255 127;
+       }
+       color_class {
+               name: "AO011L3";
+               color: 48 48 48 255;
+       }
+       color_class {
+               name: "AO011L3P";
+               color: 20 107 147 255;
+       }
+       color_class {
+               name: "AO011L3D";
+               color: 48 48 48 76;
+       }
+       color_class {
+               name: "AO0111i";
+               color: 224 33 33 255;
+       }
+       color_class {
+               name: "AO0111";
+               color: 20 107 147 153;
+       }
+       color_class {
+               name: "AO012L1";
+               color: 82 196 11 255;
+       }
+       color_class {
+               name: "AO012L1P";
+               color: 66 158 9 255;
+       }
+       color_class {
+               name: "AO012L1D";
+               color: 106 196 51 255;
+       }
+       color_class {
+               name: "AO013L1";
+               color: 249 56 22 255;
+       }
+       color_class {
+               name: "AO013L1P";
+               color: 211 47 19 255;
+       }
+       color_class {
+               name: "AO013L1D";
+               color: 249 56 22 58;
+       }
+       color_class {
+               name: "AO014L1";
+               color: 20 107 147 255;
+       }
+       color_class {
+               name: "AO014L1P";
+               color: 11 61 84 255;
+       }
+       color_class {
+               name: "AO014L1D";
+               color: 50 116 147 255;
+       }
+       color_class {
+               name: "AO014";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "AO014P";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "AO014D";
+               color: 255 255 255 102;
+       }
+       color_class {
+               name: "AO015";
+               color: 159 239 0 255;
+       }
+       color_class {
+               name: "AO015P";
+               color: 159 239 0 255;
+       }
+       color_class {
+               name: "AO015D";
+               color: 159 239 0 102;
+       }
+       color_class {
+               name: "AO016";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "AO016P";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "AO016D";
+               color: 255 255 255 102;
+       }
+       color_class {
+               name: "AO019";
+               color: 66 162 206 255;
+       }
+       color_class {
+               name: "AO020";
+               color: 170 172 175 255;
+       }
+       color_class {
+               name: "AO029";
+               color: 24 126 173 204;
+       }
+       color_class {
+               name: "AO029P";
+               color: 20 107 147 255;
+       }
+       color_class {
+               name: "AO029D";
+               color: 0 0 0 76;
+       }
+       color_class {
+               name: "AO030E1";
+               color: 0 126 181 255;
+       }
+       color_class {
+               name: "AO030E2";
+               color: 148 39 170 255;
+       }
+       color_class {
+               name: "AO030E3";
+               color: 58 66 71 255;
+       }
+       color_class {
+               name: "AO030E4";
+               color: 247 187 7 255;
+       }
+       color_class {
+               name: "AO030E5";
+               color: 242 98 2 255;
+       }
+       color_class {
+               name: "AO030E6";
+               color: 26 49 124 255;
+       }
+       color_class {
+               name: "AO030E7";
+               color: 0 150 100 255;
+       }
+       color_class {
+               name: "AO030E8";
+               color: 232 69 156 255;
+       }
+       color_class {
+               name: "AO030E9";
+               color: 83 175 26 255;
+       }
+       color_class {
+               name: "AO030D";
+               color: 0 0 0 76;
+       }
+       color_class {
+               name: "AO010S";
+               color: 20 107 147 255;
+       }
+       color_class {
+               name: "ATO008";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "ATO0081";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "ATO009";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "ATO016";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "ATO019";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "ATO017";
+               color: 255 255 255 255;
+       }
+       color_class {
+               name: "ATO006P";
+               color: 20 107 147 255;
+       }
+       color_class {
+               name: "ATO006D";
+               color: 20 107 147 127;
+       }
+       color_class {
+               name: "ATO005";
+               color: 0 0 0 255;
+       }
+       color_class {
+               name: "ATO006";
+               color: 76 76 76 255;
+       }
+       color_class {
+               name: "ATO007E1";
+               color: 0 126 181 255;
+       }
+       color_class {
+               name: "ATO007E2";
+               color: 148 39 170 255;
+       }
+       color_class {
+               name: "ATO007E3";
+               color: 58 66 71 255;
+       }
+       color_class {
+               name: "ATO007E4";
+               color: 247 187 7 255;
+       }
+       color_class {
+               name: "ATO007E5";
+               color: 242 98 2 255;
+       }
+       color_class {
+               name: "ATO007E6";
+               color: 26 49 124 255;
+       }
+       color_class {
+               name: "ATO007E7";
+               color: 0 150 100 255;
+       }
+       color_class {
+               name: "ATO007E8";
+               color: 232 69 156 255;
+       }
+       color_class {
+               name: "ATO007E9";
+               color: 83 175 26 255;
+       }
+       color_class {
+               name: "ATO007D";
+               color: 76 76 76 255;
+       }
+       color_class {
+               name: "AO008_STATUS";
+               color: 18 75 107 255;
+       }
+       color_class {
+               name: "A03O003L1";
+               color:  61 185 204 255;
+       }
+       color_class {
+               name: "ATO012";
+               color: 128 128 128 255;
+       }
+       color_class {
+               name: "F043P";
+               color: 31 92 102 255;
+       }
+       color_class {
+               name: "T023";
+               color: 72 72 72 255;
+       }
+       color_class {
+               name: "B011";
+               color: 20 107 147 127;
+       }
+       color_class {
+               name: "B0517";
+               color: 147 147 147 255;
+       }
+       color_class {
+               name: "W0661";
+               color: 155 216 226 255;
+       }
+}
diff --git a/res/edje/quickpanel.edc b/res/edje/quickpanel.edc
new file mode 100755 (executable)
index 0000000..2aacd28
--- /dev/null
@@ -0,0 +1,610 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 "../../inc/quickpanel_def.h"
+#include "color_classes.edc"
+
+#define QP_SETTING_H 221
+#define QP_SETTING_SEPERATOR_H 0
+#define QP_VOICE_CONTROL_H 80
+#define QP_ENABLE_VOICE_CONTROL_H ((QP_SETTING_H + QP_VOICE_CONTROL_H) / QP_SETTING_H)
+#define QP_SETTING_SEPERATOR_COLOR "AO007"
+#define QP_HANDLER_COLOR "AO010"
+#define QP_HANDLER_PRESS_COLOR "AO010S"
+
+#define QUICKPANEL_FOCUS_OBJECT(NAME, TO_1, TO_2)\
+                       part {\
+                               name: NAME;\
+                               type: SWALLOW;\
+                               scale: 1;\
+                               mouse_events: 1;\
+                               repeat_events: 1;\
+                               description {\
+                                       state: "default" 0.0;\
+                                       rel1 { relative: 0.0 0.00; to, TO_1; }\
+                                       rel2 { relative: 1.0 1.00; to, TO_2; }\
+                                       fixed: 1 1;\
+                                       visible: 1;\
+                               }\
+                               description {\
+                                       state: "show" 0.0;\
+                                       inherit: "default" 0.0;\
+                                       visible: 1;\
+                               }\
+                               description {\
+                                       state: "hide" 0.0;\
+                                       inherit: "default" 0.0;\
+                                       visible: 0;\
+                               }\
+                       }\
+
+#define QUICKPANEL_FOCUS_OBJECT_WITH_OFFSET(NAME, TO_1, TO_2, OFFSET_X, OFFSET_Y)\
+                       part {\
+                               name: NAME;\
+                               type: SWALLOW;\
+                               scale: 1;\
+                               mouse_events: 1;\
+                               repeat_events: 1;\
+                               description {\
+                                       state: "default" 0.0;\
+                                       rel1 { relative: 0.0 0.00; to, TO_1; offset: -OFFSET_X -OFFSET_Y;}\
+                                       rel2 { relative: 1.0 1.00; to, TO_2; offset: +OFFSET_X +OFFSET_Y; }\
+                                       fixed: 1 1;\
+                                       visible: 1;\
+                               }\
+                       }\
+
+images {
+       image: "handler_bg.#.png" COMP;
+       image: "handler_bg_ef.#.png" COMP;
+       image: "handler_btn_02.png" COMP;
+       image: "core_theme_bg_01.png" COMP;
+}
+
+styles {
+       style {
+               name: "secured_text_style";
+               base: "font=Tizen:style=Regular font_size=32 text_class=tizen align=center color=#0F0808 color_class=ATO037 ellipsis=1.0 wrap=mixed";
+       }
+}
+
+collections {
+       base_scale: 1.8;
+       group {
+               name: "quickpanel/root";
+
+               script {
+                       public g_is_portrait;
+
+                       public init_variables() {
+                               set_int(g_is_portrait, 1);
+                       }
+               }
+
+               parts {
+                       part {
+                               name: "base";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "background";
+                               type: IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       align: 0.5 0.5;
+                                       rel1 {
+                                               to: "base";
+                                       }
+                                       rel2 {
+                                               to: "base";
+                                       }
+                                       image {
+                                               normal: "core_theme_bg_01.png";
+                                       }
+                               }
+                       }
+                       part{
+                               name: "qp.base.rect.datetime";
+                               type:SPACER;
+                               scale:1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 QP_DATE_H;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "background";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                               to: "background";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part{
+                               name: "qp.base.datetime.swallow";
+                               type:SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               to: "qp.base.rect.datetime";
+                                       }
+                                       rel2 {
+                                               to: "qp.base.rect.datetime";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part{
+                               name: "qp.root.swallow";
+                               type:SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_x: "background";
+                                               to_y: "qp.base.datetime.swallow";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                               to_x: "background";
+                                               to_y: "qp.handler.bg";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part
+                       {
+                               name: "qp.handler.bg";
+                               type:IMAGE;
+                               scale:1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 QP_HANDLE_H;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to: "background";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "background";
+                                       }
+                                       image {
+                                               normal:"handler_bg.#.png";
+                                       }
+                                       align: 0.0 1.0;
+                                       color: 232 240 244 255;
+                               }
+                               description {
+                                       state: "pressed" 0.0;
+                                       inherit: "default";
+                                       color_class: "W0113P";
+                                       color: 232 240 244 255;
+                               }
+                       }
+
+                       part
+                       {
+                               name: "qp.handler.effect";
+                               type:IMAGE;
+                               scale:1;
+                               description {
+                                       state: "default" 0.0;
+
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "qp.handler.bg";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "qp.handler.bg";
+                                       }
+                                       image {
+                                               normal:"handler_bg_ef.#.png";
+                                       }
+                                       align: 0.0 1.0;
+                                       color_class: "AO007L2";
+                               }
+                       }
+
+                       part
+                       {
+                               name: "qp.handler.button";
+                               type:IMAGE;
+                               scale:1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 50 50;
+                                       max: 50 50;
+                                       fixed: 1 1;
+                                       rel1
+                                       {
+                                               relative: 0.5 0.0;
+                                               to: "qp.handler.bg";
+                                       }
+                                       rel2
+                                       {
+                                               relative: 0.5 1.0;
+                                               to: "qp.handler.bg";
+                                       }
+                                       image {
+                                               normal:"handler_btn_02.png";
+                                       }
+
+                                       align: 0.5 0.5;
+                                       color_class: "AO007L1";
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "text.show" 0.0;
+                                       inherit: "default";
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "text.hide" 0.0;
+                                       inherit: "default";
+                                       visible: 1;
+                               }
+                       }
+                       part
+                       {
+                               name: "qp.handler.text";
+                               type:TEXT;
+                               scale:1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 QP_HANDLE_H;
+                                       align: 0.5 0.5;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "qp.handler.bg";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "qp.handler.bg";
+                                       }
+
+                                       text {
+                                               font : "Tizen:style=Regular";
+                                               size : 25;
+                                               text_class : "Tizen";
+                                       }
+                                       color_class: "AO007L1";
+                                       visible: 1;
+                               }
+                               description
+                               {
+                                       state: "text.show" 0.0;
+                                       inherit: "default";
+                                       visible: 1;
+                               }
+                               description
+                               {
+                                       state: "text.hide" 0.0;
+                                       inherit: "default";
+                                       visible: 0;
+                               }
+                       }
+               }
+
+               programs
+               {
+                       program
+                       {
+                               name: "init.layout";
+                               signal: "load";
+                               source: "";
+                               in: 0.0 0.0;
+                               script{
+                                       init_variables();
+                               }
+                       }
+                       program {
+                               name: "text.show";
+                               signal: "show";
+                               source: "qp.handler.text";
+                               action: STATE_SET "text.show" 0.0;
+                               target: "qp.handler.button";
+                               target: "qp.handler.text";
+                       }
+                       program {
+                               name: "text.hide";
+                               signal: "hide";
+                               source: "qp.handler.text";
+                               action: STATE_SET "text.hide" 0.0;
+                               target: "qp.handler.button";
+                               target: "qp.handler.text";
+                       }
+                       program {
+                               name: "handler.press";
+                               signal: "mouse,down,1";
+                               source: "qp.handler.bg";
+                               action: STATE_SET "pressed" 0.0;
+                               target: "qp.handler.bg";
+                       }
+                       program {
+                               name: "handler.release";
+                               signal: "mouse,up,1";
+                               source: "qp.handler.bg";
+                               action: STATE_SET "default" 0.0;
+                               target: "qp.handler.bg";
+                       }
+               }
+       }
+
+       group {
+               name: "quickpanel/base";
+               parts {
+                       part {
+                               name: "background";
+                               type: SPACER;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                               }
+                               description {
+                                       state: "portrait" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                               description {
+                                       state: "landscape" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                       }
+                       part{
+                               name: "qp.base.rect.setting";
+                               type:SPACER;
+                               scale:1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 QP_SETTING_H;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "background";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                               to: "background";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 0;
+                                       max: 0 0;
+                               }
+                       }
+                       part{
+                               name: "qp.base.setting.swallow";
+                               type:SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               to: "qp.base.rect.setting";
+                                       }
+                                       rel2 {
+                                               to: "qp.base.rect.setting";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "background.touch";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events:1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 0;
+                                       min: 0 QP_SETTING_SEPERATOR_H;
+                                       rel1 {
+                                               to_y:"qp.base.setting.swallow";
+                                               relative: 0.0 1.0;
+                                       }
+                                       rel2 {
+                                               to_y:"background";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                               description {
+                                       state: "enable_voice_control" 0.0;
+                                       inherit: "default";
+                                       rel1 {
+                                               to_y:"qp.base.setting.swallow";
+                                               relative: 0.0 QP_ENABLE_VOICE_CONTROL_H;
+                                       }
+                               }
+                       }
+                       part {
+                               name: "qp.base.list.swallow";
+                               type: SWALLOW;
+                               scale: 1;
+                               repeat_events: 1;
+                               mouse_events:1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 0;
+                                       rel1 {
+                                               to_y:"qp.base.setting.swallow";
+                                               relative: 0.0 1.0;
+                                       }
+                                       rel2 {
+                                               to_y:"background";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "qp.base.list.secured.rect";
+                               type: RECT;
+                               scale: 1;
+                               repeat_events: 0;
+                               mouse_events:1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 0;
+                                       rel1 {
+                                               to:"qp.base.list.swallow";
+                                       }
+                                       rel2 {
+                                               to:"qp.base.list.swallow";
+                                       }
+                                       color: 255 255 255 255;
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "secured_lock.show" 0.0;
+                                       inherit: "default";
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "qp.base.list.secured.text";
+                               type:TEXTBLOCK;
+                               scale:1;
+                               mouse_events: 0;
+                               multiline: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 100;
+                                       align: 0.5 0.5;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "qp.base.list.secured.rect";
+                                               offset: 32 0;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "qp.base.list.secured.rect";
+                                               offset: -32 0;
+                                       }
+                                       text {
+                                               style: "secured_text_style";
+                                       }
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "secured_lock.show" 0.0;
+                                       inherit: "default";
+                                       visible: 1;
+                               }
+                       }
+               }
+               programs {
+                       program{
+                               name: "portrait";
+                               signal: "portrait";
+                               source: "prog";
+                               action: STATE_SET "portrait" 0.0;
+                               target: "background";
+                       }
+                       program{
+                               name: "landscape";
+                               signal: "landscape";
+                               source: "prog";
+                               action: STATE_SET "landscape" 0.0;
+                               target: "background";
+                       }
+                       program {
+                               name: "setting.show";
+                               action: STATE_SET "show" 0.0;
+                               signal: "quickpanel.setting.show";
+                               source: "quickpanel.prog";
+                               target: "qp.base.rect.setting";
+                       }
+                       program {
+                               name: "setting.hide";
+                               action: STATE_SET "hide" 0.0;
+                               signal: "quickpanel.setting.hide";
+                               source: "quickpanel.prog";
+                               target: "qp.base.rect.setting";
+                       }
+                       program {
+                               name: "voice_icon.show";
+                               action: STATE_SET "enable_voice_control" 0.0;
+                               signal: "voice_icon.show";
+                               source: "quickpanel.prog";
+                               target: "background.touch";
+                       }
+                       program {
+                               name: "voice_icon.hide";
+                               action: STATE_SET "default" 0.0;
+                               signal: "voice_icon.hide";
+                               source: "quickpanel.prog";
+                               target: "background.touch";
+                       }
+                       program {
+                               name: "background.touch";
+                               action: SIGNAL_EMIT "close.quickpanel" "";
+                               signal: "mouse,down,1";
+                               source: "background";
+                       }
+                       program{
+                               name: "secured_lock.exec";
+                               signal: "secured_lock.exec";
+                               source: "quickpanel.prog";
+                               action: STATE_SET "secured_lock.show" 0.0;
+                               target: "qp.base.list.secured.rect";
+                               target: "qp.base.list.secured.text";
+                       }
+                       program{
+                               name: "secured_lock.exit";
+                               signal: "secured_lock.exit";
+                               source: "quickpanel.prog";
+                               action: STATE_SET "default" 0.0;
+                               target: "qp.base.list.secured.rect";
+                               target: "qp.base.list.secured.text";
+                       }
+               }
+       }
+
+#include "quickpanel_setting.edc"
+#include "quickpanel_datetime.edc"
+#include "quickpanel_brightness.edc"
+#include "quickpanel_minictrl.edc"
+#include "quickpanel_noti_section.edc"
+#include "quickpanel_listitem_noti.edc"
+#include "quickpanel_listitem_ongoing.edc"
+#include "quickpanel_animated_icon.edc"
+#include "quickpanel_images.edc"
+}
diff --git a/res/edje/quickpanel_activenoti.edc b/res/edje/quickpanel_activenoti.edc
new file mode 100755 (executable)
index 0000000..f0b291b
--- /dev/null
@@ -0,0 +1,1012 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 "color_classes.edc"
+
+#define ACTIVENOTI_BG_COLOR "AO003"
+#define ACTIVENOTI_MAIN_TEXT_HEIGHT_INC 1
+
+#define BOX_ICON_SIZE                  96 96
+#define BOX_ICON_SIZE_W        96
+#define BOX_ICON_SIZE_H        96
+#define BODY_SENDBUTTON_SIZE   72 68
+
+
+#define PADDING_LEFT(param_padding_name, param_padding_size) \
+       part \
+       { \
+               name: param_padding_name; \
+               type: SPACER; \
+               scale: 1; \
+               mouse_events:  0;\
+               description \
+               { \
+                       state: "default" 0.0; \
+                       min: param_padding_size 0; \
+                       fixed: 1 0; \
+                       rel1{relative: 0.0 0.0;} \
+                       rel2{relative: 0.0 1.0;} \
+                       align: 0.0 0.0; \
+               } \
+       }
+
+#define PADDING_TOP(param_padding_name, param_padding_size) \
+       part \
+       { \
+               name: param_padding_name; \
+               type: SPACER; \
+               scale: 1; \
+               mouse_events:  0;\
+               description \
+               { \
+                       state: "default" 0.0; \
+                       min: 0 param_padding_size ; \
+                       fixed: 0 1; \
+                       rel1{relative: 0.0 0.0;} \
+                       rel2{relative: 1.0 0.0;} \
+                       align: 0.0 0.0; \
+               } \
+       }
+
+#define PADDING_BOTTOM(param_padding_name, param_padding_size) \
+       part \
+       { \
+               name: param_padding_name; \
+               type: SPACER; \
+               scale: 1; \
+               mouse_events:  0;\
+               description \
+               { \
+                       state: "default" 0.0; \
+                       min: 0 param_padding_size; \
+                       fixed: 0 1; \
+                       rel1{relative: 0.0 1.0;} \
+                       rel2{relative: 1.0 1.0;} \
+                       align: 0.0 1.0; \
+               } \
+       }
+
+#define PADDING_RIGHT(param_padding_name, param_padding_size) \
+       part \
+       { \
+               name: param_padding_name; \
+               type: SPACER; \
+               scale: 1; \
+               mouse_events:  0;\
+               description \
+               { \
+                       state: "default" 0.0; \
+                       min: param_padding_size 0; \
+                       fixed: 1 0; \
+                       rel1{relative: 1.0 0.0;} \
+                       rel2{relative: 1.0 1.0;} \
+                       align: 1.0 0.0; \
+               } \
+       }
+
+#define DEBUG_SPACECHECKER_FOR_LAYOUT(TARGET) \
+    part {\
+    name: TARGET".space_checker";\
+      type: RECT;\
+       mouse_events: 1;\
+       repeat_events: 1;\
+       description {\
+          state: "default" 0;\
+          fixed: 1 1;\
+          rel1 { to: TARGET; }\
+          rel2 { to: TARGET; }\
+          color: 255 0 0 100;\
+          }\
+    }
+
+
+images
+{
+       image: "handler_btn_02.png" COMP;
+       image: "core_theme_bg_01.png" COMP;
+       image: "core_list_button_bg.#.png" COMP;
+       image: "quick_button_icon_bg.png" COMP;
+}
+
+collections
+{
+       base_scale: 2.6;
+
+       group {
+               name: "headsup/base";
+
+               styles {
+                       style {
+                               name: "style_title_text";
+                               base: "font=Tizen:style=Bold font_size="38" color=#FFFFFFFF  text_class=tizen wrap=mixed ellipsis=1.0";
+                       }
+               }
+
+               styles {
+                       style {
+                               name: "style_main_text";
+                               base: "font=Tizen:style=Regular font_size="32" color=#FFFFFFFF  text_class=tizen wrap=mixed ellipsis=1.0";
+                       }
+               }
+
+               parts {
+                       part {
+                               name: "background";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+
+                       part {
+                               name: "bg";
+                               type: IMAGE;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               to: "background";
+                                       }
+                                       rel2 {
+                                               to: "background";
+                                       }
+                                       image {
+                                               normal: "core_theme_bg_01.png";
+                                       }
+                               }
+                       }
+
+
+                       part {
+                               name: "bg_img";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               to: "bg";
+                                       }
+                                       rel2 {
+                                               to: "bg";
+                                       }
+                               }
+                       }
+
+                       part {
+                               name : "space.inflexible";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       fixed: 0 1;
+                                       min: 0 186;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "bg";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                               to: "bg";
+                                       }
+                               }
+                       }
+
+                       part {
+                               name : "padding.top";
+                               type:SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       fixed: 0 1;
+                                       min : 0 24;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "space.inflexible";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                               to: "space.inflexible";
+                                       }
+                               }
+                       }
+
+                       part {
+                               name : "space.icon_and_text_contents";
+                               type:SPACER;
+                               scale: 1;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.0;
+                                       fixed: 0 1;
+                                       min : 0 140;
+                                       rel1 {
+                                               relative: 0.05 1.0;
+                                               to_x: "space.inflexible";
+                                               to_y: "padding.top";
+                                       }
+                                       rel2 {
+                                               relative: 0.95 1.0;
+                                               to_x: "space.inflexible";
+                                               to_y: "padding.top";
+                                       }
+                               }
+                       }
+                       part{
+                               name: "entry_layout.swallow";
+                               type:SWALLOW;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to: "space.inflexible";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                               to: "space.handle";
+                                       }
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                       }
+
+                       part{
+                               name: "button_layout.swallow";
+                               type:SWALLOW;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to: "space.inflexible";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                               to: "space.handle";
+                                       }
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                       }
+
+                       part {
+                               name: "space.handle";
+                               type: SPACER;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 1.0;
+                                       fixed: 0 1;
+                                       min: 0 43;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to: "bg";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "bg";
+                                       }
+                               }
+                       }
+
+                       PADDING_BOTTOM("padding_bottom", 1);
+
+                       part {
+                               name: "handle_img";
+                               type: IMAGE;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 42 42;
+                                       max: 42 42;
+                                       align: 0.5 1.0;
+                                       rel1 {
+                                               relative: 0.5 1.0;
+                                               to_x: "space.handle";
+                                               to_y: "padding_bottom";
+                                       }
+                                       rel2 {
+                                               relative: 0.5 1.0;
+                                               to_x: "space.handle";
+                                               to_y: "padding_bottom";
+                                       }
+                                       image {
+                                               normal: "handler_btn_02.png";
+                                       }
+                               }
+                       }
+
+                       /* icon space start */
+                       part {
+                               name : "padding.icon.top";
+                               type:SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       fixed: 0 1;
+                                       min : 96 18;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "space.icon_and_text_contents";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to: "space.icon_and_text_contents";
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "space.icon";
+                               mouse_events: 1;
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       min : BOX_ICON_SIZE;
+                                       max : BOX_ICON_SIZE;
+                                       fixed : 1 1;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to: "padding.icon.top";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "padding.icon.top";
+                                       }
+                               }
+                       }
+
+                       part {
+                               name : "padding.icon.right";
+                               type:SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       fixed: 1 0;
+                                       min : 32 BOX_ICON_SIZE_H;
+                                       rel1 {
+                                               relative: 1.0 0.0;
+                                               to: "space.icon";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                               to: "space.icon";
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "masking";
+                               type: IMAGE;
+                               precise_is_inside: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min : BOX_ICON_SIZE;
+                                       max : BOX_ICON_SIZE;
+                                       fixed : 1 1;
+                                       rel1 {
+                                               relative: 0.5 0.5;
+                                               to: "space.icon";
+                                       }
+                                       rel2 {
+                                               relative: 0.5 0.5;
+                                               to: "space.icon";
+                                       }
+                                       image.normal: "quick_button_icon_bg.png";
+                               }
+                       }
+
+                       part {
+                               name: "icon_thumbnail";
+                               type: SWALLOW;
+                               clip_to : "masking";
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.5;
+                                       min : BOX_ICON_SIZE;
+                                       max : BOX_ICON_SIZE;
+                                       fixed : 1 1;
+                                       rel1 {
+                                               relative: 0.5 0.5;
+                                               to: "space.icon";
+                                       }
+                                       rel2 {
+                                               relative: 0.5 0.5;
+                                               to: "space.icon";
+                                       }
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                       }
+
+                       part {
+                               name: "icon_big";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.5;
+                                       min : BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       max : BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       fixed : 1 1;
+                                       rel1 {
+                                               relative: 0.5 0.5;
+                                               to: "space.icon";
+
+                                       }
+                                       rel2 {
+                                               relative: 0.5 0.5;
+                                               to: "space.icon";
+
+                                       }
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                       }
+
+                       part {
+                               name: "icon_badge";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 1.0;
+                                       fixed : 1 1;
+                                       min : 45 45;
+                                       rel1 {
+                                               relative: 0.6 0.6;
+                                               to: "icon_big";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "icon_big";
+                                       }
+                               }
+                       }
+
+                       /* text space start */
+                       part {
+                               name: "space.text";
+                               type: SPACER;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               relative: 1.0 0.0;
+                                               to_x: "padding.icon.right";
+                                               to_y: "space.icon_and_text_contents";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "space.icon_and_text_contents";
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "subtitle_text";
+                               type: TEXTBLOCK;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       fixed: 1 1;
+                                       text {
+                                               style : "style_main_text";
+                                               align: 0.0 0.0;
+                                       }
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "space.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to: "space.text";
+                                       }
+                               }
+                               description {
+                                       state: "sub_show" 0.0;
+                                       inherit: "default" 0.0;
+                                       fixed: 0 0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "space.text";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.3;
+                                               to: "space.text";
+                                       }
+                               }
+                               description {
+                                       state: "sub_hide" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                       }
+
+                       part {
+                               name: "title_text";
+                               type: TEXTBLOCK;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       text {
+                                               style : "style_title_text";
+                                               align: 0.0 0.0;
+                                       }
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "space.text";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.33;
+                                               to: "space.text";
+                                       }
+                               }
+                               description {
+                                       state: "sub_show" 0.0;
+                                       inherit: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.3;
+                                               to: "space.text";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.63;
+                                               to: "space.text";
+                                       }
+                               }
+                               description {
+                                       state: "sub_hide" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                       }
+
+                       part {
+                               name: "content_text";
+                               type: TEXTBLOCK;
+                               scale: 1;
+                               multiline: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       text {
+                                               style: "style_main_text";
+                                               align: 0.0 0.5;
+                                       }
+                                       rel1 {
+                                               relative: 0.0 0.33;
+                                               to: "space.text";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.9;
+                                               to: "space.text";
+                                       }
+                               }
+                               description {
+                                       state: "sub_show" 0.0;
+                                       inherit: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.63;
+                                               to: "space.text";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "space.text";
+                                       }
+                               }
+                               description {
+                                       state: "sub_hide" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                       }
+
+                       part {
+                               name: "touch";
+                               mouse_events: 1;
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "space.text";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "space.text";
+                                       }
+                                               color : 0 0 0 0;
+                                       }
+                               }
+                       }
+
+               programs {
+                       program {
+                               name: "pressed_noti";
+                               signal: "mouse,clicked,1";
+                               source: "touch";
+                               action: SIGNAL_EMIT "noti_press" "";
+                       }
+
+                       program {
+                               name: "pressed_image";
+                               signal: "mouse,clicked,1";
+                               source: "icon_big";
+                               action: SIGNAL_EMIT "image_press" "";
+                       }
+
+                       program {
+                               name: "pressed_handle";
+                               signal: "mouse,clicked,1";
+                               source: "space.handle";
+                               source: "handle_img";
+                               action: SIGNAL_EMIT "del" "";
+                       }
+
+                       program {
+                               name: "subtext_show";
+                               signal: "sub_show";
+                               source: "subtitle_text";
+                               action: STATE_SET "sub_show" 0.0;
+                               target: "subtitle_text";
+                               target: "title_text";
+                               target: "content_text";
+                       }
+
+                       program {
+                               name: "subtext_hide";
+                               signal: "sub_hide";
+                               source: "subtitle_text";
+                               action: STATE_SET "sub_hide" 0.0;
+                               target: "subtitle_text";
+                               target: "title_text";
+                               target: "content_text";
+                       }
+
+                       program {
+                               name: "thumbnail_show";
+                               signal: "thumbnail_show";
+                               source: "icon_thumbnail";
+                               action: STATE_SET "default" 0.0;
+                               target: "icon_thumbnail";
+                       }
+
+                       program {
+                               name: "thumbnail_hide";
+                               signal: "thumbnail_hide";
+                               source: "icon_thumbnail";
+                               action: STATE_SET "hide" 0.0;
+                               target: "icon_thumbnail";
+                       }
+
+                       program {
+                               name: "icon_show";
+                               signal: "icon_show";
+                               source: "icon_big";
+                               action: STATE_SET "default" 0.0;
+                               target: "icon_big";
+                       }
+
+                       program {
+                               name: "icon_hide";
+                               signal: "icon_hide";
+                               source: "icon_big";
+                               action: STATE_SET "hide" 0.0;
+                               target: "icon_big";
+                       }
+
+                       program {
+                               name: "button_layout_show";
+                               signal: "button_layout_show";
+                               source: "button_layout.swallow";
+                               action: STATE_SET "default" 0.0;
+                               target: "button_layout.swallow";
+                       }
+
+                       program {
+                               name: "button_layout_hide";
+                               signal: "button_layout_hide";
+                               source: "button_layout.swallow";
+                               action: STATE_SET "hide" 0.0;
+                               target: "button_layout.swallow";
+                       }
+
+                       program {
+                               name: "entry_layout_show";
+                               signal: "entry_layout_show";
+                               source: "entry_layout.swallow";
+                               action: STATE_SET "default" 0.0;
+                               target: "entry_layout.swallow";
+                       }
+
+                       program {
+                               name: "entry_layout_hide";
+                               signal: "entry_layout_hide";
+                               source: "entry_layout.swallow";
+                               action: STATE_SET "hide" 0.0;
+                               target: "entry_layout.swallow";
+                       }
+               }
+       }
+
+       group {
+               name: "layout.button";
+               parts {
+                       part {
+                               name: "space.button";
+                               type: SPACER;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+
+                       PADDING_TOP("padding_top", 6);
+                       PADDING_BOTTOM("padding_bottom", 19);
+
+                       part {
+                               name: "button.bg.img";
+                               type:IMAGE;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.05 1.0;
+                                               to: "padding_top";
+                                       }
+                                       rel2 {
+                                               relative: 0.95 0.0;
+                                               to: "padding_bottom";
+                                       }
+                                       color_class: "ATO006P";
+                                       image {
+                                               normal: "core_list_button_bg.#.png";
+                                       }
+                                       align: 0.5 0.5;
+                               }
+                               description {
+                                       state: "pressed" 0.0;
+                                       inherit: "default" 0.0;
+                                       color_class: "AO001L1P";
+                               }
+                       }
+
+                       part {
+                               name: "content.button.image";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.5;
+                                       rel1 {
+                                               to: "button.bg.img";
+                                       }
+                                       rel2 {
+                                               to: "button.bg.img";
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "content.button.text";
+                               type: TEXT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.5;
+                                       rel1 {
+                                               to: "button.bg.img";
+                                       }
+                                       rel2 {
+                                               to: "button.bg.img";
+                                       }
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               size: 30;
+                                               text_class: "tizen";
+                                               align: 0.5 0.5;
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "touch";
+                               mouse_events: 1;
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "space.button";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "space.button";
+                                       }
+                                       color : 0 0 0 0;
+                               }
+                       }
+               }
+
+               programs {
+                       program {
+                               name: "pressed_button";
+                               signal: "mouse,clicked,1";
+                               source: "touch";
+                               action: SIGNAL_EMIT "button_clicked" "";
+                       }
+               }
+       }
+
+       group {
+               name: "layout.entry";
+               parts {
+                       part {
+                               name: "bg";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+
+                               }
+                       }
+
+                       PADDING_TOP("padding_top", 1);
+                       PADDING_BOTTOM("padding_bottom", 33);
+                       PADDING_LEFT("padding.left", 32);
+                       PADDING_RIGHT("padding.right", 32);
+
+                       part {
+                               name: "padding_entry_top";
+                               type: SPACER;
+                               scale: 1;
+                                       description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 16;
+                                       rel1 { to: "padding_top"; relative: 0.0 0.0; }
+                                       rel2 { to: "padding_top"; relative: 1.0 0.0; }
+                                       align: 0.0 0.0;
+                               }
+                       }
+
+                       part {
+                               name: "entry.swallow";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 54;
+                                       rel1 { to_x: "padding.left"; to_y: "padding_entry_top"; relative: 1.0 1.0; }
+                                       rel2 { to_x: "padding2"; to_y: "padding_bottom"; relative: 0.0 0.0; }
+                                       align: 0.0 0.0;
+                               }
+                       }
+
+                       part {
+                       name: "input_field_line";
+                       type: RECT;
+                       scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 3;
+                                       max: -1 3;
+                                       fixed: 0 1;
+                                       align: 0 0;
+                                       rel1{ to: "entry.swallow"; relative: 0.0 1.0; offset: 0 15;}
+                                       rel2{ to_x: "entry.swallow"; relative: 1.0 1.0;}
+                                       color: 78 97 173 120;
+                               }
+                       }
+
+                       PADDING_BOTTOM("padding.bottom.char_count", 1);
+
+                       part {
+                               name: "padding.bottom.send_button";
+                               type: SPACER;
+                               scale: 1;
+                                       description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 3;
+                                       rel1 { to: "send_button.swallow"; relative: 0.0 1.0; }
+                                       rel2 { to: "send_button.swallow"; relative: 1.0 1.0; }
+                                       align: 0.0 0.0;
+                               }
+                       }
+
+                       part {
+                               name: "text.char_count";
+                               type: TEXT;
+                               scale: 1;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 72 31;
+                                       max: 72 31;
+                                       fixed: 1 1;
+                                       rel1 { to_x: "padding.right"; to_y: "padding.bottom.send_button"; relative: 0.0 1.0; }
+                                       rel2 { to_x: "padding.right"; to_y: "padding.bottom.send_button"; relative: 0.0 1.0; }
+                                       align: 1.0 0.0;
+                                       visible: 1;
+                                       color: 0 0 0 255;
+                                       text {
+                                               size: 23;
+                                               align: 0.5 1.0;
+                                               font: "Tizen:style=Medium";
+                                       }
+                               }
+                       }
+                       part {
+                               name: "padding2";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 0;
+                                       min: 16 0;
+                                       align: 1.0 0.0;
+                                       rel1 { to_x: "send_button.swallow"; relative: 0.0 0.0; }
+                                       rel2 { to_x: "send_button.swallow"; relative: 0.0 1.0; }
+                               }
+                       }
+
+                       part {
+                               name: "send_button.swallow";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       min: BODY_SENDBUTTON_SIZE;
+                                       max: BODY_SENDBUTTON_SIZE;
+                                       align: 1.0 1.0;
+                                       rel1 { to_x: "padding.right"; to_y: "entry.swallow"; relative: 0.0 1.0; }
+                                       rel2 { to_x: "padding.right"; to_y: "entry.swallow"; relative: 0.0 1.0; }
+                               }
+                       }
+               }
+       }
+}
diff --git a/res/edje/quickpanel_animated_icon.edc b/res/edje/quickpanel_animated_icon.edc
new file mode 100755 (executable)
index 0000000..db5951d
--- /dev/null
@@ -0,0 +1,515 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#define FRAME_TIME 0.3
+
+images {
+       image: "noti_download_01.png" COMP;
+       image: "noti_download_02.png" COMP;
+       image: "noti_download_03.png" COMP;
+       image: "noti_download_04.png" COMP;
+       image: "noti_download_05.png" COMP;
+       image: "noti_download_complete.png" COMP;
+
+       image: "noti_upload_01.png" COMP;
+       image: "noti_upload_02.png" COMP;
+       image: "noti_upload_03.png" COMP;
+       image: "noti_upload_04.png" COMP;
+       image: "noti_upload_05.png" COMP;
+       image: "noti_upload_complete.png" COMP;
+
+       image: "noti_install_01.png" COMP;
+       image: "noti_install_02.png" COMP;
+       image: "noti_install_03.png" COMP;
+       image: "noti_install_04.png" COMP;
+       image: "noti_install_05.png" COMP;
+       image: "noti_install_complete.png" COMP;
+}
+
+group {
+       name: "quickpanel/animated_icon_download";
+       parts {
+               part { name: "background";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 47 47;
+                               max: 47 47;
+                       }
+               }
+               part{
+                       name: "obj.image";
+                       type:IMAGE;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               state: "default" 0.0;
+                               min: 47 47;
+                               max: 47 47;
+                               rel1 {
+                                       to: "background";
+                               }
+                               rel2 {
+                                       to: "background";
+                               }
+                               image {
+                                       normal:"noti_download_01.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               color_class: QP_THEME_LIST_ITEM_ICON_COLOR;
+                               visible:1;
+                       }
+                       description {
+                               state: "state.0" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_download_01.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.1" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_download_02.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.2" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_download_03.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.3" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_download_04.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.4" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_download_05.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.5" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_download_complete.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+               }
+       }
+
+       programs {
+               program {
+                       name: "init.layout";
+                       signal: "load";
+                       source: "";
+                       in: 0.0 0.0;
+                       action: SIGNAL_EMIT "icon.state.0" "prog";
+               }
+               program{
+                       name: "icon.state.0";
+                       signal: "icon.state.0";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.0" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.1";
+               }
+               program{
+                       name: "icon.state.1";
+                       signal: "icon.state.1";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.1" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.2";
+               }
+               program{
+                       name: "icon.state.2";
+                       signal: "icon.state.2";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.2" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.3";
+               }
+               program{
+                       name: "icon.state.3";
+                       signal: "icon.state.3";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.3" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.4";
+               }
+               program{
+                       name: "icon.state.4";
+                       signal: "icon.state.4";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.4" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.5";
+               }
+               program{
+                       name: "icon.state.5";
+                       signal: "icon.state.5";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.5" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.0";
+               }
+       }
+}
+
+group {
+       name: "quickpanel/animated_icon_upload";
+       parts {
+               part { name: "background";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 47 47;
+                               max: 47 47;
+                       }
+               }
+               part{
+                       name: "obj.image";
+                       type:IMAGE;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               state: "default" 0.0;
+                               min: 47 47;
+                               max: 47 47;
+                               rel1 {
+                                       to: "background";
+                               }
+                               rel2 {
+                                       to: "background";
+                               }
+                               image {
+                                       normal:"noti_upload_01.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               color_class: QP_THEME_LIST_ITEM_ICON_COLOR;
+                               visible:1;
+                       }
+                       description {
+                               state: "state.0" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_upload_01.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.1" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_upload_02.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.2" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_upload_03.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.3" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_upload_04.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.4" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_upload_05.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.5" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_upload_complete.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+               }
+       }
+
+       programs {
+               program {
+                       name: "init.layout";
+                       signal: "load";
+                       source: "";
+                       in: 0.0 0.0;
+                       action: SIGNAL_EMIT "icon.state.0" "prog";
+               }
+               program{
+                       name: "icon.state.0";
+                       signal: "icon.state.0";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.0" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.1";
+               }
+               program{
+                       name: "icon.state.1";
+                       signal: "icon.state.1";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.1" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.2";
+               }
+               program{
+                       name: "icon.state.2";
+                       signal: "icon.state.2";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.2" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.3";
+               }
+               program{
+                       name: "icon.state.3";
+                       signal: "icon.state.3";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.3" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.4";
+               }
+               program{
+                       name: "icon.state.4";
+                       signal: "icon.state.4";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.4" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.5";
+               }
+               program{
+                       name: "icon.state.5";
+                       signal: "icon.state.5";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.5" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.0";
+               }
+       }
+}
+
+group {
+       name: "quickpanel/animated_icon_install";
+       parts {
+               part { name: "background";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 47 47;
+                               max: 47 47;
+                       }
+               }
+               part{
+                       name: "obj.image";
+                       type:IMAGE;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               state: "default" 0.0;
+                               min: 47 47;
+                               max: 47 47;
+                               rel1 {
+                                       to: "background";
+                               }
+                               rel2 {
+                                       to: "background";
+                               }
+                               image {
+                                       normal:"noti_install_01.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               color_class: QP_THEME_LIST_ITEM_ICON_COLOR;
+                               visible:1;
+                       }
+                       description {
+                               state: "state.0" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_install_01.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.1" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_install_02.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.2" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_install_03.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.3" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_install_04.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.4" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_install_05.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "state.5" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"noti_install_complete.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+               }
+       }
+
+       programs {
+               program {
+                       name: "init.layout";
+                       signal: "load";
+                       source: "";
+                       in: 0.0 0.0;
+                       action: SIGNAL_EMIT "icon.state.0" "prog";
+               }
+               program{
+                       name: "icon.state.0";
+                       signal: "icon.state.0";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.0" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.1";
+               }
+               program{
+                       name: "icon.state.1";
+                       signal: "icon.state.1";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.1" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.2";
+               }
+               program{
+                       name: "icon.state.2";
+                       signal: "icon.state.2";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.2" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.3";
+               }
+               program{
+                       name: "icon.state.3";
+                       signal: "icon.state.3";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.3" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.4";
+               }
+               program{
+                       name: "icon.state.4";
+                       signal: "icon.state.4";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.4" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.5";
+               }
+               program{
+                       name: "icon.state.5";
+                       signal: "icon.state.5";
+                       source: "prog";
+                       in: FRAME_TIME 0.0;
+                       action: STATE_SET "state.5" 0.0;
+                       target: "obj.image";
+                       after: "icon.state.0";
+               }
+       }
+}
diff --git a/res/edje/quickpanel_brightness.edc b/res/edje/quickpanel_brightness.edc
new file mode 100755 (executable)
index 0000000..278b3c5
--- /dev/null
@@ -0,0 +1,709 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+
+
+//#define DEBUG
+//#define DEBUG_TEXT
+
+#define BRIGHTNESS_ICON_COLOR "AO004"
+#define BRIGHTNESS_TEXT_COLOR "AO014"
+
+       styles {
+               style {
+                       name: "checkbox_text";
+                       base: "font=Tizen:style=Regular text_class=tizen font_size=24 color=#FFFFFF color_class="BRIGHTNESS_TEXT_COLOR" ellipsis=0.0 wrap=mixed";
+               }
+       }
+
+       group {
+               name: "quickpanel/brightness_controller/wrapper";
+               parts {
+                       part { name: "base";
+                               type: SPACER;
+                               repeat_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_BRIGHTNESS_HEIGHT;
+                                       max: 9999 QP_THEME_LIST_ITEM_BRIGHTNESS_HEIGHT;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part { name: "elm.swallow.controller";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to: "base";
+                                       }
+                                       rel2 {
+                                               to: "base";
+                                       }
+                               }
+                       }
+               }
+       }
+
+       group {
+               name: "quickpanel/brightness_controller/default";
+
+               images {
+                       image: "quick_icon_brightness.png" COMP;
+                       image: "quick_icon_brightness_00.png" COMP;
+                       image: "quick_icon_brightness_01.png" COMP;
+                       image: "quick_icon_brightness_02.png" COMP;
+                       image: "quick_icon_brightness_03.png" COMP;
+                       image: "quick_icon_brightness_04.png" COMP;
+                       image: "quick_icon_brightness_05.png" COMP;
+                       image: "quick_icon_brightness_06.png" COMP;
+                       image: "quick_icon_brightness_07.png" COMP;
+                       image: "quick_icon_brightness_08.png" COMP;
+                       image: "quick_icon_brightness_09.png" COMP;
+                       image: "quick_icon_brightness_10.png" COMP;
+                       image: "quick_icon_brightness_11.png" COMP;
+                       image: "core_theme_bg_01.png" COMP;
+               }
+
+               script {
+                       public ctnt_shown;
+                       public time_shown;
+               }
+
+               parts {
+                       part { name: "base";
+                               type: RECT;
+                               repeat_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_BRIGHTNESS_HEIGHT;
+                                       max: 9999 QP_THEME_LIST_ITEM_BRIGHTNESS_HEIGHT;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       color_class: QP_BACKGROUND_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 0;
+                               }
+                       }
+
+                       part {
+                               name: "background";
+                               type: IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       align: 0.5 0.5;
+                                       rel1 {
+                                               to: "base";
+                                       }
+                                       rel2 {
+                                               to: "base";
+                                       }
+                                       image {
+                                               normal: "core_theme_bg_01.png";
+                                       }
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "show.bg" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "hide.bg" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 0;
+                               }
+                       }
+
+                       part { name: "disabler";
+                               type: RECT;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               to: "base";
+                                       }
+                                       rel2 {
+                                               to: "base";
+                                       }
+                                       color_class: AO004;
+                               }
+                               description {
+                                       state: "disabled" 0.0;
+                                       inherit: "default" 0.0;
+                                       color_class: AO004D;
+                               }
+                       }
+                       part { name: "bg_image";
+                               type: RECT;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       color_class: QP_THEME_BRIGHTNESS_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color_class: QP_THEME_BRIGHTNESS_BG_COLOR;
+                               }
+                       }
+                       part { name: "elm.content.bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 9 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               to_x:"base";
+                                               to_y:"base";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               to_x:"base";
+                                               to_y:"base";
+                                               relative: 0.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       visible: 0;
+                                       //color_class: QP_BACKGROUND_COLOR;
+                               }
+                       }
+                       QUICKPANEL_FOCUS_OBJECT("focus", "elm.content.bg", "elm.content.bg")
+                       part { name: "elm.padding.left";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 15 0;
+                                       max: 15 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel2.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.rect.thumbnail";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 42 42;
+                                       max: 42 42;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to_x:"elm.padding.left";
+                                               to_y:"base";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               to_x:"elm.padding.left";
+                                               to_y:"base";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.5;
+                                       visible:0;
+                               }
+                       }
+                       part { name: "elm.image.thumbnail";
+                               type:IMAGE;
+                               clip_to: "disabler";
+                               scale:1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 0;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       image {
+                                               normal:"quick_icon_brightness_00.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.0" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_00.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.1" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_01.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.2" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_02.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.3" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_03.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.4" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_04.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.5" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_05.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.6" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_06.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.7" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_07.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.8" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_08.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.9" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_09.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.10" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_10.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.11" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness_11.png";
+                                       }
+                               }
+                               description {
+                                       state: "state.auto" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal:"quick_icon_brightness.png";
+                                       }
+                               }
+                       }
+                       part { name: "elm.padding.thumbnail.x";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               to:"elm.rect.thumbnail";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               to:"elm.rect.thumbnail";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.swallow.slider";
+                               type: SWALLOW;
+                               //clip_to: "disabler";
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 1.0 0.0;
+                                               to: "elm.padding.thumbnail.x";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to: "elm.padding.bf.check";
+                                       }
+                               }
+                       }
+                       part { name: "elm.rect.slider";
+                               type: RECT;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 48;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 0.0;
+                                               to_x: "elm.padding.thumbnail.x";
+                                               to_y: "base";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.bf.check";
+                                               to_y: "base";
+                                       }
+                                       align: 0.0 0.5;
+                                       color: 0 0 0 0;
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "disabled" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part { name: "elm.padding.bf.check";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "elm.check.swallow";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to: "elm.check.swallow";
+                                       }
+                                       align: 1.0 0.5;
+                               }
+                       }
+
+                       part { name: "elm.check.swallow";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "elm.padding.bf.auto";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to: "elm.padding.bf.auto";
+                                       }
+                                       align: 1.0 0.5;
+                                       min: 0 40;
+                                       fixed: 1 1;
+                               }
+                       }
+
+                       part { name: "elm.padding.bf.auto";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "elm.rect.auto";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to: "elm.rect.auto";
+                                       }
+                                       align: 1.0 0.5;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                               }
+                       }
+                       part { name: "elm.rect.auto";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative : 0.0 0.0;
+                                               to : "elm.check.text";
+                                       }
+                                       rel2 {
+                                               relative : 1.0 1.0;
+                                               to : "elm.check.text";
+                                       }
+                               }
+                       }
+                       part { name: "elm.check.text";
+                               type: TEXT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align : 1.0 0.5;
+                                       fixed : 1 1;
+                                       rel1 {
+                                               relative : 0.0 0.5;
+                                               to : "elm.padding.right";
+                                       }
+                                       rel2 {
+                                               relative : 0.0 0.5;
+                                               to : "elm.padding.right";
+                                       }
+                                       text {
+                                               font : "Tizen:style=Regular";
+                                               size : 22;
+                                               text_class : "Tizen";
+                                               align : 1.0 0.5;
+                                               min : 1 1;
+                                               ellipsis: -1;
+                                       }
+                                       color_class: ATO019;
+                               }
+                       }
+                       
+                       part { name: "elm.padding.right";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative: 1.0 0.0;
+                                               to: "base";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "base";
+                                       }
+                                       align: 1.0 0.5;
+                                       min: 15 0;
+                                       fixed: 1 0;
+                               }
+                       }
+               }
+
+               programs {
+                       program { name: "show_content";
+                               signal: "elm,state,elm.swallow.slider,active";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"elm.swallow.slider", "show", 0.0);
+                                       set_int(ctnt_shown, 1);
+                               }
+                       }
+                       program { name: "go_active";
+                               signal: "elm,state,selected";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"bg_image", "selected", 0.0);
+                                       if (get_int(ctnt_shown) == 1)
+                                       set_state(PART:"elm.swallow.slider", "selected", 0.0);
+                               }
+                       }
+                       program { name: "go_passive";
+                               signal: "elm,state,unselected";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"bg_image", "default", 0.0);
+                                       if (get_int(ctnt_shown) == 1)
+                                       set_state(PART:"elm.swallow.slider", "show", 0.0);
+                               }
+                       }
+                       program{
+                               name: "show.base.bg";
+                               signal: "show";
+                               source: "base";
+                               action: STATE_SET "show" 0.0;
+                               target: "base";
+                       }
+                       program{
+                               name: "hide.base.bg";
+                               signal: "hide";
+                               source: "base";
+                               action: STATE_SET "hide" 0.0;
+                               target: "base";
+                       }
+                       program{
+                               name: "show.bg";
+                               signal: "show.bg";
+                               source: "prog.bg";
+                               action: STATE_SET "show.bg" 0.0;
+                               target: "background";
+                       }
+                       program{
+                               name: "hide.bg";
+                               signal: "hide.bg";
+                               source: "prog.bg";
+                               action: STATE_SET "hide.bg" 0.0;
+                               target: "background";
+                       }
+                       program{
+                               name: "icon.state.0";
+                               signal: "icon.state.0";
+                               source: "prog";
+                               action: STATE_SET "state.0" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.1";
+                               signal: "icon.state.1";
+                               source: "prog";
+                               action: STATE_SET "state.1" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.2";
+                               signal: "icon.state.2";
+                               source: "prog";
+                               action: STATE_SET "state.2" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.3";
+                               signal: "icon.state.3";
+                               source: "prog";
+                               action: STATE_SET "state.3" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.4";
+                               signal: "icon.state.4";
+                               source: "prog";
+                               action: STATE_SET "state.4" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.5";
+                               signal: "icon.state.5";
+                               source: "prog";
+                               action: STATE_SET "state.5" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.6";
+                               signal: "icon.state.6";
+                               source: "prog";
+                               action: STATE_SET "state.6" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.7";
+                               signal: "icon.state.7";
+                               source: "prog";
+                               action: STATE_SET "state.7" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.8";
+                               signal: "icon.state.8";
+                               source: "prog";
+                               action: STATE_SET "state.8" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.9";
+                               signal: "icon.state.9";
+                               source: "prog";
+                               action: STATE_SET "state.9" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.10";
+                               signal: "icon.state.10";
+                               source: "prog";
+                               action: STATE_SET "state.10" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.11";
+                               signal: "icon.state.11";
+                               source: "prog";
+                               action: STATE_SET "state.11" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               name: "icon.state.auto";
+                               signal: "icon.state.auto";
+                               source: "prog";
+                               action: STATE_SET "state.auto" 0.0;
+                               target: "elm.image.thumbnail";
+                       }
+                       program{
+                               signal: "disable";
+                               source: "disabler";
+                               action: STATE_SET "default" 0.0;
+                               target: "disabler";
+                               target: "elm.rect.slider";
+                       }
+                       program{
+                               signal: "enable";
+                               source: "disabler";
+                               action: STATE_SET "disabled" 0.0;
+                               target: "disabler";
+                               target: "elm.rect.slider";
+                       }
+               }
+       }
diff --git a/res/edje/quickpanel_datetime.edc b/res/edje/quickpanel_datetime.edc
new file mode 100755 (executable)
index 0000000..c35f424
--- /dev/null
@@ -0,0 +1,412 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+
+
+images {
+       image: "icon_indicator_setting.png" COMP;
+       image: "line_indicator_divider.png" COMP;
+       image: "bg_press.#.png" COMP;
+}
+
+styles {
+       style {
+               name: "font_time_am_pm_style";
+               base: "font=Tizen:style=Regular  font_size=22 valign=middle  ellipsis=1.0 wrap=none";
+               tag: "time" "+ color=#FFFFFF ";
+               tag: "ampm" "+ color=#FFFFFF ";
+       }
+
+       style {
+               name: "font_date_style";
+               base: "font=Tizen:style=Regular  font_size=22 color=#FFFFFF valign=middle color_class=tizen  ellipsis=1.0 wrap=none";
+       }
+}
+
+group {
+       name: "quickpanel/datetime";
+
+       script {
+               public g_is_timedate_clickable;
+       }
+
+       parts {
+               part { name: "base";
+                       type: RECT;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               color_class: QP_BACKGROUND_COLOR;
+                               visible: 0;
+                       }
+               }
+               QUICKPANEL_FOCUS_OBJECT("focus", "base", "base")
+
+               part { name: "space.button.setting";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 60 0;
+                               fixed: 1 0;
+                               align: 1.0 0.5;
+                               rel1 {
+                                       relative : 1.0 0.0;
+                                       to: "base";
+                               }
+                               rel2 {
+                                       relative : 1.0 1.0;
+                                       to: "base";
+                               }
+                       }
+               }
+               QUICKPANEL_FOCUS_OBJECT("focus.setting", "space.button.setting", "space.button.setting")
+
+               part { name: "space.divider";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 1 0;
+                               fixed: 1 0;
+                               align: 1.0 0.5;
+                               rel1 {
+                                       relative : 0.0 0.0;
+                                       to: "space.button.setting";
+                               }
+                               rel2 {
+                                       relative : 0.0 1.0;
+                                       to: "space.button.setting";
+                               }
+                       }
+               }
+
+               part {
+                       name: "space.datetime";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       relative : 0.0 0.0;
+                                       to: "base";
+                               }
+                               rel2 {
+                                       relative : 0.0 1.0;
+                                       to: "space.divider";
+                               }
+                       }
+               }
+               QUICKPANEL_FOCUS_OBJECT("focus.datetime", "space.datetime", "space.datetime")
+
+               part { name: "image.button.setting.bg";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 36;
+                               fixed: 0 1;
+                               align: 0.0 0.5;
+                               rel1 {
+                                       relative: 0.0 0.5;
+                                       to: "space.button.setting";
+                               }
+                               rel2 {
+                                       relative: 1.0 0.5;
+                                       to: "space.button.setting";
+                               }
+                               image {
+                                       normal: "bg_press.#.png";
+                               }
+                               color_class: "F043P";
+                               visible: 0;
+                       }
+                       description {
+                               state: "pressed" 0.0;
+                               inherit: "default";
+                               visible: 1;
+                       }
+               }
+
+               part { name: "image.datetime.bg";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 36;
+                               fixed: 0 1;
+                               align: 0.0 0.5;
+                               rel1 {
+                                       relative : 0.0 0.5;
+                                       to: "space.datetime";
+                               }
+                               rel2 {
+                                       relative : 1.0 0.5;
+                                       to: "space.datetime";
+                               }
+                               image {
+                                       normal: "bg_press.#.png";
+                               }
+                               color_class: "F043P";
+                               visible: 0;
+                       }
+                       description {
+                               state: "pressed" 0.0;
+                               inherit: "default";
+                               visible: 1;
+                       }
+               }
+
+               part { name: "image.button.setting";
+                       type: IMAGE;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 42 42;
+                               fixed: 1 1;
+                               align: 0.5 0.5;
+                               rel1 {
+                                       relative: 0.5 0.5;
+                                       to: "space.button.setting";
+                               }
+                               rel2 {
+                                       relative: 0.5 0.5;
+                                       to: "space.button.setting";
+                               }
+                               image {
+                                       normal:"icon_indicator_setting.png";
+                               }
+                               color_class: "AO025";
+                       }
+               }
+
+               part { name: "image.divider";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 1 24;
+                               fixed: 1 1;
+                               align: 0.5 0.5;
+                               rel1 {
+                                       relative: 0.5 0.5;
+                                       to: "space.divider";
+                               }
+                               rel2 {
+                                       relative: 1.0 0.5;
+                                       to: "space.divider";
+                               }
+                               image {
+                                       normal: "line_indicator_divider.png";
+                               }
+                               color_class: "AO003E1";
+                       }
+               }
+
+               part { name: "divider.padding.left";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 15 0;
+                               fixed: 1 0;
+                               align: 1.0 0.5;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                                       to: "space.divider";
+                               }
+                               rel2 {
+                                       relative: 0.0 1.0;
+                                       to: "space.divider";
+                               }
+                       }
+               }
+
+               part { name: "text.time";
+                       type: TEXTBLOCK;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 (3 + 30 + 3);
+                               fixed: 1 1;
+                               align: 1.0 0.5;
+                               rel1 {
+                                       relative : 0.0 0.5;
+                                       to: "divider.padding.left";
+                               }
+                               rel2 {
+                                       relative : 0.0 0.5;
+                                       to: "divider.padding.left";
+                               }
+                               text {
+                                       style: "font_time_am_pm_style";
+                                       min: 1 0;
+                                       max: 1 0;
+                                       align: 1.0 0.5;
+                                       ellipsis: -1;
+                               }
+                       }
+               }
+
+               part { name: "date.left.padding";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 15 0;
+                               fixed: 1 0;
+                               align: 0.0 0.0;
+                               rel1 {
+                                       relative : 0.0 0.0;
+                                       to: "space.datetime";
+                               }
+                               rel2 {
+                                       relative : 0.0 1.0;
+                                       to: "space.datetime";
+                               }
+                       }
+               }
+
+               part {
+                       name: "date.top.padding";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 0;
+                               fixed: 0 1;
+                               align: 0.0 0.0;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                                       to: "space.datetime";
+                               }
+                               rel2 {
+                                       relative: 1.0 0.0;
+                                       to: "space.datetime";
+                               }
+                       }
+               }
+
+               part { name: "text.time.left.padding";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 15 0;
+                               fixed: 1 0;
+                               align: 1.0 0.0;
+                               rel1 {
+                                       //relative : 0.0 0.0;
+                                       to: "text.time";
+                               }
+                               rel2 {
+                                       relative : 0.0 1.0;
+                                       to: "text.time";
+                               }
+                       }
+               }
+
+               part { name: "text.date";
+                       type: TEXTBLOCK;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 (8 + 20 + 8);
+                               fixed: 0 1;
+                               align: 0.0 0.5;
+                               rel1 {
+                                       relative : 1.0 1.0;
+                                       to_x: "date.left.padding";
+                                       to_y: "date.top.padding";
+                               }
+                               rel2 {
+                                       relative : 0.0 1.0;
+                                       to_x : "text.time.left.padding";
+                                       to_y: "space.datetime";
+                               }
+                               text {
+                                       style: "font_date_style";
+                                       min: 0 0;
+                                       max: 1 0;
+                                       align: 0.0 0.5;
+                               }
+                       }
+               }
+       }
+
+       programs {
+               program {
+                       name: "timedate.init";
+                       signal: "load";
+                       script{
+                               set_int(g_is_timedate_clickable, 1);
+                       }
+               }
+               program{
+                       name: "button.setting.down";
+                       signal: "mouse,down,*";
+                       source: "focus.setting";
+                       action: STATE_SET "pressed" 0.0;
+                       target: "image.button.setting.bg";
+               }
+               program{
+                       name: "button.setting.up";
+                       signal: "mouse,up,*";
+                       source: "focus.setting";
+                       action: STATE_SET "default" 0.0;
+                       target: "image.button.setting.bg";
+               }
+               program {
+                       name: "timendate.click.enable";
+                       signal: "timendate.click.enable";
+                       source: "prog";
+                       script {
+                               set_int(g_is_timedate_clickable, 1);
+                       }
+               }
+               program {
+                       name: "timendate.click.disable";
+                       signal: "timendate.click.disable";
+                       source: "prog";
+                       script {
+                               set_int(g_is_timedate_clickable, 0);
+                       }
+               }
+               program{
+                       name: "date_time.down";
+                       signal: "mouse,down,*";
+                       source: "focus.datetime";
+                       script {
+                               if (get_int(g_is_timedate_clickable) == 1) {
+                                       set_state(PART:"image.datetime.bg", "pressed", 0.0);
+                               }
+                       }
+               }
+               program{
+                       name: "date_time.up";
+                       signal: "mouse,up,*";
+                       source: "focus.datetime";
+                       action: STATE_SET "default" 0.0;
+                       target: "image.datetime.bg";
+               }
+       }
+}
+
diff --git a/res/edje/quickpanel_images.edc b/res/edje/quickpanel_images.edc
new file mode 100755 (executable)
index 0000000..f5dc31c
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+
+#define RESOURCE_IMAGE( FILE_NAME ) \
+   group { \
+      name: FILE_NAME; \
+      images.image: FILE_NAME COMP; \
+      parts { \
+         part { name: "image"; \
+            description { \
+               state: "default" 0.0; \
+               image.normal: FILE_NAME; \
+               aspect: 1 1; \
+               aspect_preference: BOTH; \
+            } \
+         } \
+      } \
+   }
+
+#define RESOURCE_IMAGE_LOSSY( FILE_NAME ) \
+   group { \
+      name: FILE_NAME; \
+      images.image: FILE_NAME LOSSY 85; \
+      parts { \
+         part { name: "image"; \
+            description { \
+               state: "default" 0.0; \
+               image.normal: FILE_NAME; \
+               aspect: 1 1; \
+               aspect_preference: BOTH; \
+            } \
+         } \
+      } \
+   }
+
+       RESOURCE_IMAGE("quick_icon_bluetooth.png");
+       RESOURCE_IMAGE("quick_icon_location.png");
+       RESOURCE_IMAGE("quick_icon_auto_rotate.png");
+       RESOURCE_IMAGE("quick_icon_sf_vf.png");
+       RESOURCE_IMAGE("quick_icon_sn_vf.png");
+       RESOURCE_IMAGE("quick_icon_sf_vn.png");
+       RESOURCE_IMAGE("quick_icon_wifi.png");
diff --git a/res/edje/quickpanel_listitem_noti.edc b/res/edje/quickpanel_listitem_noti.edc
new file mode 100755 (executable)
index 0000000..269d2f0
--- /dev/null
@@ -0,0 +1,899 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+//#define DEBUG
+//#define DEBUG_TEXT
+
+
+#define QP_NOTI_LISTTYPE_TITLE_COLOR "T023"
+#define QP_NOTI_LISTTYPE_TITLE_PRESS_COLOR "T023P"
+#define QP_NOTI_LISTTYPE_CONTENTS_COLOR "ATO012"
+#define QP_NOTI_LISTTYPE_COUNT_COLOR "T112"
+#define QP_NOTI_LISTTYPE_COUNT_BG_COLOR "B0517"
+#define QP_NOTI_LISTTYPE_TIME_COLOR "ATO012"
+
+#define QP_NOTI_LISTTYPE_TITLE_FONT_SIZE 30
+#define QP_NOTI_LISTTYPE_CONTENTS_FONT_SIZE 24
+#define QP_NOTI_LISTTYPE_COUNT_FONT_SIZE 21
+#define QP_NOTI_LISTTYPE_TIME_FONT_SIZE 24
+
+       styles {
+               style {
+                       name: "noti_content_text";
+                       base: "font=Tizen:style=Regular text_class=tizen align=left valign=0.5 font_size="QP_NOTI_LISTTYPE_CONTENTS_FONT_SIZE" ellipsis=1.0 color=#2B2B2BFF color_class="QP_NOTI_LISTTYPE_CONTENTS_COLOR" wrap=none";
+               }
+       }
+
+       images {
+               image: "core_icon_badge_container.#.png" COMP;
+               image: "quick_button_icon_bg.png" COMP;
+       }
+
+       group {
+               name: "quickpanel/listitem/notification";
+               data.item: "bgcolor" QP_THEME_BANDED_COLOR;
+
+               parts {
+                       part {
+                               name: "base";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_NOTIFICATION_LISTTYPE_HEIGHT;
+                                       max: -1 QP_THEME_LIST_ITEM_NOTIFICATION_LISTTYPE_HEIGHT;
+                               }
+                       }
+                       part {
+                               name: "base.bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       color_class: QP_THEME_BANDED_COLOR;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "bgcolor";
+                               type: "RECT";
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       color: 61 185 204 11;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "effect" 0.0;
+                                       inherit: "default" 0.0;
+                                       color_class: QP_THEME_BG_COLOR;
+                                       color: 255 255 255 128;
+                               }
+                               #define BGCOLOR_DESC(NAME, COLOR) \
+                               description {\
+                                       state: NAME 0.0;\
+                                       inherit: "default" 0.0;\
+                                       color:  COLOR;\
+                               }
+
+                               BGCOLOR_DESC("bgcolor.step1", 61 185 204 11);
+                               BGCOLOR_DESC("bgcolor.step2", 61 185 204 21);
+                               BGCOLOR_DESC("bgcolor.step3", 61 185 204 31);
+                               BGCOLOR_DESC("bgcolor.step4", 61 185 204 41);
+                               BGCOLOR_DESC("bgcolor.step5", 61 185 204 51);
+                               BGCOLOR_DESC("bgcolor.step6", 61 185 204 62);
+                               BGCOLOR_DESC("bgcolor.step7", 61 185 204 72);
+                               BGCOLOR_DESC("bgcolor.step8", 61 185 204 82);
+                               BGCOLOR_DESC("bgcolor.step9", 61 185 204 92);
+                               BGCOLOR_DESC("bgcolor.step10", 61 185 204 102);
+                       }
+                       part {
+                               name: "elm.padding.right";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 15 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.top.icon";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 BOX_ICON_TOP_PADDING;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.left.icon";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 15 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.top.text";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 BOX_TEXT_TOP_PADDING;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.bottom.text";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 BOX_TEXT_TOP_PADDING;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 0.0 1.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.left.text";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: (15 + BOX_ICON_SIZE_W + 15) 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.thumbnail";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       max: BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left.icon";
+                                               to_y: "elm.padding.top.icon";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left.icon";
+                                               to_y: "elm.padding.top.icon";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.icon";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 36 36;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.text";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 38;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left.text";
+                                               to_y: "elm.padding.top.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.top.text";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.text.title";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 38;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "elm.rect.text";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "elm.rect.text";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                               description {
+                                       state: "move.center" 0.0;
+                                       inherit: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.rect.text";
+                                               to_y: "base";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.rect.text";
+                                               to_y: "base";
+                                       }
+                                       align: 0.0 0.5;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.text.content";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 32;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to: "elm.rect.text";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                               to_x: "elm.rect.text";
+                                               to_y: "elm.padding.bottom.text";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "masking";
+                               type: IMAGE;
+                               scale: 1;
+                               precise_is_inside: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_W;
+                                       max: BOX_ICON_BG_SIZE_W BOX_ICON_BG_SIZE_H;
+                                       fixed : 1 1;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       image.normal: "quick_button_icon_bg.png";
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:1;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.thumbnail";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               clip_to: "masking";
+                               description {
+                                       state: "default" 0.0;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_W;
+                                       max: BOX_ICON_BG_SIZE_W BOX_ICON_BG_SIZE_H;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       align: 0.5 0.5;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.mainicon";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       max: BOX_ICON_BG_SIZE_W BOX_ICON_BG_SIZE_H;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       align: 0.5 0.5;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:1;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.subicon";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 30 30;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.icon";
+                                       }
+                                       rel2 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.icon";
+                                       }
+                                       align: 0.5 0.5;
+                               }
+                       }
+                       part {
+                               name: "elm.text.title";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       //fixed: 0 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to:"elm.rect.text.title";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to:"elm.rect.text.title";
+                                       }
+                                       color_class: QP_NOTI_LISTTYPE_TITLE_COLOR;
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               text_class: "tizen";
+                                               size: QP_NOTI_LISTTYPE_TITLE_FONT_SIZE;
+                                               ellipsis: 0.0;
+                                               align: 0.0 0.5;
+                                       }
+                               }
+                               description {
+                                       state: "short" 0.0;
+                                       inherit: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "elm.rect.text.title";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.left.time";
+                                               to_y: "elm.rect.text.title";
+                                               offset: -15 0;
+                                       }
+                               }
+                               description {
+                                       state: "short.center" 0.0;
+                                       inherit: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "elm.rect.text.title";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.left.time";
+                                               to_y: "elm.rect.text.title";
+                                               offset: -15 0;
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "elm.padding.left.time";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 0;
+                                       min: 10 0;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.text.time";
+                                               to_y: "elm.padding.top.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.text.time";
+                                               to_y: "elm.padding.top.text";
+                                       }
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.right.time";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 0;
+                                       min: 10 0;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.top.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.top.text";
+                                       }
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.text.time";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 1.0 0.5;
+                                       fixed: 1 1;
+                                       min: 0 38;
+                                       rel1 {
+                                               relative: 0.0 0.5;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.rect.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.5;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.rect.text";
+                                       }
+                                       color_class: QP_NOTI_LISTTYPE_TIME_COLOR;
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               text_class: "tizen";
+                                               size: QP_NOTI_LISTTYPE_TIME_FONT_SIZE;
+                                               ellipsis: -1;
+                                               align: 0.0 0.5;
+                                               min: 1 0;
+                                       }
+
+                               }
+                               description {
+                                       state: "center" 0.0;
+                                       inherit: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.rect.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.rect.text";
+                                       }
+                               }
+                       }
+                       part {
+                               name: "elm.text.content";
+                               type: TEXT;
+                               mouse_events: 0;
+                               multiline: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       fixed: 1 1;
+                                       min: 0 34;
+                                       max: -1 30;
+                                       rel1 {
+                                               to: "elm.rect.text.content";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.text.content";
+                                       }
+                                       color_class: QP_NOTI_LISTTYPE_CONTENTS_COLOR;
+                                       text {
+                                               //style: "noti_content_text";
+                                               font: "Tizen:style=Regular";
+                                               text_class: "tizen";
+                                               size: QP_NOTI_LISTTYPE_CONTENTS_FONT_SIZE;
+                                               ellipsis: 0.0;
+                                               align: 0.0 0.5;
+                                               min: 0 1;
+                                       }
+                               }
+                               description {
+                                       state: "short" 0.0;
+                                       inherit: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "elm.rect.text.content";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.image.count.bg";
+                                               to_y: "elm.rect.text.content";
+                                               offset: -15 0;
+                                       }
+                               }
+                       }
+                       part{
+                               name: "elm.image.count.bg";
+                               type:IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 1.0 0.0;
+                                       fixed: 1 1;
+                                       min: 32 32;
+                                       max: 68 32;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.left.count";
+                                               to_y: "elm.rect.text";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                               to_x: "elm.padding.right.count";
+                                               to_y: "elm.padding.bottom.text";
+                                       }
+                                       image {
+                                               normal:"core_icon_badge_container.#.png";
+                                       }
+                                       color_class: QP_NOTI_LISTTYPE_COUNT_BG_COLOR;
+                                       visible:0;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:1;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.left.count";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 0;
+                                       min: 10 0;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.text.count";
+                                               to_y: "elm.padding.bottom.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.text.count";
+                                               to_y: "elm.padding.bottom.text";
+                                       }
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.right.count";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 0;
+                                       min: 10 0;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom.text";
+                                       }
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.text.count";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 1.0 0.0;
+                                       fixed: 1 1;
+                                       min: 0 32;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right.count";
+                                               to_y: "elm.rect.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right.count";
+                                               to_y: "elm.rect.text";
+                                       }
+                                       color_class: QP_NOTI_LISTTYPE_COUNT_COLOR;
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               text_class: "tizen";
+                                               size: QP_NOTI_LISTTYPE_COUNT_FONT_SIZE;
+                                               ellipsis: -1;
+                                               align: 0.0 0.5;
+                                               min: 1 0;
+                                       }
+                               }
+                       }
+                       part {
+                               name: "object.layer.touch.background";
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               scale: 1;
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {to: "base";}
+                                       rel2 {to: "base";}
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       QUICKPANEL_FOCUS_OBJECT("focus", "base", "base")
+               }
+
+               programs {
+                       script{
+                               public current_background;
+                       }
+                       program{
+                               name: "listbox.touch.down";
+                               signal: "mouse,clicked,1";
+                               source: "object.layer.touch.background";
+                               action: SIGNAL_EMIT "selected" "edje";
+                       }
+                       program{
+                               name: "effect,mouse,down";
+                               signal: "mouse,down,1";
+                               source: "object.layer.touch.background";
+                               script {
+                                       set_state(PART:"bgcolor", "effect", 0.0);
+                               }
+                       }
+                       program{
+                               name: "effect,mouse,up";
+                               signal: "mouse,up,1";
+                               source: "object.layer.touch.background";
+                               script {
+                                       new tmp[64];
+                                       get_str(current_background, tmp, 64);
+                                       set_state(PART:"bgcolor", tmp, 0.0);
+                               }
+                               transition: ACCELERATE 0.20;
+                       }
+
+#define BGCOLOR_PROG(NAME, SIG) \
+                       program{\
+                               name: NAME;\
+                               signal: SIG;\
+                               source: "bgcolor";\
+                               transition: ACCELERATE 0.20;\
+                               script {\
+                                       set_str(current_background, SIG);\
+                                       set_state(PART:"bgcolor", SIG, 0.0);\
+                               }\
+                       }
+
+                       BGCOLOR_PROG("bgcolor.step1", "bgcolor.step1");
+                       BGCOLOR_PROG("bgcolor.step2", "bgcolor.step2");
+                       BGCOLOR_PROG("bgcolor.step3", "bgcolor.step3");
+                       BGCOLOR_PROG("bgcolor.step4", "bgcolor.step4");
+                       BGCOLOR_PROG("bgcolor.step5", "bgcolor.step5");
+                       BGCOLOR_PROG("bgcolor.step6", "bgcolor.step6");
+                       BGCOLOR_PROG("bgcolor.step7", "bgcolor.step7");
+                       BGCOLOR_PROG("bgcolor.step8", "bgcolor.step8");
+                       BGCOLOR_PROG("bgcolor.step9", "bgcolor.step9");
+
+                       program{
+                               name: "title.long";
+                               signal: "title.long";
+                               source: "prog";
+                               action: STATE_SET "default" 0.0;
+                               target: "elm.text.title";
+                       }
+                       program{
+                               name: "title.short";
+                               signal: "title.short";
+                               source: "prog";
+                               action: STATE_SET "short" 0.0;
+                               target: "elm.text.title";
+                       }
+                       program{
+                               name: "title.short.center";
+                               signal: "title.short.center";
+                               source: "prog";
+                               action: STATE_SET "short.center" 0.0;
+                               target: "elm.text.title";
+                       }
+                       program{
+                               name: "title.text.default";
+                               signal: "title.text.default";
+                               source: "prog";
+                               action: STATE_SET "default" 0.0;
+                               target: "elm.text.title";
+                       }
+                       program{
+                               name: "content.long";
+                               signal: "content.long";
+                               source: "prog";
+                               action: STATE_SET "default" 0.0;
+                               target: "elm.text.content";
+                       }
+                       program{
+                               name: "content.short";
+                               signal: "content.short";
+                               source: "prog";
+                               action: STATE_SET "short" 0.0;
+                               target: "elm.text.content";
+                       }
+                       program{
+                               name: "count.show";
+                               signal: "count.show";
+                               source: "prog";
+                               action: STATE_SET "show" 0.0;
+                               target: "elm.image.count.bg";
+                       }
+                       program{
+                               name: "count.hide";
+                               signal: "count.hide";
+                               source: "prog";
+                               action: STATE_SET "hide" 0.0;
+                               target: "elm.image.count.bg";
+                       }
+                       program {
+                               name: "title.move.center";
+                               signal: "title.move.center";
+                               source: "prog";
+                               action: STATE_SET "move.center" 0.0;
+                               target: "elm.rect.text.title";
+                       }
+                       program {
+                               name: "title.move.default";
+                               signal: "title.move.default";
+                               source: "prog";
+                               action: STATE_SET "default" 0.0;
+                               target: "elm.rect.text.title";
+                       }
+                       program {
+                               name: "time.move.center";
+                               signal: "time.move.center";
+                               source: "prog";
+                               action: STATE_SET "center" 0.0;
+                               target: "elm.text.time";
+                       }
+                       program {
+                               name: "time.move.default";
+                               signal: "time.move.default";
+                               source: "prog";
+                               action: STATE_SET "default" 0.0;
+                               target: "elm.text.time";
+                       }
+                       program{
+                               name: "masking.show";
+                               signal: "masking.show";
+                               source: "prog";
+                               action: STATE_SET "show" 0.0;
+                               target: "masking";
+                       }
+                       program{
+                               name: "masking.hide";
+                               signal: "masking.hide";
+                               source: "prog";
+                               action: STATE_SET "hide" 0.0;
+                               target: "masking";
+                       }
+                       program{
+                               name: "mainicon.show";
+                               signal: "mainicon.show";
+                               source: "prog";
+                               action: STATE_SET "show" 0.0;
+                               target: "elm.swallow.mainicon";
+                       }
+                       program{
+                               name: "mainicon.hide";
+                               signal: "mainicon.hide";
+                               source: "prog";
+                               action: STATE_SET "hide" 0.0;
+                               target: "elm.swallow.mainicon";
+                       }
+               }
+       }
diff --git a/res/edje/quickpanel_listitem_ongoing.edc b/res/edje/quickpanel_listitem_ongoing.edc
new file mode 100755 (executable)
index 0000000..c94d9dd
--- /dev/null
@@ -0,0 +1,1574 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+
+//#define DEBUG
+//#define DEBUG_TEXT
+
+#define QP_ONGOING_PROGRESS_TITLE_COLOR "T023"
+#define QP_ONGOING_PROGRESS_TITLE_PRESS_COLOR "T023P"
+#define QP_ONGOING_PROGRESS_CONTENTS_COLOR "ATO012"
+#define QP_ONGOING_PROGRESS_RATE_COLOR "ATO012"
+
+#define QP_ONGOING_PROGRESS_TITLE_FONT_SIZE 30
+#define QP_ONGOING_PROGRESS_CONTENTS_FONT_SIZE 24
+#define QP_ONGOING_PROGRESS_RATE_FONT_SIZE 24
+
+       group {
+               name: "quickpanel/listitem/progress";
+               data.item: "bgcolor" QP_THEME_BANDED_COLOR;
+
+               parts {
+                       part {
+                               name: "background";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 (QP_THEME_LIST_ITEM_ONGOING_PROGRESS_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+                                       max: -1 (QP_THEME_LIST_ITEM_ONGOING_PROGRESS_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+                               }
+                       }
+                       part {
+                               name: "seperator.top";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               to: "background";
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "background";
+                                               relative: 1.0 0.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "seperator.left";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               to: "background";
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "background";
+                                               relative: 0.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "seperator.right";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               to: "background";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "background";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "base.bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       color_class: QP_THEME_BANDED_COLOR;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "base";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 QP_THEME_LIST_ITEM_ONGOING_PROGRESS_HEIGHT;
+                                       max: 9999 QP_THEME_LIST_ITEM_ONGOING_PROGRESS_HEIGHT;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "seperator.left";
+                                               to_y: "seperator.top";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "seperator.right";
+                                               to_y: "seperator.top";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "bgcolor";
+                               type: "RECT";
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       color: 61 185 204 11;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "effect" 0.0;
+                                       inherit: "default" 0.0;
+                                       color_class: QP_THEME_BG_COLOR;
+                                       color: 255 255 255 128;
+                                       visible:1;
+                               }
+#define BGCOLOR_DESC(NAME, COLOR) \
+                               description {\
+                                       state: NAME 0.0;\
+                                       inherit: "default" 0.0;\
+                                       color:  COLOR;\
+                               }
+
+                               BGCOLOR_DESC("bgcolor.step1", 61 185 204 11);
+                               BGCOLOR_DESC("bgcolor.step2", 61 185 204 21);
+                               BGCOLOR_DESC("bgcolor.step3", 61 185 204 31);
+                               BGCOLOR_DESC("bgcolor.step4", 61 185 204 41);
+                               BGCOLOR_DESC("bgcolor.step5", 61 185 204 51);
+                               BGCOLOR_DESC("bgcolor.step6", 61 185 204 62);
+                               BGCOLOR_DESC("bgcolor.step7", 61 185 204 72);
+                               BGCOLOR_DESC("bgcolor.step8", 61 185 204 82);
+                               BGCOLOR_DESC("bgcolor.step9", 61 185 204 92);
+                               BGCOLOR_DESC("bgcolor.step10", 61 185 204 102);
+                       }
+
+                       part {
+                               name: "elm.padding.right";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 15 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.right.content";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 15 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.top.icon";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 BOX_ICON_TOP_PADDING;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.left.icon";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 15 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.top.text";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 9;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.bottom.text";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 9;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 0.0 1.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.left.title";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: (15 + BOX_ICON_SIZE_W + 15) 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.left.progress.text";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: (15 + BOX_ICON_SIZE_W + 15) 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.left.progress";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: (15 + BOX_ICON_SIZE_W + 15) 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.top.progress";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 (9 + 33 + 3);
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.thumbnail";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       max: BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left.icon";
+                                               to_y: "elm.padding.top.icon";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left.icon";
+                                               to_y: "elm.padding.top.icon";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.icon";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 29 29;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.text.title";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 33;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left.title";
+                                               to_y: "elm.padding.top.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.top.text";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.text.progress";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 99 33;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom.text";
+                                       }
+                                       align: 1.0 1.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.text.content";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 33;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 0.0;
+                                               to_x: "elm.padding.left.title";
+                                               to_y: "elm.padding.bottom.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.rect.text.progress";
+                                               to_y: "elm.padding.bottom.text";
+                                       }
+                                       align: 0.0 1.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.progress";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       min: 0 6;
+                                       max: 9999 6;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left.progress";
+                                               to_y: "elm.padding.top.progress";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.top.progress";
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "masking";
+                               type: IMAGE;
+                               scale: 1;
+                               precise_is_inside: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_W;
+                                       max: BOX_ICON_BG_SIZE_W BOX_ICON_BG_SIZE_H;
+                                       fixed : 1 1;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       image.normal: "quick_button_icon_bg.png";
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:1;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                       }
+
+                       part {
+                               name: "elm.swallow.thumbnail";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               clip_to: "masking";
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       max: BOX_ICON_BG_SIZE_W BOX_ICON_BG_SIZE_H;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       align: 0.5 0.5;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.mainicon";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       max: BOX_ICON_BG_SIZE_W BOX_ICON_BG_SIZE_H;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       align: 0.5 0.5;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:1;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                       }
+
+                       part {
+                               name: "elm.swallow.subicon";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 45 45;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.icon";
+                                       }
+                                       rel2 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.icon";
+                                       }
+                                       align: 0.5 0.5;
+                               }
+                       }
+                       part {
+                               name: "elm.text.title";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.5;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               to:"elm.rect.text.title";
+                                       }
+                                       rel2 {
+                                               to:"elm.rect.text.title";
+                                       }
+                                       color_class: QP_ONGOING_PROGRESS_TITLE_COLOR;
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               text_class: "tizen";
+                                               size: QP_ONGOING_PROGRESS_TITLE_FONT_SIZE;
+                                               ellipsis: 0.0;
+                                               align: 0.0 0.5;
+                                       }
+                               }
+                               description {
+                                       state: "short" 0.0;
+                                       inherit: "default" 0.0;
+                                       rel1 {
+                                               to: "elm.rect.text.content";
+                                               to_y: "elm.rect.text.title";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.text.content";
+                                               to_y: "elm.rect.text.title";
+                                       }
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                       }
+
+                       part {
+                               name: "elm.text.count";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 1.0 0.5;
+                                       fixed: 0 1;
+                                       min: 0 38;
+                                       rel1 {
+                                               to:"elm.rect.text.title";
+                                       }
+                                       rel2 {
+                                               to:"elm.rect.text.title";
+
+                                       }
+                                       color_class: QP_ONGOING_PROGRESS_RATE_COLOR;
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               text_class: "tizen";
+                                               size: QP_ONGOING_PROGRESS_RATE_FONT_SIZE;
+                                               ellipsis: 0.0;
+                                               align: 1.0 0.5;
+                                       }
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:1;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.text.time";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 1.0 0.5;
+                                       rel1 {
+                                               to:"elm.rect.text.title";
+                                       }
+                                       rel2 {
+                                               to:"elm.rect.text.title";
+                                       }
+                                       color_class: QP_ONGOING_PROGRESS_RATE_COLOR;
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               text_class: "tizen";
+                                               size: QP_ONGOING_PROGRESS_RATE_FONT_SIZE;
+                                               align: 1.0 0.5;
+                                               ellipsis: -1;
+                                       }
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.text.content";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.5;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               to: "elm.rect.text.content";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.text.content";
+                                       }
+                                       color_class: QP_ONGOING_PROGRESS_CONTENTS_COLOR;
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               text_class: "tizen";
+                                               size: QP_ONGOING_PROGRESS_CONTENTS_FONT_SIZE;
+                                               align: 0.0 0.5;
+                                       }
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.progress";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               to: "elm.rect.progress";
+                                               to_y: "elm.padding.top.progress";
+                                              relative: 0.0 1.0;
+                                           }
+                                       rel2 {
+                                              to: "elm.rect.progress";
+                                              to_y: "elm.text.content";
+                                              relative: 1.0 1.0;
+                                           }
+                               }
+                       }
+                       part {
+                               name: "object.layer.touch.background";
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               scale: 1;
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {to: "base";}
+                                       rel2 {to: "base";}
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       QUICKPANEL_FOCUS_OBJECT("focus", "base", "base")
+               }
+
+               programs {
+                       script{
+                               public current_background;
+                       }
+                       program{
+                               name: "effect,mouse,down";
+                               signal: "mouse,down,1";
+                               source: "object.layer.touch.background";
+                               script {
+                                       set_state(PART:"bgcolor", "effect", 0.0);
+                               }
+                       }
+                       program{
+                               name: "effect,mouse,up";
+                               signal: "mouse,up,1";
+                               source: "object.layer.touch.background";
+                               script {
+                                       new tmp[64];
+                                       get_str(current_background, tmp, 64);
+                                       set_state(PART:"bgcolor", tmp, 0.0);
+                               }
+                               transition: ACCELERATE 0.20;
+                       }
+#define BGCOLOR_PROG(NAME, SIG) \
+                       program{\
+                               name: NAME;\
+                               signal: SIG;\
+                               source: "bgcolor";\
+                               transition: ACCELERATE 0.20;\
+                               script {\
+                                       set_str(current_background, SIG);\
+                                       set_state(PART:"bgcolor", SIG, 0.0);\
+                               }\
+                       }
+
+                       BGCOLOR_PROG("bgcolor.step1", "bgcolor.step1");
+                       BGCOLOR_PROG("bgcolor.step2", "bgcolor.step2");
+                       BGCOLOR_PROG("bgcolor.step3", "bgcolor.step3");
+                       BGCOLOR_PROG("bgcolor.step4", "bgcolor.step4");
+                       BGCOLOR_PROG("bgcolor.step5", "bgcolor.step5");
+                       BGCOLOR_PROG("bgcolor.step6", "bgcolor.step6");
+                       BGCOLOR_PROG("bgcolor.step7", "bgcolor.step7");
+                       BGCOLOR_PROG("bgcolor.step8", "bgcolor.step8");
+                       BGCOLOR_PROG("bgcolor.step9", "bgcolor.step9");
+                       BGCOLOR_PROG("bgcolor.step10", "bgcolor.step10");
+#ifdef TBD
+                       program{
+                               name: "listbox.touch.down";
+                               signal: "mouse,clicked,1";
+                               source: "object.layer.touch.background";
+                               action: SIGNAL_EMIT "selected" "edje";
+                       }
+#endif
+
+                       program{
+                               name: "content.long";
+                               signal: "content.long";
+                               source: "prog";
+                               action: STATE_SET "default" 0.0;
+                               target: "elm.text.title";
+                       }
+                       program{
+                               name: "content.short";
+                               signal: "content.short";
+                               source: "prog";
+                               action: STATE_SET "short" 0.0;
+                               target: "elm.text.title";
+                       }
+                       program{
+                               name: "count.show";
+                               signal: "count.show";
+                               source: "prog";
+                               action: STATE_SET "show" 0.0;
+                               target: "elm.text.count";
+                       }
+                       program{
+                               name: "count.hide";
+                               signal: "count.hide";
+                               source: "prog";
+                               action: STATE_SET "hide" 0.0;
+                               target: "elm.text.count";
+                       }
+                       program{
+                               name: "mainicon.show";
+                               signal: "mainicon.show";
+                               source: "prog";
+                               action: STATE_SET "show" 0.0;
+                               target: "elm.swallow.mainicon";
+                       }
+                       program{
+                               name: "mainicon.hide";
+                               signal: "mainicon.hide";
+                               source: "prog";
+                               action: STATE_SET "hide" 0.0;
+                               target: "elm.swallow.mainicon";
+                       }
+               }
+       }
+
+#define QP_ONGOING_EVENT_TITLE_COLOR "T023"
+#define QP_ONGOING_EVENT_CONTENTS_COLOR "T024"
+
+#define QP_ONGOING_EVENT_TITLE_FONT_SIZE 30
+#define QP_ONGOING_EVENT_CONTENTS_FONT_SIZE 24
+
+       group {
+               name: "quickpanel/listitem/event";
+               data.item: "bgcolor" QP_THEME_BANDED_COLOR;
+
+               styles {
+                       style {
+                               name: "ongoing_event_content_text";
+                               base: "font=Tizen:style=Regular text_class=tizen align=left valign=0.5 font_size="QP_ONGOING_EVENT_CONTENTS_FONT_SIZE" ellipsis=1.0 color=#2B2B2BFF color_class="QP_ONGOING_EVENT_CONTENTS_COLOR" wrap=none";
+                       }
+               }
+               parts {
+                       part {
+                               name: "background";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 (QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+                                       max: -1 (QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+                               }
+                               description {
+                                       state: "line1" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 (QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+                                       max: -1 (QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+                               }
+                               description {
+                                       state: "line2" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 (QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+                                       max: -1 (QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+                               }
+                               description {
+                                       state: "line3" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 (QP_THEME_LIST_ITEM_ONGOING_EVENT_LINE3_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+                                       max: -1 (QP_THEME_LIST_ITEM_ONGOING_EVENT_LINE3_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+                               }
+                       }
+
+                       part {
+                               name: "seperator.top";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               to: "background";
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "background";
+                                               relative: 1.0 0.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "seperator.left";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               to: "background";
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "background";
+                                               relative: 0.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "seperator.right";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               to: "background";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "background";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "base";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT;
+                                       max: -1 QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "seperator.left";
+                                               to_y: "seperator.top";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "seperator.right";
+                                               to_y: "seperator.top";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                               description {
+                                       state: "line1" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT;
+                                       max: -1 QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT;
+                               }
+                               description {
+                                       state: "line2" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT;
+                                       max: -1 QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT;
+                               }
+                               description {
+                                       state: "line3" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_ONGOING_EVENT_LINE3_HEIGHT;
+                                       max: -1 QP_THEME_LIST_ITEM_ONGOING_EVENT_LINE3_HEIGHT;
+                               }
+                       }
+                       part {
+                               name: "base.bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       color_class: QP_THEME_BANDED_COLOR;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "bgcolor";
+                               type: "RECT";
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       color: 61 185 204 11;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "effect" 0.0;
+                                       inherit: "default" 0.0;
+                                       color_class: QP_THEME_BG_COLOR;
+                                       color: 255 255 255 128;
+                               }
+#define BGCOLOR_DESC(NAME, COLOR) \
+                               description {\
+                                       state: NAME 0.0;\
+                                       inherit: "default" 0.0;\
+                                       color:  COLOR;\
+                               }
+
+                               BGCOLOR_DESC("bgcolor.step1", 61 185 204 11);
+                               BGCOLOR_DESC("bgcolor.step2", 61 185 204 21);
+                               BGCOLOR_DESC("bgcolor.step3", 61 185 204 31);
+                               BGCOLOR_DESC("bgcolor.step4", 61 185 204 41);
+                               BGCOLOR_DESC("bgcolor.step5", 61 185 204 51);
+                               BGCOLOR_DESC("bgcolor.step6", 61 185 204 62);
+                               BGCOLOR_DESC("bgcolor.step7", 61 185 204 72);
+                               BGCOLOR_DESC("bgcolor.step8", 61 185 204 82);
+                               BGCOLOR_DESC("bgcolor.step9", 61 185 204 92);
+                               BGCOLOR_DESC("bgcolor.step10", 61 185 204 102);
+                       }
+
+                       part {
+                               name: "elm.padding.right";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 8 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.top.icon";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 BOX_ICON_TOP_PADDING;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                               description {
+                                       state: "line1" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                               description {
+                                       state: "line2" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 2BOX_ICON_PADDING_H5;
+                               }
+                               description {
+                                       state: "line3" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 35;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.left.icon";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 15 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.top.text";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 BOX_TEXT_TOP_PADDING;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                               description {
+                                       state: "line1" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 BOX_TEXT_TOP_PADDING;
+                               }
+                               description {
+                                       state: "line2" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 9;
+                               }
+                               description {
+                                       state: "line3" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 12;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.bottom.text";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 BOX_TEXT_TOP_PADDING;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 0.0 1.0;
+                               }
+                               description {
+                                       state: "line1" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 BOX_TEXT_TOP_PADDING;
+                               }
+                               description {
+                                       state: "line2" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 0; //13.5
+                               }
+                               description {
+                                       state: "line3" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 0; //19
+                               }
+                       }
+                       part {
+                               name: "elm.padding.left.title";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: (15 + BOX_ICON_SIZE_W + 15) 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part { name: "elm.padding.left.contents";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: (15 + BOX_ICON_SIZE_W + 15) 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.thumbnail";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       max: BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left.icon";
+                                               to_y: "elm.padding.top.icon";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left.icon";
+                                               to_y: "elm.padding.top.icon";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.icon";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 35 35;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.text.title";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 38;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left.title";
+                                               to_y: "elm.padding.top.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.top.text";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                               description {
+                                       state: "move.center" 0.0;
+                                       inherit: "default" 0.0;
+                                       rel1 {
+                                               relative: 1.0 0.0;
+                                               to_x: "elm.padding.left.title";
+                                               to_y: "base";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "base";
+                                       }
+                                       align: 0.0 0.5;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.text.content";
+                               type: SPACER;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 35 35;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left.contents";
+                                               to_y: "elm.rect.text.title";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom.text";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "masking";
+                               type: IMAGE;
+                               scale: 1;
+                               precise_is_inside: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_W;
+                                       max: BOX_ICON_BG_SIZE_W BOX_ICON_BG_SIZE_H;
+                                       fixed : 1 1;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       image.normal: "quick_button_icon_bg.png";
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:1;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.thumbnail";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               clip_to: "masking";
+                               description {
+                                       state: "default" 0.0;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_W;
+                                       max: BOX_ICON_BG_SIZE_W BOX_ICON_BG_SIZE_H;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       align: 0.5 0.5;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.mainicon";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: BOX_ICON_SIZE_W BOX_ICON_SIZE_H;
+                                       max: BOX_ICON_BG_SIZE_W BOX_ICON_BG_SIZE_H;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       align: 0.5 0.5;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:1;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible:0;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.subicon";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 30 30;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.icon";
+                                       }
+                                       rel2 {
+                                               relative: 0.5 0.5;
+                                               to: "elm.rect.icon";
+                                       }
+                                       align: 0.5 0.5;
+                               }
+                       }
+                       part {
+                               name: "elm.text.title";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               to:"elm.rect.text.title";
+                                       }
+                                       rel2 {
+                                               to:"elm.rect.text.title";
+                                       }
+                                       color_class: QP_ONGOING_EVENT_TITLE_COLOR;
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               text_class: "tizen";
+                                               size: QP_ONGOING_EVENT_TITLE_FONT_SIZE;
+                                               ellipsis: 0.0;
+                                               align: 0.0 0.5;
+                                       }
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.text.content";
+                               type: TEXTBLOCK;
+                               mouse_events: 0;
+                               multiline: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       fixed: 1 1;
+                                       min: 34 34;
+                                       max: -1 30;
+                                       rel1 {
+                                               to: "elm.rect.text.content";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.text.content";
+                                       }
+                                       text {
+                                               style: "ongoing_event_content_text";
+                                               align: 0.0 0.0;
+                                       }
+                               }
+                               description {
+                                       state: "line1" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 34;
+                                       max: -1 34;
+                               }
+                               description {
+                                       state: "line2" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 68; //68
+                                       max: -1 68;
+                               }
+                               description {
+                                       state: "line3" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 102; //102
+                                       max: -1 102;
+                               }
+                       }
+                       part {
+                               name: "object.layer.touch.background";
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               scale: 1;
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {to: "base";}
+                                       rel2 {to: "base";}
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       QUICKPANEL_FOCUS_OBJECT("focus", "base", "base")
+               }
+
+               programs {
+                       script{
+                               public current_background;
+                       }
+                       program{
+                               name: "listbox.touch.down";
+                               signal: "mouse,clicked,1";
+                               source: "object.layer.touch.background";
+                               action: SIGNAL_EMIT "selected" "edje";
+                       }
+                       program{
+                               name: "effect,mouse,down";
+                               signal: "mouse,down,1";
+                               source: "object.layer.touch.background";
+                               script {
+                                       set_state(PART:"bgcolor", "effect", 0.0);
+                               }
+                       }
+                       program{
+                               name: "effect,mouse,up";
+                               signal: "mouse,up,1";
+                               source: "object.layer.touch.background";
+                               script {
+                                       new tmp[64];
+                                       get_str(current_background, tmp, 64);
+                                       set_state(PART:"bgcolor", tmp, 0.0);
+                               }
+                               transition: ACCELERATE 0.20;
+                       }
+#define BGCOLOR_PROG(NAME, SIG) \
+                       program{\
+                               name: NAME;\
+                               signal: SIG;\
+                               source: "bgcolor";\
+                               transition: ACCELERATE 0.20;\
+                               script {\
+                                       set_str(current_background, SIG);\
+                                       set_state(PART:"bgcolor", SIG, 0.0);\
+                               }\
+                       }
+
+                       BGCOLOR_PROG("bgcolor.step1", "bgcolor.step1");
+                       BGCOLOR_PROG("bgcolor.step2", "bgcolor.step2");
+                       BGCOLOR_PROG("bgcolor.step3", "bgcolor.step3");
+                       BGCOLOR_PROG("bgcolor.step4", "bgcolor.step4");
+                       BGCOLOR_PROG("bgcolor.step5", "bgcolor.step5");
+                       BGCOLOR_PROG("bgcolor.step6", "bgcolor.step6");
+                       BGCOLOR_PROG("bgcolor.step7", "bgcolor.step7");
+                       BGCOLOR_PROG("bgcolor.step8", "bgcolor.step8");
+                       BGCOLOR_PROG("bgcolor.step9", "bgcolor.step9");
+                       BGCOLOR_PROG("bgcolor.step10", "bgcolor.step10");
+
+                       program{
+                               name: "line1.set";
+                               signal: "line1.set";
+                               source: "prog";
+                               action: STATE_SET "line1" 0.0;
+                               target: "background";
+                               target: "base";
+                               target: "elm.padding.top.icon";
+                               target: "elm.padding.top.text";
+                               target: "elm.padding.bottom.text";
+                               target: "elm.text.content";
+                       }
+                       program{
+                               name: "line2.set";
+                               signal: "line2.set";
+                               source: "prog";
+                               action: STATE_SET "line2" 0.0;
+                               target: "background";
+                               target: "base";
+                               target: "elm.padding.top.icon";
+                               target: "elm.padding.top.text";
+                               target: "elm.padding.bottom.text";
+                               target: "elm.text.content";
+                       }
+                       program{
+                               name: "line3.set";
+                               signal: "line3.set";
+                               source: "prog";
+                               action: STATE_SET "line3" 0.0;
+                               target: "background";
+                               target: "base";
+                               target: "elm.padding.top.icon";
+                               target: "elm.padding.top.text";
+                               target: "elm.padding.bottom.text";
+                               target: "elm.text.content";
+                       }
+                       program {
+                               name: "title.move.center";
+                               signal: "title.move.center";
+                               source: "prog";
+                               action: STATE_SET "move.center" 0.0;
+                               target: "elm.rect.text.title";
+                       }
+                       program{
+                               name: "masking.show";
+                               signal: "masking.show";
+                               source: "prog";
+                               action: STATE_SET "show" 0.0;
+                               target: "masking";
+                       }
+                       program{
+                               name: "masking.hide";
+                               signal: "masking.hide";
+                               source: "prog";
+                               action: STATE_SET "hide" 0.0;
+                               target: "masking";
+                       }
+                       program{
+                               name: "mainicon.show";
+                               signal: "mainicon.show";
+                               source: "prog";
+                               action: STATE_SET "show" 0.0;
+                               target: "elm.swallow.mainicon";
+                       }
+                       program{
+                               name: "mainicon.hide";
+                               signal: "mainicon.hide";
+                               source: "prog";
+                               action: STATE_SET "hide" 0.0;
+                               target: "elm.swallow.mainicon";
+                       }
+               }
+       }
diff --git a/res/edje/quickpanel_minictrl.edc b/res/edje/quickpanel_minictrl.edc
new file mode 100755 (executable)
index 0000000..93fd378
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+//#define DEBUG
+//#define DEBUG_TEXT
+
+       group {
+               name: "quickpanel/minictrl/default";
+               data.item: "bgcolor" QP_THEME_BANDED_COLOR;
+               parts {
+                       part {
+                               name: "base";
+                               type: SPACER;
+                               repeat_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 480 QP_THEME_LIST_ITEM_MINICONTRL_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.top";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 20 + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.left.bg";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.right.bg";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.top.bg";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.content.bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               to_x:"elm.padding.left.bg";
+                                               to_y:"elm.padding.top.bg";
+                                               relative: 1.0 1.0;
+                                       }
+                                       rel2 {
+                                               to_x:"elm.padding.right.bg";
+                                               to_y:"elm.padding.bottom";
+                                               relative: 0.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                                       color: 255 255 255 235;
+                                       color_class: QP_THEME_ITEM_BG_COLOR;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       part {
+                               name: "bgcolor";
+                               type: "RECT";
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       color_class: QP_THEME_BANDED_COLOR;
+                                       visible: 1;
+                               }
+                       }
+                       QUICKPANEL_FOCUS_OBJECT("focus", "elm.content.bg", "elm.content.bg")
+                       part {
+                               name: "elm.padding.left";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 18 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.right";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 12 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.icon";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       min: 480 QP_THEME_LIST_ITEM_MINICONTRL_HEIGHT;
+                                       rel1 {
+                                               to: "elm.content.bg";
+                                       }
+                                       rel2 {
+                                               to_x: "elm.content.bg";
+                                               to_y: "elm.padding.bottom";
+                                               relative: 1.0 0.0;
+                                       }
+                               }
+                       }
+                       part {
+                               name: "elm.padding.bottom";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 0.0 1.0;
+                               }
+                       }
+               }
+               programs {
+                       program{
+                               name: "bg.show";
+                               signal: "bg.show";
+                               source: "prog";
+                               action: STATE_SET "show" 0.0;
+                               target: "elm.content.bg";
+                       }
+                       program{
+                               name: "bg.hide";
+                               signal: "bg.hide";
+                               source: "prog";
+                               action: STATE_SET "hide" 0.0;
+                               target: "elm.content.bg";
+                       }
+               }
+       }
diff --git a/res/edje/quickpanel_noti_section.edc b/res/edje/quickpanel_noti_section.edc
new file mode 100755 (executable)
index 0000000..cab6405
--- /dev/null
@@ -0,0 +1,858 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+
+//#define DEBUG
+//#define DEBUG_TEXT
+
+//Default part description. It is not changed by us
+#define QP_THEME_LIST_TITLE_FONT_NAME                  "Tizen:style=Bold"
+#define QP_THEME_LIST_TITLE_FONT_COLOR                 "ATO005"
+#define QP_THEME_LIST_TITLE_FONT_SIZE                  27
+
+#define QP_THEME_LIST_OPTION_FONT_COLOR                        "ATO006"
+#define QP_THEME_LIST_OPTION_PRESS_FONT_COLOR  "ATO006P"
+#define QP_THEME_LIST_OPTION_FONT_SIZE                 27
+#define QP_THEME_LIST_OPTION_ICON_PRESS_COLOR "AO005"
+
+//size of clear all item
+#define QP_CLEAR_ALL_ITEM_H    51
+#define QP_CLEAR_ALL_ITEM_W    480
+
+//Properties of "notifications (x) label in clear all notifications item"
+#define QP_CLEAR_ALL_NOTIFICATIONS_LABEL_FONT_NAME             "Tizen:style=Regular"
+//#define QP_CLEAR_ALL_NOTIFICATIONS_LABEL_FONT_COLOR  "T112"
+#define QP_CLEAR_ALL_NOTIFICATIONS_LABEL_FONT_COLOR    "T1237"
+#define QP_CLEAR_ALL_NOTIFICATIONS_LABEL_FONT_COLOR_PRESSED    "ATO005P"
+#define QP_CLEAR_ALL_NOTIFICATIONS_LABEL_FONT_COLOR_DIM                        "ATO005D"
+#define QP_CLEAR_ALL_NOTIFICATIONS_LABEL_FONT_SIZE             23
+#define QP_CLEAR_ALL_NOTIFICATIONS_STR_X_OFFSET 17 //x offset of "notifications(x)" string
+#define QP_CLEAR_ALL_BASE_BG_COLOR                     "AO021"
+
+//Properties of clear all button
+#define QP_CLEAR_ALL_CLEAR_ALL_BTN_TEXT_FONT_NAME              "Tizen:style=Regular"
+#define QP_CLEAR_ALL_CLEAR_ALL_BTN_FONT_COLOR                  "T112"
+#define QP_CLEAR_ALL_CLEAR_ALL_BTN_FONT_COLOR_PRESSED  "ATO005P"
+#define QP_CLEAR_ALL_CLEAR_ALL_BTN_FONT_COLOR_DIM              "ATO005D"
+#define QP_CLEAR_ALL_CLEAR_ALL_BTN_FONT_SIZE                   23
+#define QP_CLEAR_ALL_CLEAR_ALL_BTN_BG_COLOR                    "A03O003L1"
+#define QP_CLEAR_ALL_CLEAR_ALL_BTN_BG_COLOR_PRESSED            "B0517P"
+
+
+//Properties of separator betwen notifiactions label and clear all button
+#define QP_NOTIFICATIONS_SEP_X_OFFSET -235 //separator between "notification(x) | Clear all" button
+#define QP_NOTIFICATIONS_SEP_Y_OFFSET 17
+#define QP_NOTIFICATIONS_SEP_COLOR_CLASS "W021L2"
+
+       images {
+               image: "icon_arrow_up.png" COMP;
+               image: "icon_arrow_down.png" COMP;
+               image: "core_icon_badge_container.#.png" COMP;
+       }
+
+       group {
+               name: "quickpanel/notisection/default";
+               parts {
+                       part {
+                               name: "base";
+                               type: RECT;
+                               repeat_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_NOTI_SECTION_HEIGHT;
+                                       max: 9999 QP_THEME_LIST_ITEM_NOTI_SECTION_HEIGHT;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       color_class: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       QUICKPANEL_FOCUS_OBJECT("focus.label", "base", "base")
+                       part {
+                               name: "elm.padding.left";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 17 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.right";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 8 0;
+                                       fixed: 1 0;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.top";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 22;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.bottom";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 5;
+                                       fixed: 0 1;
+                                       rel1.to:"base";
+                                       rel2.to:"base";
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 0.0 1.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.top.button";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 14;
+                                       fixed: 0 1;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "elm.padding.bottom.button";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 3;
+                                       fixed: 0 1;
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 0.0 1.0;
+                               }
+                       }
+                       part {
+                               name: "elm.rect.text";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 343 32;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.padding.bottom";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.padding.bottom";
+                                               relative: 1.0 0.0;
+                                       }
+                                       align: 0.0 1.0;
+                               }
+                       }
+                       part {
+                               name: "elm.text.text";
+                               type: TEXT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 343 35;
+                                       rel1 {
+                                               to: "elm.rect.text";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.text";
+                                       }
+                                       color: 0 0 0 255;
+                                       text {
+                                               font: QP_THEME_LIST_TITLE_FONT_NAME;
+                                               text_class: "tizen";
+                                               size: QP_THEME_LIST_TITLE_FONT_SIZE;
+                                               align: 0.0 0.5;
+                                               min: 1 0;
+                                               ellipsis: -1;
+                                       }
+                               }
+                       }
+                       part {
+                               name: "elm.text.text.debug";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       rel1.to: "elm.text.text";
+                                       rel2.to: "elm.text.text";
+                                       color: 255 0 0 150;
+                               }
+               }
+
+                       part {
+                               name: "elm.rect.icon";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 106 36;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to_x: "elm.padding.right";
+                                               to_y: "base";
+                                               relative: 0.0 0.5;
+                                       }
+                                       rel2 {
+                                               to_x: "elm.padding.right";
+                                               to_y: "base";
+                                               relative: 0.0 0.5;
+                                       }
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "text.clear.right.padding";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: (18) 0;
+                                       rel1 {
+                                               relative : 1.0 0.0;
+                                               to: "base";
+                                       }
+                                       rel2 {
+                                               relative : 1.0 1.0;
+                                               to: "base";
+                                       }
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "text.clear";
+                               type: TEXT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 30;
+                                       rel1 {
+                                               to_x: "text.clear.right.padding";
+                                               to_y: "elm.text.text";
+                                               relative : 0.0 0.5;
+                                       }
+                                       rel2 {
+                                               to_x: "text.clear.right.padding";
+                                               to_y: "elm.text.text";
+                                               relative: 0.0 0.5;
+                                       }
+                                       color_class: QP_THEME_LIST_OPTION_FONT_COLOR;
+                                       text {
+                                               font: QP_THEME_LIST_TITLE_FONT_NAME;
+                                               text_class: "tizen";
+                                               size: QP_THEME_LIST_OPTION_FONT_SIZE;
+                                               align: 0.0 0.5;
+                                               min: 1 0;
+                                               ellipsis: -1;
+                                       }
+                                       align: 1.0 0.5;
+                               }
+                               description {
+                                       state: "pressed" 0.0;
+                                       inherit: "default" 0.0;
+                                       color_class: QP_THEME_LIST_OPTION_PRESS_FONT_COLOR;
+                               }
+                       }
+                       part {
+                               name: "divider.right.padding";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: (13) 0;
+                                       rel1 {
+                                               relative : 0.0 0.0;
+                                               to: "text.clear";
+                                       }
+                                       rel2 {
+                                               relative : 0.0 1.0;
+                                               to: "text.clear";
+                                       }
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "obj.divider";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 2 30;
+                                       rel1 {
+                                               relative : 0.0 0.5;
+                                               to_x: "divider.right.padding";
+                                               to_y: "text.clear";
+                                       }
+                                       rel2 {
+                                               relative : 0.0 0.5;
+                                               to_x: "divider.right.padding";
+                                               to_y: "text.clear";
+                                       }
+                                       align: 1.0 0.5;
+                                       color_class: QP_THEME_SECTION_ICON_DIVIDER_COLOR;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "rect.text.touch";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to: "text.clear";
+                                               offset: -10 -20;
+                                       }
+                                       rel2 {
+                                               to: "text.clear";
+                                               offset: +10 +20;
+                                       }
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                                       color: 0 0 0 0;
+                               }
+                       }
+               }
+
+               programs {
+                       program{
+                               name: "button.down";
+                               signal: "mouse,down,1";
+                               source: "rect.text.touch";
+                               action: STATE_SET "pressed" 0.0;
+                               target: "text.clear";
+                       }
+                       program{
+                               name: "button.up";
+                               signal: "mouse,up,1";
+                               source: "rect.text.touch";
+                               action: STATE_SET "default" 0.0;
+                               target: "text.clear";
+                       }
+                       program{
+                               name: "button.clicked";
+                               signal: "mouse,clicked,1";
+                               source: "rect.text.touch";
+                               action: SIGNAL_EMIT "button.clicked" "prog";
+                       }
+               }
+       }
+
+       group {
+
+               /**
+                * GROUP STRUCTURE
+                * base - it is the background rectangle. This part is a relative for all other parts and define background color.
+                * noti.clear.all.separator - is the line between "notification(X)" and clear all button
+                */
+
+               name: "quickpanel/notisection/clear_all";
+
+               parts {
+                       part {
+                               name: "base";
+                               type: RECT;
+                               scale: 1;
+                               description
+                               {
+                                       state: "default" 0.0;
+                                       min: 0 QP_CLEAR_ALL_ITEM_H;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       color_class: QP_CLEAR_ALL_BASE_BG_COLOR;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "notisection.padding.left";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 17 0;
+                                       fixed: 1 0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               to: "base";
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "base";
+                                               relative: 0.0 1.0;
+                                       }
+                               }
+                       }
+                       part {
+                               name: "notisection.padding.right";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 17 0;
+                                       fixed: 1 0;
+                                       align: 1.0 0.0;
+                                       rel1 {
+                                               to: "base";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "base";
+                                               relative: 1.0 1.0;
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "underline";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 1;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               to: "base";
+                                               relative: 0.0 1.0;
+                                       }
+                                       rel2 {
+                                               to: "base";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 1.0;
+                                       color_class: QP_NOTIFICATIONS_SEP_COLOR_CLASS;
+                               }
+                       }
+
+                       part {
+                               name: "noti.clear.all.separator";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default";
+                                       min: 1 36;
+                                       max: 1 36;
+                                       fixed: 1 1;
+                                       color_class: QP_NOTIFICATIONS_SEP_COLOR_CLASS;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to_x: "clear_all.padding.left";
+                                               to_y: "base";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "clear_all.padding.left";
+                                               to_y: "base";
+                                       }
+
+                                       align: 1.0 0.5;
+                                       visible: 0;
+                               }
+                               description
+                               {
+                                       state: "hide" 0.0;
+                                       inherit: "default";
+                                       visible: 0;
+                               }
+
+                       }
+                       part {
+                               name: "separator.padding.left";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 17 0;
+                                       fixed: 1 0;
+                                       align: 1.0 0.0;
+                                       rel1 {
+                                               to: "noti.clear.all.separator";
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "noti.clear.all.separator";
+                                               relative: 0.0 1.0;
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "rect.button.notisetting";
+                               type: IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 75 36;
+                                       max: 180 36;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to_x: "notisection.padding.left";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "separator.padding.left";
+                                               to_y: "base";
+                                       }
+
+                                       image {
+                                               normal:"core_icon_badge_container.#.png";
+                                       }
+                                       color_class: QP_CLEAR_ALL_CLEAR_ALL_BTN_BG_COLOR;
+                                       align: 0.0 0.5;
+                               }
+                               description
+                               {
+                                       state: "pressed" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 147 208 217 255;
+                               }
+                       }
+
+                       part {
+                               name: "text.button.notisetting";
+                               type: TEXT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 36;
+                                       align: 0.5 0.5;
+                                       rel1 {
+                                               to: "rect.button.notisetting";
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2
+                                       {
+                                               relative: 1.0 1.0;
+                                               to: "rect.button.notisetting";
+                                       }
+
+                                       color_class: QP_CLEAR_ALL_NOTIFICATIONS_LABEL_FONT_COLOR;
+                                       text {
+                                               font: QP_CLEAR_ALL_NOTIFICATIONS_LABEL_FONT_NAME;
+                                               size: QP_CLEAR_ALL_NOTIFICATIONS_LABEL_FONT_SIZE;
+                                               text_class: "tizen";
+                                               align: 0.5 0.5;
+                                       }
+                                       visible: 1;
+                               }
+                               description
+                               {
+                                       state: "pressed";
+                                       inherit: "default";
+                                       color_class: QP_CLEAR_ALL_NOTIFICATIONS_LABEL_FONT_COLOR_PRESSED;
+                               }
+                               description
+                               {
+                                       state: "disabled";
+                                       inherit: "default";
+                                       color_class: QP_CLEAR_ALL_NOTIFICATIONS_LABEL_FONT_COLOR_DISABLED;
+
+                               }
+                       }
+                       part {
+                               name: "rect.button.clear_all";
+                               type: IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 75 36;
+                                       max: 130 36;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to_x: "notisection.padding.right";
+                                               to_y: "underline";
+                                               relative: 0.0 0.0;
+                                       }
+
+                                       image {
+                                               normal:"core_icon_badge_container.#.png";
+                                       }
+                                       color_class: QP_CLEAR_ALL_CLEAR_ALL_BTN_BG_COLOR;
+                                       align: 1.0 0.5;
+                                       visible: 1;
+                               }
+
+                               description
+                               {
+                                       state: "pressed" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 147 208 217 255;
+                               }
+
+                               description
+                               {
+                                       state: "disabled" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 204 204 204 127;
+                               }
+
+                               description
+                               {
+                                       state: "hide" 0.0;
+                                       inherit: "default";
+                                       visible: 0;
+                               }
+                       }
+
+                       part {
+                               name: "text.button.clear_all";
+                               type: TEXT;
+                               scale: 1;
+                               description
+                               {
+                                       state: "default" 0.0;
+                                       min: 75 36;
+                                       max: 130 36;
+                                       fixed: 0 1;
+                                       align: 0.5 0.0;
+                                       rel1 {
+                                               to: "rect.button.clear_all";
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "notisection.padding.right";
+                                               relative: 0.0 1.0;
+                                       }
+                                       color_class: QP_CLEAR_ALL_CLEAR_ALL_BTN_FONT_COLOR;
+                                       text {
+                                               font: QP_CLEAR_ALL_CLEAR_ALL_BTN_TEXT_FONT_NAME;
+                                               size: QP_CLEAR_ALL_CLEAR_ALL_BTN_FONT_SIZE;
+                                               text_class: "tizen";
+                                               align: 0.5 0.5;
+                                               max: 1 0;
+                                       }
+                                       visible: 1;
+                               }
+                               description
+                               {
+                                       state: "pressed";
+                                       inherit: "default";
+                                       color_class: QP_CLEAR_ALL_CLEAR_ALL_BTN_FONT_COLOR_PRESSED;
+                               }
+                               description
+                               {
+                                       state: "disabled";
+                                       inherit: "default";
+                                       color_class: QP_CLEAR_ALL_CLEAR_ALL_BTN_FONT_COLOR_DIM;
+                               }
+
+                               description
+                               {
+                                       state: "hide" 0.0;
+                                       inherit: "default";
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "clear_all.padding.left";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 17 0;
+                                       fixed: 1 0;
+                                       align: 1.0 0.0;
+                                       rel1 {
+                                               to_x: "text.button.clear_all";
+                                               to_y: "base";
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to_x: "text.button.clear_all";
+                                               to_y: "base";
+                                               relative: 0.0 1.0;
+                                       }
+                               }
+                       }
+                       QUICKPANEL_FOCUS_OBJECT("focus", "rect.button.clear_all", "rect.button.clear_all")
+                       QUICKPANEL_FOCUS_OBJECT("focus.setting", "rect.button.notisetting", "rect.button.notisetting")
+               }
+               programs
+               {
+                       program
+                       {
+                               name: "notisetting.button.pressed";
+                               signal: "mouse,down,1";
+                               source: "focus.setting";
+
+                               action: STATE_SET "pressed" 0.0;
+                               target: "rect.button.notisetting";
+                               target: "text.button.notisetting";
+                       }
+                       program
+                       {
+                               name: "notisetting.button.released";
+                               signal: "mouse,up,1";
+                               source: "focus.setting";
+
+                               action: STATE_SET "default" 0.0;
+                               target: "rect.button.notisetting";
+                               target: "text.button.notisetting";
+                       }
+                       program
+                       {
+                               name: "clear_all.button.pressed";
+                               signal: "mouse,down,1";
+                               source: "focus";
+
+                               script {
+                                       new part_state[30];
+                                       new Float:vl;
+
+                                       get_state(PART:"rect.button.clear_all", part_state, 30, vl);
+
+                                       if (!strcmp(part_state, "disabled")) {
+                                               set_state(PART:"rect.button.clear_all", "disabled", 0.0);
+                                               set_state(PART:"text.button.clear_all", "disabled", 0.0);
+                                       } else {
+                                               set_state(PART:"rect.button.clear_all", "pressed", 0.0);
+                                               set_state(PART:"text.button.clear_all", "pressed", 0.0);
+                                       }
+                               }
+                       }
+                       program
+                       {
+                               name: "clear_all.button.released";
+                               signal: "mouse,up,1";
+                               source: "focus";
+
+                               script {
+                                       new part_state[30];
+                                       new Float:vl;
+
+                                       get_state(PART:"rect.button.clear_all", part_state, 30, vl);
+
+                                       if (!strcmp(part_state, "disabled")) {
+                                               set_state(PART:"rect.button.clear_all", "disabled", 0.0);
+                                               set_state(PART:"text.button.clear_all", "disabled", 0.0);
+                                       } else {
+                                               set_state(PART:"rect.button.clear_all", "default", 0.0);
+                                               set_state(PART:"text.button.clear_all", "default", 0.0);
+                                       }
+                               }
+                       }
+                       program
+                       {
+                               name: "clear_all,show";
+                               signal: "notifaction,section,clear_all,show";
+                               source: "base";
+
+                               action: STATE_SET "default" 0.0;
+                               target: "rect.button.clear_all";
+                               target: "text.button.clear_all";
+                               target: "noti.clear.all.separator";
+                               target: "focus";
+                       }
+
+                       program
+                       {
+                               name: "clear_all,hide";
+                               signal: "notifaction,section,clear_all,hide";
+                               source: "base";
+
+                               action: STATE_SET "hide" 0.0;
+                               target: "rect.button.clear_all";
+                               target: "text.button.clear_all";
+                               target: "noti.clear.all.separator";
+                               target: "focus";
+                       }
+
+                       program
+                       {
+                               name: "clear_all,disabled";
+                               signal: "notifaction,section,clear_all,disabled";
+                               source: "base";
+
+                               action: STATE_SET "disabled" 0.0;
+                               target: "rect.button.clear_all";
+                               target: "text.button.clear_all";
+                       }
+               }
+       }
+
+       group {
+               name: "quickpanel/seperator/default";
+               parts {
+                       part { name: "base";
+                               type: RECT;
+                               repeat_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 1;
+                                       max: 9999 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       color: 255 0 0 100;
+                                       visible: 1;
+                               }
+                       }
+               }
+       }
diff --git a/res/edje/quickpanel_setting.edc b/res/edje/quickpanel_setting.edc
new file mode 100755 (executable)
index 0000000..83690f9
--- /dev/null
@@ -0,0 +1,769 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+
+images {
+       image: "quick_menu_divide.png" COMP;
+       image: "quick_menu_touch.png" COMP;
+       image: "quick_button_each_bg.png" COMP;
+       image: "quick_button_each_bg_land.png" COMP;
+       image: "quick_button_each_ef.png" COMP;
+       image: "quick_button_each_ef_land.png" COMP;
+       image: "quick_btn_del_nor.png" COMP;
+       image: "quick_btn_del_press.png" COMP;
+       image: "quick_button_over_land.png" COMP;
+       image: "quick_button_over.png" COMP;
+       image: "quick_menu_divide_highlight.png" COMP;
+       image: "quick_button_icon_bg.png" COMP;
+}
+
+#define ENABLE_COLOR_CLIP
+
+#define QP_SETTINGS_HEIGHT     221
+
+styles
+{
+       style
+       {
+               name: "icon_text_style";
+               base: "font=Tizen:style=Regular font_size=19 text_class=tizen align=center color=#FFFFFF color_class=ATO017 ellipsis=1.0 wrap=mixed";
+       }
+}
+
+group {
+       name: "quickpanel/setting_container_wvga";
+
+       parts {
+               part {
+                       name: "background";
+                       type: RECT;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: 0 QP_SETTINGS_HEIGHT;
+                               max: -1 QP_SETTINGS_HEIGHT;
+
+                               align: 0.0 0.0;
+                               visible: 0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                       }
+               }
+               part {
+                       name: "setting.margin.left";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 0;
+                               fixed: 1 0;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                                       to: "background";
+                               }
+                               rel2 {
+                                       relative: 0.0 1.0;
+                                       to: "background";
+                               }
+                               align: 0.0 0.0;
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min: 0 0;
+                       }
+               }
+               part {
+                       name: "setting.margin.right";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 0;
+                               fixed: 1 0;
+                               rel1 {
+                                       relative: 1.0 0.0;
+                                       to: "background";
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                                       to: "background";
+                               }
+                               align: 1.0 0.0;
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min: 0 0;
+                       }
+               }
+               part{
+                       name: "setting.container.swallow.wvga";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 QP_SETTING_BG_H;
+                               fixed: 0 1;
+                               rel1 {
+                                       to: "background";
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       to: "background";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.5 0.0;
+                       }
+               }
+               part {
+                       name: "brightness.container.swallow.wvga";
+                       type: SWALLOW;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 QP_THEME_LIST_ITEM_BRIGHTNESS_HEIGHT;
+                               fixed: 0 1;
+                               rel1 {
+                                       to: "background";
+                                       relative: 0.0 1.0;
+
+                               }
+                               rel2 {
+                                       to: "background";
+                                       relative: 1.0 1.0;
+                               }
+
+                               align: 0.5 1.0;
+                       }
+               }
+       }
+
+       programs {
+               program{
+                       name: "container.portrait";
+                       signal: "portrait";
+                       source: "background";
+                       action: STATE_SET "portrait" 0.0;
+                       target: "setting.margin.left";
+                       target: "setting.margin.right";
+                       after: "background.default";
+               }
+               program {
+                       name : "background.default";
+                       action: STATE_SET "default" 0.0;
+                       target: "background";
+               }
+               program{
+                       name: "container.landscape";
+                       signal: "landscape";
+                       source: "background";
+                       action: STATE_SET "landscape" 0.0;
+                       target: "setting.margin.left";
+                       target: "setting.margin.right";
+                       target: "background";
+               }
+       }
+}
+
+group {
+       name: "quickpanel/setting_icon_divider_wvga";
+
+       script {
+               public g_is_hided;
+       }
+
+       parts {
+               part {
+                       name: "background";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: QP_SETTING_DIVIDER_W_P QP_SETTING_ICON_MIN_WH_WVGA;
+                               fixed: 1 1;
+                               align: 0.0 0.0;
+                               color_class: QP_BACKGROUND_COLOR;
+                               visible: 1;
+                       }
+                       description {
+                               state: "normal" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "blank" 0.0;
+                               inherit: "default" 0.0;
+                               color_class: QP_BACKGROUND_COLOR;
+                       }
+                       description {
+                               state: "hide" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 0;
+                       }
+                       description {
+                               state: "show" 0.0;
+                               inherit: "default" 0.0;
+                       }
+               }
+               part {
+                       name: "object.image.divider";
+                       type:IMAGE;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               min: QP_SETTING_DIVIDER_W_P 99;
+                               rel1 {
+                                       to: "background";
+                                       relative:0.0 0.5;
+                               }
+                               rel2 {
+                                       to: "background";
+                                       relative:1.0 0.5;
+                               }
+                               image {
+                                       normal:"quick_menu_divide.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               align:0.0 0.5;
+                               visible: 0;
+                       }
+                       description {
+                               state: "highlight.show" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"quick_menu_divide_highlight.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               visible: 1;
+                       }
+                       description {
+                               state: "highlight.hide" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "hide" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 0;
+                       }
+                       description {
+                               state: "show" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 0;
+                       }
+               }
+       }
+
+       programs {
+               program {
+                       name: "init_divider";
+                       signal: "load";
+                       script{
+                               set_int(g_is_hided, 0);
+                       }
+               }
+               program{
+                       name: "divider.highlight.show";
+                       signal: "highlight.show";
+                       source: "quickpanl.prog";
+                       script {
+                               if (get_int(g_is_hided) == 0) {
+                                       set_state(PART:"object.image.divider", "highlight.show", 0.0);
+                               }
+                       }
+               }
+               program{
+                       name: "divider.highlight.hide";
+                       signal: "highlight.hide";
+                       source: "quickpanl.prog";
+                       script {
+                               if (get_int(g_is_hided) == 0) {
+                                       set_state(PART:"object.image.divider", "highlight.hide", 0.0);
+                               }
+                       }
+               }
+               program{
+                       name: "blank.mode.enable";
+                       signal: "blank.enable";
+                       source: "quickpanl.prog";
+                       script {
+                               set_state(PART:"background", "blank", 0.0);
+                               set_state(PART:"object.image.divider", "show", 0.0);
+                               set_int(g_is_hided, 0);
+                       }
+               }
+               program{
+                       name: "blank.mode.disable";
+                       signal: "blank.disable";
+                       source: "quickpanl.prog";
+                       script {
+                               set_state(PART:"background", "normal", 0.0);
+                               set_state(PART:"object.image.divider", "show", 0.0);
+                               set_int(g_is_hided, 0);
+                       }
+               }
+               program{
+                       name: "divider.hide";
+                       signal: "divider.hide";
+                       source: "quickpanl.prog";
+                       script {
+                               set_state(PART:"background", "hide", 0.0);
+                               set_state(PART:"object.image.divider", "hide", 0.0);
+                               set_int(g_is_hided, 1);
+                       }
+               }
+       }
+}
+
+#define QP_SETTING_ICON_COLOR_ON "AO002"
+#define QP_SETTING_ICON_COLOR_OFF "AO003"
+#define QP_SETTING_ICON_COLOR_DIM "AO003D"
+#define QP_SETTING_ICON_COLOR_LOADING "AO003E1"
+
+group {
+       name: "quickpanel/setting_icon_wvga";
+
+       parts {
+               part {
+                       name: "background.super";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : QP_SETTING_ICON_BG_MIN_W_P_WVGA QP_SETTING_BG_H;
+                               color: 0 0 0 0;
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min : QP_SETTING_ICON_BG_MIN_W_L_WVGA QP_SETTING_BG_H;
+                       }
+                       description {
+                               state: "dragging" 0.0;
+                               inherit: "default" 0.0;
+                               min : QP_SETTING_ICON_DRAGGING_BG_MIN_W_WVGA QP_SETTING_ICON_DRAGGING_BG_MIN_H;
+                       }
+               }
+               part {
+                       name: "padding.top";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 17;
+                               fixed: 0 1;
+                               align: 0.5 0.0;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                                       to: "background.super";
+                               }
+                               rel2 {
+                                       relative: 1.0 0.0;
+                                       to: "background.super";
+                               }
+                       }
+               }
+               part {
+                       name: "background";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : QP_SETTING_ICON_BG_MIN_W_P_WVGA QP_SETTING_ICON_MIN_WH_WVGA;
+                               max : QP_SETTING_ICON_BG_MIN_W_P_WVGA QP_SETTING_ICON_MIN_WH_WVGA;
+                               fixed : 1 1;
+                               rel1 {
+                                       relative : 0.0 1.0;
+                                       to: "padding.top";
+                               }
+                               rel2 {
+                                       relative : 1.0 1.0;
+                                       to: "padding.top";
+                               }
+                               align: 0.5 0.0;
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min : QP_SETTING_ICON_BG_MIN_W_L_WVGA QP_SETTING_ICON_MIN_WH_WVGA;
+                               max : QP_SETTING_ICON_BG_MIN_W_L_WVGA QP_SETTING_ICON_MIN_WH_WVGA;
+                       }
+               }
+
+               part {
+                       name: "bg.image";
+                       type : IMAGE;
+                       scale : 1;
+                       repeat_events: 1;
+                       description     {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+
+                               min: QP_SETTING_ICON_MIN_WH_WVGA QP_SETTING_ICON_MIN_WH_WVGA;
+                               max: QP_SETTING_ICON_MIN_WH_WVGA QP_SETTING_ICON_MIN_WH_WVGA;
+
+                               image {
+                                       normal:"quick_button_icon_bg.png";
+                               }
+
+                               rel1 {
+                                       relative : 0.5 0.5;
+                                       to: "background";
+                               }
+                               rel2 {
+                                       relative : 0.5 0.5;
+                                       to: "background";
+                               }
+                               color_class: "AO001L1";
+                       }
+                       description {
+                               state: "pressed" 0.0;
+                               inherit: "default" 0.0;
+                               color_class: "AO001L1P";
+                       }
+                       description {
+                               state: "dimmed" 0.0;
+                               inherit: "default" 0.0;
+                               color_class: "AO001L1D";
+                       }
+               }
+
+               part {
+                       name: "pad.top";
+                       type: SPACER;
+                       scale : 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 0;
+                               max: 0 0;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                                       to: "background";
+                               }
+                               rel2 {
+                                       relative: 1.0 0.0;
+                                       to: "background";
+                               }
+                               align: 0.0 0.0;
+                       }
+               }
+               part {
+                       name: "icon.bg";
+                       type: SPACER;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               min: 66 66;
+                               fixed: 0 1;
+                               rel1 {
+                                       relative: 0.0 1.0;
+                                       to_x: "background.super";
+                                       to_y: "pad.top";
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                                       to_x: "background.super";
+                                       to_y: "pad.top";
+                               }
+                               align: 0.0 0.0;
+                       }
+               }
+#ifdef ENABLE_COLOR_CLIP
+               part {
+                       name : "color_clip";
+                       type : RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 66 66;
+                               fixed: 1 1;
+                               rel1 {
+                                       relative: 0.5 0.5;
+                                       to: "icon.bg";
+                               }
+                               rel2 {
+                                       relative: 0.5 0.5;
+                                       to: "icon.bg";
+                               }
+                               align: 0.5 0.5;
+                               color: 255 255 255 255;
+                               color_class: QP_SETTING_ICON_COLOR_OFF;
+                       }
+                       description {
+                               state: "on" 0.0;
+                               inherit: "default" 0.0;
+                               color: 255 255 255 255;
+                               color_class: QP_SETTING_ICON_COLOR_ON;
+                       }
+                       description {
+                               state: "off" 0.0;
+                               inherit: "default" 0.0;
+                               color: 255 255 255 255;
+                               color_class: QP_SETTING_ICON_COLOR_OFF;
+                       }
+                       description {
+                               state: "dim" 0.0;
+                               inherit: "default" 0.0;
+                               color: 255 255 255 255;
+                               color_class: QP_SETTING_ICON_COLOR_DIM;
+                       }
+                       description {
+                               state: "loading" 0.0;
+                               inherit: "default" 0.0;
+                               color: 255 255 255 255;
+                               color_class: QP_SETTING_ICON_COLOR_LOADING;
+                       }
+               }
+#endif
+               part {
+                       name: "icon.swallow.wvga";
+                       type: SWALLOW;
+                       scale: 1;
+                       mouse_events: 0;
+#ifdef ENABLE_COLOR_CLIP
+                       clip_to: "color_clip";
+#endif
+                       description {
+                               state: "default" 0.0;
+                               min: 46 46;
+                               max: 46 46;
+                               fixed: 1 1;
+                               rel1 {
+                                       relative: 0.5 0.5;
+                                       to: "background";
+                               }
+                               rel2 {
+                                       relative: 0.5 0.5;
+                                       to: "background";
+                               }
+                               align: 0.5 0.5;
+                               visible: 1;
+                       }
+               }
+
+               part {
+                       name: "spacer.text";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: (96 - 10) (24 + 2 + 24);
+                               max: (96 - 10) (24 + 2 + 24);
+                               fixed: 1 1;
+                               align: 0.5 0.0;
+                               rel1 {
+                                       relative: 0.0 1.0;
+                                       to: "background";
+                                       offset: 0 3;
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                                       to: "background";
+                               }
+                       }
+               }
+
+               part
+               {
+                       name: "icon.text";
+                       type: TEXTBLOCK;
+                       scale: 1;
+                       mouse_events: 0;
+                       multiline: 1;
+
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                                       to: "spacer.text";
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                                       to: "spacer.text";
+                               }
+                               align: 0.5 0.0;
+                               text
+                               {
+                                       style: "icon_text_style";
+                                       align: 0.5 0.0;
+                                       max: 0 1;
+                               }
+                       }
+               }
+
+               QUICKPANEL_FOCUS_OBJECT("focus", "background.super", "background.super")
+       }
+       script {
+               public icon_rotation;
+               public icon_state;
+               public icon_text_state;
+       }
+       programs {
+               program{
+                       name: "icon.portrait";
+                       signal: "icon.portrait";
+                       source: "quickpanl.prog";
+                       script {
+                               set_int(icon_rotation, 0);
+                               set_state(PART:"background.super", "portrait", 0.0);
+                               set_state(PART:"background", "portrait", 0.0);
+                       }
+               }
+               program{
+                       name: "icon.landscape";
+                       signal: "icon.landscape";
+                       source: "quickpanl.prog";
+                       script {
+                               set_int(icon_rotation, 1);
+                               set_state(PART:"background.super", "landscape", 0.0);
+                               set_state(PART:"background", "landscape", 0.0);
+                       }
+               }
+               program{
+                       name: "icon.dragging.on";
+                       signal: "dragging.on";
+                       source: "quickpanl.prog";
+                       script {
+                               set_state(PART:"background.super", "dragging", 0.0);
+                               if (get_int(icon_rotation) == 0) {
+                               } else {
+                               }
+                       }
+               }
+               program{
+                       name: "icon.dragging.off";
+                       signal: "dragging.off";
+                       source: "quickpanl.prog";
+                       script {
+                               if (get_int(icon_rotation) == 0) {
+                                       set_state(PART:"background.super", "portrait", 0.0);
+                               } else {
+                                       set_state(PART:"background.super", "landscape", 0.0);
+                               }
+                       }
+               }
+               program {
+                       name: "color.progress";
+                       signal: "icon.progress";
+                       source: "quickpanl.prog";
+                       script{
+#ifdef ENABLE_COLOR_CLIP
+                               set_state(PART:"color_clip", "loading", 0.0);
+#endif
+                       }
+
+               }
+               program {
+                       name: "color.off";
+                       signal: "icon.off";
+                       source: "quickpanl.prog";
+                       script{
+                               set_int(icon_state, 0);
+#ifdef ENABLE_COLOR_CLIP
+                               set_state(PART:"color_clip", "off", 0.0);
+#endif
+                       }
+
+               }
+               program {
+                       name: "color.on";
+                       signal: "icon.on";
+                       source: "quickpanl.prog";
+                       script{
+                               set_int(icon_state, 1);
+#ifdef ENABLE_COLOR_CLIP
+                               set_state(PART:"color_clip", "on", 0.0);
+#endif
+                       }
+               }
+               program {
+                       name: "color.dim";
+                       signal: "icon.dim";
+                       source: "quickpanl.prog";
+                       script{
+                               set_int(icon_state, 2);
+#ifdef ENABLE_COLOR_CLIP
+                               set_state(PART:"color_clip", "dim", 0.0);
+#endif
+                       }
+               }
+
+               program {
+                       name: "color.release";
+                       action: STATE_SET "press" 0.0;
+                       signal: "mouse,up,1";
+                       source: "background.super";
+                       script{
+                               if (get_int(icon_state) == 1) {
+                                       set_state(PART:"bg.image", "default", 0.0);
+#ifdef ENABLE_COLOR_CLIP
+                                       set_state(PART:"color_clip", "on", 0.0);
+#endif
+                               } else if (get_int(icon_state) == 2) {
+                                       set_state(PART:"bg.image", "dimmed", 0.0);
+#ifdef ENABLE_COLOR_CLIP
+                                       set_state(PART:"color_clip", "dim", 0.0);
+#endif
+                               } else {
+                                       set_state(PART:"bg.image", "default", 0.0);
+#ifdef ENABLE_COLOR_CLIP
+                                       set_state(PART:"color_clip", "off", 0.0);
+#endif
+                               }
+                       }
+               }
+
+               program{
+                       name: "bg.image.press";
+                       signal: "mouse,down,1";
+                       source: "background.super";
+                       action: STATE_SET "pressed" 0.0;
+                       target: "bg.image";
+               }
+               program{
+                       name: "bg.image.release";
+                       signal: "mouse,up,1";
+                       source: "background.super";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg.image";
+               }
+       }
+}
diff --git a/res/edje/quickpanel_theme.edc b/res/edje/quickpanel_theme.edc
new file mode 100755 (executable)
index 0000000..8d7b980
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 "../../inc/quickpanel_def.h"
+
+collections {
+       base_scale: 1.8;
+
+#define PROCESS_MEDIUM_IMAGE_WIDTH_INC 36
+#define PROCESS_MEDIUM_IMAGE_HEIGHT_INC 36
+#define PROCESS_MEDIUM_IMAGE_COLOR     "AO008"
+
+#include "quickpanel_theme_progressbar.edc"
+#include "quickpanel_theme_slider.edc"
+}
diff --git a/res/edje/quickpanel_theme_progressbar.edc b/res/edje/quickpanel_theme_progressbar.edc
new file mode 100755 (executable)
index 0000000..5a533db
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+
+
+group {
+       name: "elm/progressbar/horizontal/quickpanel_style";
+
+       images {
+               image: "core_activity_Indicator_medium_00.png" COMP;
+               image: "core_activity_Indicator_medium_01.png" COMP;
+               image: "core_activity_Indicator_medium_02.png" COMP;
+               image: "core_activity_Indicator_medium_03.png" COMP;
+               image: "core_activity_Indicator_medium_04.png" COMP;
+               image: "core_activity_Indicator_medium_05.png" COMP;
+               image: "core_activity_Indicator_medium_06.png" COMP;
+               image: "core_activity_Indicator_medium_07.png" COMP;
+               image: "core_activity_Indicator_medium_08.png" COMP;
+               image: "core_activity_Indicator_medium_09.png" COMP;
+               image: "core_activity_Indicator_medium_10.png" COMP;
+               image: "core_activity_Indicator_medium_11.png" COMP;
+               image: "core_activity_Indicator_medium_12.png" COMP;
+               image: "core_activity_Indicator_medium_13.png" COMP;
+               image: "core_activity_Indicator_medium_14.png" COMP;
+               image: "core_activity_Indicator_medium_15.png" COMP;
+               image: "core_activity_Indicator_medium_16.png" COMP;
+               image: "core_activity_Indicator_medium_17.png" COMP;
+               image: "core_activity_Indicator_medium_18.png" COMP;
+               image: "core_activity_Indicator_medium_19.png" COMP;
+               image: "core_activity_Indicator_medium_20.png" COMP;
+               image: "core_activity_Indicator_medium_21.png" COMP;
+               image: "core_activity_Indicator_medium_22.png" COMP;
+               image: "core_activity_Indicator_medium_23.png" COMP;
+               image: "core_activity_Indicator_medium_24.png" COMP;
+               image: "core_activity_Indicator_medium_25.png" COMP;
+               image: "core_activity_Indicator_medium_26.png" COMP;
+               image: "core_activity_Indicator_medium_27.png" COMP;
+               image: "core_activity_Indicator_medium_28.png" COMP;
+               image: "core_activity_Indicator_medium_29.png" COMP;
+       }
+
+       parts {
+               part {
+                       name: "access";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "elm.background.progressbar";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                       }
+               }
+               part {
+                       name: "background";
+                       mouse_events: 0;
+                       scale: 1;
+                       clip_to: "elm.background.progressbar";
+                       description {
+                               state: "default" 0.0;
+                               min: PROCESS_MEDIUM_IMAGE_WIDTH_INC PROCESS_MEDIUM_IMAGE_HEIGHT_INC;
+                               max: PROCESS_MEDIUM_IMAGE_WIDTH_INC PROCESS_MEDIUM_IMAGE_HEIGHT_INC;
+                               aspect: 1.0 1.0;
+                               aspect_preference: BOTH;
+                               color_class: PROCESS_MEDIUM_IMAGE_COLOR;
+                               image.normal: "core_activity_Indicator_medium_00.png";
+                               image.tween: "core_activity_Indicator_medium_01.png";
+                               image.tween: "core_activity_Indicator_medium_02.png";
+                               image.tween: "core_activity_Indicator_medium_03.png";
+                               image.tween: "core_activity_Indicator_medium_04.png";
+                               image.tween: "core_activity_Indicator_medium_05.png";
+                               image.tween: "core_activity_Indicator_medium_06.png";
+                               image.tween: "core_activity_Indicator_medium_07.png";
+                               image.tween: "core_activity_Indicator_medium_08.png";
+                               image.tween: "core_activity_Indicator_medium_09.png";
+                               image.tween: "core_activity_Indicator_medium_10.png";
+                               image.tween: "core_activity_Indicator_medium_11.png";
+                               image.tween: "core_activity_Indicator_medium_12.png";
+                               image.tween: "core_activity_Indicator_medium_13.png";
+                               image.tween: "core_activity_Indicator_medium_14.png";
+                               image.tween: "core_activity_Indicator_medium_15.png";
+                               image.tween: "core_activity_Indicator_medium_16.png";
+                               image.tween: "core_activity_Indicator_medium_17.png";
+                               image.tween: "core_activity_Indicator_medium_18.png";
+                               image.tween: "core_activity_Indicator_medium_19.png";
+                               image.tween: "core_activity_Indicator_medium_20.png";
+                               image.tween: "core_activity_Indicator_medium_21.png";
+                               image.tween: "core_activity_Indicator_medium_22.png";
+                               image.tween: "core_activity_Indicator_medium_23.png";
+                               image.tween: "core_activity_Indicator_medium_24.png";
+                               image.tween: "core_activity_Indicator_medium_25.png";
+                               image.tween: "core_activity_Indicator_medium_26.png";
+                               image.tween: "core_activity_Indicator_medium_27.png";
+                               image.tween: "core_activity_Indicator_medium_28.png";
+                               image.tween: "core_activity_Indicator_medium_29.png";
+                       }
+               }
+       }
+
+       programs {
+               program {
+                       name: "start_pulse";
+                       signal: "elm,state,pulse,start";
+                       source: "elm";
+                       action: STATE_SET "default" 0.0;
+                       target: "background";
+                       transition: LINEAR 1.8;
+                       after: "start_pulse";
+               }
+               program {
+                       name: "stop_pulse";
+                       signal: "elm,state,pulse,stop";
+                       source: "elm";
+                       action: ACTION_STOP;
+                       target: "start_pulse";
+                       after: "init_pulse";
+               }
+               program {
+                       name: "init_pulse";
+                       action: STATE_SET "default" 0.0;
+                       target: "background";
+               }
+       }
+}
diff --git a/res/edje/quickpanel_theme_slider.edc b/res/edje/quickpanel_theme_slider.edc
new file mode 100755 (executable)
index 0000000..e3bb098
--- /dev/null
@@ -0,0 +1,690 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 "color_classes.edc"
+
+#define SLIDER_BASE_HEIGHT_INC  6
+#define SLIDER_INDICATOR_SIZE_INC 42
+#define SLIDER_SWALLOWBAR_HEIGHT_INC  42
+#define SLIDER_LEFT_RIGHT_PADDING_SIZE_INC 20 0
+#define SLIDER_ICON_PADDING_SIZE_INC 5 0
+#define SLIDER_CENTER_POINT_SIZE_INC 10 24
+
+#define SLIDER_POPUP_WIDTH_INC 80
+#define SLIDER_POPUP_HEIGHT_INC 92
+
+group {
+       name: "elm/slider/horizontal/indicator/quickpanel_style";
+       images {
+               image: "core_slider_handle_normal.png" COMP;
+               image: "core_slider_handle_press.png" COMP;
+       }
+       parts {
+               part {
+                       name: "access";
+                       type: RECT;
+                       description { state: "default" 0.0;
+                               fixed: 1 1;
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "button_events";
+                       type: RECT;
+                       mouse_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               min: 2*SLIDER_INDICATOR_SIZE_INC 1.5*SLIDER_INDICATOR_SIZE_INC;
+                               aspect: 1.0 1.0;
+                               aspect_preference: VERTICAL;
+                               color: 0 0 0 0;
+                       }
+                       description {
+                               state: "disabled" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 0;
+                       }
+               }
+               part {
+                       name: "button0";
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               min: SLIDER_INDICATOR_SIZE_INC SLIDER_INDICATOR_SIZE_INC;
+                               max: SLIDER_INDICATOR_SIZE_INC SLIDER_INDICATOR_SIZE_INC;
+                               image {
+                                       normal: "core_slider_handle_normal.png";
+                               }
+                               color_class: "AO005L3";
+                       }
+                       description {
+                               state: "disabled" 0.0;
+                               inherit: "default" 0.0;
+                               color_class: "AO004D";
+                               visible: 1;
+                       }
+               }
+               part {
+                       name: "button0_press";
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               min: SLIDER_INDICATOR_SIZE_INC SLIDER_INDICATOR_SIZE_INC;
+                               max: SLIDER_INDICATOR_SIZE_INC SLIDER_INDICATOR_SIZE_INC;
+                               image {
+                                       normal: "core_slider_handle_press.png";
+                               }
+                               color_class: "AO005L4";
+                               visible: 0;
+                               }
+                       description {
+                               state: "pressed" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+               }
+       }
+       programs {
+               program { name: "mouse_down";
+                       signal: "mouse,down,*";
+                       source: "button_events";
+                       action:  STATE_SET "pressed" 0.0;
+                       target: "button0_press";
+               }
+               program { name: "mouse_up";
+                       signal: "mouse,up,*";
+                       source: "button_events";
+                       action:  STATE_SET "default" 0.0;
+                       target: "button0_press";
+               }
+               program { name: "slider_disable";
+                       signal: "elm,state,disabled";
+                       source: "elm";
+                       action:  STATE_SET "disabled" 0.0;
+                       target: "button0";
+                       target: "button_events";
+               }
+               program { name: "slider_enable";
+                       signal: "elm,state,enabled";
+                       source: "elm";
+                       action:  STATE_SET "default" 0.0;
+                       target: "button0";
+                       target: "button_events";
+               }
+       }
+}
+
+group {
+       name: "elm/slider/horizontal/quickpanel_style";
+               images {
+                       image: "core_progressbar_bg.#.png" COMP;
+                       image: "core_progress_bar.#.png" COMP;
+                       image: "core_slider_center_point_bg.png" COMP;
+               }
+               script {
+                       public invert_on = 0;
+                       public popup_show = 1;
+                       public show = 0;
+                       public set_popup_show() {
+                               set_int(popup_show, 1);
+                       }
+                       public set_popup_hide() {
+                               set_int(popup_show, 0);
+                       }
+                       public set_invert_on() {
+                               set_state(PART:"level", "inverted", 0.0);
+                               set_state(PART:"level2", "inverted", 0.0);
+                               set_int(invert_on, 1);
+                       }
+                       public set_invert_off() {
+                               set_state(PART:"level", "default", 0.0);
+                               set_state(PART:"level2", "default", 0.0);
+                               set_int(invert_on, 0);
+                       }
+                       public thumb_down() {
+                               if (get_int(popup_show) == 1) {
+                                       emit("popup,show", "elm");
+                               }
+                       }
+                       public thumb_up() {
+                               if (get_int(invert_on) == 0) {
+                                       set_state(PART:"level", "default", 0.0);
+                                       set_state(PART:"level2", "default", 0.0);
+                               }
+                               if (get_int(popup_show) == 1) {
+                                       emit("popup,hide", "elm");
+                               }
+                       }
+                       public drag_state() {
+                               new Float:dx, Float:dy;
+                               get_drag(PART:"elm.dragable.slider", dx, dy);
+                               if (dx > 0.5) {
+                                       set_state(PART:"level", "default", 0.0);
+                                       set_state(PART:"level2", "default", 0.0);
+                                       set_int(invert_on, 0);
+                               }
+                               else {
+                                       set_state(PART:"level", "inverted", 0.0);
+                                       set_state(PART:"level2", "inverted", 0.0);
+                                       set_int(invert_on, 1);
+                               }
+                       }
+                       public message(Msg_Type:type, id, ...) {
+                               if (type == MSG_FLOAT_SET) {
+                                       new Float:ratio;
+                                       ratio = getfarg(2);
+                                       if (id == 1) {
+                                               custom_state(PART:"left_restrict", "default", 0.0);
+                                               set_state_val(PART:"left_restrict", STATE_REL2, ratio, 0.0);
+                                               set_state(PART:"left_restrict", "custom", 0.0);
+                                       } else if (id == 2) {
+                                               custom_state(PART:"right_restrict", "default", 0.0);
+                                               set_state_val(PART:"right_restrict", STATE_REL1, 1.0 - ratio, 0.0);
+                                               set_state(PART:"right_restrict", "custom", 0.0);
+                                       }
+                               }
+                       }
+               }
+       parts {
+               part {
+                       name: "access";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "bg";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 SLIDER_SWALLOWBAR_HEIGHT_INC;
+                       }
+               }
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       clip_to: "icon_clipper";
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               align: 0.0 0.5;
+                               max: SLIDER_SWALLOWBAR_HEIGHT_INC SLIDER_SWALLOWBAR_HEIGHT_INC;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                                       to: "bg";
+                               }
+                               rel2 {
+                                       relative: 0.0 1.0;
+                                       to: "bg";
+                               }
+                       }
+                       description {
+                               state: "visible" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+               }
+               part {
+                       name: "bar_icon_right_padding_1";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.0 0.5;
+                               min: 0 0;
+                               max: 0 0;
+                               rel1 {
+                                       relative: 1.0  0.0;
+                                       to: "elm.swallow.icon";
+                               }
+                               rel2 {
+                                       relative: 1.0  1.0;
+                                       to: "elm.swallow.icon";
+                               }
+                               fixed: 1 1;
+                       }
+                       description { state: "visible";
+                               inherit: "default" 0.0;
+                               min: SLIDER_ICON_PADDING_SIZE_INC;
+                               max: SLIDER_ICON_PADDING_SIZE_INC;
+                       }
+               }
+               part {
+                       name: "bar_icon_right_padding_2";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.0 0.5;
+                               min: SLIDER_LEFT_RIGHT_PADDING_SIZE_INC;
+                               max: SLIDER_LEFT_RIGHT_PADDING_SIZE_INC;
+                               rel1 {
+                               relative: 1.0  0.0;
+                                       to: "bar_icon_right_padding_1";
+                               }
+                               rel2 {
+                                       relative: 1.0  1.0;
+                                       to: "bar_icon_right_padding_1";
+                               }
+                               fixed: 1 1;
+                       }
+               }
+               part {
+                       name: "left_restrict";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 SLIDER_BASE_HEIGHT_INC;
+                               max: -1 SLIDER_BASE_HEIGHT_INC;
+                               fixed: 1 1;
+                               rel1 {
+                                       to: "base";
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       to: "base";
+                                       relative: 0.0 1.0;
+                               }
+                               align: 0.0 0.5;
+                       }
+               }
+               part {
+                       name: "right_restrict";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 SLIDER_BASE_HEIGHT_INC;
+                               max: -1 SLIDER_BASE_HEIGHT_INC;
+                               rel1 {
+                                       to: "base";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to: "base";
+                                       relative: 1.0 1.0;
+                               }
+                       }
+               }
+               part {
+                       name: "base";
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 SLIDER_BASE_HEIGHT_INC;
+                               max: -1 SLIDER_BASE_HEIGHT_INC;
+                               rel1 {
+                                       to: "bar_icon_right_padding_2";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to: "bar_image_right_padding";
+                                       relative: 0.0 1.0;
+                               }
+                               fixed: 0 1;
+                               image.normal: "core_progressbar_bg.#.png";
+                               color: 255 255 255 255;
+                               color_class: "AO005L1";
+                       }
+                       description {
+                               state: "disabled" 0.0;
+                               inherit: "default" 0.0;
+                               color_class: "AO005L1D";
+                       }
+               }
+               part {
+                       name: "drag_base";
+                       type: "SPACER";
+                       description {
+                               state: "default" 0.0;
+                               min: 0 SLIDER_SWALLOWBAR_HEIGHT_INC;
+                               rel1 {
+                                       to_x: "left_restrict";
+                                       to_y: "bg";
+                                       relative: 1.0 0.0;
+                                       offset: -SLIDER_LEFT_RIGHT_PADDING_SIZE_INC;
+                               }
+                               rel2 {
+                                       to_x: "right_restrict";
+                                       to_y: "bg";
+                                       relative: 0.0 1.0;
+                                       offset: SLIDER_LEFT_RIGHT_PADDING_SIZE_INC;
+                               }
+                               fixed: 1 1;
+                       }
+               }
+               part {
+                       name: "level";
+                       mouse_events: 0;
+                       scale: 1;
+                       clip_to: "clipper";
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       to_x: "bar_icon_right_padding_2";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x: "elm.dragable.slider";
+                                       relative: 0.5 1.0;
+                               }
+                               fixed: 1 1;
+                               min: 0 SLIDER_BASE_HEIGHT_INC;
+                               max: -1 SLIDER_BASE_HEIGHT_INC;
+                               image.normal: "core_progressbar_bg.#.png";
+                       }
+                       description {
+                               state: "inverted" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 0;
+                       }
+               }
+               part { 
+                       name: "level2";
+                       mouse_events: 0;
+                       scale: 1;
+                       clip_to: "clipper";
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               visible: 0;
+                               rel1 {
+                                       to_y: "base";
+                                       to_x: "elm.dragable.slider";
+                                       relative: 0.5 0.0;
+                               }
+                               rel2.to: "base";
+                                       image.normal: "core_progressbar_bg.#.png";
+                               }
+                               description {
+                                       state: "inverted" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                       }
+               }
+               part {
+                       name: "bar_image_right_padding";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: SLIDER_LEFT_RIGHT_PADDING_SIZE_INC;
+                               max: SLIDER_LEFT_RIGHT_PADDING_SIZE_INC;
+                               fixed: 1 0;
+                               rel1 {
+                                       relative: 1.0  0.0;
+                                       to: "bg";
+                               }
+                               rel2 {
+                                       relative: 1.0  1.0;
+                                       to: "bg";
+                               }
+                               align: 1.0 0.5;
+                       }
+               }
+               part { name: "icon_clipper";
+                       scale: 1;
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               color_class: "W0661";
+                       }
+                       description {
+                               state: "disabled" 0.0;
+                               color_class: "W0661D";
+                       }
+               }
+               part {
+                       name: "elm.swallow.bar";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0  SLIDER_SWALLOWBAR_HEIGHT_INC;
+                               max: -1 SLIDER_SWALLOWBAR_HEIGHT_INC;
+                               fixed: 0 1;
+                               rel1 {
+                                       to: "bar_icon_right_padding_2";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to: "bar_image_right_padding";
+                                       relative: 0.0 1.0;
+                               }
+                       }
+               }
+               part {
+                       name:"center_point";
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: SLIDER_CENTER_POINT_SIZE_INC;
+                               max: SLIDER_CENTER_POINT_SIZE_INC;
+                               visible: 0;
+                               image.normal: "core_slider_center_point_bg.png";
+                               rel1.to: "base";
+                               rel2.to: "base";
+                               fixed: 0 1;
+                               color_class: "W062L1";
+                       }
+                       description {
+                               state: "visible" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+                       description {
+                               state: "disabled" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                               color_class: "W062L1D";
+                       }
+               }
+               part {
+                       name: "elm.track.slider";
+                       type: SWALLOW;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 SLIDER_POPUP_HEIGHT_INC;
+                               max: -1 SLIDER_POPUP_HEIGHT_INC;
+                               align: 0.5 1.0;
+                               fixed: 0 1;
+                               rel1.to: "elm.dragable.slider";
+                               rel1.offset: 0 8;
+                               rel2 {
+                                       relative: 1.0 0.0;
+                                       to: "elm.dragable.slider";
+                                       offset: 0 8;
+                               }
+                       }
+               }
+               part {
+                       name: "elm.dragable.slider";
+                       type: GROUP;
+                       source: "elm/slider/horizontal/indicator/quickpanel_style";
+                       mouse_events: 1;
+                       scale: 1;
+                       dragable {
+                               x: 1 1 0;
+                               y: 0 0 0;
+                               confine: "drag_base";
+                       }
+                       description {
+                               state: "default" 0.0;
+                               min: SLIDER_INDICATOR_SIZE_INC SLIDER_INDICATOR_SIZE_INC;
+                               fixed: 1 1;
+                               align: 0.5 0.5;
+                               rel1.to: "drag_base";
+                               rel1.relative: 0.5 0.5;
+                               rel2.to: "drag_base";
+                               rel2.relative: 0.5 0.5;
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "disabler";
+                       type: RECT;
+                       mouse_events: 1;
+                       repeat_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               color: 0 0 0 0;
+                       }
+                       description {
+                               state: "disabled" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+               }
+               part {
+                       name: "clipper";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                                       color_class: "AO005L2";
+                               }
+                               description {
+                                       state: "pressed" 0.0;
+                                       color_class: "AO005L2";
+                               }
+                               description {
+                                       state: "disabled" 0.0;
+                                       color_class: "AO004D";
+                               }
+                       }
+               }
+               programs {
+                       program {
+                       name: "invert_on";
+                       signal: "elm,state,inverted,on";
+                       source: "elm";
+                       script {
+                               set_invert_on();
+                       }
+               }
+               program {
+                       name: "invert_off";
+                       signal: "elm,state,inverted,off";
+                       source: "elm";
+                       script {
+                               set_invert_off();
+                       }
+               }
+               program {
+                       name: "val_show";
+                       signal: "mouse,down,*";
+                       source: "elm.dragable.slider";
+                       script {
+                               thumb_down();
+                       }
+               }
+               program {
+                       name: "val_hide";
+                       signal: "mouse,up,*";
+                       source: "elm.dragable.slider";
+                       script {
+                               thumb_up();
+                       }
+               }
+               program {
+                       name: "popup_show";
+                       signal: "elm,state,val,show";
+                       source: "elm";
+                       script {
+                               set_popup_show();
+                       }
+               }
+               program {
+                       name: "popup_hide";
+                       signal: "elm,state,val,hide";
+                       source: "elm";
+                       script {
+                               set_popup_hide();
+                       }
+               }
+               program {
+                       name: "icon_show";
+                       signal: "elm,state,icon,visible";
+                       source: "elm";
+                       action:  STATE_SET "visible" 0.0;
+                       target: "elm.swallow.icon";
+                       target: "bar_icon_right_padding_1";
+               }
+               program {
+                       name: "center_point_enable";
+                       signal: "slider,center,point,show";
+                       source: "elm";
+                       script {
+                               set_state(PART:"center_point", "visible", 0.0);
+                               set_int(show, 1);
+                       }
+               }
+               program {
+                       name: "center_point_disable";
+                       signal: "slider,center,point,hide";
+                       source: "elm";
+                       script {
+                               set_state(PART:"center_point", "default", 0.0);
+                               set_int(show, 0);
+                       }
+               }
+               program {
+                       name: "slider_disable";
+                       signal: "elm,state,disabled";
+                       source: "elm";
+                       script {
+                               if (get_int(show)) {
+                                       set_state(PART:"center_point", "disabled", 0.0);
+                               }
+                               set_state(PART:"disabler", "disabled", 0.0);
+                               set_state(PART:"icon_clipper", "disabled", 0.0);
+                               set_state(PART:"clipper", "disabled", 0.0);
+                               set_state(PART:"base", "disabled", 0.0);
+                       }
+               }
+               program {
+                       name: "slider_enable";
+                       signal: "elm,state,enabled";
+                       source: "elm";
+                       script {
+                               if (get_int(show)) {
+                                       set_state(PART:"center_point", "default", 0.0);
+                               }
+                               set_state(PART:"disabler", "default", 0.0);
+                               set_state(PART:"icon_clipper", "default", 0.0);
+                               set_state(PART:"clipper", "default", 0.0);
+                               set_state(PART:"base", "default", 0.0);
+                       }
+               }
+       }
+}
diff --git a/res/edje/quickpanel_voice_control.edc b/res/edje/quickpanel_voice_control.edc
new file mode 100755 (executable)
index 0000000..b687636
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 "../../inc/quickpanel_def.h"
+
+#include "color_classes.edc"
+
+
+#define QP_THEME_VOICE_CONTOL_BG_COLOR "B0211"
+#define QP_VOICE_CONTOL_HEIGHT 80
+#define QP_HD_WIDTH 720
+#define QP_HD_VOICE_CONTROL_HEIGHT 106
+#define QP_HD_VOICE_CONTROL_LEFT_PADDING 112
+#define QP_HD_VOICE_CONTROL_TOP_PADDING 14
+
+#define QP_VOICE_CONTROL_BUTTON_REL1_X (QP_HD_VOICE_CONTROL_LEFT_PADDING / QP_HD_WIDTH)
+#define QP_VOICE_CONTROL_BUTTON_REL1_Y (QP_HD_VOICE_CONTROL_TOP_PADDING / QP_HD_VOICE_CONTROL_HEIGHT)
+#define QP_VOICE_CONTROL_BUTTON_REL2_X ((QP_HD_WIDTH - QP_HD_VOICE_CONTROL_LEFT_PADDING) / QP_HD_WIDTH)
+#define QP_VOICE_CONTROL_BUTTON_REL2_Y ((QP_HD_VOICE_CONTROL_HEIGHT - QP_HD_VOICE_CONTROL_TOP_PADDING) / QP_HD_VOICE_CONTROL_HEIGHT)
+
+
+images
+{
+       image: "core_list_button_bg.#.png" COMP;
+       image: "voice_control_icon_mic.png" COMP;
+}
+
+collections
+{
+       base_scale: 1.8;
+
+       group {
+               name: "quickpanel/voice_control/default";
+               data.item: "bgcolor" QP_THEME_VOICE_CONTOL_BG_COLOR;
+
+               parts {
+                       part {
+                               name: "base";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_VOICE_CONTOL_HEIGHT;
+                                       max: -1 QP_VOICE_CONTOL_HEIGHT;
+                               }
+                       }
+                       part {
+                               name: "bgcolor";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               to: "base";
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "base";
+                                               relative: 1.0 1.0;
+                                       }
+                                       color_class: QP_THEME_VOICE_CONTOL_BG_COLOR;
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "button_bg";
+                               type: IMAGE;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.5;
+                                       rel1 {
+                                               to: "base";
+                                               relative: QP_VOICE_CONTROL_BUTTON_REL1_X QP_VOICE_CONTROL_BUTTON_REL1_Y;
+                                       }
+                                       rel2 {
+                                               to: "base";
+                                               relative: QP_VOICE_CONTROL_BUTTON_REL2_X QP_VOICE_CONTROL_BUTTON_REL2_Y;
+                                       }
+                                       image {
+                                               normal: "core_list_button_bg.#.png";
+                                               border: 30 30 0 0;
+                                               border_scale: 1;
+                                       }
+                                       color: 52 123 135 255;
+                               }
+                               description
+                               {
+                                       state: "pressed" 0.0;
+                                       inherit: "default" 0.0;
+                                       color_class: "AO001L1P";
+                               }
+                       }
+                       part {
+                               name: "button_img";
+                               type: IMAGE;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 42 42;
+                                       max: 42 42;
+                                       align: 0.5 0.5;
+                                       rel1 {
+                                               to: "button_bg";
+                                       }
+                                       rel2 {
+                                               to: "button_bg";
+                                       }
+                                       image {
+                                               normal: "voice_control_icon_mic.png";
+                                       }
+                               }
+                       }
+               }
+
+               programs {
+
+                       program {
+                               name: "pressed_button";
+                               signal: "mouse,clicked,1";
+                               source: "button_bg";
+                               action: SIGNAL_EMIT "button_clicked" "";
+                       }
+
+                       program {
+                               name: "pressed_button_img";
+                               signal: "mouse,clicked,1";
+                               source: "button_img";
+                               action: SIGNAL_EMIT "button_clicked" "";
+                       }
+
+                       program {
+                               name: "pressed_button_bg";
+                               signal: "mouse,down,1";
+                               source: "button_bg";
+                               action: STATE_SET "pressed" 0.0;
+                               target: "button_bg";
+                       }
+
+                       program {
+                               name: "released_button_bg";
+                               signal: "mouse,up,1";
+                               source: "button_bg";
+                               action: STATE_SET "default" 0.0;
+                               target: "button_bg";
+                       }
+               }
+       }
+}
+
+
+
diff --git a/res/images/Q02_quickpanel_button_press_01_center.png b/res/images/Q02_quickpanel_button_press_01_center.png
new file mode 100755 (executable)
index 0000000..fcd401b
Binary files /dev/null and b/res/images/Q02_quickpanel_button_press_01_center.png differ
diff --git a/res/images/Q02_quickpanel_button_press_01_left.png b/res/images/Q02_quickpanel_button_press_01_left.png
new file mode 100755 (executable)
index 0000000..585e850
Binary files /dev/null and b/res/images/Q02_quickpanel_button_press_01_left.png differ
diff --git a/res/images/Q02_quickpanel_button_press_01_right.png b/res/images/Q02_quickpanel_button_press_01_right.png
new file mode 100755 (executable)
index 0000000..1e848c7
Binary files /dev/null and b/res/images/Q02_quickpanel_button_press_01_right.png differ
diff --git a/res/images/bg_press.#.png b/res/images/bg_press.#.png
new file mode 100755 (executable)
index 0000000..805ea78
Binary files /dev/null and b/res/images/bg_press.#.png differ
diff --git a/res/images/core_activity_Indicator_medium_00.png b/res/images/core_activity_Indicator_medium_00.png
new file mode 100755 (executable)
index 0000000..37b7a90
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_00.png differ
diff --git a/res/images/core_activity_Indicator_medium_01.png b/res/images/core_activity_Indicator_medium_01.png
new file mode 100755 (executable)
index 0000000..c14c54b
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_01.png differ
diff --git a/res/images/core_activity_Indicator_medium_02.png b/res/images/core_activity_Indicator_medium_02.png
new file mode 100755 (executable)
index 0000000..693f8f2
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_02.png differ
diff --git a/res/images/core_activity_Indicator_medium_03.png b/res/images/core_activity_Indicator_medium_03.png
new file mode 100755 (executable)
index 0000000..0270a40
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_03.png differ
diff --git a/res/images/core_activity_Indicator_medium_04.png b/res/images/core_activity_Indicator_medium_04.png
new file mode 100755 (executable)
index 0000000..6fc5587
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_04.png differ
diff --git a/res/images/core_activity_Indicator_medium_05.png b/res/images/core_activity_Indicator_medium_05.png
new file mode 100755 (executable)
index 0000000..ee5d96b
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_05.png differ
diff --git a/res/images/core_activity_Indicator_medium_06.png b/res/images/core_activity_Indicator_medium_06.png
new file mode 100755 (executable)
index 0000000..46e3964
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_06.png differ
diff --git a/res/images/core_activity_Indicator_medium_07.png b/res/images/core_activity_Indicator_medium_07.png
new file mode 100755 (executable)
index 0000000..93ebf9e
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_07.png differ
diff --git a/res/images/core_activity_Indicator_medium_08.png b/res/images/core_activity_Indicator_medium_08.png
new file mode 100755 (executable)
index 0000000..8e4c688
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_08.png differ
diff --git a/res/images/core_activity_Indicator_medium_09.png b/res/images/core_activity_Indicator_medium_09.png
new file mode 100755 (executable)
index 0000000..007218f
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_09.png differ
diff --git a/res/images/core_activity_Indicator_medium_10.png b/res/images/core_activity_Indicator_medium_10.png
new file mode 100755 (executable)
index 0000000..75cb0f8
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_10.png differ
diff --git a/res/images/core_activity_Indicator_medium_11.png b/res/images/core_activity_Indicator_medium_11.png
new file mode 100755 (executable)
index 0000000..5df320a
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_11.png differ
diff --git a/res/images/core_activity_Indicator_medium_12.png b/res/images/core_activity_Indicator_medium_12.png
new file mode 100755 (executable)
index 0000000..c28de6b
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_12.png differ
diff --git a/res/images/core_activity_Indicator_medium_13.png b/res/images/core_activity_Indicator_medium_13.png
new file mode 100755 (executable)
index 0000000..2fd2e51
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_13.png differ
diff --git a/res/images/core_activity_Indicator_medium_14.png b/res/images/core_activity_Indicator_medium_14.png
new file mode 100755 (executable)
index 0000000..9e07a5d
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_14.png differ
diff --git a/res/images/core_activity_Indicator_medium_15.png b/res/images/core_activity_Indicator_medium_15.png
new file mode 100755 (executable)
index 0000000..5fccce5
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_15.png differ
diff --git a/res/images/core_activity_Indicator_medium_16.png b/res/images/core_activity_Indicator_medium_16.png
new file mode 100755 (executable)
index 0000000..5bdbcdd
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_16.png differ
diff --git a/res/images/core_activity_Indicator_medium_17.png b/res/images/core_activity_Indicator_medium_17.png
new file mode 100755 (executable)
index 0000000..88becef
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_17.png differ
diff --git a/res/images/core_activity_Indicator_medium_18.png b/res/images/core_activity_Indicator_medium_18.png
new file mode 100755 (executable)
index 0000000..ef23ee0
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_18.png differ
diff --git a/res/images/core_activity_Indicator_medium_19.png b/res/images/core_activity_Indicator_medium_19.png
new file mode 100755 (executable)
index 0000000..e8a6dba
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_19.png differ
diff --git a/res/images/core_activity_Indicator_medium_20.png b/res/images/core_activity_Indicator_medium_20.png
new file mode 100755 (executable)
index 0000000..79e50b1
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_20.png differ
diff --git a/res/images/core_activity_Indicator_medium_21.png b/res/images/core_activity_Indicator_medium_21.png
new file mode 100755 (executable)
index 0000000..2f9f472
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_21.png differ
diff --git a/res/images/core_activity_Indicator_medium_22.png b/res/images/core_activity_Indicator_medium_22.png
new file mode 100755 (executable)
index 0000000..9f77e60
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_22.png differ
diff --git a/res/images/core_activity_Indicator_medium_23.png b/res/images/core_activity_Indicator_medium_23.png
new file mode 100755 (executable)
index 0000000..bea093d
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_23.png differ
diff --git a/res/images/core_activity_Indicator_medium_24.png b/res/images/core_activity_Indicator_medium_24.png
new file mode 100755 (executable)
index 0000000..dcad32d
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_24.png differ
diff --git a/res/images/core_activity_Indicator_medium_25.png b/res/images/core_activity_Indicator_medium_25.png
new file mode 100755 (executable)
index 0000000..46cdca2
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_25.png differ
diff --git a/res/images/core_activity_Indicator_medium_26.png b/res/images/core_activity_Indicator_medium_26.png
new file mode 100755 (executable)
index 0000000..62071df
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_26.png differ
diff --git a/res/images/core_activity_Indicator_medium_27.png b/res/images/core_activity_Indicator_medium_27.png
new file mode 100755 (executable)
index 0000000..55b2cab
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_27.png differ
diff --git a/res/images/core_activity_Indicator_medium_28.png b/res/images/core_activity_Indicator_medium_28.png
new file mode 100755 (executable)
index 0000000..85868f5
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_28.png differ
diff --git a/res/images/core_activity_Indicator_medium_29.png b/res/images/core_activity_Indicator_medium_29.png
new file mode 100755 (executable)
index 0000000..6e358a1
Binary files /dev/null and b/res/images/core_activity_Indicator_medium_29.png differ
diff --git a/res/images/core_icon_badge_container.#.png b/res/images/core_icon_badge_container.#.png
new file mode 100755 (executable)
index 0000000..4f533f4
Binary files /dev/null and b/res/images/core_icon_badge_container.#.png differ
diff --git a/res/images/core_list_button_bg.#.png b/res/images/core_list_button_bg.#.png
new file mode 100755 (executable)
index 0000000..5506eab
Binary files /dev/null and b/res/images/core_list_button_bg.#.png differ
diff --git a/res/images/core_progress_bar.#.png b/res/images/core_progress_bar.#.png
new file mode 100755 (executable)
index 0000000..5ed62da
Binary files /dev/null and b/res/images/core_progress_bar.#.png differ
diff --git a/res/images/core_progress_bar.png b/res/images/core_progress_bar.png
new file mode 100755 (executable)
index 0000000..5ed62da
Binary files /dev/null and b/res/images/core_progress_bar.png differ
diff --git a/res/images/core_progressbar_bg.#.png b/res/images/core_progressbar_bg.#.png
new file mode 100755 (executable)
index 0000000..e19c598
Binary files /dev/null and b/res/images/core_progressbar_bg.#.png differ
diff --git a/res/images/core_progressbar_bg.png b/res/images/core_progressbar_bg.png
new file mode 100755 (executable)
index 0000000..e19c598
Binary files /dev/null and b/res/images/core_progressbar_bg.png differ
diff --git a/res/images/core_slider_center_point_bg.png b/res/images/core_slider_center_point_bg.png
new file mode 100755 (executable)
index 0000000..3acbdeb
Binary files /dev/null and b/res/images/core_slider_center_point_bg.png differ
diff --git a/res/images/core_slider_handle_normal.png b/res/images/core_slider_handle_normal.png
new file mode 100755 (executable)
index 0000000..f612432
Binary files /dev/null and b/res/images/core_slider_handle_normal.png differ
diff --git a/res/images/core_slider_handle_press.png b/res/images/core_slider_handle_press.png
new file mode 100755 (executable)
index 0000000..96a1a7c
Binary files /dev/null and b/res/images/core_slider_handle_press.png differ
diff --git a/res/images/core_theme_bg_01.png b/res/images/core_theme_bg_01.png
new file mode 100755 (executable)
index 0000000..477402f
Binary files /dev/null and b/res/images/core_theme_bg_01.png differ
diff --git a/res/images/handler_bg.#.png b/res/images/handler_bg.#.png
new file mode 100755 (executable)
index 0000000..38bd634
Binary files /dev/null and b/res/images/handler_bg.#.png differ
diff --git a/res/images/handler_bg_ef.#.png b/res/images/handler_bg_ef.#.png
new file mode 100755 (executable)
index 0000000..38db7ff
Binary files /dev/null and b/res/images/handler_bg_ef.#.png differ
diff --git a/res/images/handler_btn.png b/res/images/handler_btn.png
new file mode 100755 (executable)
index 0000000..7f22db0
Binary files /dev/null and b/res/images/handler_btn.png differ
diff --git a/res/images/handler_btn_02.png b/res/images/handler_btn_02.png
new file mode 100755 (executable)
index 0000000..f4fedc3
Binary files /dev/null and b/res/images/handler_btn_02.png differ
diff --git a/res/images/icon_arrow_down.png b/res/images/icon_arrow_down.png
new file mode 100755 (executable)
index 0000000..46d3d7b
Binary files /dev/null and b/res/images/icon_arrow_down.png differ
diff --git a/res/images/icon_arrow_up.png b/res/images/icon_arrow_up.png
new file mode 100755 (executable)
index 0000000..65fcac2
Binary files /dev/null and b/res/images/icon_arrow_up.png differ
diff --git a/res/images/icon_bg.png b/res/images/icon_bg.png
new file mode 100755 (executable)
index 0000000..95ee1b4
Binary files /dev/null and b/res/images/icon_bg.png differ
diff --git a/res/images/icon_bg_press.png b/res/images/icon_bg_press.png
new file mode 100755 (executable)
index 0000000..48c8c1c
Binary files /dev/null and b/res/images/icon_bg_press.png differ
diff --git a/res/images/icon_indicator_setting.png b/res/images/icon_indicator_setting.png
new file mode 100755 (executable)
index 0000000..55b4d61
Binary files /dev/null and b/res/images/icon_indicator_setting.png differ
diff --git a/res/images/icon_press.png b/res/images/icon_press.png
new file mode 100755 (executable)
index 0000000..9102659
Binary files /dev/null and b/res/images/icon_press.png differ
diff --git a/res/images/line_indicator_divider.png b/res/images/line_indicator_divider.png
new file mode 100755 (executable)
index 0000000..b818951
Binary files /dev/null and b/res/images/line_indicator_divider.png differ
diff --git a/res/images/quick_button_each_bg.png b/res/images/quick_button_each_bg.png
new file mode 100755 (executable)
index 0000000..185839e
Binary files /dev/null and b/res/images/quick_button_each_bg.png differ
diff --git a/res/images/quick_button_each_bg_land.png b/res/images/quick_button_each_bg_land.png
new file mode 100755 (executable)
index 0000000..89f8485
Binary files /dev/null and b/res/images/quick_button_each_bg_land.png differ
diff --git a/res/images/quick_button_each_ef.png b/res/images/quick_button_each_ef.png
new file mode 100755 (executable)
index 0000000..57c76e4
Binary files /dev/null and b/res/images/quick_button_each_ef.png differ
diff --git a/res/images/quick_button_each_ef_land.png b/res/images/quick_button_each_ef_land.png
new file mode 100755 (executable)
index 0000000..ab7ad43
Binary files /dev/null and b/res/images/quick_button_each_ef_land.png differ
diff --git a/res/images/quick_button_over.png b/res/images/quick_button_over.png
new file mode 100755 (executable)
index 0000000..5dcd5cf
Binary files /dev/null and b/res/images/quick_button_over.png differ
diff --git a/res/images/quick_button_over_land.png b/res/images/quick_button_over_land.png
new file mode 100755 (executable)
index 0000000..d77867f
Binary files /dev/null and b/res/images/quick_button_over_land.png differ
diff --git a/res/images/quick_icon_brightness.png b/res/images/quick_icon_brightness.png
new file mode 100755 (executable)
index 0000000..3053e9c
Binary files /dev/null and b/res/images/quick_icon_brightness.png differ
diff --git a/res/images/quick_icon_brightness_00.png b/res/images/quick_icon_brightness_00.png
new file mode 100755 (executable)
index 0000000..eaf1c97
Binary files /dev/null and b/res/images/quick_icon_brightness_00.png differ
diff --git a/res/images/quick_icon_brightness_01.png b/res/images/quick_icon_brightness_01.png
new file mode 100755 (executable)
index 0000000..4911739
Binary files /dev/null and b/res/images/quick_icon_brightness_01.png differ
diff --git a/res/images/quick_icon_brightness_02.png b/res/images/quick_icon_brightness_02.png
new file mode 100755 (executable)
index 0000000..b5d5a0f
Binary files /dev/null and b/res/images/quick_icon_brightness_02.png differ
diff --git a/res/images/quick_icon_brightness_03.png b/res/images/quick_icon_brightness_03.png
new file mode 100755 (executable)
index 0000000..a189fed
Binary files /dev/null and b/res/images/quick_icon_brightness_03.png differ
diff --git a/res/images/quick_icon_brightness_04.png b/res/images/quick_icon_brightness_04.png
new file mode 100755 (executable)
index 0000000..8bf8e3d
Binary files /dev/null and b/res/images/quick_icon_brightness_04.png differ
diff --git a/res/images/quick_icon_brightness_05.png b/res/images/quick_icon_brightness_05.png
new file mode 100755 (executable)
index 0000000..a9df3fc
Binary files /dev/null and b/res/images/quick_icon_brightness_05.png differ
diff --git a/res/images/quick_icon_brightness_06.png b/res/images/quick_icon_brightness_06.png
new file mode 100755 (executable)
index 0000000..a92d320
Binary files /dev/null and b/res/images/quick_icon_brightness_06.png differ
diff --git a/res/images/quick_icon_brightness_07.png b/res/images/quick_icon_brightness_07.png
new file mode 100755 (executable)
index 0000000..050c878
Binary files /dev/null and b/res/images/quick_icon_brightness_07.png differ
diff --git a/res/images/quick_icon_brightness_08.png b/res/images/quick_icon_brightness_08.png
new file mode 100755 (executable)
index 0000000..8377efa
Binary files /dev/null and b/res/images/quick_icon_brightness_08.png differ
diff --git a/res/images/quick_icon_brightness_09.png b/res/images/quick_icon_brightness_09.png
new file mode 100755 (executable)
index 0000000..b90022e
Binary files /dev/null and b/res/images/quick_icon_brightness_09.png differ
diff --git a/res/images/quick_icon_brightness_10.png b/res/images/quick_icon_brightness_10.png
new file mode 100755 (executable)
index 0000000..a376394
Binary files /dev/null and b/res/images/quick_icon_brightness_10.png differ
diff --git a/res/images/quick_icon_brightness_11.png b/res/images/quick_icon_brightness_11.png
new file mode 100755 (executable)
index 0000000..b2fdfb5
Binary files /dev/null and b/res/images/quick_icon_brightness_11.png differ
diff --git a/res/images/quick_menu_divide.png b/res/images/quick_menu_divide.png
new file mode 100755 (executable)
index 0000000..35b9519
Binary files /dev/null and b/res/images/quick_menu_divide.png differ
diff --git a/res/images/quick_menu_divide_highlight.png b/res/images/quick_menu_divide_highlight.png
new file mode 100755 (executable)
index 0000000..934d07c
Binary files /dev/null and b/res/images/quick_menu_divide_highlight.png differ
diff --git a/res/images/quick_menu_touch.png b/res/images/quick_menu_touch.png
new file mode 100755 (executable)
index 0000000..54921fd
Binary files /dev/null and b/res/images/quick_menu_touch.png differ
diff --git a/res/images_icon/Q02_Notification_brightness.png b/res/images_icon/Q02_Notification_brightness.png
new file mode 100755 (executable)
index 0000000..e2c8cf8
Binary files /dev/null and b/res/images_icon/Q02_Notification_brightness.png differ
diff --git a/res/images_icon/noti_download_01.png b/res/images_icon/noti_download_01.png
new file mode 100755 (executable)
index 0000000..1347662
Binary files /dev/null and b/res/images_icon/noti_download_01.png differ
diff --git a/res/images_icon/noti_download_02.png b/res/images_icon/noti_download_02.png
new file mode 100755 (executable)
index 0000000..52848ca
Binary files /dev/null and b/res/images_icon/noti_download_02.png differ
diff --git a/res/images_icon/noti_download_03.png b/res/images_icon/noti_download_03.png
new file mode 100755 (executable)
index 0000000..ef20442
Binary files /dev/null and b/res/images_icon/noti_download_03.png differ
diff --git a/res/images_icon/noti_download_04.png b/res/images_icon/noti_download_04.png
new file mode 100755 (executable)
index 0000000..b609329
Binary files /dev/null and b/res/images_icon/noti_download_04.png differ
diff --git a/res/images_icon/noti_download_05.png b/res/images_icon/noti_download_05.png
new file mode 100755 (executable)
index 0000000..bab9835
Binary files /dev/null and b/res/images_icon/noti_download_05.png differ
diff --git a/res/images_icon/noti_download_complete.png b/res/images_icon/noti_download_complete.png
new file mode 100755 (executable)
index 0000000..9e35143
Binary files /dev/null and b/res/images_icon/noti_download_complete.png differ
diff --git a/res/images_icon/noti_install_01.png b/res/images_icon/noti_install_01.png
new file mode 100755 (executable)
index 0000000..ced3bdd
Binary files /dev/null and b/res/images_icon/noti_install_01.png differ
diff --git a/res/images_icon/noti_install_02.png b/res/images_icon/noti_install_02.png
new file mode 100755 (executable)
index 0000000..481ff3f
Binary files /dev/null and b/res/images_icon/noti_install_02.png differ
diff --git a/res/images_icon/noti_install_03.png b/res/images_icon/noti_install_03.png
new file mode 100755 (executable)
index 0000000..2d04ca0
Binary files /dev/null and b/res/images_icon/noti_install_03.png differ
diff --git a/res/images_icon/noti_install_04.png b/res/images_icon/noti_install_04.png
new file mode 100755 (executable)
index 0000000..16fa161
Binary files /dev/null and b/res/images_icon/noti_install_04.png differ
diff --git a/res/images_icon/noti_install_05.png b/res/images_icon/noti_install_05.png
new file mode 100755 (executable)
index 0000000..a33c76c
Binary files /dev/null and b/res/images_icon/noti_install_05.png differ
diff --git a/res/images_icon/noti_install_complete.png b/res/images_icon/noti_install_complete.png
new file mode 100755 (executable)
index 0000000..b9bd97c
Binary files /dev/null and b/res/images_icon/noti_install_complete.png differ
diff --git a/res/images_icon/noti_upload_01.png b/res/images_icon/noti_upload_01.png
new file mode 100755 (executable)
index 0000000..6445da8
Binary files /dev/null and b/res/images_icon/noti_upload_01.png differ
diff --git a/res/images_icon/noti_upload_02.png b/res/images_icon/noti_upload_02.png
new file mode 100755 (executable)
index 0000000..bf230fd
Binary files /dev/null and b/res/images_icon/noti_upload_02.png differ
diff --git a/res/images_icon/noti_upload_03.png b/res/images_icon/noti_upload_03.png
new file mode 100755 (executable)
index 0000000..306a258
Binary files /dev/null and b/res/images_icon/noti_upload_03.png differ
diff --git a/res/images_icon/noti_upload_04.png b/res/images_icon/noti_upload_04.png
new file mode 100755 (executable)
index 0000000..50c0e9d
Binary files /dev/null and b/res/images_icon/noti_upload_04.png differ
diff --git a/res/images_icon/noti_upload_05.png b/res/images_icon/noti_upload_05.png
new file mode 100755 (executable)
index 0000000..fb49ad8
Binary files /dev/null and b/res/images_icon/noti_upload_05.png differ
diff --git a/res/images_icon/noti_upload_complete.png b/res/images_icon/noti_upload_complete.png
new file mode 100755 (executable)
index 0000000..2ee11d8
Binary files /dev/null and b/res/images_icon/noti_upload_complete.png differ
diff --git a/res/images_icon/quick_button_icon_bg.png b/res/images_icon/quick_button_icon_bg.png
new file mode 100755 (executable)
index 0000000..392389c
Binary files /dev/null and b/res/images_icon/quick_button_icon_bg.png differ
diff --git a/res/images_icon/quick_icon_auto_rotate.png b/res/images_icon/quick_icon_auto_rotate.png
new file mode 100755 (executable)
index 0000000..48d9136
Binary files /dev/null and b/res/images_icon/quick_icon_auto_rotate.png differ
diff --git a/res/images_icon/quick_icon_bluetooth.png b/res/images_icon/quick_icon_bluetooth.png
new file mode 100755 (executable)
index 0000000..ec747f8
Binary files /dev/null and b/res/images_icon/quick_icon_bluetooth.png differ
diff --git a/res/images_icon/quick_icon_location.png b/res/images_icon/quick_icon_location.png
new file mode 100755 (executable)
index 0000000..ecb55de
Binary files /dev/null and b/res/images_icon/quick_icon_location.png differ
diff --git a/res/images_icon/quick_icon_mobile_data.png b/res/images_icon/quick_icon_mobile_data.png
new file mode 100755 (executable)
index 0000000..0d7c9bc
Binary files /dev/null and b/res/images_icon/quick_icon_mobile_data.png differ
diff --git a/res/images_icon/quick_icon_sf_vf.png b/res/images_icon/quick_icon_sf_vf.png
new file mode 100755 (executable)
index 0000000..a585498
Binary files /dev/null and b/res/images_icon/quick_icon_sf_vf.png differ
diff --git a/res/images_icon/quick_icon_sf_vn.png b/res/images_icon/quick_icon_sf_vn.png
new file mode 100755 (executable)
index 0000000..ff22abe
Binary files /dev/null and b/res/images_icon/quick_icon_sf_vn.png differ
diff --git a/res/images_icon/quick_icon_sn_vf.png b/res/images_icon/quick_icon_sn_vf.png
new file mode 100755 (executable)
index 0000000..005e793
Binary files /dev/null and b/res/images_icon/quick_icon_sn_vf.png differ
diff --git a/res/images_icon/quick_icon_wifi.png b/res/images_icon/quick_icon_wifi.png
new file mode 100755 (executable)
index 0000000..2fd7255
Binary files /dev/null and b/res/images_icon/quick_icon_wifi.png differ
diff --git a/res/images_icon/voice_control_icon_mic.png b/res/images_icon/voice_control_icon_mic.png
new file mode 100755 (executable)
index 0000000..0e3a54e
Binary files /dev/null and b/res/images_icon/voice_control_icon_mic.png differ
diff --git a/res/po/CMakeLists.txt b/res/po/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..37c66b5
--- /dev/null
@@ -0,0 +1,25 @@
+# for i18n
+
+SET(POFILES ar.po az.po bg.po ca.po cs.po da.po de.po el_GR.po en_PH.po en.po en_US.po es_ES.po es_US.po et.po eu.po fi.po fr_CA.po fr.po ga.po gl.po hr.po hu.po hy.po is.po it_IT.po ja_JP.po ka.po
+       kk.po ko_KR.po lt.po lv.po mk.po nb.po nl.po pl.po pt_BR.po pt_PT.po ro.po ru_RU.po sk.po sl.po sr.po sv.po tr_TR.po uk.po uz.po zh_CN.po zh_HK.po zh_TW.po)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+       SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+       MESSAGE("PO: ${pofile}")
+       GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+       GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+       SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+       ADD_CUSTOM_COMMAND(
+                       OUTPUT ${moFile}
+                       COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+                       DEPENDS ${absPofile}
+       )
+       INSTALL(FILES ${moFile}
+                       DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
+       SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
diff --git a/res/po/ar.po b/res/po/ar.po
new file mode 100755 (executable)
index 0000000..eb557fe
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "لا يمكن تنشيط كل من Wi-Fi وMobile AP في الوقت نفسه. هل تريد إلغاء تنشيط Mobile AP؟"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "مكالمات الطوارئ فقط"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "مسح الكل"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "إشعار"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "اهتزاز"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "الصوت"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "كتم"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "الموقع"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "لايمكن زيادة الاضاءة بسبب زيادة حرارة الهاتف."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "البلوتوث"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "التدوير\nالتلقائي"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "لا توجد خدمة"
+
+msgid "IDS_ST_SK_OK"
+msgstr "موافق"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "يتعذر فتح %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "ضبط الإشعارات"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "مسح الكل"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "إلغاء قفل الشاشة لعرض المحتوى"
+
diff --git a/res/po/az.po b/res/po/az.po
new file mode 100755 (executable)
index 0000000..cdc369c
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi və Mobile AP eyni zamanda aktivləşdirilə bilməz. Mobile AP qeyri-aktiv edilsin?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Yalnız fövqəladə zənglər"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Hamını sil"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Bildiriş"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Titrəyiş"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Səs"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Səssiz"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Yer"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Telefon qızdığından parlaqlığı daha da artırmaq mümkün deyil."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Avto\nfırlat"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Servis yoxdur"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "%s açmaq mümkün deyil."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "BİLD. PARAMETRLR"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "HAMISINI SİL"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Məzmuna baxmaq üçün ekranı kiliddən aç"
+
diff --git a/res/po/bg.po b/res/po/bg.po
new file mode 100755 (executable)
index 0000000..41f71a4
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi и Mobile AP не могат да бъдат активирани едновременно.. Деактивиране на Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Само спешни повиквания"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Изч.всички"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Уведом."
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Вибрация"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Звук"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Спиране на звука"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Място"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Яркостта не може да се увеличи повече поради прегряване на телефона."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Авто\nвъртене"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Няма услуга"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Не може да се отвори %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "НАСТРОЙКИ УВЕДОМ."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ИЗЧИСТВАНЕ НА ВСИЧКИ"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Отключете екрана, за да прегледате съдържанието"
+
diff --git a/res/po/ca.po b/res/po/ca.po
new file mode 100755 (executable)
index 0000000..213adf0
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "No es poden activar els punt d'accés Wi-Fi i mòbil al mateix temps. Desactivar al punt d'accés mòbil?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Només trucades emergència"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Esbor tot"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notificac"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrar"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "So"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Silenci"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Ubicació"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "No es pot incrementar més la brillantor a causa d'un sobreescalfament del telèfon"
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Rotació\nauto"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Sense servei"
+
+msgid "IDS_ST_SK_OK"
+msgstr "Acceptar"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "No es pot obrir %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "AJUSTAMENTS NOTIF"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ESBORRAR TOT"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Desbloquejar la pantalla per veure el contingut"
+
diff --git a/res/po/cs.po b/res/po/cs.po
new file mode 100755 (executable)
index 0000000..71b2eb3
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi a mobilní přístupový bod nelze aktivovat současně. Chcete deaktivovat mobilní přístupový bod?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Pouze tísňová volání"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Smazat vše"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Oznámení"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrace"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Zvuk"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Ztlumit"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Umístění"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Nelze více zvýšit jas z důvodu přehřívání telefonu."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Autom.\notočení"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Žádné služby"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "%s nelze spustit."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "NAST. UPOZORNĚNÍ"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "SMAZAT VŠE"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Odemkněte obrazovku, abyste zobrazili obsah"
+
diff --git a/res/po/da.po b/res/po/da.po
new file mode 100755 (executable)
index 0000000..b3faafe
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Både Wi-Fi og mobilt adgangspunkt kan ikke være aktiveret på samme tid. Deaktiver mobilt adgangspunkt?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Kun nødopkald"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Ryd alle"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Besked"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrer"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Lyd"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Lydløs"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Placer."
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Det er ikke muligt at øge lysstyrken yderligere, fordi telefonen kan overophedes."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Auto-\nroter"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Ingen dækning"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Kunne ikke åbne: %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "MEDD.INDSTILL."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "RYD ALT"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Lås skærmen op for at se indhold"
+
diff --git a/res/po/de.po b/res/po/de.po
new file mode 100755 (executable)
index 0000000..dbc9b06
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "WLAN und Mobile AP können nicht zur gleichen Zeit aktiviert werden. Mobile AP deaktivieren?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Nur Notrufe"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Löschen"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Benachr."
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrieren"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Ton"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Stumm"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "GPS"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Helligkeit kann wegen Überhitzen des Geräts nicht weiter angehoben werden"
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "WLAN"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Bildschirm\ndrehen"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Kein Netz"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "%s kann nicht geöffnet werden."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "BENACHR.-EINSTELL."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ALLES LÖSCHEN"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Bildschirm entsperren, um den Inhalt anzuzeigen."
+
diff --git a/res/po/el_GR.po b/res/po/el_GR.po
new file mode 100755 (executable)
index 0000000..e353447
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Τόσο το Wi-Fi όσο και το AP για κινητά δεν μπορούν να ενεργοποιηθούν ταυτόχρονα. Απενεργοποίηση AP για κινητά;"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Μόνο κλήσεις έκτ. ανάγκης"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Διαγ. όλων"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Ειδοποίηση"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Δόνηση"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Ήχος"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Σίγαση"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Τοποθεσία"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Αδυναμία περαιτέρω αύξησης της φωτεινότητας λόγω υπερθέρμανσης της συσκευής."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Αυτόμ.\nπεριστρ."
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Μη διαθέσιμη υπηρεσία"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Δεν είναι δυνατό το άνοιγμα του %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "ΡΥΘΜΙΣΕΙΣ ΕΙΔΟΠ."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ΕΚΚΑΘΑΡΙΣΗ ΟΛΩΝ"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Ξεκλείδωμα οθόνης για την προβολή περιεχομένου"
+
diff --git a/res/po/en.po b/res/po/en.po
new file mode 100755 (executable)
index 0000000..54598b9
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Both Wi-Fi and mobile AP cannot be activated at the same time. Deactivate mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Emergency calls only"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Clear all"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notification"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrate"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Sound"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Mute"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Location"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Unable to increase brightness further because of phone overheating."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Auto\nrotate"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "No service"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Unable to open %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "NOTI. SETTINGS"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "CLEAR ALL"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Unlock screen to view content"
+
diff --git a/res/po/en_PH.po b/res/po/en_PH.po
new file mode 100755 (executable)
index 0000000..51fcd5a
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Both Wi-Fi and Mobile AP cannot be activated at the same time. Deactivate Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Emergency calls only"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Clear all"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notification"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrate"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Sound"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Mute"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Location"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Unable to increase brightness further because of phone overheating."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Auto\nrotate"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "No service"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Unable to open %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "NOTI. SETTINGS"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "CLEAR ALL"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Unlock screen to view content"
+
diff --git a/res/po/en_US.po b/res/po/en_US.po
new file mode 100755 (executable)
index 0000000..51fcd5a
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Both Wi-Fi and Mobile AP cannot be activated at the same time. Deactivate Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Emergency calls only"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Clear all"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notification"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrate"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Sound"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Mute"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Location"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Unable to increase brightness further because of phone overheating."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Auto\nrotate"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "No service"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Unable to open %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "NOTI. SETTINGS"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "CLEAR ALL"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Unlock screen to view content"
+
diff --git a/res/po/es_ES.po b/res/po/es_ES.po
new file mode 100755 (executable)
index 0000000..8ddc0cf
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Las conexiones Wi-Fi y Mobile AP no se pueden activar al mismo tiempo. ¿Desactivar Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Solo llamadas emergencia"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Elim todo"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notificac"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrar"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Sonido"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Silencio"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Ubicación"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "No se puede incrementar más el brillo debido a un sobrecalentamiento del teléfono"
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Giro\nauto"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Sin servicio"
+
+msgid "IDS_ST_SK_OK"
+msgstr "Aceptar"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "No se puede abrir %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "AJUSTES"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "BORRAR TODO"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Desbloquear la pantalla para ver el contenido"
+
diff --git a/res/po/es_US.po b/res/po/es_US.po
new file mode 100755 (executable)
index 0000000..34de05f
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Las conexiones Wi-Fi y Mobile AP no se pueden activar al mismo tiempo. ¿Desactivar Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Llamadas de emergencia"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Elim. todo"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notific."
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrar"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Sonido"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Silencio"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Ubica-\nción"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "No se puede aumentar más el brillo para evitar sobrecalentamiento del dispositivo."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Giro\nautom."
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Sin servicio"
+
+msgid "IDS_ST_SK_OK"
+msgstr "Aceptar"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "No se puede abrir %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "AJUSTES"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ELIMINAR TODO"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Desbloquear la pantalla para ver el contenido"
+
diff --git a/res/po/et.po b/res/po/et.po
new file mode 100755 (executable)
index 0000000..082d27e
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fit ja Mobile AP-d ei saa aktiveerida samaaegselt. Kas desaktiveerida Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Ainult hädaabikõned"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Kust. kõik"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Teavitus"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Värin"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Heli"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Vaigista"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Asukoht"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Ei ole võimalik heledust suurendada telefoni ülekuumenemise tõttu."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Autom.\npööram."
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Teenus puudub"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Rakendust %s ei saa avada."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "TEAVITUSE SEADED"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "KUSTUTA KÕIK"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Sisu kuvamiseks avage ekraan"
+
diff --git a/res/po/eu.po b/res/po/eu.po
new file mode 100755 (executable)
index 0000000..e8d952c
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi eta Mobile AP ezin dira aldi berean aktibatu. Desaktibatu Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Larrialdi deiak soilik"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Garb. dena"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Jakinaraz."
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Bibratu"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Soinua"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Mututu"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Kokapena"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Ezin da argitasuna areagotu, telefonoa gehiegi berotuko baita"
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Biratu\nautom."
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Zerbitzurik gabe"
+
+msgid "IDS_ST_SK_OK"
+msgstr "Ados"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Ezin da %s ireki."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "JAKINAR. EZARPENAK"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "GARBITU DENAK"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Desblokeatu pantaila edukia ikusteko"
+
diff --git a/res/po/fi.po b/res/po/fi.po
new file mode 100755 (executable)
index 0000000..0aa4e04
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fiä ja mobiilitukiasemaa ei voi ottaa käyttöön samaan aikaan. Haluatko poistaa mobiilitukiaseman käytöstä?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Vain hätäpuhelut"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Poista kaikki"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Ilmoitus"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Värinä"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Ääni"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Mykistä"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Sijainti"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Kirkkautta ei voi lisätä puhelimen ylikuumenemisen vuoksi."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Autom.\nkierto"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Ei palvelua"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Sovellusta %s ei voi avata."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "ILMOITUSASETUKSET"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "POISTA KAIKKI"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Poista näytön lukitus sisällön näyttämiseksi"
+
diff --git a/res/po/fr.po b/res/po/fr.po
new file mode 100755 (executable)
index 0000000..42d2d72
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Activation simultanée du Wi-Fi et du point d'accès mobile impossible. Désactiver le point d'accès mobile ?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Appels urgence uniquement"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Eff. tout"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notific."
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibreur"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Son"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Muet"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Position"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Impossible d'augmenter la luminosité en raison d'une surchauffe de l'appareil."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Rotation\nauto"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Aucun service"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Impossible d'ouvrir %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "PARAMÈTRES NOTIF."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "TOUT EFFACER"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Déverrouiller l’écran pour afficher le contenu"
+
diff --git a/res/po/fr_CA.po b/res/po/fr_CA.po
new file mode 100755 (executable)
index 0000000..283b5fa
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Activation simultanée de wifi et du point d'accès mobile impossible. Désactiver le point d'accès mobile ?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Appels urgence uniquement"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Eff. tout"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notific."
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibreur"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Son"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Muet"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Position"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Impossible d'augmenter la luminosité en raison d'une surchauffe de l'appareil."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wifi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Rotation\nauto"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Aucun service"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Impossible d'ouvrir %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "PARAMÈTRES NOTIF."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "TOUT EFFACER"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Déverrouiller l’écran pour afficher le contenu"
+
diff --git a/res/po/ga.po b/res/po/ga.po
new file mode 100755 (executable)
index 0000000..554492c
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Ní féidir Wi-Fi agus AP Móibíleach a chur i ngníomh ag an am céanna. Díghníomhachtaigh AP Móibíleach?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Glaonna éigeandála amháin"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Glan gach"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Fógra"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Crith"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Fuaim"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Balbhaigh"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Suíomh"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Ní féidir gile a mhéadú tuilleadh de bharr róthéimh."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Uath\nrothlú"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Níl seirbhís ann"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Ní féidir %s a oscailt."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "SOCRUITHE FÓGRAÍ"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "GLAN GACH"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Díghlasáil an scáileán le hamharc ar inneachar"
+
diff --git a/res/po/gl.po b/res/po/gl.po
new file mode 100755 (executable)
index 0000000..774838e
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "O Wi-Fi e AP Móbil non poden activarse ao mesmo tempo. Desactivar AP Móbil?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Só chamadas de urxencia"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Borr. todo"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notific."
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrar"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Son"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Silen-\nciar"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Localiz."
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Non se pode aumentar máis o brillo debido ao sobrequecemento do teléfono"
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Rotación\nauto."
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Sen servizo"
+
+msgid "IDS_ST_SK_OK"
+msgstr "Aceptar"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Non se pode abrir %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "AXUSTES NOTI."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "BORRAR TODO"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Desbloquear a pantalla para ver o contido"
+
diff --git a/res/po/hr.po b/res/po/hr.po
new file mode 100755 (executable)
index 0000000..8ee4d06
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Istodobno ne možete uključiti Wi-Fi i Mobile AP. Isključiti Mobilnu pristupnu točku?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Samo SOS pozivi"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Izbr. sve"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Obavijest"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrac."
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Zvuk"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Bešumno"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Lokacija"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Nemoguće daljnje pojačavanje svjetline jer bi se telefon mogao pregrijati."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Autom.\nzakreni"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Nema usluge"
+
+msgid "IDS_ST_SK_OK"
+msgstr "U redu"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Nemoguće otvoriti %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "POST. OBAVIJESTI"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "IZBRIŠI SVE"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Otključajte zaslon za prikaz sadržaja"
+
diff --git a/res/po/hu.po b/res/po/hu.po
new file mode 100755 (executable)
index 0000000..d5f68e1
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "A Wi-Fi és a Mobil AP-nem lehet egyszerre aktív. Kikapcsolja a Mobil AP-t?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Csak segélyhívás lehetséges."
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Ö. törlése"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Értesítés"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Rezgés"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Hang"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Némítás"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Hely"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "A fényerő nem növelhető tovább, a készülék túlmelegedésének elkerülése miatt."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Aut. el-\nforgatás"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Nincs szolgáltatás"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "A(z) %s nem nyitható meg."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "ÉRTESÍTÉSEK BEÁ."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ÖSSZES TÖRLÉSE"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "A tartalom megjelenítéséhez oldja fel a képernyőt"
+
diff --git a/res/po/hy.po b/res/po/hy.po
new file mode 100755 (executable)
index 0000000..e8953ba
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi-ն ու Mobile AP-ն չեն կարող միաժամանակ ակտիվացվել: Ապաակտիվացնե՞լ Mobile AP-ն:"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Միայն արտ. իրավիճ. զանգեր"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Մաքրել բլր"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Ծանուցում"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Թրթռալ"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Հնչյուն"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Խլացնել"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Տեղը"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Հնարավոր չէ ավելցնել հեռախոսի էկրանի պայծառությունը հեռախոսի գեր տաքանալու պատճառով:"
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Ինքնա-\nպտտում"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Ծառայություն չկա"
+
+msgid "IDS_ST_SK_OK"
+msgstr "Ընդունել"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Անհնար է բացել %s-ը:"
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "ԾԱՆՈՒՑ. ԴՐՎԱԾՔՆԵՐ"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ՄԱՔՐԵԼ ԲՈԼՈՐԸ"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Արգելաբացեք էկրանը՝ բովանդակությունը դիտելու համար"
+
diff --git a/res/po/is.po b/res/po/is.po
new file mode 100755 (executable)
index 0000000..a24dff1
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Það er ekki hægt að nota Wi-Fi og farsímaaðgangsstað á sama tíma. Viltu loka farsímaaðgangsstaðnum?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Aðeins neyðarsímtöl"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Hreinsa"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Tilkynning"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Titra"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Hljóð"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Hljóð-\nlaust"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Staður"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Ekki hægt að auka birtastigið meir vegna ofhitnunar í síma."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Sjálfv.\nsnún."
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Engin þjónusta"
+
+msgid "IDS_ST_SK_OK"
+msgstr "Í lagi"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Ekki er hægt að opna %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "TILK. STILLINGAR"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "HREINSA ALLT"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Opna skjá til að skoða efni"
+
diff --git a/res/po/it_IT.po b/res/po/it_IT.po
new file mode 100755 (executable)
index 0000000..d39f429
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Impossibile attivare contemporaneamente sia Wi-Fi che Router Wi-Fi. Disattivare Router Wi-Fi?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Solo emergenza"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Canc. tutto"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notifica"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibraz."
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Suono"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Silenz."
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Posizione"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Impossibile aumentare la luminosità a causa del surriscaldamento del dispositivo."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Rotazione\nauto"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Nessun servizio"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Impossibile aprire %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "IMPOSTAZ. NOTIFICA"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "CANCELLA TUTTO"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Sblocca schermo per visualizzare contenuti"
+
diff --git a/res/po/ja_JP.po b/res/po/ja_JP.po
new file mode 100755 (executable)
index 0000000..bde50d0
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-FiとWi-Fiテザリング両方は同時起動できません。Wi-Fiテザリングを無効にしますか?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "緊急通報のみ発信可能"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "全て消去"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "通知"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "バイブ"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "サウンド"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "消音"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "位置情報"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "端末が過熱しているため、これ以上明るさを上げることができません。"
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "自動回転"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "サービスが利用できません。"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "%sを起動できません。"
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "通知設定"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "全て消去"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "コンテンツを表示するには、画面のロックを解除してください"
+
diff --git a/res/po/ka.po b/res/po/ka.po
new file mode 100755 (executable)
index 0000000..ed4abc7
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi და Mobile AP ვერ გააქტიურდება ერთიდაიმავე დროს. გამოირთოს Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "მხოლოდ საგანგებო ზარები"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "წაშლა"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "შეტყობინება"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "ვიბრაცია"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "ხმა"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "უხმო"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "ლოკაცია"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "განათებულობას ვეღარ გაზრდით, ტელეფონის გადახურების საშიშროების გამო."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "ავტო\nბრუნვა"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "მომსახურება არ არის"
+
+msgid "IDS_ST_SK_OK"
+msgstr "კი"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "%s ვერ იხსნება."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "შეტყობინების პარ."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ყველას გასუფთავება"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "შინაარსის სანახავად, განბლოკეთ ეკრანი"
+
diff --git a/res/po/kk.po b/res/po/kk.po
new file mode 100755 (executable)
index 0000000..6210fb9
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi және Mobile AP екеуін де бір уақытта іске қосу мүмкін емес. Mobile AP мүмкіндігін өшіру керек пе?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Тек төтенше қоңыраулар"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Барл.өшіру"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Хабарландыру"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Діріл"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Дыбыс"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Дыбысты\nөшіру"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Орны"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Жарықтықты одан ары көбейту мүмкін емес, себебі телефон қызып кетті."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Авто\nбұру"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Қызмет жоқ"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "%s ашу мүмкін емес."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "ХАБАРЛ. ПАРАМЕТРІ"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "БАРЛЫҒЫН ТАЗАЛАУ"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Мазмұнды көру үшін экранның құлпын ашыңыз"
+
diff --git a/res/po/ko_KR.po b/res/po/ko_KR.po
new file mode 100755 (executable)
index 0000000..35e6ee3
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi와 모바일 AP를 동시에 실행할 수 없습니다. 모바일 AP를 해제할까요?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "긴급전화만 가능"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "모두 삭제"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "알림"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "진동"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "소리"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "무음"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "위치"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "디바이스 온도가 높아져 밝기를 더 높일 수 없습니다."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "블루투스"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "자동 회전"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "서비스 지역이 아닙니다"
+
+msgid "IDS_ST_SK_OK"
+msgstr "확인"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "%s 애플리케이션을 실행할 수 없습니다."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "알림 설정"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "모두 지우기"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "내용을 보려면 화면 잠금을 해제하세요"
+
diff --git a/res/po/lt.po b/res/po/lt.po
new file mode 100755 (executable)
index 0000000..803094a
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Tuo pat metu negalima suaktyvinti ir „Wi-Fi“, ir „Mobile AP“. Išjungti „Mobile AP“?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Tik pagalbos skambučiai"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Viską išv."
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Pranešimas"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibruoti"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Garsas"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Tildyti"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Vieta"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Neįmanoma padidinti šviesumo dėl telefono perkaitimo."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Autom.\npasukim."
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Paslauga neteikiama"
+
+msgid "IDS_ST_SK_OK"
+msgstr "Gerai"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Neįmanoma atidaryti %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "PRANEŠ. NUSTATYM."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "VALYTI VISKĄ"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Jei norite peržiūrėti turinį, atrakinkite ekraną"
+
diff --git a/res/po/lv.po b/res/po/lv.po
new file mode 100755 (executable)
index 0000000..df755d3
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Vienlaikus nevar aktivizēt Wi-Fi un Mobile AP. Vai deaktivizēt Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Tikai ārkārtas zvani"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Not. visu"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Paziņojums"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrēt"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Skaņa"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Izslēgt skaņu"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Lokācija"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Nav iespējams vairāk palielināt spilgtumu dēļ tālruņa pārkaršanas."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Autom.\npagriezt"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Nav pakalpojuma"
+
+msgid "IDS_ST_SK_OK"
+msgstr "Labi"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Nevar atvērt programmu %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "PAZIŅ. IESTAT."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "NOTĪRĪT VISU"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Lai skatītu saturu, atbloķējiet ekrānu"
+
diff --git a/res/po/mk.po b/res/po/mk.po
new file mode 100755 (executable)
index 0000000..1f50097
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Не може истовремено да се активни и Wi-Fi и мобилна пристапна точка. Да се исклучи мобилната пристапна точка?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Само итни повици"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Избриши сѐ"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Извест."
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Вибрации"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Звук"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Исклучи звук"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Локација"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Не може да се зголеми осветленоста повеќе поради прегревање на телефонот."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Автом.\nвртење"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Нема услуга"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Не може да се отвори %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "ПОСТАВУВАЊА ЗА ИЗВ."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ИЗБРИШИ ГИ СИТЕ"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Отклучете го екранот за да прегледувате содржина"
+
diff --git a/res/po/nb.po b/res/po/nb.po
new file mode 100755 (executable)
index 0000000..a6e84f3
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Både Wi-Fi og mobilt tilgangspunkt kan ikke aktiveres samtidig. Deaktivere mobilt tilgangspunkt?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Kun nødanrop"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Slett alt"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Varsel"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrer"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Lyd"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Demp"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Posisjon"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Kan ikke øke lysstyrken mer på grunn av at telefonen kan overopphetes."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Auto-\nrotasjon"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Nettverk mangler"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Kan ikke åpne %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "VARSELSINNSTILL."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "SLETT ALLE"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Lås opp skjermen for å vise innhold"
+
diff --git a/res/po/nl.po b/res/po/nl.po
new file mode 100755 (executable)
index 0000000..540162a
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi en mobiel access point kunnen niet tegelijkertijd zijn geactiveerd. Mobiel access point uitschakelen?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Alleen noodoproepen"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Alles wissen"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Melding"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Trillen"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Geluid"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Dempen"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Locatie"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Kan de helderheid niet verder verhogen, omdat de telefoon dan te warm wordt."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Autom.\ndraaien"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Geen netwerk"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Kan %s niet openen."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "MELDINGINSTELL."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ALLES WISSEN"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Scherm ontgrendelen voor weergeven inhoud"
+
diff --git a/res/po/pl.po b/res/po/pl.po
new file mode 100755 (executable)
index 0000000..57216b0
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Sieć Wi-Fi i Router Wi-Fi nie mogą być uruchomione jednocześnie. Wyłączyć Router Wi-Fi?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Tylko połączenia alarmowe"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Czysz.wsz."
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Powiadom."
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Wibracja"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Dźwięk"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Wycisz"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Lokalizacja"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Nie można zwiększyć jasności z uwagi na możliwość przegrzania urządzenia."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Obróć\nautom."
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Brak sieci"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Nie można otworzyć aplikacji %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "USTAWIEN. POWIAD."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "WYCZYŚĆ WSZYSTKO"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Odblokuj ekran, aby wyświetlić zawartość"
+
diff --git a/res/po/pt_BR.po b/res/po/pt_BR.po
new file mode 100755 (executable)
index 0000000..4c67eca
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Impossível utilizar Wi-Fi ou AllShare com o Roteador Wi-Fi simultaneamente. Desativar o Roteador Wi-Fi?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Apenas cham. emergência"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Apag. tudo"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notific."
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrar"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Som"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Silêncio"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Local"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Impossível aumentar mais o nível do brilho devido ao superaquecimento do telefone."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Rotação\nautom."
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Sem serviço"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Não é possível abrir %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "CONFIG. DE NOTIF."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "APAGAR TUDO"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Desbloquear tela para ver o conteúdo"
+
diff --git a/res/po/pt_PT.po b/res/po/pt_PT.po
new file mode 100755 (executable)
index 0000000..0167a36
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Impossível activar Wi-Fi e PA Móvel em simultâneo. Desactivar PA Móvel?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Só chamadas de emergência"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Limpar td"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notificaç"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrar"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Som"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Silen\nciar"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "GPS"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Impossível aumentar mais o brilho devido ao sobreaquecimento do telefone."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Rotação\nauto."
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Sem serviço"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Impossível abrir %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "DEF. NOTIFICAÇÕES"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "LIMPAR TUDO"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Desbloquear ecrã para ver conteúdos"
+
diff --git a/res/po/ro.po b/res/po/ro.po
new file mode 100755 (executable)
index 0000000..742c699
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi și PA mobil nu pot fi activate simultan. Dezactivați PA mobil?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Numai apeluri de urgență"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Șter. tot"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Notificare"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrații"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Sunet"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Silenț."
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Locație"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Imposibil de mărit luminozitatea deoarece telefonul este supraîncălzit"
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Rotire\nautomată"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Nici un serviciu"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "%s nu se poate deschide."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "SETĂRI NOTIFICARI"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ȘTERGERE TOTALĂ"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Deblocați ecranul pentru a vizualiza conținutul"
+
diff --git a/res/po/ru_RU.po b/res/po/ru_RU.po
new file mode 100755 (executable)
index 0000000..0c4aa6d
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Нельзя активировать одновременно Wi-Fi и Mobile AP. Отключить Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Только экстренные вызовы"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Очист. все"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Уведомление"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Вибрация"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Звук"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Откл.\nзвук"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Гео-\nданные"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Невозможно увеличить яркость из-за перегрева устройства."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Авто-\nповорот"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Нет сети"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Не удалось открыть %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "НАСТР. УВЕДОМЛ."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ОЧИСТИТЬ ВСЕ"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Для просмотра содержимого разблокируйте экран"
+
diff --git a/res/po/sk.po b/res/po/sk.po
new file mode 100755 (executable)
index 0000000..a461869
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi a mobilný prístupový bod sa nedajú aktivovať súčasne. Deaktivovať mobilný prístupový bod?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Iba tiesňové volania"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Vymaz. vš."
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Oznámenie"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrovať"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Zvuk"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Stíšiť"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "GPS"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Kvôli prehrievaniu zariadenia nemožno teraz ďalej zvyšovať jas displeja."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Rotácia\nobrazu"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Žiadna služba"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Súbor %s sa nedá otvoriť."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "NAST. OZNÁMENÍ"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "VYMAZAŤ VŠETKO"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Pred zobrazením obsahu odomknite obrazovku"
+
diff --git a/res/po/sl.po b/res/po/sl.po
new file mode 100755 (executable)
index 0000000..8492cfc
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi in mobilna DT ne moreta biti vklopljeni hkrati. Izklopim mobilno DT?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Samo klici v sili"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Počis. vse"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Obvestilo"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrir-\nanje"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Zvok"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Izklop zvoka"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Lokacija"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Svetlosti ni mogoče povečati zaradi morebitnega pregrevanja telefona."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Samodej.\nzavrti"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Ni storitve"
+
+msgid "IDS_ST_SK_OK"
+msgstr "V redu"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Aplikacije %s ni mogoče odpreti."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "NASTAV. OBVESTIL"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "POČISTI VSE"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Za prikaz vsebine odklenite zaslon"
+
diff --git a/res/po/sr.po b/res/po/sr.po
new file mode 100755 (executable)
index 0000000..14abc63
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi i mobilna pristupna tačka se ne mogu uključiti istovremeno. Isključi mobilnu pristupnu tačku?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Samo poz. u hit. slučaj."
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Obriši sve"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Obavešt."
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibra-\ncija"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Zvuk"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Isklju-\nčen ton"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Lokacija"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Nije moguće povećati osvetljenje, telefon se pregreva."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Autom.\nrotiraj"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Nema prijema"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Nije moguće otvoriti %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "PODEŠAV. OBAVEŠT."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "OBRIŠI SVE"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Otključajte ekran da biste prikazali sadržaj"
+
diff --git a/res/po/sv.po b/res/po/sv.po
new file mode 100755 (executable)
index 0000000..a715a78
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Det går inte att aktivera både Wi-Fi och Mobile AP samtidigt. Avaktivera Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Endast nödsamtal"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Rensa allt"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Meddelande"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibrera"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Ljud"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Tyst"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Plats"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Det går inte att öka ljusstyrkan mer på grund av risk för överhettning."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Auto-\nrotera"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Ej service"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Kan inte öppna %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "AVIS.INSTÄLLN."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "RENSA ALLT"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Lås upp skärmen om du vill se innehållet"
+
diff --git a/res/po/tr_TR.po b/res/po/tr_TR.po
new file mode 100755 (executable)
index 0000000..17056fe
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Hem Wi-Fi hem de Mobil AP aynı anda etkinleştirilemez. Mobil AP devre dışı bırakılsın mı?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Sadece acil aramalar"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Tümünü sil"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Bildirim"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Titreşim"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Ses"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Sessiz"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Konum"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Aşırı ısınmadan dolayı ekran parlaklığı arttırılamaz."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Oto.\ndöndür"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Servis yok"
+
+msgid "IDS_ST_SK_OK"
+msgstr "Tamam"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "%s açılamıyor."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "BİLD. AYARLARI"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "TÜMÜNÜ TEMİZLE"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "İçeriği görüntülemek için ekranın kilidini açın"
+
diff --git a/res/po/uk.po b/res/po/uk.po
new file mode 100755 (executable)
index 0000000..4e040cb
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Мережі Wi-Fi та Mobile AP не можна активувати одночасно. Вимкнути Mobile AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Лише екстрені виклики"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Очист. всі"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Сповіщення"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Вібрація"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Звук"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Вимкнути\nзвук"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Геодані"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Неможливо збільшувати яскравість далі через перегрів телефону."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Автообе-\nртання"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Немає мережі"
+
+msgid "IDS_ST_SK_OK"
+msgstr "ОК"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "Неможливо запустити програму %s."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "НАЛАШТ. ПОВІДОМЛ."
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "ВИДАЛИТИ ВСЕ"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Для перегляду вмісту розблокуйте екран"
+
diff --git a/res/po/uz.po b/res/po/uz.po
new file mode 100755 (executable)
index 0000000..0f9a6b0
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Bir vaqtning o‘zida Wi-Fi va Mobile APni faollashtirib bo‘lmaydi. Mobile AP o‘chirilsinmi?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "Faqat favqulodda qo‘ng‘ir"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "Bar. tozal"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "Bildir-noma"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "Vibra-\ntsiya"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "Ovoz"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "Ovozni\no‘chir"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "Joylashuv"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "Telefon qizib ketgani sababli yorqinlikni ko‘paytirib bo‘lmaydi."
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "Avto\naylantir"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "Xizmat yo‘q"
+
+msgid "IDS_ST_SK_OK"
+msgstr "OK"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "%sni ochib bo‘lmayapti."
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "BILD. PARAMETRLAR"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "BARINI TOZALASH"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "Tarkibni ko‘rish uchun ekranni blokdan chiqaring"
+
diff --git a/res/po/zh_CN.po b/res/po/zh_CN.po
new file mode 100755 (executable)
index 0000000..889fb1b
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi和移动接入无法同时启动。取消移动接入?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "仅限紧急呼叫"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "全部清除"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "通知"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "振动"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "声音"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "静音"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "位置"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "由于电话过热,无法再增加亮度。"
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "蓝牙"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "自动旋转"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "无服务"
+
+msgid "IDS_ST_SK_OK"
+msgstr "确定"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "无法打开%s"
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "通知设置"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "全部清除"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "解锁屏幕可查看内容"
+
diff --git a/res/po/zh_HK.po b/res/po/zh_HK.po
new file mode 100755 (executable)
index 0000000..8ccc82d
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi和Mobile AP不可同時啟動。關閉Mobile AP嗎?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "僅可撥打緊急電話"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "全部清除"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "通知"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "震動"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "聲音"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "靜音"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "位置"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "無法進一步提高亮度,因為手機過熱。"
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "藍牙"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "自動\n旋轉"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "無服務"
+
+msgid "IDS_ST_SK_OK"
+msgstr "確定"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "無法開啟%s。"
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "通知設定"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "全部清除"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "解鎖螢幕以檢視內容"
+
diff --git a/res/po/zh_TW.po b/res/po/zh_TW.po
new file mode 100755 (executable)
index 0000000..3766a99
--- /dev/null
@@ -0,0 +1,54 @@
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi - Fi和行動AP不能在同一時間被啟動。停用行動AP?"
+
+msgid "IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"
+msgstr "僅可撥打緊急電話"
+
+msgid "IDS_QP_HEADER_CLEAR_ALL_ABB"
+msgstr "全部清除"
+
+msgid "IDS_QP_BUTTON_NOTIFICATION"
+msgstr "通知"
+
+msgid "IDS_QP_BUTTON2_VIBRATE"
+msgstr "震動"
+
+msgid "IDS_QP_BUTTON2_SOUND_ABB"
+msgstr "音效"
+
+msgid "IDS_QP_BUTTON2_MUTE_ABB"
+msgstr "靜音"
+
+msgid "IDS_QP_BUTTON2_LOCATION_ABB"
+msgstr "位置"
+
+msgid "IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"
+msgstr "無法增加螢幕亮度,因為手機過熱。"
+
+msgid "IDS_ST_BUTTON2_WI_FI_ABB"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON2_BLUETOOTH_ABB"
+msgstr "藍牙"
+
+msgid "IDS_ST_BUTTON2_AUTO_NROTATE"
+msgstr "自動\n旋轉"
+
+msgid "IDS_COM_BODY_NO_SERVICE"
+msgstr "無服務"
+
+msgid "IDS_ST_SK_OK"
+msgstr "確定"
+
+msgid "IDS_QP_TPOP_UNABLE_TO_OPEN_PS"
+msgstr "無法開啟%s。"
+
+msgid "IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"
+msgstr "通知設定"
+
+msgid "IDS_LCKSCN_ACBUTTON_CLEAR_ALL"
+msgstr "全部清除"
+
+msgid "IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"
+msgstr "解鎖螢幕以檢視內容"
+
diff --git a/shared/res/noti_icons/Calendar/noti_calendar.png b/shared/res/noti_icons/Calendar/noti_calendar.png
new file mode 100755 (executable)
index 0000000..2eaf46b
Binary files /dev/null and b/shared/res/noti_icons/Calendar/noti_calendar.png differ
diff --git a/shared/res/noti_icons/Calendar/noti_calendar_02.png b/shared/res/noti_icons/Calendar/noti_calendar_02.png
new file mode 100755 (executable)
index 0000000..ed28a58
Binary files /dev/null and b/shared/res/noti_icons/Calendar/noti_calendar_02.png differ
diff --git a/shared/res/noti_icons/Calendar/noti_calendar_alarm.png b/shared/res/noti_icons/Calendar/noti_calendar_alarm.png
new file mode 100755 (executable)
index 0000000..8a7dc0e
Binary files /dev/null and b/shared/res/noti_icons/Calendar/noti_calendar_alarm.png differ
diff --git a/shared/res/noti_icons/Common/noti_download_01.png b/shared/res/noti_icons/Common/noti_download_01.png
new file mode 100755 (executable)
index 0000000..e370579
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_download_01.png differ
diff --git a/shared/res/noti_icons/Common/noti_download_02.png b/shared/res/noti_icons/Common/noti_download_02.png
new file mode 100755 (executable)
index 0000000..e173071
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_download_02.png differ
diff --git a/shared/res/noti_icons/Common/noti_download_03.png b/shared/res/noti_icons/Common/noti_download_03.png
new file mode 100755 (executable)
index 0000000..6656dbc
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_download_03.png differ
diff --git a/shared/res/noti_icons/Common/noti_download_04.png b/shared/res/noti_icons/Common/noti_download_04.png
new file mode 100755 (executable)
index 0000000..3d01fb6
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_download_04.png differ
diff --git a/shared/res/noti_icons/Common/noti_download_05.png b/shared/res/noti_icons/Common/noti_download_05.png
new file mode 100755 (executable)
index 0000000..1e8dbc5
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_download_05.png differ
diff --git a/shared/res/noti_icons/Common/noti_download_complete.png b/shared/res/noti_icons/Common/noti_download_complete.png
new file mode 100755 (executable)
index 0000000..01ebff2
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_download_complete.png differ
diff --git a/shared/res/noti_icons/Common/noti_download_failed.png b/shared/res/noti_icons/Common/noti_download_failed.png
new file mode 100755 (executable)
index 0000000..7bd7aa1
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_download_failed.png differ
diff --git a/shared/res/noti_icons/Common/noti_syncing.png b/shared/res/noti_icons/Common/noti_syncing.png
new file mode 100755 (executable)
index 0000000..a92bcbf
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_syncing.png differ
diff --git a/shared/res/noti_icons/Common/noti_upload_01.png b/shared/res/noti_icons/Common/noti_upload_01.png
new file mode 100755 (executable)
index 0000000..27f2b6d
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_upload_01.png differ
diff --git a/shared/res/noti_icons/Common/noti_upload_02.png b/shared/res/noti_icons/Common/noti_upload_02.png
new file mode 100755 (executable)
index 0000000..e8158d6
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_upload_02.png differ
diff --git a/shared/res/noti_icons/Common/noti_upload_03.png b/shared/res/noti_icons/Common/noti_upload_03.png
new file mode 100755 (executable)
index 0000000..6aa83ea
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_upload_03.png differ
diff --git a/shared/res/noti_icons/Common/noti_upload_04.png b/shared/res/noti_icons/Common/noti_upload_04.png
new file mode 100755 (executable)
index 0000000..31ee45b
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_upload_04.png differ
diff --git a/shared/res/noti_icons/Common/noti_upload_05.png b/shared/res/noti_icons/Common/noti_upload_05.png
new file mode 100755 (executable)
index 0000000..6c42da9
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_upload_05.png differ
diff --git a/shared/res/noti_icons/Common/noti_upload_complete.png b/shared/res/noti_icons/Common/noti_upload_complete.png
new file mode 100755 (executable)
index 0000000..40c26f0
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_upload_complete.png differ
diff --git a/shared/res/noti_icons/Common/noti_upload_failed.png b/shared/res/noti_icons/Common/noti_upload_failed.png
new file mode 100755 (executable)
index 0000000..250743f
Binary files /dev/null and b/shared/res/noti_icons/Common/noti_upload_failed.png differ
diff --git a/shared/res/noti_icons/Contact/noti_contact_default.png b/shared/res/noti_icons/Contact/noti_contact_default.png
new file mode 100755 (executable)
index 0000000..43146b0
Binary files /dev/null and b/shared/res/noti_icons/Contact/noti_contact_default.png differ
diff --git a/shared/res/noti_icons/Contact/noti_icon_missed.png b/shared/res/noti_icons/Contact/noti_icon_missed.png
new file mode 100755 (executable)
index 0000000..f9510ac
Binary files /dev/null and b/shared/res/noti_icons/Contact/noti_icon_missed.png differ
diff --git a/shared/res/noti_icons/E-mail/noti_email.png b/shared/res/noti_icons/E-mail/noti_email.png
new file mode 100755 (executable)
index 0000000..7a96621
Binary files /dev/null and b/shared/res/noti_icons/E-mail/noti_email.png differ
diff --git a/shared/res/noti_icons/E-mail/noti_email_delivery_report.png b/shared/res/noti_icons/E-mail/noti_email_delivery_report.png
new file mode 100755 (executable)
index 0000000..1d2f2f0
Binary files /dev/null and b/shared/res/noti_icons/E-mail/noti_email_delivery_report.png differ
diff --git a/shared/res/noti_icons/E-mail/noti_email_read_report.png b/shared/res/noti_icons/E-mail/noti_email_read_report.png
new file mode 100755 (executable)
index 0000000..fd3f5a7
Binary files /dev/null and b/shared/res/noti_icons/E-mail/noti_email_read_report.png differ
diff --git a/shared/res/noti_icons/E-mail/noti_email_scheduled.png b/shared/res/noti_icons/E-mail/noti_email_scheduled.png
new file mode 100755 (executable)
index 0000000..1e5d34f
Binary files /dev/null and b/shared/res/noti_icons/E-mail/noti_email_scheduled.png differ
diff --git a/shared/res/noti_icons/E-mail/noti_email_sent.png b/shared/res/noti_icons/E-mail/noti_email_sent.png
new file mode 100755 (executable)
index 0000000..17baecd
Binary files /dev/null and b/shared/res/noti_icons/E-mail/noti_email_sent.png differ
diff --git a/shared/res/noti_icons/Etc/noti_accessory_connected.png b/shared/res/noti_icons/Etc/noti_accessory_connected.png
new file mode 100755 (executable)
index 0000000..b4bcc77
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_accessory_connected.png differ
diff --git a/shared/res/noti_icons/Etc/noti_all_connected.png b/shared/res/noti_icons/Etc/noti_all_connected.png
new file mode 100755 (executable)
index 0000000..62eefa7
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_all_connected.png differ
diff --git a/shared/res/noti_icons/Etc/noti_auto_rejected.png b/shared/res/noti_icons/Etc/noti_auto_rejected.png
new file mode 100755 (executable)
index 0000000..8468bd6
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_auto_rejected.png differ
diff --git a/shared/res/noti_icons/Etc/noti_backup.png b/shared/res/noti_icons/Etc/noti_backup.png
new file mode 100755 (executable)
index 0000000..dc86198
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_backup.png differ
diff --git a/shared/res/noti_icons/Etc/noti_camera_connected.png b/shared/res/noti_icons/Etc/noti_camera_connected.png
new file mode 100755 (executable)
index 0000000..212e75f
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_camera_connected.png differ
diff --git a/shared/res/noti_icons/Etc/noti_chat.png b/shared/res/noti_icons/Etc/noti_chat.png
new file mode 100755 (executable)
index 0000000..ad1182a
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_chat.png differ
diff --git a/shared/res/noti_icons/Etc/noti_data_usage_warning.png b/shared/res/noti_icons/Etc/noti_data_usage_warning.png
new file mode 100755 (executable)
index 0000000..1df6ce4
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_data_usage_warning.png differ
diff --git a/shared/res/noti_icons/Etc/noti_desktop_mode.png b/shared/res/noti_icons/Etc/noti_desktop_mode.png
new file mode 100755 (executable)
index 0000000..7134b5a
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_desktop_mode.png differ
diff --git a/shared/res/noti_icons/Etc/noti_dormant_mode.png b/shared/res/noti_icons/Etc/noti_dormant_mode.png
new file mode 100755 (executable)
index 0000000..95c7253
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_dormant_mode.png differ
diff --git a/shared/res/noti_icons/Etc/noti_download_booster.png b/shared/res/noti_icons/Etc/noti_download_booster.png
new file mode 100755 (executable)
index 0000000..2e4e6cd
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_download_booster.png differ
diff --git a/shared/res/noti_icons/Etc/noti_ecb_mode.png b/shared/res/noti_icons/Etc/noti_ecb_mode.png
new file mode 100755 (executable)
index 0000000..644bed7
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_ecb_mode.png differ
diff --git a/shared/res/noti_icons/Etc/noti_error.png b/shared/res/noti_icons/Etc/noti_error.png
new file mode 100755 (executable)
index 0000000..36ad3f4
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_error.png differ
diff --git a/shared/res/noti_icons/Etc/noti_firewall_activated.png b/shared/res/noti_icons/Etc/noti_firewall_activated.png
new file mode 100755 (executable)
index 0000000..96ffb42
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_firewall_activated.png differ
diff --git a/shared/res/noti_icons/Etc/noti_fm_radio.png b/shared/res/noti_icons/Etc/noti_fm_radio.png
new file mode 100755 (executable)
index 0000000..2ae5950
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_fm_radio.png differ
diff --git a/shared/res/noti_icons/Etc/noti_gqs_on.png b/shared/res/noti_icons/Etc/noti_gqs_on.png
new file mode 100755 (executable)
index 0000000..554b456
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_gqs_on.png differ
diff --git a/shared/res/noti_icons/Etc/noti_gqs_searching.png b/shared/res/noti_icons/Etc/noti_gqs_searching.png
new file mode 100755 (executable)
index 0000000..f0e845f
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_gqs_searching.png differ
diff --git a/shared/res/noti_icons/Etc/noti_im.png b/shared/res/noti_icons/Etc/noti_im.png
new file mode 100755 (executable)
index 0000000..f3e892c
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_im.png differ
diff --git a/shared/res/noti_icons/Etc/noti_keyboard.png b/shared/res/noti_icons/Etc/noti_keyboard.png
new file mode 100755 (executable)
index 0000000..419e8a5
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_keyboard.png differ
diff --git a/shared/res/noti_icons/Etc/noti_keyboard_connected.png b/shared/res/noti_icons/Etc/noti_keyboard_connected.png
new file mode 100755 (executable)
index 0000000..8e737dc
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_keyboard_connected.png differ
diff --git a/shared/res/noti_icons/Etc/noti_mms_delivery_report.png b/shared/res/noti_icons/Etc/noti_mms_delivery_report.png
new file mode 100755 (executable)
index 0000000..fc7d371
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_mms_delivery_report.png differ
diff --git a/shared/res/noti_icons/Etc/noti_multiple_devices_connected.png b/shared/res/noti_icons/Etc/noti_multiple_devices_connected.png
new file mode 100755 (executable)
index 0000000..048bcb8
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_multiple_devices_connected.png differ
diff --git a/shared/res/noti_icons/Etc/noti_near_by_device.png b/shared/res/noti_icons/Etc/noti_near_by_device.png
new file mode 100755 (executable)
index 0000000..0623f0c
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_near_by_device.png differ
diff --git a/shared/res/noti_icons/Etc/noti_no_sim_full.png b/shared/res/noti_icons/Etc/noti_no_sim_full.png
new file mode 100755 (executable)
index 0000000..1ee3d1a
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_no_sim_full.png differ
diff --git a/shared/res/noti_icons/Etc/noti_print.png b/shared/res/noti_icons/Etc/noti_print.png
new file mode 100755 (executable)
index 0000000..87a0c9d
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_print.png differ
diff --git a/shared/res/noti_icons/Etc/noti_print_waiting.png b/shared/res/noti_icons/Etc/noti_print_waiting.png
new file mode 100755 (executable)
index 0000000..5353a9d
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_print_waiting.png differ
diff --git a/shared/res/noti_icons/Etc/noti_rcs_chat.png b/shared/res/noti_icons/Etc/noti_rcs_chat.png
new file mode 100755 (executable)
index 0000000..428eca0
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_rcs_chat.png differ
diff --git a/shared/res/noti_icons/Etc/noti_rcs_file_transfer.png b/shared/res/noti_icons/Etc/noti_rcs_file_transfer.png
new file mode 100755 (executable)
index 0000000..b3d6a3b
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_rcs_file_transfer.png differ
diff --git a/shared/res/noti_icons/Etc/noti_safe_mode.png b/shared/res/noti_icons/Etc/noti_safe_mode.png
new file mode 100755 (executable)
index 0000000..55b22b1
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_safe_mode.png differ
diff --git a/shared/res/noti_icons/Etc/noti_screen_recorder.png b/shared/res/noti_icons/Etc/noti_screen_recorder.png
new file mode 100755 (executable)
index 0000000..fdf4744
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_screen_recorder.png differ
diff --git a/shared/res/noti_icons/Etc/noti_screen_recorder_dim.png b/shared/res/noti_icons/Etc/noti_screen_recorder_dim.png
new file mode 100755 (executable)
index 0000000..4101603
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_screen_recorder_dim.png differ
diff --git a/shared/res/noti_icons/Etc/noti_side_sync.png b/shared/res/noti_icons/Etc/noti_side_sync.png
new file mode 100755 (executable)
index 0000000..7dac8ea
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_side_sync.png differ
diff --git a/shared/res/noti_icons/Etc/noti_sim_toolkit.png b/shared/res/noti_icons/Etc/noti_sim_toolkit.png
new file mode 100755 (executable)
index 0000000..81eefcc
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_sim_toolkit.png differ
diff --git a/shared/res/noti_icons/Etc/noti_smart_stay.png b/shared/res/noti_icons/Etc/noti_smart_stay.png
new file mode 100755 (executable)
index 0000000..3d8ce53
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_smart_stay.png differ
diff --git a/shared/res/noti_icons/Etc/noti_smemo_sync.png b/shared/res/noti_icons/Etc/noti_smemo_sync.png
new file mode 100755 (executable)
index 0000000..1cba67c
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_smemo_sync.png differ
diff --git a/shared/res/noti_icons/Etc/noti_spen.png b/shared/res/noti_icons/Etc/noti_spen.png
new file mode 100755 (executable)
index 0000000..a170cfe
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_spen.png differ
diff --git a/shared/res/noti_icons/Etc/noti_sync_error.png b/shared/res/noti_icons/Etc/noti_sync_error.png
new file mode 100755 (executable)
index 0000000..f82fc82
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_sync_error.png differ
diff --git a/shared/res/noti_icons/Etc/noti_tethering_usb_fail.png b/shared/res/noti_icons/Etc/noti_tethering_usb_fail.png
new file mode 100755 (executable)
index 0000000..98a0e4e
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_tethering_usb_fail.png differ
diff --git a/shared/res/noti_icons/Etc/noti_tty_mode.png b/shared/res/noti_icons/Etc/noti_tty_mode.png
new file mode 100755 (executable)
index 0000000..970a2b0
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_tty_mode.png differ
diff --git a/shared/res/noti_icons/Etc/noti_tv.png b/shared/res/noti_icons/Etc/noti_tv.png
new file mode 100755 (executable)
index 0000000..25fc6b4
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_tv.png differ
diff --git a/shared/res/noti_icons/Etc/noti_updated_complete.png b/shared/res/noti_icons/Etc/noti_updated_complete.png
new file mode 100755 (executable)
index 0000000..a92bcbf
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_updated_complete.png differ
diff --git a/shared/res/noti_icons/Etc/noti_updated_failed.png b/shared/res/noti_icons/Etc/noti_updated_failed.png
new file mode 100755 (executable)
index 0000000..7bce48b
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_updated_failed.png differ
diff --git a/shared/res/noti_icons/Etc/noti_usb_connected.png b/shared/res/noti_icons/Etc/noti_usb_connected.png
new file mode 100755 (executable)
index 0000000..33aa93a
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_usb_connected.png differ
diff --git a/shared/res/noti_icons/Etc/noti_usb_mass_storage_connected.png b/shared/res/noti_icons/Etc/noti_usb_mass_storage_connected.png
new file mode 100755 (executable)
index 0000000..14a668b
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_usb_mass_storage_connected.png differ
diff --git a/shared/res/noti_icons/Etc/noti_video.png b/shared/res/noti_icons/Etc/noti_video.png
new file mode 100755 (executable)
index 0000000..22da97b
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_video.png differ
diff --git a/shared/res/noti_icons/Etc/noti_voice_mail.png b/shared/res/noti_icons/Etc/noti_voice_mail.png
new file mode 100755 (executable)
index 0000000..8cc0545
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_voice_mail.png differ
diff --git a/shared/res/noti_icons/Etc/noti_voice_mail_01.png b/shared/res/noti_icons/Etc/noti_voice_mail_01.png
new file mode 100755 (executable)
index 0000000..cd3bb93
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_voice_mail_01.png differ
diff --git a/shared/res/noti_icons/Etc/noti_voice_mail_02.png b/shared/res/noti_icons/Etc/noti_voice_mail_02.png
new file mode 100755 (executable)
index 0000000..3ba4ab9
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_voice_mail_02.png differ
diff --git a/shared/res/noti_icons/Etc/noti_voice_mail_03.png b/shared/res/noti_icons/Etc/noti_voice_mail_03.png
new file mode 100755 (executable)
index 0000000..a135607
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_voice_mail_03.png differ
diff --git a/shared/res/noti_icons/Etc/noti_voice_memo.png b/shared/res/noti_icons/Etc/noti_voice_memo.png
new file mode 100755 (executable)
index 0000000..865a29d
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_voice_memo.png differ
diff --git a/shared/res/noti_icons/Etc/noti_voice_recorder_paused.png b/shared/res/noti_icons/Etc/noti_voice_recorder_paused.png
new file mode 100755 (executable)
index 0000000..843b904
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_voice_recorder_paused.png differ
diff --git a/shared/res/noti_icons/Etc/noti_voice_recorder_play.png b/shared/res/noti_icons/Etc/noti_voice_recorder_play.png
new file mode 100755 (executable)
index 0000000..0555306
Binary files /dev/null and b/shared/res/noti_icons/Etc/noti_voice_recorder_play.png differ
diff --git a/shared/res/noti_icons/Lock screen/noti_message.png b/shared/res/noti_icons/Lock screen/noti_message.png
new file mode 100755 (executable)
index 0000000..5c91dde
Binary files /dev/null and b/shared/res/noti_icons/Lock screen/noti_message.png differ
diff --git a/shared/res/noti_icons/Lock screen/noti_missed_call.png b/shared/res/noti_icons/Lock screen/noti_missed_call.png
new file mode 100755 (executable)
index 0000000..52d0e11
Binary files /dev/null and b/shared/res/noti_icons/Lock screen/noti_missed_call.png differ
diff --git a/shared/res/noti_icons/Low battery&charge/noti_battery_charge.png b/shared/res/noti_icons/Low battery&charge/noti_battery_charge.png
new file mode 100755 (executable)
index 0000000..9f18f1d
Binary files /dev/null and b/shared/res/noti_icons/Low battery&charge/noti_battery_charge.png differ
diff --git a/shared/res/noti_icons/Low battery&charge/noti_battery_fully_charging.png b/shared/res/noti_icons/Low battery&charge/noti_battery_fully_charging.png
new file mode 100755 (executable)
index 0000000..00d4598
Binary files /dev/null and b/shared/res/noti_icons/Low battery&charge/noti_battery_fully_charging.png differ
diff --git a/shared/res/noti_icons/Low battery&charge/noti_battery_loading.png b/shared/res/noti_icons/Low battery&charge/noti_battery_loading.png
new file mode 100755 (executable)
index 0000000..c6b59e9
Binary files /dev/null and b/shared/res/noti_icons/Low battery&charge/noti_battery_loading.png differ
diff --git a/shared/res/noti_icons/Low battery&charge/noti_charging_battery_low.png b/shared/res/noti_icons/Low battery&charge/noti_charging_battery_low.png
new file mode 100755 (executable)
index 0000000..e41fc9c
Binary files /dev/null and b/shared/res/noti_icons/Low battery&charge/noti_charging_battery_low.png differ
diff --git a/shared/res/noti_icons/Low battery&charge/noti_charging_cable_disconnected.png b/shared/res/noti_icons/Low battery&charge/noti_charging_cable_disconnected.png
new file mode 100755 (executable)
index 0000000..e7f84e4
Binary files /dev/null and b/shared/res/noti_icons/Low battery&charge/noti_charging_cable_disconnected.png differ
diff --git a/shared/res/noti_icons/Message/noti_message.png b/shared/res/noti_icons/Message/noti_message.png
new file mode 100755 (executable)
index 0000000..5c91dde
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message.png differ
diff --git a/shared/res/noti_icons/Message/noti_message_OTA.png b/shared/res/noti_icons/Message/noti_message_OTA.png
new file mode 100755 (executable)
index 0000000..669e748
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message_OTA.png differ
diff --git a/shared/res/noti_icons/Message/noti_message_cb-msg.png b/shared/res/noti_icons/Message/noti_message_cb-msg.png
new file mode 100755 (executable)
index 0000000..0f9578a
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message_cb-msg.png differ
diff --git a/shared/res/noti_icons/Message/noti_message_delivery_report.png b/shared/res/noti_icons/Message/noti_message_delivery_report.png
new file mode 100755 (executable)
index 0000000..287a3d3
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message_delivery_report.png differ
diff --git a/shared/res/noti_icons/Message/noti_message_failed.png b/shared/res/noti_icons/Message/noti_message_failed.png
new file mode 100755 (executable)
index 0000000..77446c9
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message_failed.png differ
diff --git a/shared/res/noti_icons/Message/noti_message_mms_failed.png b/shared/res/noti_icons/Message/noti_message_mms_failed.png
new file mode 100755 (executable)
index 0000000..f1cd03a
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message_mms_failed.png differ
diff --git a/shared/res/noti_icons/Message/noti_message_mms_problem.png b/shared/res/noti_icons/Message/noti_message_mms_problem.png
new file mode 100755 (executable)
index 0000000..b36508a
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message_mms_problem.png differ
diff --git a/shared/res/noti_icons/Message/noti_message_read_report.png b/shared/res/noti_icons/Message/noti_message_read_report.png
new file mode 100755 (executable)
index 0000000..203b7ac
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message_read_report.png differ
diff --git a/shared/res/noti_icons/Message/noti_message_reply.png b/shared/res/noti_icons/Message/noti_message_reply.png
new file mode 100755 (executable)
index 0000000..4aa4e26
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message_reply.png differ
diff --git a/shared/res/noti_icons/Message/noti_message_scheduled.png b/shared/res/noti_icons/Message/noti_message_scheduled.png
new file mode 100755 (executable)
index 0000000..d643cc1
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message_scheduled.png differ
diff --git a/shared/res/noti_icons/Message/noti_message_sending.png b/shared/res/noti_icons/Message/noti_message_sending.png
new file mode 100755 (executable)
index 0000000..777b2d6
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message_sending.png differ
diff --git a/shared/res/noti_icons/Message/noti_message_sim-card.png b/shared/res/noti_icons/Message/noti_message_sim-card.png
new file mode 100755 (executable)
index 0000000..3029d40
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_message_sim-card.png differ
diff --git a/shared/res/noti_icons/Message/noti_mms.png b/shared/res/noti_icons/Message/noti_mms.png
new file mode 100755 (executable)
index 0000000..e0f4ee4
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_mms.png differ
diff --git a/shared/res/noti_icons/Message/noti_voice_mail.png b/shared/res/noti_icons/Message/noti_voice_mail.png
new file mode 100755 (executable)
index 0000000..f0ff321
Binary files /dev/null and b/shared/res/noti_icons/Message/noti_voice_mail.png differ
diff --git a/shared/res/noti_icons/Multi SIM/noti_no_sim.png b/shared/res/noti_icons/Multi SIM/noti_no_sim.png
new file mode 100755 (executable)
index 0000000..af21c3e
Binary files /dev/null and b/shared/res/noti_icons/Multi SIM/noti_no_sim.png differ
diff --git a/shared/res/noti_icons/Multi SIM/noti_sim_full.png b/shared/res/noti_icons/Multi SIM/noti_sim_full.png
new file mode 100755 (executable)
index 0000000..e53ce18
Binary files /dev/null and b/shared/res/noti_icons/Multi SIM/noti_sim_full.png differ
diff --git a/shared/res/noti_icons/Private mode/noti_private_mode.png b/shared/res/noti_icons/Private mode/noti_private_mode.png
new file mode 100755 (executable)
index 0000000..942c353
Binary files /dev/null and b/shared/res/noti_icons/Private mode/noti_private_mode.png differ
diff --git a/shared/res/noti_icons/Tethering/Icon_tethering_unknown_usb_fail.png b/shared/res/noti_icons/Tethering/Icon_tethering_unknown_usb_fail.png
new file mode 100755 (executable)
index 0000000..7e962b4
Binary files /dev/null and b/shared/res/noti_icons/Tethering/Icon_tethering_unknown_usb_fail.png differ
diff --git a/shared/res/noti_icons/Tethering/noti_tethering.png b/shared/res/noti_icons/Tethering/noti_tethering.png
new file mode 100755 (executable)
index 0000000..8813357
Binary files /dev/null and b/shared/res/noti_icons/Tethering/noti_tethering.png differ
diff --git a/shared/res/noti_icons/Tethering/noti_tethering_all.png b/shared/res/noti_icons/Tethering/noti_tethering_all.png
new file mode 100755 (executable)
index 0000000..ceb0e24
Binary files /dev/null and b/shared/res/noti_icons/Tethering/noti_tethering_all.png differ
diff --git a/shared/res/noti_icons/Tethering/noti_tethering_bt.png b/shared/res/noti_icons/Tethering/noti_tethering_bt.png
new file mode 100755 (executable)
index 0000000..d1a9dc0
Binary files /dev/null and b/shared/res/noti_icons/Tethering/noti_tethering_bt.png differ
diff --git a/shared/res/noti_icons/Tethering/noti_tethering_usb.png b/shared/res/noti_icons/Tethering/noti_tethering_usb.png
new file mode 100755 (executable)
index 0000000..842e304
Binary files /dev/null and b/shared/res/noti_icons/Tethering/noti_tethering_usb.png differ
diff --git a/shared/res/noti_icons/Tethering/noti_tethering_usb_fail.png b/shared/res/noti_icons/Tethering/noti_tethering_usb_fail.png
new file mode 100755 (executable)
index 0000000..c514b76
Binary files /dev/null and b/shared/res/noti_icons/Tethering/noti_tethering_usb_fail.png differ
diff --git a/shared/res/noti_icons/Tethering/noti_tethering_wifi.png b/shared/res/noti_icons/Tethering/noti_tethering_wifi.png
new file mode 100755 (executable)
index 0000000..13adb3b
Binary files /dev/null and b/shared/res/noti_icons/Tethering/noti_tethering_wifi.png differ
diff --git a/shared/res/noti_icons/Tizen store/noti_tizen_store.png b/shared/res/noti_icons/Tizen store/noti_tizen_store.png
new file mode 100755 (executable)
index 0000000..4fae55e
Binary files /dev/null and b/shared/res/noti_icons/Tizen store/noti_tizen_store.png differ
diff --git a/shared/res/noti_icons/USB/noti_usb_connected.png b/shared/res/noti_icons/USB/noti_usb_connected.png
new file mode 100755 (executable)
index 0000000..79bcd5f
Binary files /dev/null and b/shared/res/noti_icons/USB/noti_usb_connected.png differ
diff --git a/shared/res/noti_icons/USB/noti_usb_fail.png b/shared/res/noti_icons/USB/noti_usb_fail.png
new file mode 100755 (executable)
index 0000000..5f826ec
Binary files /dev/null and b/shared/res/noti_icons/USB/noti_usb_fail.png differ
diff --git a/shared/res/noti_icons/USB/noti_usb_mass_storage_connected.png b/shared/res/noti_icons/USB/noti_usb_mass_storage_connected.png
new file mode 100755 (executable)
index 0000000..bf28dba
Binary files /dev/null and b/shared/res/noti_icons/USB/noti_usb_mass_storage_connected.png differ
diff --git a/shared/res/noti_icons/USB/noti_usb_otg_connected.png b/shared/res/noti_icons/USB/noti_usb_otg_connected.png
new file mode 100755 (executable)
index 0000000..33aa93a
Binary files /dev/null and b/shared/res/noti_icons/USB/noti_usb_otg_connected.png differ
diff --git a/shared/res/noti_icons/USB/noti_usb_otg_power_fail.png b/shared/res/noti_icons/USB/noti_usb_otg_power_fail.png
new file mode 100755 (executable)
index 0000000..3c2e279
Binary files /dev/null and b/shared/res/noti_icons/USB/noti_usb_otg_power_fail.png differ
diff --git a/shared/res/noti_icons/USB/noti_usb_otg_unknown_fail.png b/shared/res/noti_icons/USB/noti_usb_otg_unknown_fail.png
new file mode 100755 (executable)
index 0000000..98a0e4e
Binary files /dev/null and b/shared/res/noti_icons/USB/noti_usb_otg_unknown_fail.png differ
diff --git a/shared/res/noti_icons/USB/noti_usb_pc_connected.png b/shared/res/noti_icons/USB/noti_usb_pc_connected.png
new file mode 100755 (executable)
index 0000000..33aa93a
Binary files /dev/null and b/shared/res/noti_icons/USB/noti_usb_pc_connected.png differ
diff --git a/shared/res/noti_icons/USB/noti_usb_unknown_fail.png b/shared/res/noti_icons/USB/noti_usb_unknown_fail.png
new file mode 100755 (executable)
index 0000000..b028092
Binary files /dev/null and b/shared/res/noti_icons/USB/noti_usb_unknown_fail.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wifi.png b/shared/res/noti_icons/Wi-Fi/noti_wifi.png
new file mode 100755 (executable)
index 0000000..230096a
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wifi.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wifi_available_networks.png b/shared/res/noti_icons/Wi-Fi/noti_wifi_available_networks.png
new file mode 100755 (executable)
index 0000000..25314fd
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wifi_available_networks.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wifi_availablility_check1.png b/shared/res/noti_icons/Wi-Fi/noti_wifi_availablility_check1.png
new file mode 100755 (executable)
index 0000000..ed7787a
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wifi_availablility_check1.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wifi_direct.png b/shared/res/noti_icons/Wi-Fi/noti_wifi_direct.png
new file mode 100755 (executable)
index 0000000..ab9e1ae
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wifi_direct.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wifi_direct_auto_off.png b/shared/res/noti_icons/Wi-Fi/noti_wifi_direct_auto_off.png
new file mode 100755 (executable)
index 0000000..0c6c242
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wifi_direct_auto_off.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wifi_in_range.png b/shared/res/noti_icons/Wi-Fi/noti_wifi_in_range.png
new file mode 100755 (executable)
index 0000000..4100dbb
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wifi_in_range.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wifi_network_available.png b/shared/res/noti_icons/Wi-Fi/noti_wifi_network_available.png
new file mode 100755 (executable)
index 0000000..2dd9a40
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wifi_network_available.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wifi_no_detected.png b/shared/res/noti_icons/Wi-Fi/noti_wifi_no_detected.png
new file mode 100755 (executable)
index 0000000..a977e60
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wifi_no_detected.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wifi_no_sign.png b/shared/res/noti_icons/Wi-Fi/noti_wifi_no_sign.png
new file mode 100755 (executable)
index 0000000..b5138c1
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wifi_no_sign.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wifi_on.png b/shared/res/noti_icons/Wi-Fi/noti_wifi_on.png
new file mode 100755 (executable)
index 0000000..6e95d8f
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wifi_on.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wifi_translate.png b/shared/res/noti_icons/Wi-Fi/noti_wifi_translate.png
new file mode 100755 (executable)
index 0000000..d03769d
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wifi_translate.png differ
diff --git a/shared/res/noti_icons/Wi-Fi/noti_wiif_off.png b/shared/res/noti_icons/Wi-Fi/noti_wiif_off.png
new file mode 100755 (executable)
index 0000000..fd4b791
Binary files /dev/null and b/shared/res/noti_icons/Wi-Fi/noti_wiif_off.png differ
diff --git a/shared/res/noti_icons/messages_btn_send.png b/shared/res/noti_icons/messages_btn_send.png
new file mode 100755 (executable)
index 0000000..7d70cc0
Binary files /dev/null and b/shared/res/noti_icons/messages_btn_send.png differ
diff --git a/shared/res/noti_icons/quickpanel_icon_default.png b/shared/res/noti_icons/quickpanel_icon_default.png
new file mode 100755 (executable)
index 0000000..9765b1b
Binary files /dev/null and b/shared/res/noti_icons/quickpanel_icon_default.png differ
diff --git a/shared/res/quickpanel.png b/shared/res/quickpanel.png
new file mode 100755 (executable)
index 0000000..9765b1b
Binary files /dev/null and b/shared/res/quickpanel.png differ
diff --git a/src/accessibility.c b/src/accessibility.c
new file mode 100755 (executable)
index 0000000..b1a0fdb
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "quickpanel-ui.h"
+#include "accessibility.h"
+
+HAPI Evas_Object *quickpanel_accessibility_screen_reader_object_get(void *obj, screen_reader_object_type_e type, const char *part, Evas_Object *parent)
+{
+       Evas_Object *to = NULL;
+       Evas_Object *ao = NULL;
+
+       retif(obj == NULL, NULL, "invalid parameter");
+       retif(type == SCREEN_READER_OBJ_TYPE_EDJ_OBJECT && !part, NULL, "invalid parameter");
+
+       switch (type) {
+       case SCREEN_READER_OBJ_TYPE_ELM_OBJECT:
+               if (part != NULL) {
+                       to = (Evas_Object *)elm_object_part_content_get(obj, part);
+                       ao = (Evas_Object *)to;
+               } else {
+                       ao = (Evas_Object *)obj;
+               }
+               break;
+
+       case SCREEN_READER_OBJ_TYPE_EDJ_OBJECT:
+               to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get((Evas_Object *)obj), part);
+               break;
+
+       default:// evas, icon
+               to = (Evas_Object *)obj;
+       }
+
+       if (!ao && to && parent) {              // edj, evas, icon, elm_object_item
+               ao = elm_access_object_get(to);
+               if (ao == NULL)
+                       ao = elm_access_object_register(to, parent);
+
+       }
+
+       return ao;
+}
+
+HAPI Evas_Object *quickpanel_accessibility_ui_get_focus_object(Evas_Object *parent)
+{
+       Evas_Object *focus = elm_button_add(parent);
+       retif(focus == NULL, NULL, "failed to create focus object");
+
+       elm_object_style_set(focus, "focus");
+
+       elm_access_info_set(focus, ELM_ACCESS_INFO, "");
+       elm_access_info_set(focus, ELM_ACCESS_TYPE, "");
+
+       return focus;
+}
+
+HAPI char *quickpanel_accessibility_info_cb(void *data, Evas_Object *obj)
+{
+       char *str = NULL;
+       retif(data == NULL, NULL, "invalid parameter");
+
+       str = _((const char *)data);
+       if (str != NULL)
+               return strdup(str);
+
+
+       return NULL;
+}
+
+HAPI char *quickpanel_accessibility_info_cb_s(void *data, Evas_Object *obj)
+{
+       char *str = NULL;
+       retif(data == NULL, NULL, "invalid parameter");
+
+       /**
+        * @note
+        * system string is not supported.
+        * data should be DID from application po files.
+        */
+       str = _(data);
+       if (str != NULL)
+               return strdup(str);
+
+
+       return NULL;
+}
+
+HAPI void quickpanel_accessibility_screen_reader_data_set(Evas_Object *view, const char *part, char *type, char *info)
+{
+       Evas_Object *ao = NULL;
+       retif(view == NULL, , "invalid parameter");
+       retif(part == NULL, , "invalid parameter");
+
+       ao = quickpanel_accessibility_screen_reader_object_get(view,
+                       SCREEN_READER_OBJ_TYPE_ELM_OBJECT, part, view);
+       if (ao != NULL) {
+               elm_access_info_set(ao, ELM_ACCESS_TYPE, type);
+               elm_access_info_set(ao, ELM_ACCESS_INFO, info);
+       }
+}
+
diff --git a/src/common.c b/src/common.c
new file mode 100755 (executable)
index 0000000..85e9460
--- /dev/null
@@ -0,0 +1,586 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <sys/stat.h>
+
+
+#include <Elementary.h>
+#include <app_manager.h>
+#include <package_manager.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <app_common.h>
+#include <app_control.h>
+#include <app_control_internal.h>
+#include <bundle_internal.h>
+#include <notification.h>
+
+#include "common.h"
+
+#include "quickpanel-ui.h"
+
+static inline int _is_space(char in)
+{
+       if (in == _SPACE)
+               return 1;
+       else
+               return 0;
+
+}
+
+static inline int _l_trim(char *in)
+{
+       int i, j;
+       short int done;
+
+       i = 0;
+       done = 0;
+
+       while (!done && in[i] != '\0') {
+               if (_is_space(in[i]))
+                       i++;
+               else
+                       done = 1;
+
+       }
+
+       j = 0;
+       while (in[i] != '\0')
+               in[j++] = in[i++];
+
+
+       in[j] = '\0';
+
+       return 0;
+}
+
+static inline int _r_trim(char *in)
+{
+       int i;
+       short int done;
+
+       i = strlen(in) - 1;
+       done = 0;
+
+       while (!done && !(i < 0)) {
+               if (_is_space(in[i]))
+                       in[i--] = '\0';
+               else
+                       done = 1;
+
+       }
+
+       return(0);
+}
+
+HAPI void quickpanel_common_util_char_trim(char *text)
+{
+       retif(text == NULL, , "invalid argument");
+
+       _l_trim(text);
+       _r_trim(text);
+}
+
+HAPI void quickpanel_common_util_char_replace(char *text, char s, char t)
+{
+       retif(text == NULL, , "invalid argument");
+
+       int i = 0, text_len = 0;
+
+       text_len = strlen(text);
+
+       for (i = 0; i < text_len; i++) {
+               if (*(text + i) == s)
+                       *(text + i) = t;
+
+       }
+}
+
+HAPI void quickpanel_common_util_add_char_to_each_charactor(char *dst, const char *src, char t)
+{
+       retif(dst == NULL, , "invalid argument");
+       retif(src == NULL, , "invalid argument");
+
+       int i = 0, text_len = 0;
+
+       text_len = strlen(src);
+
+       for (i = 0; i < text_len; i++) {
+               *(dst + (i * 2)) = *(src + i);
+               *(dst + ((i * 2) + 1)) = t;
+       }
+}
+
+static void _char_set(char *dst, char s, int index, int size)
+{
+       if (index < size)
+               *(dst + index) = s;
+
+}
+
+HAPI void quickpanel_common_util_phone_number_tts_make(char *dst, const char *src, int size)
+{
+       retif(dst == NULL, , "invalid argument");
+       retif(src == NULL, , "invalid argument");
+
+       int no_op = 0;
+       int i = 0, j = 0, text_len = 0;
+
+       text_len = strlen(src);
+
+       for (i = 0, j = 0; i < text_len; i++) {
+               if (no_op == 1) {
+                       _char_set(dst, *(src + i), j++, size);
+               } else {
+                       if (isdigit(*(src + i))) {
+                               if (i + 1 < text_len) {
+                                       if (*(src + i + 1) == '-' || *(src + i + 1) == _SPACE) {
+                                               _char_set(dst, *(src + i), j++, size);
+                                       } else {
+                                               _char_set(dst, *(src + i), j++, size);
+                                               _char_set(dst, _SPACE, j++, size);
+                                       }
+                               } else {
+                                       _char_set(dst, *(src + i), j++, size);
+                                       _char_set(dst, _SPACE, j++, size);
+                               }
+                       } else if (*(src + i) == '-') {
+                               no_op = 1;
+                               _char_set(dst, *(src + i), j++, size);
+                       } else {
+                               _char_set(dst, *(src + i), j++, size);
+                       }
+               }
+       }
+}
+
+HAPI int quickpanel_common_util_is_phone_number(const char *address)
+{
+       int digit_count = 0;
+       retif(address == NULL, 0, "address is NULL");
+
+       int addr_len = 0;
+       addr_len = strlen(address);
+
+       if (addr_len == 0)
+               return 0;
+
+
+       /*  length check phone address should be longer than 2 and shorter than 40 */
+       if (addr_len > 2 && addr_len <= QP_UTIL_PHONE_NUMBER_MAX_LEN) {
+               const char *pszOneChar = address;
+
+               while (*pszOneChar) {
+                       if (isdigit(*pszOneChar))
+                               digit_count++;
+
+
+                       ++pszOneChar;
+               }
+
+               pszOneChar = address;
+
+               if (*pszOneChar == '+')
+                       ++pszOneChar;
+
+
+               while (*pszOneChar) {
+                       if (!isdigit(*pszOneChar)
+                                       && (*pszOneChar != '*') && (*pszOneChar != '#')
+                                       && (*pszOneChar != ' ')
+                                       && !((*pszOneChar == '-') && digit_count >= 7)) {
+                               return 0;
+                       }
+
+                       ++pszOneChar;
+               }
+
+               return 1;
+       } else {
+               DBG("invalid address length [%d]", addr_len);
+               return 0;
+       }
+}
+
+static void _current_popup_default_backkey_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup = data;
+       retif(popup == NULL, , "invalid argument");
+
+       if (popup != NULL) {
+               evas_object_del(popup);
+               popup = NULL;
+       }
+}
+
+static void _current_popup_deleted_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       retif(obj == NULL, , "obj is NULL");
+
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid argument");
+
+       if (ad->popup == obj)
+               ad->popup = NULL;
+       else
+               ERR("popup is created over the popup");
+
+}
+
+HAPI void quickpanel_common_ui_set_current_popup(Evas_Object *popup, Evas_Smart_Cb func_back)
+{
+       retif(popup == NULL, , "invalid argument");
+
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid argument");
+
+       ad->popup = popup;
+       evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _current_popup_deleted_cb, NULL);
+
+       if (func_back != NULL)
+               evas_object_data_set(popup, EDATA_BACKKEY_CB, func_back);
+       else
+               evas_object_data_set(popup, EDATA_BACKKEY_CB, _current_popup_default_backkey_cb);
+
+}
+
+HAPI void quickpanel_common_ui_del_current_popup(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid argument");
+
+       if (ad->popup != NULL) {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+}
+
+HAPI void *quickpanel_common_ui_get_buffer_from_image(const char *file_path, size_t *memfile_size, char *ext, int ext_size)
+{
+       FILE *fp = NULL;
+       void *buffer = NULL;
+       char *buf_ext = NULL;
+
+       retif(file_path == NULL, NULL, "invalid data");
+
+       if (ext != NULL) {
+               buf_ext = ecore_file_strip_ext(file_path);
+               if (buf_ext != NULL) {
+                       strncpy(ext, buf_ext, ext_size);
+                       free(buf_ext);
+               }
+       }
+
+       fp = fopen(file_path, "r");
+       if (fp) {
+               struct stat stat_buf;
+               if (stat(file_path, &stat_buf) != 0) {
+                       ERR("Getting file information Error");
+                       goto err;
+               }
+
+               if (stat_buf.st_size > 0) {
+                       buffer = (void *)calloc(1, (size_t)stat_buf.st_size + 1);
+                       if (buffer == NULL) {
+                               ERR("failed to alloc a buffer");
+                               goto err;
+                       }
+                       int result = fread(buffer, sizeof(char), stat_buf.st_size, fp);
+                       if (result != stat_buf.st_size) {
+                               ERR("failed to read a file");
+                               free(buffer);
+                               buffer = NULL;
+                               goto err;
+                       }
+
+                       if (memfile_size != NULL)
+                               *memfile_size = result;
+
+               } else {
+                       if (memfile_size != NULL)
+                               *memfile_size = 0;
+
+               }
+       }
+
+err:
+       if (fp)
+               fclose(fp);
+
+       return buffer;
+}
+
+HAPI char *quickpanel_common_ui_get_appinfo_icon(const char *pkgid)
+{
+       int ret = 0;
+       char *icon_path = NULL;
+       app_info_h app_info;
+
+       retif(pkgid == NULL, NULL, "Invalid parameter!");
+
+       ret = app_info_create(pkgid, &app_info);
+       if (ret != APP_MANAGER_ERROR_NONE) {
+               ERR("app_info_create for %s failed %d", pkgid, ret);
+               return NULL;
+       }
+
+       ret = app_info_get_icon(app_info, &icon_path);
+       if (ret != APP_MANAGER_ERROR_NONE) {
+               app_info_destroy(app_info);
+               ERR("app_info_get_icon is failed %d", ret);
+               return NULL;
+       }
+
+       if (icon_path != NULL && strlen(icon_path) > 0)
+               return icon_path;
+
+       app_info_destroy(app_info);
+
+       return NULL;
+}
+
+HAPI char *quickpanel_common_ui_get_pkginfo_icon(const char *pkgid)
+{
+       int ret = 0;
+       char *icon_path = NULL;
+       char *icon_ret = NULL;
+       package_info_h package_info = NULL;
+
+       ret = package_manager_get_package_info(pkgid, &package_info);
+       if (ret != PACKAGE_MANAGER_ERROR_NONE) {
+               ERR("package_manager_get_package_info is failed id : %s %d", pkgid, ret);
+               return NULL;
+       }
+
+       ret = package_info_get_icon(package_info, &icon_path);
+       if (ret != PACKAGE_MANAGER_ERROR_NONE) {
+               ERR("package_info_get_icon is failed %d", ret);
+               return NULL;
+       }
+
+       if (icon_path != NULL && strlen(icon_path) > 0)
+               icon_ret = (char*)strdup(icon_path);
+
+
+       package_info_destroy(package_info);
+
+       return icon_ret;
+}
+
+HAPI char *quickpanel_common_ui_get_pkginfo_label(const char *pkgid)
+{
+       int ret = 0;
+       char *label = NULL;
+       char *label_ret = NULL;
+       package_info_h package_info = NULL;
+
+       ret = package_manager_get_package_info(pkgid, &package_info);
+       if (ret != PACKAGE_MANAGER_ERROR_NONE) {
+               ERR("package_manager_get_package_info is failed %d", ret);
+               return NULL;
+       }
+
+       ret = package_info_get_label(package_info, &label);
+       if (ret != PACKAGE_MANAGER_ERROR_NONE) {
+               ERR("package_info_get_label is failed %d", ret);
+               return NULL;
+       }
+
+       if (label)
+               label_ret = (char*)strdup(label);
+
+
+       package_info_destroy(package_info);
+
+       return label_ret;
+
+}
+
+static void _quickpanel_move_data_to_service(const char *key, const char *val, void *data)
+{
+       retif(data == NULL || key == NULL || val == NULL, , "Invialid parameter!");
+
+       app_control_h service = data;
+       app_control_add_extra_data(service, key, val);
+}
+
+HAPI void quickpanel_common_inform_launch_app_result(const char *pkgname, int retcode)
+{
+       retif(retcode == APP_CONTROL_ERROR_NONE, , "retcode = APP_CONTROL_ERROR_NONE!");
+       retif(pkgname == NULL && retcode != APP_CONTROL_ERROR_APP_NOT_FOUND, , "Invialid parameter!");
+
+       const char *msg = NULL;
+       char *app_label = NULL;
+
+       if (retcode == APP_CONTROL_ERROR_APP_NOT_FOUND) {
+               notification_status_message_post(_NOT_LOCALIZED("Unable to find application to perform this action."));
+       } else {
+               Eina_Strbuf *strbuf = eina_strbuf_new();
+               char *format = _("IDS_QP_TPOP_UNABLE_TO_OPEN_PS");
+
+               if (strbuf != NULL) {
+                       app_label = quickpanel_common_ui_get_pkginfo_label(pkgname);
+                       if (app_label != NULL) {
+                               eina_strbuf_append_printf(strbuf, format, app_label);
+                               free(app_label);
+                       } else {
+                               eina_strbuf_append_printf(strbuf, format, pkgname);
+                       }
+                       eina_strbuf_append_printf(strbuf, "(%x)", retcode);
+                       msg = eina_strbuf_string_get(strbuf);
+
+                       if (msg != NULL)
+                               notification_status_message_post(msg);
+
+                       eina_strbuf_free(strbuf);
+               }
+       }
+}
+
+HAPI int quickpanel_common_send_message_to_app(const char *app_id, const char *operation, const char *key, const char *value)
+{
+       int ret = APP_CONTROL_ERROR_NONE;
+       app_control_h service = NULL;
+
+       retif(app_id == NULL && operation == NULL, APP_CONTROL_ERROR_INVALID_PARAMETER, "Invialid parameter!");
+
+       ret = app_control_create(&service);
+       if (ret != APP_CONTROL_ERROR_NONE || service == NULL) {
+               ERR("app_control_create() return error : %d", ret);
+               return ret;
+       }
+
+       if (app_id != NULL)
+               app_control_set_app_id(service, app_id);
+       else
+               DBG("Implicit app_control, %s", operation ? operation : "-");
+
+
+       if (operation != NULL)
+               app_control_set_operation(service, operation);
+       else
+               app_control_set_operation(service, APP_CONTROL_OPERATION_DEFAULT);
+
+
+       if (key != NULL && value != NULL)
+               app_control_add_extra_data(service, key, value);
+
+
+       ret = app_control_send_launch_request(service, NULL, NULL);
+       if (ret != APP_CONTROL_ERROR_NONE)
+               ERR("app_control_send_launch_request() is failed : %d", ret);
+
+
+       app_control_destroy(service);
+
+       return ret;
+}
+
+HAPI int quickpanel_common_launch_app(char *app_id, void *data)
+{
+       int ret = APP_CONTROL_ERROR_NONE;
+       app_control_h service = NULL;
+       char *app_id_from_service = NULL;
+
+       retif(app_id == NULL && data == NULL, APP_CONTROL_ERROR_INVALID_PARAMETER, "Invialid parameter!");
+
+       ret = app_control_create(&service);
+       if (ret != APP_CONTROL_ERROR_NONE || service == NULL) {
+               ERR("app_control_create() return error : %d", ret);
+               return ret;
+       }
+
+       if (app_id != NULL) {
+               app_control_set_operation(service, APP_CONTROL_OPERATION_DEFAULT);
+               app_control_set_app_id(service, app_id);
+
+               if (data != NULL)
+                       bundle_iterate((bundle *)data, _quickpanel_move_data_to_service, service);
+
+       } else {
+               if (data != NULL) {
+                       ret = app_control_import_from_bundle(service, (bundle *)data);
+                       if (ret != APP_CONTROL_ERROR_NONE)
+                               ERR("Failed to import[%d]", ret);
+
+               }
+       }
+
+       ret = app_control_send_launch_request(service, NULL, NULL);
+       if (ret != APP_CONTROL_ERROR_NONE) {
+               ERR("app_control_send_launch_request() is failed : %d", ret);
+               app_control_get_app_id(service, &app_id_from_service);
+               if (app_id_from_service != NULL) {
+                       quickpanel_common_inform_launch_app_result(app_id_from_service, ret);
+                       free(app_id_from_service);
+               } else {
+                       quickpanel_common_inform_launch_app_result(app_id, ret);
+               }
+               app_control_destroy(service);
+               return ret;
+       }
+       app_control_destroy(service);
+       return ret;
+}
+
+const char *util_get_file_path(enum app_subdir dir, const char *relative)
+{
+       static char buf[PATH_MAX];
+       char *prefix = NULL;
+
+       switch (dir) {
+       case APP_DIR_DATA:
+               prefix = app_get_data_path();
+               break;
+       case APP_DIR_CACHE:
+               prefix = app_get_cache_path();
+               break;
+       case APP_DIR_RESOURCE:
+               prefix = app_get_resource_path();
+               break;
+       case APP_DIR_SHARED_DATA:
+               prefix = app_get_shared_data_path();
+               break;
+       case APP_DIR_SHARED_RESOURCE:
+               prefix = app_get_shared_resource_path();
+               break;
+       case APP_DIR_SHARED_TRUSTED:
+               prefix = app_get_shared_trusted_path();
+               break;
+       case APP_DIR_EXTERNAL_DATA:
+               prefix = app_get_external_data_path();
+               break;
+       case APP_DIR_EXTERNAL_CACHE:
+               prefix = app_get_external_cache_path();
+               break;
+       default:
+               DBG("Not handled directory type.");
+               return NULL;
+       }
+
+       if (prefix != NULL) {
+               size_t res = eina_file_path_join(buf, sizeof(buf), prefix, relative);
+               snprintf(buf, sizeof(buf), "%s%s", prefix, relative);
+               free(prefix);
+
+               if (res > sizeof(buf)) {
+                       ERR("Path exceeded PATH_MAX\n");
+                       return NULL;
+               }
+       }
+       return &buf[0];
+}
diff --git a/src/common_uic.c b/src/common_uic.c
new file mode 100755 (executable)
index 0000000..43ef541
--- /dev/null
@@ -0,0 +1,217 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <sys/utsname.h>
+#include <Ecore_Input.h>
+
+#include <app.h>
+#include <vconf.h>
+#include <appcore-common.h>
+#include <notification.h>
+#include <app_control_internal.h>
+#include <system_info.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "quickpanel-ui.h"
+#include "common_uic.h"
+
+
+/* binary information */
+#define QP_EMUL_STR            "Emulator"
+#define DEL_TIMER_VALUE        0.480
+#define SYSTEM_INFO_KEY_MODEL "http://tizen.org/system/model_name"
+static Ecore_Timer *_close_timer = NULL;
+
+
+
+HAPI Evas_Object *quickpanel_uic_load_edj(Evas_Object * parent, const char *file, const char *group, int is_just_load)
+{
+       Eina_Bool r;
+       Evas_Object *eo = NULL;
+
+       retif(parent == NULL, NULL, "Invalid parameter!");
+
+       eo = elm_layout_add(parent);
+       retif(eo == NULL, NULL, "Failed to add layout object!");
+
+       r = elm_layout_file_set(eo, file, group);
+       retif(r != EINA_TRUE, NULL, "Failed to set edje object file[%s-%s]!", file, group);
+
+       evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       if (is_just_load == 1)
+               elm_win_resize_object_add(parent, eo);
+
+
+       evas_object_show(eo);
+
+       return eo;
+}
+
+HAPI int quickpanel_uic_is_opened(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, 0, "invalid data.");
+
+       return ad->is_opened;
+}
+
+HAPI int quickpanel_uic_is_suspended(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, 0, "invalid data.");
+
+       return ad->is_suspended;
+}
+
+HAPI int quickpanel_uic_is_emul(void)
+{
+       int is_emul = 0;
+       char *info = NULL;
+
+       if (system_info_get_platform_string(SYSTEM_INFO_KEY_MODEL, &info) == 0) {
+               if (info == NULL)
+                       return 0;
+
+
+               if (!strncmp(QP_EMUL_STR, info, strlen(info)))
+                       is_emul = 1;
+
+       }
+
+       free(info);
+
+       return is_emul;
+}
+
+HAPI void quickpanel_uic_initial_resize(Evas_Object *obj, int height)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid data.");
+
+       height = (height % 2 != 0) ? height + 1 : height;
+
+       if (ad->angle == 90 || ad->angle == 270)
+               evas_object_resize(obj, ad->win_height, height * ad->scale);
+       else
+               evas_object_resize(obj, ad->win_width, height * ad->scale);
+
+}
+
+HAPI void quickpanel_uic_open_quickpanel(int reason)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+
+       DBG("reason:%d", reason);
+
+       retif(ad == NULL, , "Invalid parameter!");
+       retif(ad->win == NULL, , "Invalid parameter!");
+
+       ERR("Not yet implemented");
+
+}
+
+HAPI void quickpanel_uic_opened_reason_set(int reason)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "Invalid parameter!");
+
+       ad->opening_reason = reason;
+}
+
+HAPI int quickpanel_uic_opened_reason_get(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, OPENED_NO_REASON, "Invalid parameter!");
+
+       return ad->opening_reason;
+}
+
+static void _quickpanel_close(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+
+       DBG("");
+
+       if (!ad || !ad->win) {
+               ERR("Invalid parameter");
+               return;
+       }
+
+       int ret = 0;
+       ret = tzsh_quickpanel_service_hide(ad->quickpanel_service);
+       if (ret != 0)
+               ERR("failed tzsh_quickpanel_service_hide");
+
+
+       ret = appcore_flush_memory();
+       if (ret != 0)
+               ERR("failed appcore_flush_memory");
+
+
+}
+
+static Eina_Bool _quickpanel_close_timer_cb(void *data)
+{
+       if (_close_timer != NULL)
+               _close_timer = NULL;
+
+
+       _quickpanel_close();
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+HAPI void quickpanel_uic_close_quickpanel(bool is_check_lock, int is_delay_needed)
+{
+       int ret = 0;
+       int is_lock_launched = VCONFKEY_IDLE_UNLOCK;
+
+       if (is_check_lock == true) {
+               if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &is_lock_launched) == 0) {
+                       if (is_lock_launched == VCONFKEY_IDLE_LOCK) {
+                               ret = vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK);
+                               if (ret == 0)
+                                       ERR("unlock the lockscreen from quickpanel");
+                               else
+                                       ERR("failed to unlock the lockscreen from quickpanel");
+
+                       }
+               }
+       }
+
+       if (is_delay_needed) {
+               if (_close_timer == NULL)
+                       _close_timer = ecore_timer_add(DEL_TIMER_VALUE, _quickpanel_close_timer_cb, NULL);
+
+
+       } else {
+               _quickpanel_close();
+       }
+}
+
+HAPI void quickpanel_uic_toggle_openning_quickpanel(void)
+{
+       /* TO DO */
+}
+
+
diff --git a/src/datetime/datetime.c b/src/datetime/datetime.c
new file mode 100755 (executable)
index 0000000..4f7cd21
--- /dev/null
@@ -0,0 +1,362 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <glib.h>
+#include <string.h>
+#include <Elementary.h>
+
+#include <app.h>
+#include <vconf.h>
+#include <notification.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <sound_manager.h>
+
+#include "common.h"
+#include "common_uic.h"
+#include "quickpanel-ui.h"
+#include "list_util.h"
+#include "quickpanel_def.h"
+#include "modules.h"
+#include "util-time.h"
+#include "media.h"
+
+#include "accessibility.h"
+
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+#include "emergency_mode.h"
+#endif
+
+static int _init(void *data);
+static int _fini(void *data);
+
+#define PKG_SETTING_EDIT "quickpanel-setting-efl"
+#define QP_TIMEDATE_SETTING_UG "org.tizen.setting-time"
+#define E_DATA_EDITING_VISIBILITT "editing_visible"
+#define E_DATA_TIME_N_DATE_EVENT       "time_n_date_event"
+
+QP_Module qp_datetime_view = {
+       .name = "qp_datetime_view",
+       .init = _init,
+       .fini = _fini,
+       .suspend = NULL,
+       .resume = NULL,
+       .lang_changed = NULL,
+       .refresh = NULL,
+};
+
+static Evas_Object *_datetime_view_get(void);
+
+static void _flag_set(Evas_Object *container, const char *key, int value)
+{
+       retif(container == NULL, , "invalid parameter");
+       retif(key == NULL, , "invalid parameter");
+
+       evas_object_data_set(container, key, (void *)(long)(value));
+}
+
+static int _flag_get(Evas_Object *container, const char *key)
+{
+       retif(container == NULL, 0, "invalid parameter");
+       retif(key == NULL, 0, "invalid parameter");
+
+       return (int)(long)evas_object_data_get(container, key);
+}
+
+static void _set_text_to_part(Evas_Object *obj, const char *part, const char *text)
+{
+       const char *old_text = NULL;
+
+       retif(obj == NULL, , "Invalid parameter!");
+       retif(part == NULL, , "Invalid parameter!");
+       retif(text == NULL, , "Invalid parameter!");
+
+       old_text = elm_object_part_text_get(obj, part);
+       if (old_text != NULL) {
+               if (strcmp(old_text, text) == 0)
+                       return;
+
+       }
+
+       elm_object_part_text_set(obj, part, text);
+}
+
+static void _text_time_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *view = _datetime_view_get();
+       int ret;
+
+       if (view) {
+               if (_flag_get(view, E_DATA_TIME_N_DATE_EVENT) == 0) {
+                       DBG("Time & date area click is event disabled");
+                       return;
+               }
+       }
+
+       quickpanel_media_play_feedback();
+
+       ret = quickpanel_common_send_message_to_app(QP_TIMEDATE_SETTING_UG, NULL, NULL, NULL);
+       quickpanel_common_inform_launch_app_result(QP_TIMEDATE_SETTING_UG, ret);
+
+       quickpanel_uic_close_quickpanel(true, 1);
+}
+
+#ifdef QP_SCREENREADER_ENABLE
+static void _button_setting_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       quickpanel_media_play_feedback();
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+       if (quickpanel_emergency_mode_is_on())
+               quickpanel_common_launch_app(PACKAGE_EMERGENCY_MODE_SETTING, NULL);
+       else
+               quickpanel_common_launch_app(QP_SETTING_PKG_SETTING, NULL);
+#else
+       quickpanel_common_launch_app(QP_SETTING_PKG_SETTING, NULL);
+#endif
+       quickpanel_uic_close_quickpanel(true, 1);
+}
+#endif
+
+static Evas_Object *_datetime_view_create(Evas_Object *parent)
+{
+       Evas_Object *focus = NULL;
+       Eina_Bool ret = EINA_TRUE;
+       Evas_Object *view = NULL;
+
+       retif(parent == NULL, NULL, "Invalid parameter!");
+
+       view = elm_layout_add(parent);
+
+       if (view != NULL) {
+               ret = elm_layout_file_set(view, util_get_res_file_path(DEFAULT_EDJ),
+                               "quickpanel/datetime");
+               if (ret == EINA_FALSE)
+                       ERR("failed to load quickpanel/datetime layout");
+
+
+               evas_object_size_hint_weight_set(view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(view, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               quickpanel_uic_initial_resize(view, QP_DATE_H);
+#ifdef QP_SCREENREADER_ENABLE
+               focus = quickpanel_accessibility_ui_get_focus_object(view);
+               elm_object_part_content_set(view, "focus.datetime", focus);
+               evas_object_smart_callback_add(focus, "clicked", _text_time_clicked_cb, view);
+
+               focus = quickpanel_accessibility_ui_get_focus_object(view);
+               elm_object_part_content_set(view, "focus.setting", focus);
+               evas_object_smart_callback_add(focus, "clicked", _button_setting_clicked_cb, view);
+
+               _flag_set(view, E_DATA_EDITING_VISIBILITT, 0);
+#endif
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+               if (quickpanel_emergency_mode_is_on()) {
+                       _flag_set(view, E_DATA_TIME_N_DATE_EVENT, 0);
+                       elm_object_signal_emit(view, "timendate.click.disable", "prog");
+               } else {
+#endif
+                       _flag_set(view, E_DATA_TIME_N_DATE_EVENT, 1);
+                       elm_object_signal_emit(view, "timendate.click.enable", "prog");
+#ifdef QP_EMERGENCY_MODE_ENABLE
+               }
+#endif
+
+               evas_object_show(view);
+       }
+
+       return view;
+}
+
+static Evas_Object *_datetime_view_get(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, NULL, "invalid argument");
+       retif(ad->view_root == NULL, NULL, "invalid argument");
+
+       return elm_object_part_content_get(ad->view_root
+                       , "qp.base.datetime.swallow");
+}
+
+static void _datetime_view_attach(void *data)
+{
+       Evas_Object *view = NULL;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter");
+       retif(ad->view_root == NULL, , "Invalid parameter");
+
+       view = _datetime_view_create(ad->view_root);
+       if (view != NULL)
+               elm_object_part_content_set(ad->view_root, "qp.base.datetime.swallow", view);
+
+}
+
+static void _datetime_view_deattach(void *data)
+{
+       Evas_Object *view = NULL;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter");
+       retif(ad->view_root == NULL, , "Invalid parameter");
+
+       view = elm_object_part_content_unset(ad->view_root, "qp.base.datetime.swallow");
+       if (view != NULL) {
+               evas_object_del(view);
+               view = NULL;
+       }
+}
+
+static int _init(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter");
+
+       _datetime_view_attach(ad);
+
+       return QP_OK;
+}
+
+static int _fini(void *data)
+{
+       _datetime_view_deattach(data);
+
+       return QP_OK;
+}
+
+HAPI void quickpanel_datetime_datentime_event_set(int is_clickable)
+{
+       Evas_Object *view = _datetime_view_get();
+
+       DBG("date n time clickable set[%d]", is_clickable);
+
+       if (view != NULL) {
+               if (is_clickable == 1) {
+                       if (_flag_get(view, E_DATA_TIME_N_DATE_EVENT) == 0) {
+                               _flag_set(view, E_DATA_TIME_N_DATE_EVENT, 1);
+                               elm_object_signal_emit(view, "timendate.click.enable", "prog");
+                       }
+               } else {
+                       if (_flag_get(view, E_DATA_TIME_N_DATE_EVENT) == 1) {
+                               _flag_set(view, E_DATA_TIME_N_DATE_EVENT, 0);
+                               elm_object_signal_emit(view, "timendate.click.disable", "prog");
+                       }
+               }
+       }
+}
+
+HAPI void quickpanel_datetime_editing_icon_visibility_set(int is_visible)
+{
+       Evas_Object *view = _datetime_view_get();
+
+       DBG("visibility set:%d", is_visible);
+
+       if (view != NULL) {
+               if (is_visible == 1) {
+                       if (_flag_get(view, E_DATA_EDITING_VISIBILITT) == 0) {
+                               _flag_set(view, E_DATA_EDITING_VISIBILITT, 1);
+                               elm_object_signal_emit(view, "button,editing,show", "prog");
+                       }
+               } else {
+                       if (_flag_get(view, E_DATA_EDITING_VISIBILITT) == 1) {
+                               _flag_set(view, E_DATA_EDITING_VISIBILITT, 0);
+                               elm_object_signal_emit(view, "button,editing,hide", "prog");
+                       }
+               }
+       }
+}
+
+HAPI void quickpanel_datetime_view_update(char *date, char *time, char *meridiem, int meridiem_type)
+{
+       Evas_Object *view = NULL;
+
+       Eina_Strbuf *strbuf_date = NULL;
+       Eina_Strbuf *strbuf_time = NULL;
+       Eina_Strbuf *strbuf_access = NULL;
+
+       view = _datetime_view_get();
+
+       if (!view) {
+               ERR("view == NULL");
+               return;
+       }
+
+       strbuf_date = eina_strbuf_new();
+        if (!strbuf_date) {
+               ERR("strbuf_date == NULL");
+               return;
+       }
+
+       strbuf_time = eina_strbuf_new();
+       if (!strbuf_time) {
+               ERR("strbuf_time == NULL");
+               eina_strbuf_free(strbuf_date);
+               return;
+       }
+
+       strbuf_access = eina_strbuf_new();
+       if (!strbuf_access) {
+               ERR("strbuf_access == NULL");
+               eina_strbuf_free(strbuf_date);
+               eina_strbuf_free(strbuf_time);
+               return;
+       }
+
+       DBG("update time: %s %s %s", date, time, meridiem);
+
+       if (date != NULL) {
+               eina_strbuf_append_printf(strbuf_date, "%s", date);
+               eina_strbuf_append_printf(strbuf_access, "%s ", date);
+       }
+
+       eina_strbuf_ltrim(strbuf_date);
+
+       // -------------------------------------------------------------------------------------
+
+       if (meridiem_type == UTIL_TIME_MERIDIEM_TYPE_PRE && meridiem != NULL && strlen(meridiem) != 0) {
+               eina_strbuf_append_printf(strbuf_time, "<ampm>%s</> ", meridiem);
+               eina_strbuf_append_printf(strbuf_access, "%s ", meridiem);
+       }
+
+       if (time != NULL) {
+               eina_strbuf_append_printf(strbuf_time, "<time>%s</>", time);
+               eina_strbuf_append_printf(strbuf_access, "%s ", time);
+       }
+
+       if (meridiem_type == UTIL_TIME_MERIDIEM_TYPE_POST && meridiem != NULL && strlen(meridiem) != 0) {
+               eina_strbuf_append_printf(strbuf_time, " <ampm>%s</>", meridiem);
+               eina_strbuf_append_printf(strbuf_access, "%s ", meridiem);
+       }
+
+       eina_strbuf_ltrim(strbuf_time);
+
+       // -------------------------------------------------------------------------------------
+
+       INFO("DATE STR SET: %s", eina_strbuf_string_get(strbuf_time));
+
+       _set_text_to_part(view, "text.date", eina_strbuf_string_get(strbuf_date));
+       _set_text_to_part(view, "text.time", eina_strbuf_string_get(strbuf_time));
+
+       quickpanel_accessibility_screen_reader_data_set(view, "focus.datetime", "", (char *)eina_strbuf_string_get(strbuf_access));
+
+       eina_strbuf_free(strbuf_date);
+       eina_strbuf_free(strbuf_time);
+       eina_strbuf_free(strbuf_access);
+
+       quickpanel_accessibility_screen_reader_data_set(view
+                       , "focus.setting", "", _NOT_LOCALIZED("Settings"));
+
+}
diff --git a/src/datetime/util-time.c b/src/datetime/util-time.c
new file mode 100755 (executable)
index 0000000..a70fe66
--- /dev/null
@@ -0,0 +1,892 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <ctype.h>
+#include <glib.h>
+#include <utils_i18n.h>
+
+#include <app_control.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <dlog.h>
+#include <system_settings.h>
+#include <utils_i18n.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <notification.h>
+#include <notification_setting_internal.h>
+
+#include "common.h"
+
+#include "quickpanel-ui.h"
+#include "util-time.h"
+#include "datetime.h"
+#include "noti_node.h"
+#include "noti.h"
+
+#define TIME_ZONEINFO_PATH      "/usr/share/zoneinfo/"
+#define TIME_ZONEINFO_PATH_LEN  (strlen(TIME_ZONEINFO_PATH))
+#define BUF_FORMATTER 64
+
+static const char *colon = ":";
+static const char *ratio = "&#x2236;";
+static int _init(void *data);
+static int _fini(void *data);
+static void _lang_changed(void *data);
+static void _util_time_heartbeat_do(void);
+
+
+
+QP_Module qp_datetime_controller = {
+       .name = "qp_datetime_controller",
+       .init = _init,
+       .fini = _fini,
+       .suspend = NULL,
+       .resume = NULL,
+       .lang_changed = _lang_changed,
+       .refresh = NULL,
+};
+
+static struct info {
+       int is_initialized;
+       Ecore_Timer *timer;
+       int is_timer_enabled;
+       i18n_udate_format_h formatter_date;
+       i18n_udate_format_h formatter_time;
+       i18n_udate_format_h formatter_ampm;
+       i18n_udatepg_h generator;
+       i18n_udatepg_h date_generator;
+       int timeformat;
+       char *timeregion_format;
+       char *dateregion_format;
+       char *timezone_id;
+       Eina_Bool is_pre_meridiem;
+} s_info = {
+       .is_initialized = 0,
+       .timer = NULL,
+       .is_timer_enabled = 0,
+       .formatter_date = NULL,
+       .formatter_time = NULL,
+       .formatter_ampm = NULL,
+       .generator = NULL,
+       .date_generator = NULL,
+       .timeformat = QP_TIME_FORMAT_24,
+       .timeregion_format = NULL,
+       .dateregion_format = NULL,
+       .timezone_id = NULL,
+       .is_pre_meridiem = EINA_FALSE,
+};
+
+static Eina_Bool _timer_cb(void *data);
+
+static i18n_uchar *uastrcpy(const char *chars)
+{
+       int len = 0;
+       i18n_uchar *str = NULL;
+       len = strlen(chars);
+       str = (i18n_uchar *) malloc(sizeof(i18n_uchar) *(len + 1));
+       if (!str)
+               return NULL;
+
+       i18n_ustring_copy_ua(str, chars);
+       return str;
+}
+
+static void ICU_set_timezone(const char *timezone)
+{
+       DBG("ICU_set_timezone = %s ", timezone);
+       int ec = I18N_ERROR_NONE;
+       i18n_uchar *str = uastrcpy(timezone);
+       retif(str == NULL, , "uastrcpy error!");
+
+       ec = i18n_ucalendar_set_default_timezone(str);
+       if (ec == I18N_ERROR_NONE)
+               DBG("i18n_ucalendar_set_default_timezone() SUCCESS ");
+       else
+               ERR("i18n_ucalendar_set_default_timezone() FAILED : %s ", get_error_message(ec));
+
+       free(str);
+}
+
+static char *_get_locale(void)
+{
+       char locale_tmp[32] = { 0, };
+       char *locale = NULL; //vconf_get_str(VCONFKEY_REGIONFORMAT);
+       int ret = 0;
+
+       ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, &locale);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to ignore key(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY) : %d", ret);
+
+       if (locale == NULL) {
+               ERR("vconf_get_str() failed : region format");
+               return strdup("en_GB");
+       }
+
+       strncpy(locale_tmp, locale, sizeof(locale_tmp) - 1);
+
+       // remove .UTF-8
+       if (strlen(locale_tmp) > 0) {
+               char *p = strstr(locale_tmp, ".UTF-8");
+               if (p)
+                       *p = 0;
+
+       }
+
+       free(locale);
+
+       if (strlen(locale_tmp) > 0)
+               return strdup(locale_tmp);
+
+
+       return strdup("en_GB");
+}
+
+static inline char *_extend_heap(char *buffer, int *sz, int incsz)
+{
+       char *tmp;
+
+       *sz += incsz;
+       tmp = realloc(buffer, *sz);
+       if (!tmp) {
+               ERR("Heap");
+               return NULL;
+       }
+
+       return tmp;
+}
+
+static char *_string_replacer(char *src, const char *pattern, const char *replace)
+{
+       char *ptr;
+       char *tmp = NULL;
+       char *ret = NULL;
+       int idx = 0;
+       int out_idx = 0;
+       int out_sz = 0;
+       enum {
+               STATE_START,
+               STATE_FIND,
+               STATE_CHECK,
+               STATE_END,
+       } state;
+
+       if (!src || !pattern)
+               return NULL;
+
+
+       out_sz = strlen(src);
+       ret = strdup(src);
+       if (!ret) {
+               ERR("Heap");
+               return NULL;
+       }
+
+       out_idx = 0;
+       for (state = STATE_START, ptr = src; state != STATE_END; ptr++) {
+               switch (state) {
+               case STATE_START:
+                       if (*ptr == '\0') {
+                               state = STATE_END;
+                       } else if (!isblank(*ptr)) {
+                               state = STATE_FIND;
+                               ptr--;
+                       }
+                       break;
+               case STATE_FIND:
+                       if (*ptr == '\0') {
+                               state = STATE_END;
+                       } else if (*ptr == *pattern) {
+                               state = STATE_CHECK;
+                               ptr--;
+                               idx = 0;
+                       } else if (*ptr == '-') {
+                               state = STATE_CHECK;
+                               *ptr = *pattern;
+                               ptr--;
+                               idx = 0;
+                       } else {
+                               ret[out_idx] = *ptr;
+                               out_idx++;
+                               if (out_idx == out_sz) {
+                                       tmp = _extend_heap(ret, &out_sz, strlen(replace) + 1);
+                                       if (!tmp) {
+                                               free(ret);
+                                               return NULL;
+                                       }
+                                       ret = tmp;
+                               }
+                       }
+                       break;
+               case STATE_CHECK:
+                       if (!pattern[idx]) {
+                               /*!
+                                * If there is no space for copying the replacement,
+                                * Extend size of the return buffer.
+                                */
+                               if (out_sz - out_idx < strlen(replace) + 1) {
+                                       tmp = _extend_heap(ret, &out_sz, strlen(replace) + 1);
+                                       if (!tmp) {
+                                               free(ret);
+                                               return NULL;
+                                       }
+                                       ret = tmp;
+                               }
+                               strncpy(ret + out_idx, replace, strlen(replace));
+                               out_idx += strlen(replace);
+
+                               state = STATE_FIND;
+                               ptr--;
+                       } else if (*ptr != pattern[idx]) {
+                               ptr -= idx;
+
+                               /* Copy the first matched character */
+                               ret[out_idx] = *ptr;
+                               out_idx++;
+                               if (out_idx == out_sz) {
+                                       tmp = _extend_heap(ret, &out_sz, strlen(replace) + 1);
+                                       if (!tmp) {
+                                               free(ret);
+                                               return NULL;
+                                       }
+
+                                       ret = tmp;
+                               }
+
+                               state = STATE_FIND;
+                       } else {
+                               idx++;
+                       }
+                       break;
+               default:
+                       break;
+               }
+       }
+
+       ret[out_idx] = '\0';
+       return ret;
+}
+
+static i18n_udatepg_h __util_time_generator_get(void *data)
+{
+       int status = I18N_ERROR_NONE;
+       i18n_udatepg_h generator = NULL;
+
+       struct appdata *ad = data;
+       retif_nomsg(ad == NULL, NULL);
+       retif_nomsg(s_info.timeregion_format == NULL, NULL);
+
+       status = i18n_udatepg_create(s_info.timeregion_format, &generator);
+       if (status != I18N_ERROR_NONE) {
+               ERR("i18n_udatepg_create() failed");
+               generator = NULL;
+               return NULL;
+       }
+       return generator;
+}
+
+static i18n_udatepg_h __util_date_generator_get(void *data)
+{
+       int status = I18N_ERROR_NONE;
+       i18n_udatepg_h generator = NULL;
+
+       struct appdata *ad = data;
+       retif_nomsg(ad == NULL, NULL);
+       retif_nomsg(s_info.dateregion_format == NULL, NULL);
+
+       status = i18n_udatepg_create(s_info.dateregion_format, &generator);
+       if (status != I18N_ERROR_NONE) {
+               ERR("i18n_udatepg_create() failed");
+               generator = NULL;
+               return NULL;
+       }
+       return generator;
+}
+
+static i18n_udate_format_h __util_time_date_formatter_get(void *data, const char *timezone_id, const char *skeleton)
+{
+       int status = I18N_ERROR_NONE;
+
+       i18n_uchar u_skeleton[BUF_FORMATTER] = {0,};
+       int32_t skeleton_len = 0, pattern_len = 0;
+
+       i18n_uchar u_best_pattern[BUF_FORMATTER] = {0,};
+       int32_t u_best_pattern_capacity;
+       i18n_udate_format_h formatter = NULL;
+
+       struct appdata *ad = data;
+       retif_nomsg(ad == NULL, NULL);
+       retif_nomsg(s_info.date_generator == NULL, NULL);
+
+       i18n_ustring_copy_ua_n(u_skeleton, skeleton, strlen(skeleton));
+       skeleton_len = i18n_ustring_get_length(u_skeleton);
+
+       u_best_pattern_capacity =
+               (int32_t) (sizeof(u_best_pattern) / sizeof((u_best_pattern)[0]));
+
+       status = i18n_udatepg_get_best_pattern(s_info.date_generator, u_skeleton, skeleton_len, u_best_pattern, u_best_pattern_capacity, &pattern_len);
+       if (status != I18N_ERROR_NONE) {
+               ERR("i18n_udatepg_get_best_pattern() failed");
+               return NULL;
+       }
+
+       i18n_uchar u_timezone_id[BUF_FORMATTER] = {0,};
+       if (timezone_id == NULL) {
+               i18n_ustring_copy_ua_n(u_timezone_id, s_info.timezone_id, sizeof(u_timezone_id));
+               i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, s_info.dateregion_format, u_timezone_id, -1, u_best_pattern, -1, &formatter);
+       } else {
+               i18n_ustring_copy_ua_n(u_timezone_id, timezone_id, sizeof(u_timezone_id));
+               i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, s_info.dateregion_format, u_timezone_id, -1, u_best_pattern, -1, &formatter);
+       }
+       if (status != I18N_ERROR_NONE) {
+               ERR("i18n_udate_create() failed");
+               return NULL;
+       }
+
+       char a_best_pattern[BUF_FORMATTER] = {0,};
+       i18n_ustring_copy_au(a_best_pattern, u_best_pattern);
+
+       return formatter;
+}
+
+static i18n_udate_format_h __util_time_ampm_formatter_get(void *data, const char *timezone_id)
+{
+       int status = I18N_ERROR_NONE;
+
+       i18n_uchar u_best_pattern[BUF_FORMATTER] = {0,};
+       i18n_udate_format_h formatter = NULL;
+
+       struct appdata *ad = data;
+       retif_nomsg(ad == NULL, NULL);
+
+       i18n_ustring_copy_ua(u_best_pattern, "a");
+
+       i18n_uchar u_timezone_id[BUF_FORMATTER] = {0,};
+       if (timezone_id == NULL) {
+               i18n_ustring_copy_ua_n(u_timezone_id, s_info.timezone_id, sizeof(u_timezone_id));
+               i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, s_info.timeregion_format, u_timezone_id, -1, u_best_pattern, -1, &formatter);
+       } else {
+               i18n_ustring_copy_ua_n(u_timezone_id, timezone_id, sizeof(u_timezone_id));
+               i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, s_info.timeregion_format, u_timezone_id, -1, u_best_pattern, -1, &formatter);
+       }
+       if (status != I18N_ERROR_NONE) {
+               ERR("i18n_udate_create() failed");
+               return NULL;
+       }
+
+       char a_best_pattern[BUF_FORMATTER] = {0,};
+       i18n_ustring_copy_au(a_best_pattern, u_best_pattern);
+
+       return formatter;
+}
+
+static i18n_udate_format_h __util_time_time_formatter_get(void *data, int time_format, const char *timezone_id)
+{
+       char buf[BUF_FORMATTER] = {0,};
+       int status = I18N_ERROR_NONE;
+       i18n_uchar u_pattern[BUF_FORMATTER] = {0,};
+       i18n_uchar u_best_pattern[BUF_FORMATTER] = {0,};
+       int32_t u_best_pattern_capacity = 0, patternLength = 0;
+       char a_best_pattern[BUF_FORMATTER] = {0,};
+
+       i18n_udate_format_h formatter = NULL;
+
+       struct appdata *ad = data;
+       retif_nomsg(ad == NULL, NULL);
+       retif_nomsg(s_info.generator == NULL, NULL);
+
+       if (time_format == QP_TIME_FORMAT_24) {
+               snprintf(buf, sizeof(buf)-1, "%s", "HH:mm");
+       } else {
+               /* set time format 12 */
+               snprintf(buf, sizeof(buf)-1, "%s", "h:mm");
+       }
+
+       if (i18n_ustring_copy_ua_n(u_pattern, buf, sizeof(u_pattern)) == NULL) {
+               ERR("i18n_ustring_copy_ua_n() is failed.");
+               return NULL;
+       }
+
+       u_best_pattern_capacity =
+               (int32_t) (sizeof(u_best_pattern) / sizeof((u_best_pattern)[0]));
+
+       status = i18n_udatepg_get_best_pattern(s_info.generator, u_pattern, i18n_ustring_get_length(u_pattern),
+                       u_best_pattern, u_best_pattern_capacity, &patternLength);
+       if (status != I18N_ERROR_NONE) {
+               ERR("udatpg_getBestPattern() failed");
+               return NULL;
+       }
+
+       i18n_ustring_copy_au(a_best_pattern, u_best_pattern);
+
+       if (a_best_pattern[0] == 'a')
+               s_info.is_pre_meridiem = EINA_TRUE;
+       else
+               s_info.is_pre_meridiem = EINA_FALSE;
+
+
+       i18n_ustring_copy_ua(u_best_pattern, buf);
+
+       i18n_uchar u_timezone_id[BUF_FORMATTER] = {0,};
+       if (timezone_id == NULL) {
+               i18n_ustring_copy_ua_n(u_timezone_id, s_info.timezone_id, sizeof(u_timezone_id));
+               i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, s_info.timeregion_format, u_timezone_id, -1, u_best_pattern, -1, &formatter);
+       } else {
+               i18n_ustring_copy_ua_n(u_timezone_id, timezone_id, sizeof(u_timezone_id));
+               i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, s_info.timeregion_format, u_timezone_id, -1, u_best_pattern, -1, &formatter);
+       }
+       if (status != I18N_ERROR_NONE) {
+               ERR("i18n_udate_create() failed");
+               return NULL;
+       }
+
+       return formatter;
+}
+
+static void _util_time_formatters_create(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (s_info.generator == NULL)
+               s_info.generator = __util_time_generator_get(ad);
+
+
+       if (s_info.date_generator == NULL)
+               s_info.date_generator = __util_date_generator_get(ad);
+
+
+       if (s_info.formatter_date == NULL)
+               s_info.formatter_date = __util_time_date_formatter_get(ad, NULL, "MMMMEd");
+
+
+       if (s_info.timeformat == QP_TIME_FORMAT_12) {
+               if (s_info.formatter_ampm == NULL)
+                       s_info.formatter_ampm = __util_time_ampm_formatter_get(ad, NULL);
+
+       }
+
+       if (s_info.formatter_time == NULL)
+               s_info.formatter_time = __util_time_time_formatter_get(ad, s_info.timeformat, NULL);
+
+}
+
+static void _util_time_formatters_destroy(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (s_info.date_generator) {
+               i18n_udate_destroy(s_info.date_generator);
+               s_info.date_generator = NULL;
+       }
+
+       if (s_info.generator) {
+               i18n_udate_destroy(s_info.generator);
+               s_info.generator = NULL;
+       }
+
+       if (s_info.formatter_date) {
+               i18n_udate_destroy(s_info.formatter_date);
+               s_info.formatter_date = NULL;
+       }
+
+       if (s_info.formatter_time) {
+               i18n_udate_destroy(s_info.formatter_time);
+               s_info.formatter_time = NULL;
+       }
+
+       if (s_info.formatter_ampm) {
+               i18n_udate_destroy(s_info.formatter_ampm);
+               s_info.formatter_ampm = NULL;
+       }
+}
+
+static char *_util_time_regionformat_get(void)
+{
+       return _get_locale();
+}
+
+static char *_util_date_regionformat_get(void)
+{
+       return _get_locale();
+}
+
+static char* _get_timezone_from_vconf(void)
+{
+       char *szTimezone = NULL;
+       szTimezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
+       if (szTimezone == NULL || strlen(szTimezone) == 0) {
+               ERR("QUICKPANEL TIMEZONE - Cannot get time zone.");
+               return strdup("N/A");
+       }
+
+       return szTimezone;
+}
+
+static char *_util_time_timezone_id_get(void)
+{
+       char buf[1024] = {0,};
+       ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
+
+       INFO("QUICKPANEL TIMEZONE -  %s",  buf);
+
+       if (len != -1) {
+               buf[len] = '\0';
+       } else {
+               ERR("QUICKPANEL TIMEZONE - failed to get a timezone information");
+               return _get_timezone_from_vconf();
+       }
+
+       return strdup(buf + 20);
+}
+
+static int _util_time_formatted_time_get(i18n_udate_format_h formatter, time_t tt, char *buf, int buf_len)
+{
+       i18n_udate u_time = (i18n_udate)(tt) * 1000;
+       i18n_uchar u_formatted_str[BUF_FORMATTER] = {0, };
+       int32_t u_formatted_str_capacity;
+       int32_t formatted_str_len = -1;
+       int status = I18N_ERROR_INVALID_PARAMETER;
+
+       u_formatted_str_capacity =
+               (int32_t)(sizeof(u_formatted_str) / sizeof((u_formatted_str)[0]));
+
+       status = i18n_udate_format_date(formatter, u_time, u_formatted_str, u_formatted_str_capacity, NULL, &formatted_str_len);
+       if (status != I18N_ERROR_NONE) {
+               ERR("i18n_udate_format_date() failed");
+               return -1;
+       }
+
+       if (formatted_str_len <= 0)
+               ERR("formatted_str_len is less than 0");
+
+
+       buf = i18n_ustring_copy_au_n(buf, u_formatted_str, (int32_t)buf_len);
+       DBG("date:(%d)[%s][%ld]", formatted_str_len, buf, tt);
+
+       return (int)i18n_ustring_get_length(u_formatted_str);
+}
+
+static void _formatter_create(void *data)
+{
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+       bool status = false;
+
+       ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, &status);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to ignore key(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR) : %d", ret);
+
+       if (status == true)
+               s_info.timeformat = QP_TIME_FORMAT_24;
+       else
+               s_info.timeformat = QP_TIME_FORMAT_12;
+
+
+       if (s_info.timeregion_format == NULL)
+               s_info.timeregion_format = _util_time_regionformat_get();
+
+
+       if (s_info.dateregion_format == NULL)
+               s_info.dateregion_format = _util_date_regionformat_get();
+
+
+       if (s_info.timezone_id == NULL)
+               s_info.timezone_id = _util_time_timezone_id_get();
+
+
+       ICU_set_timezone(s_info.timezone_id);
+
+       _util_time_formatters_create(ad);
+
+       s_info.is_initialized = 1;
+       DBG("%d %s %s", s_info.timeformat, s_info.timeregion_format, s_info.timezone_id);
+}
+
+static void _formatter_destory(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (s_info.timeregion_format) {
+               free(s_info.timeregion_format);
+               s_info.timeregion_format = NULL;
+       }
+
+       if (s_info.dateregion_format) {
+               free(s_info.dateregion_format);
+               s_info.dateregion_format = NULL;
+       }
+
+       if (s_info.timezone_id) {
+               free(s_info.timezone_id);
+               s_info.timezone_id = NULL;
+       }
+
+       _util_time_formatters_destroy(ad);
+
+       s_info.is_initialized = 0;
+}
+
+static void _util_time_setting_changed_cb(system_settings_key_e key, void *data)
+{
+       struct appdata *ad = data;
+
+       _formatter_destory(ad);
+       _formatter_create(ad);
+
+       _util_time_heartbeat_do();
+
+       //upate noti time information.
+       quickpanel_noti_update_by_system_time_changed_setting_cb(key, ad);
+}
+
+static void _util_time_vconf_changed_cb(keynode_t *key, void *data)
+{
+       struct appdata *ad = data;
+
+       _formatter_destory(ad);
+       _formatter_create(ad);
+
+       _util_time_heartbeat_do();
+
+       //upate noti time information.
+       quickpanel_noti_update_by_system_time_changed_vconf_cb(key, ad);
+}
+
+static void _time_event_deattach(void *data)
+{
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       /* unregister vconf cbs */
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_TIMEZONE_INT, _util_time_vconf_changed_cb);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_SETAPPL_TIMEZONE_INT, ret);
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_TIMEZONE_ID, _util_time_vconf_changed_cb);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_SETAPPL_TIMEZONE_ID, ret);
+       ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SVC_ROAM, _util_time_vconf_changed_cb);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_TELEPHONY_SVC_ROAM, ret);
+
+       ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_TIME_CHANGED);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to set key(%d) : %d", SYSTEM_SETTINGS_KEY_TIME_CHANGED, ret);
+       ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to set key(%d) : %d", SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, ret);
+       ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to set key(%d) : %d", SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, ret);
+}
+
+static void _time_event_attach(void *data)
+{
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       /* register vconf cbs */
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_TIMEZONE_INT, _util_time_vconf_changed_cb, data);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_SETAPPL_TIMEZONE_INT, ret);
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_TIMEZONE_ID, _util_time_vconf_changed_cb, data);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_SETAPPL_TIMEZONE_ID, ret);
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SVC_ROAM, _util_time_vconf_changed_cb, data);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_TELEPHONY_SVC_ROAM, ret);
+
+       ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_TIME_CHANGED, _util_time_setting_changed_cb, data);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to set key(%d) : %d", SYSTEM_SETTINGS_KEY_TIME_CHANGED, ret);
+       ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, _util_time_setting_changed_cb, data);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to set key(%d) : %d", SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, ret);
+       ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, _util_time_setting_changed_cb, data);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to set key(%d) : %d", SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, ret);
+
+}
+
+static void _util_time_get(int is_current_time, time_t tt_a, char **str_date, char **str_time, char **str_meridiem)
+{
+       time_t tt;
+       struct tm st;
+       char buf_date[512] = {0,};
+       char buf_time[512] = {0,};
+       char buf_ampm[512] = {0,};
+
+       char *convert_formatted_str = NULL;
+
+       if (is_current_time == 1)
+               tt = time(NULL);
+       else
+               tt = tt_a;
+
+
+       localtime_r(&tt, &st);
+
+       /* date */
+       _util_time_formatted_time_get(s_info.formatter_date, tt, buf_date, sizeof(buf_date));
+
+       /* time */
+       if (s_info.timeformat == QP_TIME_FORMAT_24) {
+               _util_time_formatted_time_get(s_info.formatter_time, tt, buf_time, sizeof(buf_time)-1);
+       } else {
+               _util_time_formatted_time_get(s_info.formatter_time, tt, buf_time, sizeof(buf_time)-1);
+               int ampm_len = _util_time_formatted_time_get(s_info.formatter_ampm, tt, buf_ampm, sizeof(buf_ampm)-1);
+               if (ampm_len > 4) {
+                       if (st.tm_hour >= 0 && st.tm_hour < 12)
+                               snprintf(buf_ampm, sizeof(buf_ampm)-1, "AM");
+                       else
+                               snprintf(buf_ampm, sizeof(buf_ampm)-1, "PM");
+
+               }
+       }
+
+       if (strstr(s_info.timeregion_format, "ar_"))
+               convert_formatted_str = strdup(buf_time);
+       else
+               convert_formatted_str = _string_replacer(buf_time, colon, ratio);
+
+
+       if (str_date != NULL)
+               *str_date = strdup(buf_date);
+
+
+       if (str_meridiem != NULL)
+               *str_meridiem = strdup(buf_ampm);
+
+
+       if (convert_formatted_str) {
+               if (str_time != NULL)
+                       *str_time = strdup(convert_formatted_str);
+
+               free(convert_formatted_str);
+       }
+}
+
+static void _timer_add(void)
+{
+       time_t tt;
+       struct tm st;
+
+       tt = time(NULL);
+       localtime_r(&tt, &st);
+
+       s_info.timer = ecore_timer_add(60 - st.tm_sec, _timer_cb, NULL);
+}
+
+static void _timer_del(void)
+{
+       if (s_info.timer != NULL) {
+               ecore_timer_del(s_info.timer);
+               s_info.timer = NULL;
+       }
+}
+
+static Eina_Bool _timer_cb(void *data)
+{
+       _util_time_heartbeat_do();
+
+       if (s_info.is_timer_enabled == 1) {
+               _timer_del();
+               _timer_add();
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static int _init(void *data)
+{
+       _formatter_create(data);
+       _time_event_attach(data);
+
+       return QP_OK;
+}
+
+static int _fini(void *data)
+{
+       _time_event_deattach(data);
+       _formatter_destory(data);
+
+       return QP_OK;
+}
+
+static void _lang_changed(void *data)
+{
+       _util_time_vconf_changed_cb(NULL, data);
+}
+
+static void _util_time_heartbeat_do(void)
+{
+       int type_meridiem = UTIL_TIME_MERIDIEM_TYPE_NONE;
+       char *str_date = NULL;
+       char *str_time = NULL;
+       char *str_meridiem = NULL;
+
+       if (s_info.is_initialized == 0) {
+               ERR("time information ins't initialized");
+               return;
+       }
+
+       _util_time_get(1, 0, &str_date, &str_time, &str_meridiem);
+
+       if (str_meridiem != NULL) {
+               if (s_info.is_pre_meridiem == EINA_TRUE)
+                       type_meridiem = UTIL_TIME_MERIDIEM_TYPE_PRE;
+               else
+                       type_meridiem = UTIL_TIME_MERIDIEM_TYPE_POST;
+
+       }
+       quickpanel_datetime_view_update(str_date, str_time, str_meridiem, type_meridiem);
+
+       if (str_date)
+               free(str_date);
+
+
+       if (str_time)
+               free(str_time);
+
+
+       if (str_meridiem)
+               free(str_meridiem);
+
+}
+
+HAPI void quickpanel_util_time_timer_enable_set(int is_enable)
+{
+       _timer_del();
+
+       if (is_enable == 1)
+               _timer_add();
+
+
+       _util_time_heartbeat_do();
+
+       s_info.is_timer_enabled = is_enable;
+}
+
+
+
+HAPI void quickpanel_util_time_formatted_date_get(void *data, time_t time, char *buf, int buf_len)
+{
+       struct appdata *ad = data;
+       i18n_udate_format_h formatter_date = NULL;
+
+       retif(data == NULL, , "Invalid parameter!");
+
+       formatter_date = __util_time_date_formatter_get(ad, NULL, "Md");
+       _util_time_formatted_time_get(formatter_date, time, buf, buf_len);
+
+       if (formatter_date)
+               i18n_udate_destroy(formatter_date);
+}
+
+
diff --git a/src/device/brightness.c b/src/device/brightness.c
new file mode 100755 (executable)
index 0000000..88e498c
--- /dev/null
@@ -0,0 +1,691 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+#include <string.h>
+
+#include <notification.h>
+#include <vconf.h>
+#include <device/display.h>
+#include <app_control.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "quickpanel-ui.h"
+#include "list_util.h"
+#include "quickpanel_def.h"
+#include "settings_view_featured.h"
+#include "preference.h"
+#include "setting_utils.h"
+
+#ifdef QP_SCREENREADER_ENABLE
+#include "accessibility.h"
+#endif
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+#include "emergency_mode.h"
+#endif
+
+
+#define BRIGHTNESS_MIN 1
+#define BRIGHTNESS_MAX 100
+
+typedef struct _brightness_ctrl_obj {
+       int min_level;
+       int max_level;
+       int is_event_registered;
+       int last_requested_level;
+       Evas_Object *viewer;
+       void *data;
+       int level_before;
+       int pos_x;
+       bool is_changing;
+       Evas_Object *brighntess_slider;
+} brightness_ctrl_obj;
+
+
+int slider_drag_start = -1;
+
+static int _init(void *data);
+static int _fini(void *data);
+static void _lang_changed(void *data);
+static void _qp_opened(void *data);
+static void _qp_closed(void *data);
+static void _brightness_view_update(void);
+static void _brightness_register_event_cb(brightness_ctrl_obj *ctrl_obj);
+static void _brightness_deregister_event_cb(brightness_ctrl_obj *ctrl_obj);
+
+static void _brightness_set_image(int level);
+static void _refresh(void *data);
+
+QP_Module brightness_ctrl = {
+       .name = "brightness_ctrl",
+       .init = _init,
+       .fini = _fini,
+       .suspend = NULL,
+       .resume = NULL,
+       .hib_enter = NULL,
+       .hib_leave = NULL,
+       .lang_changed = _lang_changed,
+       .refresh = _refresh,
+       .get_height = NULL,
+       .qp_opened = _qp_opened,
+       .qp_closed = _qp_closed,
+};
+
+static brightness_ctrl_obj *g_ctrl_obj;
+
+static Evas_Object *_controller_view_get(void)
+{
+       Evas_Object *view = NULL;
+
+       if (g_ctrl_obj != NULL) {
+               if (g_ctrl_obj->viewer != NULL) {
+                       view = elm_object_part_content_get(g_ctrl_obj->viewer, "elm.swallow.controller");
+                       if (view == NULL)
+                               view = evas_object_data_get(g_ctrl_obj->viewer, "view.controller");
+
+               }
+       }
+
+       return view;
+}
+
+static void _controller_view_set(Evas_Object *wrapper, Evas_Object *view)
+{
+       retif(wrapper == NULL, , "invalid data");
+       retif(view == NULL, , "invalid data");
+
+       elm_object_part_content_set(wrapper, "elm.swallow.controller", view);
+       evas_object_data_set(wrapper, "view.controller", view);
+}
+
+static char *_brightness_access_state_cb(void *data, Evas_Object *obj)
+{
+       char buf[512] = {0,};
+       brightness_ctrl_obj *ctrl_obj = data;
+       retif(NULL == ctrl_obj, NULL, "invalid data");
+
+       snprintf(buf, sizeof(buf) - 1, _NOT_LOCALIZED("Position %1$d of %2$d"),
+                       ctrl_obj->last_requested_level, ctrl_obj->max_level);
+
+       return strdup(buf);
+}
+
+#ifdef QP_SCREENREADER_ENABLE
+static void _set_slider_accessiblity_state(Evas_Object *obj)
+{
+       Evas_Object *ao = NULL;
+       brightness_ctrl_obj *ctrl_obj = g_ctrl_obj;
+       retif(ctrl_obj == NULL, , "Invalid parameter!");
+       retif(ctrl_obj->viewer == NULL, , "Invalid parameter!");
+
+       ao = quickpanel_accessibility_screen_reader_object_get(obj,
+                       SCREEN_READER_OBJ_TYPE_ELM_OBJECT, NULL, NULL);
+       if (ao != NULL) {
+               elm_access_info_set(ao, ELM_ACCESS_INFO, _NOT_LOCALIZED("Brightness"));
+               elm_access_info_set(ao, ELM_ACCESS_TYPE, _NOT_LOCALIZED("Slider"));
+               elm_access_info_cb_set(ao, ELM_ACCESS_STATE, _brightness_access_state_cb, ctrl_obj);
+       }
+}
+#endif
+
+static Evas_Object *_check_duplicated_loading(Evas_Object *obj, const char *part)
+{
+       Evas_Object *old_content = NULL;
+       retif(obj == NULL, NULL, "Invalid parameter!");
+       retif(part == NULL, NULL, "Invalid parameter!");
+
+       old_content = elm_object_part_content_get(obj, part);
+       if (old_content != NULL)
+               return old_content;
+
+
+       return NULL;
+}
+
+static void _brightness_vconf_cb(keynode_t *key, void* data)
+{
+       brightness_ctrl_obj *ctrl_obj = NULL;
+
+       retif(data == NULL, , "Data parameter is NULL");
+       ctrl_obj = data;
+
+       if (ctrl_obj->viewer != NULL)
+               _brightness_view_update();
+
+}
+
+static int _brightness_set_level(int level)
+{
+       int ret = DEVICE_ERROR_NONE;
+
+       ret = device_display_set_brightness(0, level);
+       if (ret != DEVICE_ERROR_NONE)
+               ERR("failed to set brightness");
+
+
+       return level;
+}
+
+static int _brightness_get_level(void)
+{
+       int level = 0;
+
+       if (vconf_get_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, &level) == 0)
+               return level;
+       else
+               return SETTING_BRIGHTNESS_LEVEL5;
+
+}
+
+Evas_Object *_slider_get(Evas_Object *view, brightness_ctrl_obj *ctrl_obj)
+{
+       retif(view == NULL, NULL, "Data parameter is NULL");
+
+       Evas_Object *obj = elm_object_part_content_get(view, "elm.swallow.slider");
+
+       if (obj)
+               return obj;
+       else
+               return ctrl_obj->brighntess_slider;
+
+}
+
+static void _slider_changed_job_cb(void *data)
+{
+       int value = 0;
+       double val = 0.0;
+       Evas_Object *obj = NULL;
+       brightness_ctrl_obj *ctrl_obj = data;
+       double time_current = 0.0;
+       static double time_before = 0.0;
+
+       retif(ctrl_obj == NULL, , "Data parameter is NULL");
+       obj = _slider_get(_controller_view_get(), ctrl_obj);
+       retif(obj == NULL, , "obj is NULL");
+
+       val = elm_slider_value_get(obj);
+       value = (int)(val + 0.5);
+
+       time_current = ecore_loop_time_get();
+
+       if (value != ctrl_obj->last_requested_level) {
+               if (value >= ctrl_obj->min_level && value <= ctrl_obj->max_level) {
+                       ctrl_obj->last_requested_level = value;
+                       if (time_current - time_before >= 0.045) {
+                               _brightness_set_level(value);
+                               time_before = time_current;
+                       }
+                       _brightness_set_image(value);
+               }
+
+               if (!ctrl_obj->is_changing) {
+                       ctrl_obj->is_changing = true;
+
+                       quickpanel_brightness_transparent_background_set(true);
+                       elm_object_signal_emit(_controller_view_get(), "show", "base");
+               }
+       }
+
+
+}
+
+static void _brightness_ctrl_slider_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int pos_new = (long)event_info;
+       INFO("SLIDER_NEW_POS: %d", pos_new);
+
+       _slider_changed_job_cb(data);
+}
+
+static void _brightness_ctrl_overheat_check(Evas_Object *slider, void *data, int is_display_popup)
+{
+       int value = 0;
+       int max_brightness = BRIGHTNESS_MAX;
+       brightness_ctrl_obj *ctrl_obj = data;
+       retif(slider == NULL, , "slider is NULL");
+       retif(ctrl_obj == NULL, , "Data parameter is NULL");
+
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid data.");
+
+       value = ctrl_obj->last_requested_level;
+
+       device_display_get_max_brightness(0, &max_brightness);
+       if (value > max_brightness && max_brightness != BRIGHTNESS_MAX) {
+               DBG("max brightness is limited");
+               if (is_display_popup == 1) {
+                       if (ad->popup == NULL) {
+                               quickpanel_setting_create_timeout_popup(ad->win,
+                                               _("IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"));
+                       }
+               }
+               elm_slider_value_set(slider, (double)max_brightness);
+               ctrl_obj->last_requested_level = max_brightness;
+               _brightness_set_level(max_brightness);
+               _brightness_set_image(max_brightness);
+               return;
+       }
+}
+
+static void _slider_delayed_changed_job_cb(void *data)
+{
+       int value = 0;
+       brightness_ctrl_obj *ctrl_obj = data;
+       Evas_Object *obj = NULL;
+       retif(ctrl_obj == NULL, , "Data parameter is NULL");
+       obj = _slider_get(_controller_view_get(), ctrl_obj);
+       retif(obj == NULL, , "obj is NULL");
+
+       value = ctrl_obj->last_requested_level;
+
+       if (value >= ctrl_obj->min_level && value <= ctrl_obj->max_level) {
+               _brightness_set_level(value);
+               _brightness_set_image(value);
+       }
+}
+
+static void _brightness_ctrl_slider_delayed_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       INFO("");
+       ecore_job_add(_slider_delayed_changed_job_cb, data);
+}
+
+static void _brightness_slider_drag_start_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       slider_drag_start = _brightness_get_level();
+}
+
+static void _brightness_slider_drag_stop_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       brightness_ctrl_obj *ctrl_obj = data;
+       ctrl_obj->is_changing = false;
+
+       quickpanel_brightness_transparent_background_set(false);
+       elm_object_signal_emit(_controller_view_get(), "hide", "base");
+}
+
+/*!
+ * workaround to avoid focus jump to other pages
+ */
+static void _frame_focused(void *data, Evas_Object * obj, void *event_info)
+{
+       DBG("");
+}
+
+static void _frame_unfocused(void *data, Evas_Object * obj, void *event_info)
+{
+       DBG("");
+}
+
+
+static void _brightness_view_pos_set()
+{
+       struct appdata *ad = quickpanel_get_app_data();
+
+       Evas_Coord base_y;
+       //      Evas_Coord settings_y;
+       Evas_Coord brightness_y;
+
+       Eina_Bool ret = EINA_FALSE;
+
+       edje_object_part_geometry_get(_EDJ(ad->view_root), "qp.root.swallow", NULL, &base_y, NULL, NULL);
+       //      edje_object_part_geometry_get(ad->ly, QP_SETTING_BASE_PART, NULL, &settings_y, NULL, NULL);
+
+       Evas_Object *settings_swallow = quickpanel_setting_layout_get(ad->ly, QP_SETTING_BASE_PART);
+       ret = edje_object_part_geometry_get(_EDJ(settings_swallow), QP_SETTING_BRIGHTNESS_PART_WVGA, NULL, &brightness_y, NULL, NULL);
+       msgif(!ret, "ret is EINA_FALSE");
+
+       evas_object_move(g_ctrl_obj->viewer, 0, base_y + /*settings_y */+ brightness_y);
+}
+
+static Evas_Object *_brightness_view_create(Evas_Object *list)
+{
+       Eina_Bool ret = EINA_TRUE;
+       Evas_Object *view_wrapper = NULL;
+       Evas_Object *view = NULL;
+
+       retif(list == NULL, NULL, "list parameter is NULL");
+
+       view_wrapper = elm_layout_add(list);
+       if (view_wrapper != NULL) {
+               ret = elm_layout_file_set(view_wrapper, util_get_res_file_path(DEFAULT_EDJ),
+                               "quickpanel/brightness_controller/wrapper");
+
+               if (ret == EINA_FALSE)
+                       ERR("failed to load brightness wapper layout");
+
+               evas_object_size_hint_weight_set(view_wrapper, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(view_wrapper, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               view = elm_layout_add(view_wrapper);
+               if (view != NULL) {
+                       ret = elm_layout_file_set(view, util_get_res_file_path(DEFAULT_EDJ),
+                                       "quickpanel/brightness_controller/default");
+
+                       if (ret == EINA_FALSE)
+                               ERR("failed to load brightness layout");
+
+                       evas_object_size_hint_weight_set(view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       evas_object_size_hint_align_set(view, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+                       Evas_Object *focus = quickpanel_accessibility_ui_get_focus_object(view);
+                       elm_access_info_cb_set(focus, ELM_ACCESS_TYPE, quickpanel_accessibility_info_cb_s, _NOT_LOCALIZED("Brightness"));
+                       elm_object_part_content_set(view, "focus", focus);
+
+                       evas_object_smart_callback_add(focus, "focused", _frame_focused, NULL);
+                       evas_object_smart_callback_add(focus, "unfocused", _frame_unfocused, NULL);
+                       evas_object_show(view);
+                       _brightness_view_pos_set();
+
+                       g_ctrl_obj->brighntess_slider = view;
+                       _controller_view_set(view_wrapper, view);
+                       evas_object_show(view_wrapper);
+               }
+       }
+
+       return view_wrapper;
+}
+
+static void _brightness_set_image(int level)
+{
+       int mapped_level;
+
+       if (!g_ctrl_obj) {
+               ERR("Ctrl Obj is not defined");
+               return;
+       }
+
+       if (level <= 1)
+               mapped_level = 0;
+       else if (level >= 100)
+               mapped_level = 11;
+       else if (level > 1 && level <= 9)
+               mapped_level = 1;
+       else
+               mapped_level = (level / 10);
+
+
+       if (g_ctrl_obj->level_before != mapped_level) {
+               char buf[128] = {0,};
+               Evas_Object *view;
+
+               view = _controller_view_get();
+               snprintf(buf, sizeof(buf) - 1, "icon.state.%d", mapped_level);
+               elm_object_signal_emit(view, buf, "prog");
+               g_ctrl_obj->level_before = mapped_level;
+       }
+}
+
+static void _brightness_set_slider(void)
+{
+       int value = 0;
+       Evas_Object *slider = NULL;
+       Evas_Object *old_obj = NULL;
+       brightness_ctrl_obj *ctrl_obj = g_ctrl_obj;
+       Evas_Object *view = _controller_view_get();
+       retif(ctrl_obj == NULL, , "Invalid parameter!");
+       retif(view == NULL, , "Invalid parameter!");
+
+       old_obj = _check_duplicated_loading(view, "elm.swallow.slider");
+
+       if (old_obj == NULL) {
+               slider = elm_slider_add(view);
+
+               if (slider != NULL) {
+                       evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
+                       evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
+                       elm_slider_min_max_set(slider, ctrl_obj->min_level, ctrl_obj->max_level);
+                       evas_object_smart_callback_add(slider, "changed", _brightness_ctrl_slider_changed_cb, ctrl_obj);
+                       evas_object_smart_callback_add(slider, "delay,changed", _brightness_ctrl_slider_delayed_changed_cb, ctrl_obj);
+                       evas_object_smart_callback_add(slider, "slider,drag,start", _brightness_slider_drag_start_cb, ctrl_obj);
+                       evas_object_smart_callback_add(slider, "slider,drag,stop", _brightness_slider_drag_stop_cb, ctrl_obj);
+                       elm_object_part_content_set(view, "elm.swallow.slider", slider);
+               } else {
+                       ERR("failed to create slider");
+                       return;
+               }
+       } else {
+               slider = old_obj;
+       }
+
+       elm_object_style_set(slider, "quickpanel_style");
+
+       elm_slider_indicator_format_set(slider, NULL);
+       elm_slider_indicator_format_function_set(slider, NULL, NULL);
+       elm_slider_indicator_show_set(slider, EINA_FALSE);
+
+#ifdef QP_SCREENREADER_ENABLE
+       _set_slider_accessiblity_state(slider);
+#endif
+
+       value = _brightness_get_level();
+       elm_slider_value_set(slider, value);
+       _brightness_set_image(value);
+}
+
+static void _focus_pair_set()
+{
+       brightness_ctrl_obj *ctrl_obj = g_ctrl_obj;
+       Evas_Object *focus = NULL;
+       Evas_Object *slider = NULL;
+       Evas_Object *view = _controller_view_get();
+       retif(ctrl_obj == NULL, , "Invalid parameter!");
+       retif(view == NULL, , "Invalid parameter!");
+
+       focus = elm_object_part_content_get(view, "focus");
+       slider = elm_object_part_content_get(view, "elm.swallow.slider");
+
+       if (focus != NULL && slider != NULL) {
+               /* focus */
+               elm_object_focus_next_object_set(focus, slider, ELM_FOCUS_RIGHT);
+               elm_object_focus_next_object_set(focus, slider, ELM_FOCUS_DOWN);
+
+               /* slider */
+               elm_object_focus_next_object_set(slider, focus, ELM_FOCUS_LEFT);
+               elm_object_focus_next_object_set(slider, focus, ELM_FOCUS_UP);
+       }
+}
+
+static void _brightness_view_update(void)
+{
+       _brightness_set_slider();
+       _focus_pair_set();
+}
+
+static void _brightness_add(brightness_ctrl_obj *ctrl_obj, void *data)
+{
+       struct appdata *ad = data;
+       retif(!ad, , "list is NULL");
+       retif(!ad->list, , "list is NULL");
+       retif(ctrl_obj == NULL, , "ctrl_obj is null");
+       retif(ctrl_obj->viewer != NULL, , "viewer is already created");
+
+       ctrl_obj->viewer = _brightness_view_create(ad->list);
+       ctrl_obj->data = data;
+
+       _brightness_set_image(BRIGHTNESS_MIN);
+       _refresh(ad);
+}
+
+static void _brightness_remove(brightness_ctrl_obj *ctrl_obj, void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "list is NULL");
+       retif(ad->list == NULL, , "list is NULL");
+
+       if (g_ctrl_obj != NULL) {
+               if (g_ctrl_obj->viewer != NULL) {
+                       quickpanel_list_util_item_unpack_by_object(ad->list
+                                       , g_ctrl_obj->viewer, 0, 0);
+                       quickpanel_list_util_del_item_type(g_ctrl_obj->viewer);
+                       evas_object_del(g_ctrl_obj->viewer);
+                       g_ctrl_obj->viewer = NULL;
+               }
+               DBG("brightness controller is removed");
+               free(g_ctrl_obj);
+               g_ctrl_obj = NULL;
+       }
+}
+
+static void _brightness_register_event_cb(brightness_ctrl_obj *ctrl_obj)
+{
+       int ret = 0;
+       retif(ctrl_obj == NULL, , "Data parameter is NULL");
+
+       if (ctrl_obj->is_event_registered == 0) {
+               ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_LCD_BRIGHTNESS,
+                               _brightness_vconf_cb, ctrl_obj);
+               if (ret != 0) {
+                       ERR("failed to register a cb key:%s err:%d",
+                                       "VCONFKEY_SETAPPL_LCD_BRIGHTNESS", ret);
+               }
+               ctrl_obj->is_event_registered = 1;
+       }
+}
+
+static void _brightness_deregister_event_cb(brightness_ctrl_obj *ctrl_obj)
+{
+       int ret = 0;
+       retif(ctrl_obj == NULL, , "Data parameter is NULL");
+
+       if (ctrl_obj->is_event_registered == 1) {
+               ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, _brightness_vconf_cb);
+               if (ret != 0)
+                       ERR("failed to register a cb key:%s err:%d", "VCONFKEY_SETAPPL_LCD_BRIGHTNESS", ret);
+
+               ctrl_obj->is_event_registered = 0;
+       }
+}
+
+static void _brightness_create(void *data)
+{
+       if (g_ctrl_obj == NULL) {
+               g_ctrl_obj = (brightness_ctrl_obj *)calloc(1, sizeof(brightness_ctrl_obj));
+               if (g_ctrl_obj != NULL) {
+                       g_ctrl_obj->min_level = BRIGHTNESS_MIN;
+                       g_ctrl_obj->max_level = BRIGHTNESS_MAX;
+                       g_ctrl_obj->last_requested_level = _brightness_get_level();
+
+                       _brightness_add(g_ctrl_obj, data);
+                       _brightness_view_update();
+                       _brightness_register_event_cb(g_ctrl_obj);
+
+                       g_ctrl_obj->brighntess_slider = NULL;
+
+                       DBG("brightness controller is created");
+               }
+       }
+}
+
+static void _brightness_destroy(void *data)
+{
+       if (g_ctrl_obj != NULL) {
+               _brightness_deregister_event_cb(g_ctrl_obj);
+               _brightness_remove(g_ctrl_obj, data);
+
+               DBG("brightness controller is removed");
+       }
+
+       g_ctrl_obj = NULL;
+}
+
+static int _init(void *data)
+{
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+       if (quickpanel_emergency_mode_is_on())
+               return QP_OK;
+
+#endif
+
+       _brightness_create(data);
+
+       return QP_OK;
+}
+
+static int _fini(void *data)
+{
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       _brightness_destroy(data);
+
+       return QP_OK;
+}
+
+static void _lang_changed(void *data)
+{
+       retif(data == NULL, , "Invalid parameter!");
+
+       if (g_ctrl_obj != NULL && g_ctrl_obj->viewer != NULL)
+               _brightness_view_update();
+
+}
+
+static void _qp_opened(void *data)
+{
+       Evas_Object *slider = NULL;
+       Evas_Object *view = _controller_view_get();
+       retif(g_ctrl_obj == NULL, , "Invalid parameter!");
+       retif(view == NULL, , "Invalid parameter!");
+
+       if (view != NULL) {
+               _brightness_view_update();
+               slider = elm_object_part_content_get(view, "elm.swallow.slider");
+               if (slider != NULL) {
+                       DBG("quickpanel opened");
+                       _brightness_ctrl_overheat_check(slider, g_ctrl_obj, 0);
+               }
+       }
+}
+
+static void _qp_closed(void *data)
+{
+       retif(g_ctrl_obj == NULL, , "Invalid parameter!");
+
+       if (g_ctrl_obj->viewer != NULL)
+               _brightness_view_update();
+
+}
+
+static void _refresh(void *data)
+{
+       int h = 0;
+       struct appdata *ad = data;
+       Evas_Object *view = _controller_view_get();
+       retif(ad == NULL, , "Invalid parameter!");
+       retif(g_ctrl_obj == NULL, , "Invalid parameter!");
+       retif(g_ctrl_obj->viewer == NULL, , "Invalid parameter!");
+       retif(view == NULL, , "Invalid parameter!");
+
+       evas_object_geometry_get(g_ctrl_obj->viewer, NULL, NULL, NULL, &h);
+
+       if (ad->angle == 90 || ad->angle == 270) {
+               evas_object_resize(g_ctrl_obj->viewer, ad->win_height, h);
+               evas_object_resize(view, ad->win_height, h);
+               _brightness_view_pos_set();
+
+       } else {
+               evas_object_resize(g_ctrl_obj->viewer, ad->win_width, h);
+               evas_object_resize(view, ad->win_width, h);
+               _brightness_view_pos_set();
+       }
+}
diff --git a/src/handler_controller.c b/src/handler_controller.c
new file mode 100755 (executable)
index 0000000..c39027d
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <dlog.h>
+#include <vconf.h>
+
+#include <tapi_common.h>
+#include <ITapiSim.h>
+#include <TelCall.h>
+#include <ITapiCall.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "handler_controller.h"
+#include "setting_utils.h"
+#include "list_util.h"
+#include "quickpanel-ui.h"
+#include "common.h"
+
+HAPI void quickpanel_handler_text_set(char *text)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       if (!ad) {
+               ERR("Could not get application data");
+               return;
+       }
+
+       Evas_Object *layout = ad->view_root;
+       if (!layout) {
+               ERR("Could not get view_root");
+               return;
+       }
+
+       if (text) {
+               elm_object_part_text_set(layout, "qp.handler.text", text);
+               elm_object_signal_emit(layout, "show", "qp.handler.text");
+       } else {
+               elm_object_part_text_set(layout, "qp.handler.text", " ");
+               elm_object_signal_emit(layout, "hide", "qp.handler.text");
+       }
+}
+
+HAPI void quickpanel_handler_set_visibility(Eina_Bool visible)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       if (!ad) {
+               ERR("Could not get application data");
+               return;
+       }
+
+       Evas_Object *layout = ad->view_root;
+       if (!layout) {
+               ERR("Could not get view_root");
+               return;
+       }
+
+       if (visible == EINA_FALSE)
+               elm_object_signal_emit(layout, "qp.handler.text,hide", "qp.handler.text");
+       else
+               elm_object_signal_emit(layout, "qp.handler.text,show", "qp.handler.text");
+
+}
+
+
+
+
+
diff --git a/src/list_util.c b/src/list_util.c
new file mode 100755 (executable)
index 0000000..13c49a1
--- /dev/null
@@ -0,0 +1,664 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <stdlib.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "list_util.h"
+#include "vi_manager.h"
+
+#define E_DATA_ITEM_LABEL_H "QP_ITEM_DATA"
+
+static Eina_Bool _anim_init_cb(void *data);
+static Eina_Bool _anim_job_cb(void *data);
+static Eina_Bool _anim_done_cb(void *data);
+
+static void _viewer_freeze(Evas_Object *viewer)
+{
+       int freezed_count = 0;
+       retif(viewer == NULL, , "Invalid parameter!");
+
+       freezed_count = elm_object_scroll_freeze_get(viewer);
+
+       if (freezed_count <= 0)
+               elm_object_scroll_freeze_push(viewer);
+
+}
+
+
+static void _viewer_unfreeze(Evas_Object *viewer)
+{
+       int i = 0, freezed_count = 0;
+       retif(viewer == NULL, , "Invalid parameter!");
+
+       freezed_count = elm_object_scroll_freeze_get(viewer);
+
+       for (i = 0 ; i < freezed_count; i++)
+               elm_object_scroll_freeze_pop(viewer);
+
+}
+
+
+HAPI void quickpanel_list_util_set_item_type(Evas_Object *item, qp_item_type_e type)
+{
+       int *item_type = NULL;
+
+       retif(item == NULL, , "invalid parameter");
+
+       item_type = (int*)evas_object_data_get(item, E_DATA_ITEM_LABEL_H);
+
+       if (item_type == NULL) {
+               item_type = (int*)malloc(sizeof(int));
+
+               if (item_type) {
+                       *item_type = type;
+                       evas_object_data_set(item, E_DATA_ITEM_LABEL_H, (void*)item_type);
+               }
+       }
+}
+
+HAPI void quickpanel_list_util_del_item_type(Evas_Object *item)
+{
+       int *item_type = NULL;
+
+       retif(item == NULL, , "invalid parameter");
+
+       item_type = (int*)evas_object_data_get(item, E_DATA_ITEM_LABEL_H);
+
+       if (item_type != NULL) {
+               evas_object_data_del(item, E_DATA_ITEM_LABEL_H);
+               free(item_type);
+       }
+}
+
+qp_item_type_e _list_util_get_item_type(Evas_Object *item)
+{
+       int* item_type = NULL;
+
+       retif(item == NULL, QP_ITEM_TYPE_NONE, "invalid parameter");
+
+       item_type = (int*)evas_object_data_get(item, E_DATA_ITEM_LABEL_H);
+
+       if (item_type != NULL)
+               return (qp_item_type_e)*item_type;
+
+       return QP_ITEM_TYPE_NONE;
+}
+
+
+static int _list_util_item_compare(const void *data1, const void *data2)
+{
+       int diff = 0;
+       int* type1 = NULL;
+       int* type2 = NULL;
+
+       if (!data1) {
+               INFO("data1 is NULL");
+               return -1;
+       }
+
+       if (!data2) {
+               INFO("data2 is NULL");
+               return 1;
+       }
+
+       type1 = (int*)evas_object_data_get((Evas_Object *)data1, E_DATA_ITEM_LABEL_H);
+       if (!type1) {
+               INFO("type1 is NULL");
+               return -1;
+       }
+
+       type2 = (int*)evas_object_data_get((Evas_Object *)data2, E_DATA_ITEM_LABEL_H);
+       if (!type2) {
+               INFO("type2 is NULL");
+               return -1;
+       }
+
+       diff = *type1 - *type2;
+
+       return diff;
+}
+
+static void _list_util_layout_get_coord(Evas_Object *container, Evas_Object *first, int *coord_x, int *coord_y)
+{
+       int x = 0;
+       int y = 0;
+       int h = 0;
+       int off_y = 0;
+       qp_item_type_e item_type = QP_ITEM_TYPE_NONE;
+       struct appdata *ad = quickpanel_get_app_data();
+
+       retif(container == NULL, , "invalid parameter");
+       retif(ad == NULL, , "invalid data.");
+
+       Eina_List *list_tmp = NULL;
+       Eina_List *l = NULL;
+       Eina_List *l_next = NULL;
+       Evas_Object *obj = NULL;
+       Eina_List *item_list = elm_box_children_get(container);
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+               if (obj != NULL) {
+                       item_type = _list_util_get_item_type(obj);
+                       if (item_type == QP_ITEM_TYPE_ONGOING_NOTI
+                                       || item_type == QP_ITEM_TYPE_NOTI) {
+                               list_tmp = elm_box_children_get(obj);
+                               if (list_tmp != NULL) {
+                                       if (eina_list_count(list_tmp) != 0)
+                                               evas_object_geometry_get(obj, NULL, NULL, NULL, &h);
+
+                                       eina_list_free(list_tmp);
+                               }
+                       } else {
+                               evas_object_geometry_get(obj, NULL, NULL, NULL, &h);
+                       }
+
+                       off_y += h;
+                       h = 0;
+                       if (obj == first)
+                               break;
+
+               }
+       }
+
+       evas_object_geometry_get(container, &x, &y, NULL, &h);
+       if (off_y == 0 || y == 0)
+               ERR("Failed get a valid height offset : %d %d", off_y, y);
+
+
+       if (coord_x != NULL)
+               *coord_x = x;
+
+
+       if (coord_y != NULL)
+               *coord_y = y + off_y;
+
+
+       if (item_list != NULL)
+               eina_list_free(item_list);
+
+}
+
+Evas_Object *_list_util_get_first(Evas_Object *list, Evas_Object *new_obj)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj = NULL;
+       Evas_Object *first = NULL;
+       Eina_List *item_list = elm_box_children_get(list);
+
+       int *item_data = NULL;
+
+       retif(list == NULL, NULL, "invalid parameter");
+       retif(new_obj == NULL, NULL, "invalid parameter");
+
+       item_data = (int*)evas_object_data_get(new_obj, E_DATA_ITEM_LABEL_H);
+       retif(item_data == NULL, NULL, "invalid parameter");
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+               if (obj != NULL) {
+                       if (_list_util_item_compare(obj, new_obj) > 0)
+                               break;
+
+               }
+
+               first = obj;
+       }
+
+       if (item_list != NULL)
+               eina_list_free(item_list);
+
+
+       return first;
+}
+
+
+HAPI void quickpanel_list_util_item_unpack_by_object(Evas_Object *list , Evas_Object *item, int is_unpack_only, int is_hide)
+{
+       QP_VI *vi = NULL;
+
+       retif(list == NULL, , "invalid parameter");
+       retif(item == NULL, , "invalid parameter");
+
+       vi = quickpanel_vi_new_with_data(
+                       VI_OP_DELETE,
+                       _list_util_get_item_type(item),
+                       list,
+                       item,
+                       _anim_init_cb,
+                       _anim_job_cb,
+                       _anim_done_cb,
+                       _anim_done_cb,
+                       vi,
+                       NULL,
+                       is_unpack_only,
+                       is_hide);
+       quickpanel_vi_start(vi);
+}
+
+HAPI void quickpanel_list_util_sort_insert(Evas_Object *list, Evas_Object *new_obj)
+{
+       QP_VI *vi = NULL;
+
+       retif(list == NULL, , "invalid parameter");
+       retif(new_obj == NULL, , "invalid parameter");
+
+       vi = quickpanel_vi_new_with_data(
+                       VI_OP_INSERT,
+                       _list_util_get_item_type(new_obj),
+                       list,
+                       new_obj,
+                       _anim_init_cb,
+                       _anim_job_cb,
+                       _anim_done_cb,
+                       _anim_done_cb,
+                       vi,
+                       NULL,
+                       0,
+                       0);
+       quickpanel_vi_start(vi);
+}
+
+HAPI Elm_Transit *quickpanel_list_util_get_reorder_transit(Evas_Object *item, Elm_Transit *transit, int distance)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj = NULL;
+       Eina_List *item_list = NULL;
+       int is_start_relayout = 0;
+       Elm_Transit *transit_layout = NULL;
+       Evas_Object *container = NULL;
+
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, NULL, "invalid parameter");
+
+       container = ad->list;
+       retif(container == NULL, NULL, "invalid parameter");
+       retif(item == NULL, NULL, "invalid parameter");
+
+       item_list = elm_box_children_get(container);
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+               if (obj == item) {
+                       is_start_relayout = 1;
+               } else if (obj != NULL && is_start_relayout == 1) {
+                       transit_layout = elm_transit_add();
+                       if (transit_layout != NULL) {
+                               elm_transit_effect_translation_add(transit_layout, 0, 0, 0, distance);
+                               elm_transit_object_add(transit_layout, obj);
+                               elm_transit_duration_set(transit_layout,
+                                               quickpanel_vim_get_duration(VI_OP_REORDER));
+                               elm_transit_tween_mode_set(transit_layout,
+                                               quickpanel_vim_get_tweenmode(VI_OP_REORDER));
+                               elm_transit_objects_final_state_keep_set(transit_layout, EINA_TRUE);
+                               elm_transit_event_enabled_set(transit_layout, EINA_TRUE);
+                               if (transit != NULL)
+                                       elm_transit_chain_transit_add(transit, transit_layout);
+                               else
+                                       elm_transit_go(transit_layout);
+
+                       }
+               }
+       }
+
+       if (item_list != NULL)
+               eina_list_free(item_list);
+
+
+       return transit_layout;
+}
+
+static void _anim_init_insert(void *data)
+{
+       QP_VI *vi = data;
+       int coord_x = 0, coord_y = 0;
+       retif(vi == NULL, , "invalid parameter");
+
+       retif(vi->container == NULL, , "invalid parameter");
+       retif(vi->target == NULL, , "invalid parameter");
+
+       Evas_Object *container = vi->container;
+       Evas_Object *item = vi->target;
+       Evas_Object *first = NULL;
+
+       evas_object_clip_set(item, evas_object_clip_get(container));
+       evas_object_color_set(item, 0, 0, 0, 0);
+
+       first = _list_util_get_first(container, item);
+       _list_util_layout_get_coord(container, first, &coord_x, &coord_y);
+       evas_object_move(item, coord_x, coord_y);
+}
+
+static void _anim_job_insert(void *data)
+{
+
+       QP_VI *vi = data;
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj = NULL;
+       Eina_List *item_list = NULL;
+       int is_start_relayout = 0;
+       int item_width, item_height = 0;
+       int coord_x = 0, coord_y = 0;
+       Elm_Transit *transit_layout = NULL;
+       Elm_Transit *transit_fadein = NULL;
+       Evas_Object *container = NULL;
+       Evas_Object *item = NULL;
+       Evas_Object *first = NULL;
+
+       retif(vi == NULL, , "Invalid parameter");
+       retif(vi->container == NULL, , "Invalid parameter");
+       retif(vi->target == NULL, , "Invalid parameter");
+
+       container = vi->container;
+       item = vi->target;
+       item_list = elm_box_children_get(container);
+
+       first = _list_util_get_first(container, item);
+       _list_util_layout_get_coord(container, first, &coord_x, &coord_y);
+       evas_object_move(item, coord_x, coord_y);
+       is_start_relayout = (first == NULL) ? 1 : 0;
+
+       evas_object_geometry_get(item, NULL, NULL, &item_width, &item_height);
+       if (item_width == 0 && item_height == 0) {
+               ERR("Failed to get a size of item %d %d", item_width, item_height);
+               evas_object_size_hint_min_get(item, &item_width, &item_height);
+       }
+
+       if (vi->item_type == QP_ITEM_TYPE_ONGOING_NOTI) {
+               if (item_list != NULL)
+                       eina_list_free(item_list);
+
+               return;
+       }
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+               if (obj == first) {
+                       is_start_relayout = 1;
+               } else if (obj != NULL && is_start_relayout == 1) {
+                       transit_layout = elm_transit_add();
+                       if (transit_layout != NULL) {
+                               elm_transit_effect_translation_add(transit_layout, 0, 0, 0, item_height);
+                               elm_transit_object_add(transit_layout, obj);
+                               elm_transit_duration_set(transit_layout,
+                                               quickpanel_vim_get_duration(VI_OP_REORDER));
+                               elm_transit_tween_mode_set(transit_layout,
+                                               quickpanel_vim_get_tweenmode(VI_OP_REORDER));
+                               elm_transit_objects_final_state_keep_set(transit_layout, EINA_TRUE);
+                               elm_transit_go(transit_layout);
+                       } else {
+                               ERR("Failed to create a transit");
+                       }
+               }
+       }
+
+       if (item_list != NULL)
+               eina_list_free(item_list);
+
+
+       transit_fadein = elm_transit_add();
+       if (transit_fadein != NULL) {
+               elm_transit_object_add(transit_fadein, item);
+               elm_transit_effect_color_add(transit_fadein, 0, 0, 0, 0, 255, 255, 255, 255);
+               elm_transit_duration_set(transit_fadein,
+                               quickpanel_vim_get_duration(VI_OP_INSERT));
+               elm_transit_tween_mode_set(transit_fadein,
+                               quickpanel_vim_get_tweenmode(VI_OP_INSERT));
+               elm_transit_del_cb_set(transit_fadein, quickpanel_vi_done_cb_for_transit, vi);
+
+               if (transit_layout != NULL)
+                       elm_transit_chain_transit_add(transit_layout, transit_fadein);
+               else
+                       elm_transit_go(transit_fadein);
+
+       } else {
+               if (transit_layout != NULL)
+                       elm_transit_del(transit_layout);
+
+               quickpanel_vi_done(vi);
+               ERR("Failed to create all the transit");
+       }
+}
+
+static void _anim_done_insert(void *data)
+{
+       QP_VI *vi = data;
+       retif(data == NULL, , "invalid parameter");
+       retif(vi->container == NULL, , "invalid parameter");
+       retif(vi->target == NULL, , "invalid parameter");
+
+       Evas_Object *container = vi->container;
+       Evas_Object *item = vi->target;
+       Evas_Object *first = _list_util_get_first(container, item);
+
+       evas_object_color_set(item, 255, 255, 255, 255);
+
+       if (first == NULL)
+               elm_box_pack_start(container, item);
+       else
+               elm_box_pack_after(container, item, first);
+
+}
+
+static void _anim_job_delete(void *data)
+{
+       QP_VI *vi = data;
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj = NULL;
+       Eina_List *item_list = NULL;
+       int is_start_relayout = 0;
+       int item_width, item_height = 0;
+       Elm_Transit *transit_layout = NULL;
+       Elm_Transit *transit_fadeout = NULL;
+       Evas_Object *container = NULL;
+       Evas_Object *item = NULL;
+
+       retif(vi == NULL, , "Invalid parameter");
+       retif(vi->container == NULL, , "Invalid parameter");
+       retif(vi->target == NULL, , "Invalid parameter");
+
+       container = vi->container;
+       item = vi->target;
+       item_list = elm_box_children_get(container);
+
+       evas_object_geometry_get(item, NULL, NULL, &item_width, &item_height);
+       if (item_width == 0 && item_height == 0) {
+               ERR("Failed to get a size of item %d %d", item_width, item_height);
+               evas_object_size_hint_min_get(item, &item_width, &item_height);
+       }
+
+       transit_fadeout = elm_transit_add();
+       if (transit_fadeout != NULL) {
+               elm_transit_object_add(transit_fadeout, item);
+               elm_transit_effect_color_add(transit_fadeout, 255, 255, 255, 255, 0, 0, 0, 0);
+               elm_transit_objects_final_state_keep_set(transit_fadeout, EINA_TRUE);
+               elm_transit_tween_mode_set(transit_fadeout,
+                               quickpanel_vim_get_tweenmode(VI_OP_DELETE));
+               elm_transit_duration_set(transit_fadeout,
+                               quickpanel_vim_get_duration(VI_OP_DELETE));
+               elm_transit_go(transit_fadeout);
+
+               EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+                       if (obj == item) {
+                               is_start_relayout = 1;
+                       } else if (obj != NULL && is_start_relayout == 1) {
+                               transit_layout = elm_transit_add();
+                               if (transit_layout != NULL) {
+                                       elm_transit_effect_translation_add(transit_layout, 0, 0, 0, -item_height);
+                                       elm_transit_object_add(transit_layout, obj);
+                                       elm_transit_duration_set(transit_layout,
+                                                       quickpanel_vim_get_duration(VI_OP_REORDER));
+                                       elm_transit_tween_mode_set(transit_layout,
+                                                       quickpanel_vim_get_tweenmode(VI_OP_REORDER));
+                                       elm_transit_objects_final_state_keep_set(transit_layout, EINA_TRUE);
+                                       elm_transit_chain_transit_add(transit_fadeout, transit_layout);
+                               } else {
+                                       ERR("Failed to create a transit");
+                               }
+                       }
+               }
+       }
+
+       if (item_list != NULL)
+               eina_list_free(item_list);
+
+
+       if (transit_layout != NULL) {
+               elm_transit_del_cb_set(transit_layout, quickpanel_vi_done_cb_for_transit, vi);
+       } else if (transit_fadeout != NULL) {
+               elm_transit_del_cb_set(transit_fadeout, quickpanel_vi_done_cb_for_transit, vi);
+       } else {
+               ERR("Failed to create all the transit");
+               quickpanel_vi_done(vi);
+       }
+}
+
+static void _anim_done_delete(void *data)
+{
+       QP_VI *vi = data;
+
+       retif(vi == NULL, , "invalid parameter");
+       retif(vi->container == NULL, , "invalid parameter");
+       retif(vi->target == NULL, , "invalid parameter");
+
+       Evas_Object *container = vi->container;
+       Evas_Object *item = vi->target;
+
+       elm_box_unpack(container, item);
+
+       if (vi->extra_flag_2 == 1) {
+               evas_object_move(item, -10000, -10000);
+               quickpanel_vi_object_event_freeze_set(item, EINA_FALSE);
+       }
+
+       if (vi->extra_flag_1 == 0 && item != NULL) {
+               evas_object_del(item);
+               item = NULL;
+       }
+}
+
+static Eina_Bool _anim_init_cb(void *data)
+{
+       int i = 0;
+       QP_VI *vi = data;
+       retif(vi == NULL, EINA_FALSE, "invalid parameter");
+
+       static qp_vi_op_table anim_init_table[] = {
+               {
+                       .op_type = VI_OP_INSERT,
+                       .handler = _anim_init_insert,
+               },
+               {
+                       .op_type = VI_OP_NONE,
+                       .handler = NULL,
+               },
+       };
+
+       for (i = 0; anim_init_table[i].op_type != VI_OP_NONE; i++) {
+               if (anim_init_table[i].op_type != vi->op_type)
+                       continue;
+
+
+               anim_init_table[i].handler(vi);
+               break;
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool _anim_job_cb(void *data)
+{
+       int i = 0;
+       QP_VI *vi = data;
+       retif(vi == NULL, EINA_FALSE, "invalid parameter");
+
+       static qp_vi_op_table anim_job_table[] = {
+               {
+                       .op_type = VI_OP_INSERT,
+                       .handler = _anim_job_insert,
+               },
+               {
+                       .op_type = VI_OP_DELETE,
+                       .handler = _anim_job_delete,
+               },
+               {
+                       .op_type = VI_OP_NONE,
+                       .handler = NULL,
+               },
+       };
+
+       for (i = 0; anim_job_table[i].op_type != VI_OP_NONE; i++) {
+               if (anim_job_table[i].op_type != vi->op_type)
+                       continue;
+
+
+               anim_job_table[i].handler(vi);
+               break;
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool _anim_done_cb(void *data)
+{
+       int i = 0;
+       QP_VI *vi = data;
+       retif(vi == NULL, EINA_FALSE, "invalid parameter");
+
+       static qp_vi_op_table anim_done_table[] = {
+               {
+                       .op_type = VI_OP_INSERT,
+                       .handler = _anim_done_insert,
+               },
+               {
+                       .op_type = VI_OP_DELETE,
+                       .handler = _anim_done_delete,
+               },
+               {
+                       .op_type = VI_OP_NONE,
+                       .handler = NULL,
+               },
+       };
+
+       for (i = 0; anim_done_table[i].op_type != VI_OP_NONE; i++) {
+               if (anim_done_table[i].op_type != vi->op_type)
+                       continue;
+
+
+               anim_done_table[i].handler(vi);
+               break;
+       }
+
+       return EINA_TRUE;
+}
+
+HAPI void quickpanel_list_util_scroll_freeze_set(Eina_Bool is_freeze)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid data.");
+       retif(ad->scroller == NULL, , "invalid data.");
+
+       if (is_freeze == EINA_TRUE)
+               _viewer_freeze(ad->scroller);
+       else
+               _viewer_unfreeze(ad->scroller);
+}
diff --git a/src/media.c b/src/media.c
new file mode 100755 (executable)
index 0000000..18febe0
--- /dev/null
@@ -0,0 +1,473 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <glib.h>
+#include <unistd.h>
+
+#include <Elementary.h>
+
+#include <vconf.h>
+#include <metadata_extractor.h>
+#include <feedback.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <player.h>
+
+#include "common.h"
+#include "quickpanel-ui.h"
+#include "media.h"
+
+#define NEED_TO_DEBUG_LOCKUP_ISSUE
+
+static struct info {
+       int id;
+       int is_feedback_initialized;
+       player_h player;
+       sound_stream_info_h stream_info;
+       Ecore_Timer *playing_timer;
+} s_info = {
+       .player = NULL,
+       .playing_timer = NULL,
+       .stream_info = NULL,
+       .id = 0,
+       .is_feedback_initialized = 0,
+};
+
+static void _quickpanel_player_free(player_h *sound_player);
+
+static void _quickpanel_player_del_timeout_timer(void)
+{
+       if (s_info.playing_timer) {
+               ecore_timer_del(s_info.playing_timer);
+               s_info.playing_timer = NULL;
+       }
+}
+
+static Eina_Bool _quickpanel_player_timeout_cb(void *data)
+{
+       s_info.playing_timer = NULL;
+
+       retif(data == NULL, ECORE_CALLBACK_CANCEL, "invalid parameter");
+       player_h *sound_player = data;
+
+       _quickpanel_player_free(sound_player);
+       s_info.playing_timer = NULL;
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void _quickpanel_player_free_job_cb(void *data)
+{
+       player_h sound_player = data;
+       player_state_e state = PLAYER_STATE_NONE;
+
+       int ret = PLAYER_ERROR_NONE;
+       retif(sound_player == NULL, , "invalid parameter");
+
+#ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
+       ERR("before stopping media");
+#endif
+       if (player_get_state(sound_player, &state) == PLAYER_ERROR_NONE) {
+
+               INFO("the state of sound player %d", state);
+
+               if (state == PLAYER_STATE_PLAYING) {
+                       player_stop(sound_player);
+                       player_unprepare(sound_player);
+               }
+               if (state == PLAYER_STATE_READY)
+                       player_unprepare(sound_player);
+
+       }
+       player_destroy(sound_player);
+#ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
+       ERR("after stopping media");
+#endif
+
+       ret = sound_manager_destroy_stream_information(s_info.stream_info);
+       if (ret != SOUND_MANAGER_ERROR_NONE)
+               ERR("sound_manager_destroy_stream_information() get failed : %d", ret);
+
+
+       s_info.stream_info = NULL;
+
+       DBG("");
+}
+
+static void _quickpanel_player_free(player_h *sound_player)
+{
+       retif(sound_player == NULL, , "invalid parameter");
+       retif(*sound_player == NULL, , "invalid parameter");
+
+       ecore_job_add(_quickpanel_player_free_job_cb, *sound_player);
+       *sound_player = NULL;
+}
+
+static void _quickpanel_player_start_job_cb(void *data)
+{
+       int ret = PLAYER_ERROR_NONE;
+       player_h *sound_player = data;
+
+#ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
+       ERR("before playing media");
+#endif
+       ret = player_start(*sound_player);
+       if (ret != PLAYER_ERROR_NONE) { /* if directly return retor.. */
+               ERR("player_start [%d]", ret);
+               _quickpanel_player_free(sound_player);
+               return;
+       }
+       s_info.playing_timer = ecore_timer_add(QP_PLAY_DURATION_LIMIT,
+                       _quickpanel_player_timeout_cb, sound_player);
+#ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
+       ERR("after playing media");
+#endif
+}
+
+static void _quickpanel_player_completed_cb(void *user_data)
+{
+       retif(user_data == NULL, , "invalid parameter");
+       player_h *sound_player = user_data;
+
+       DBG("Media player completed");
+
+       _quickpanel_player_del_timeout_timer();
+       _quickpanel_player_free(sound_player);
+}
+
+static void _quickpanel_player_error_cb(int error_code, void *user_data)
+{
+       retif(user_data == NULL, , "invalid parameter");
+       player_h *sound_player = user_data;
+
+       ERR("Error code [%d]", (int)error_code);
+
+       _quickpanel_player_del_timeout_timer();
+       _quickpanel_player_free(sound_player);
+}
+
+HAPI int quickpanel_media_player_is_drm_error(int error_code)
+{
+       if (error_code == PLAYER_ERROR_DRM_EXPIRED
+                       || error_code == PLAYER_ERROR_DRM_NO_LICENSE
+                       || error_code == PLAYER_ERROR_DRM_FUTURE_USE
+                       || error_code == PLAYER_ERROR_DRM_NOT_PERMITTED)
+               return 1;
+
+
+       return 0;
+}
+
+HAPI int quickpanel_media_player_play(sound_type_e sound_type, const char *sound_file)
+{
+       player_h *sound_player = &s_info.player;
+       sound_stream_info_h *stream_info = &s_info.stream_info;
+
+       int ret = PLAYER_ERROR_NONE;
+       int sndRet = SOUND_MANAGER_ERROR_NONE;
+       player_state_e state = PLAYER_STATE_NONE;
+
+#ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
+       ERR("Start player");
+#endif
+       _quickpanel_player_del_timeout_timer();
+
+       if (*sound_player != NULL)
+               _quickpanel_player_free(sound_player);
+
+
+#ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
+       ERR("setting sound session start");
+#endif
+
+       if (*stream_info != NULL) {
+               sndRet = sound_manager_destroy_stream_information(*stream_info);
+               if (sndRet != SOUND_MANAGER_ERROR_NONE)
+                       ERR("sound_manager_destroy_stream_information() get failed : %x", ret);
+
+       }
+
+       if (sound_type == SOUND_TYPE_NOTIFICATION) {
+               sndRet = sound_manager_create_stream_information(SOUND_STREAM_TYPE_NOTIFICATION, NULL, NULL, stream_info);
+               if (sndRet != SOUND_MANAGER_ERROR_NONE) {
+                       ERR("sound_manager_create_stream_information() get failed :%x", sndRet);
+                       return PLAYER_ERROR_INVALID_PARAMETER;
+               }
+       }
+
+#ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
+       ERR("setting sound session finished");
+#endif
+
+#ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
+       ERR("player_create start");
+#endif
+       ret = player_create(sound_player);
+       if (ret != PLAYER_ERROR_NONE) {
+               ERR("creating the player handle failed[%d]", ret);
+               *sound_player = NULL;
+               return ret;
+       }
+#ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
+       ERR("player_create finished");
+#endif
+
+       player_get_state(*sound_player, &state);
+       if (state > PLAYER_STATE_READY) {
+               _quickpanel_player_free(sound_player);
+               return ret;
+       }
+
+       ret = player_set_uri(*sound_player, sound_file);
+       if (ret != PLAYER_ERROR_NONE) {
+               ERR("set attribute---profile_uri[%d]", ret);
+               _quickpanel_player_free(sound_player);
+               return ret;
+       }
+
+       if (*stream_info != NULL) {
+               ret = player_set_sound_stream_info(*sound_player, *stream_info);
+               if (ret != PLAYER_ERROR_NONE) {
+                       ERR("player_set_sound_stream_info failed : %d", ret);
+                       _quickpanel_player_free(sound_player);
+                       return ret;
+               }
+       }
+
+       ret = player_prepare(*sound_player);
+       if (ret != PLAYER_ERROR_NONE) {
+               ERR("realizing the player handle failed[%d]", ret);
+               _quickpanel_player_free(sound_player);
+               return ret;
+       }
+
+       player_get_state(*sound_player, &state);
+       if (state != PLAYER_STATE_READY) {
+               ERR("state of player is invalid %d", state);
+               _quickpanel_player_free(sound_player);
+               return ret;
+       }
+
+       /* register callback */
+       ret = player_set_completed_cb(*sound_player, _quickpanel_player_completed_cb, sound_player);
+       if (ret != PLAYER_ERROR_NONE) {
+               ERR("player_set_completed_cb() ERR: %x!!!!", ret);
+               _quickpanel_player_free(sound_player);
+               return ret;
+       }
+
+       ret = player_set_error_cb(*sound_player, _quickpanel_player_error_cb, sound_player);
+       if (ret != PLAYER_ERROR_NONE) {
+               _quickpanel_player_free(sound_player);
+               return ret;
+       }
+
+       ecore_job_add(_quickpanel_player_start_job_cb, sound_player);
+#ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
+       ERR("playing request");
+#endif
+
+       return ret;
+}
+
+static Eina_Bool _playable_check(const char *file_path)
+{
+       char *value = NULL;
+       int ret_meta =  METADATA_EXTRACTOR_ERROR_NONE;
+       metadata_extractor_h metadata = NULL;
+       Eina_Bool ret = EINA_FALSE;
+
+       ret_meta = metadata_extractor_create(&metadata);
+       if (ret_meta != METADATA_EXTRACTOR_ERROR_NONE) {
+               ERR("Failed to create metadata extractor:%d", ret_meta);
+               return ret;
+       }
+
+       if (metadata == NULL) {
+               ERR("Failed to create metadata extractor:%d", ret_meta);
+               return ret;
+       }
+
+       ret_meta = metadata_extractor_set_path(metadata, file_path);
+       if (ret_meta != METADATA_EXTRACTOR_ERROR_NONE) {
+               ERR("Failed to set path to meta extractor:%d", ret_meta);
+               metadata_extractor_destroy(metadata);
+               return ret;
+       }
+
+       ret_meta = metadata_extractor_get_metadata(metadata, METADATA_HAS_AUDIO, &value);
+       if (ret_meta != METADATA_EXTRACTOR_ERROR_NONE) {
+               ERR("Failed to get metadata:%d", ret_meta);
+               metadata_extractor_destroy(metadata);
+               return ret;
+       }
+
+       if (value && g_strcmp0(value, "0"))
+               ret = EINA_TRUE;
+
+
+       free(value);
+
+       DBG("%s :: playable[%d]", file_path, ret);
+       metadata_extractor_destroy(metadata);
+       return ret;
+}
+
+HAPI Eina_Bool quickpanel_media_playable_check(const char *file_path)
+{
+       Eina_Bool ret = EINA_FALSE;
+
+       /* Check file exist or not */
+       ret = ecore_file_exists(file_path);
+       if (ret == EINA_FALSE) {
+               ERR("%s file does not exist", file_path);
+               return ret;
+       }
+
+       /* Check file playable or not */
+       ret = _playable_check(file_path);
+       if (ret == EINA_FALSE) {
+               ERR("%s file does not playable", file_path);
+               return ret;
+       }
+
+       return ret;
+}
+
+
+HAPI void quickpanel_media_player_stop(void)
+{
+       _quickpanel_player_del_timeout_timer();
+
+       if (s_info.player != NULL)
+               _quickpanel_player_free(&s_info.player);
+
+
+       quickpanel_media_player_id_set(0);
+}
+
+HAPI void quickpanel_media_player_id_set(int id)
+{
+       s_info.id = id;
+}
+
+HAPI int quickpanel_media_player_id_get(void)
+{
+       return s_info.id;
+}
+
+HAPI int quickpanel_media_is_sound_enabled(void)
+{
+       int snd_status = 0, ret = -1;
+
+#ifdef VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS
+       int snd_disabled_status = 0;
+
+       ret = vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS, &snd_disabled_status);
+       msgif(ret != 0, "failed to get VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS");
+       ret = vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd_status);
+       msgif(ret != 0, "failed to get VCONFKEY_SETAPPL_SOUND_STATUS_BOOL");
+
+       if (snd_disabled_status == 0 && snd_status == 1)
+               return 1;
+
+#else
+       ret = vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd_status);
+       msgif(ret != 0, "failed to get VCONFKEY_SETAPPL_SOUND_STATUS_BOOL");
+
+       if (snd_status == 1)
+               return 1;
+
+#endif
+
+       return 0;
+}
+
+HAPI int quickpanel_media_is_vib_enabled(void)
+{
+       int vib_status = 0, ret = -1;
+
+       ret = vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vib_status);
+       if (ret == 0) {
+               if (vib_status == 1)
+                       return 1;
+       } else {
+               ERR("failed to get a value of VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL");
+       }
+
+       return 0;
+}
+
+HAPI void quickpanel_media_play_feedback(void)
+{
+       int snd_enabled = quickpanel_media_is_sound_enabled();
+       int vib_enabled = quickpanel_media_is_vib_enabled();
+
+       quickpanel_media_init();
+
+       if (snd_enabled == 1)
+               feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_TAP);
+       else  if (vib_enabled == 1)
+               feedback_play_type(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_TAP);
+
+}
+
+HAPI int quickpanel_media_set_mute_toggle(void)
+{
+       int ret = -1;
+
+       if (quickpanel_media_is_sound_enabled() == 1 ||
+                       quickpanel_media_is_vib_enabled() == 1) {
+               ret = vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, 0);
+               msgif(ret != 0, "failed to set VCONFKEY_SETAPPL_SOUND_STATUS_BOOL");
+
+               ret = vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 0);
+               msgif(ret != 0, "failed to set VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL");
+
+               return 0;
+       } else {
+               ret = vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, 1);
+               msgif(ret != 0, "failed to set VCONFKEY_SETAPPL_SOUND_STATUS_BOOL");
+
+               ret = vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 0);
+               msgif(ret != 0, "failed to set VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL");
+
+               return 1;
+       }
+}
+
+HAPI void quickpanel_media_init(void)
+{
+       if (s_info.is_feedback_initialized == 0) {
+               if (feedback_initialize() == FEEDBACK_ERROR_NONE)
+                       s_info.is_feedback_initialized = 1;
+               else
+                       ERR("failed to init feedback API");
+
+       }
+}
+
+HAPI void quickpanel_media_fini(void)
+{
+       if (s_info.is_feedback_initialized == 1) {
+               if (feedback_deinitialize() == FEEDBACK_ERROR_NONE)
+                       s_info.is_feedback_initialized = 0;
+               else
+                       ERR("failed to deinit feedback API");
+
+       }
+}
diff --git a/src/minictrl/minictrl.c b/src/minictrl/minictrl.c
new file mode 100755 (executable)
index 0000000..11c16c7
--- /dev/null
@@ -0,0 +1,900 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+#include <string.h>
+#include <stdbool.h>
+
+#include <minicontrol-viewer.h>
+#include <minicontrol-internal.h>
+#include <bundle.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "common_uic.h"
+#include "quickpanel-ui.h"
+#include "quickpanel_def.h"
+#include "list_util.h"
+#include "minictrl.h"
+#include "vi_manager.h"
+
+#ifdef QP_SCREENREADER_ENABLE
+#include "accessibility.h"
+#endif
+
+#define MINICONTROL_TYPE_STR_VIEWER "::[viewer="
+#define MINICONTROL_TYPE_STR_QUICKPANEL "QUICKPANEL"
+#define MINICONTROL_TYPE_STR_LOCKSCREEN "LOCKSCREEN"
+#define MINICONTROL_TYPE_STR_ONGOING "_ongoing]"
+#define MINICONTROL_VIEW_DATA "MINICONTROL_VIEW_DATA"
+
+#define THRESHOLD_DELETE_START 30
+#define THRESHOLD_DELETE_START_Y_LIMIT 60
+#define THRESHOLD_DISTANCE (200)
+#define THRESHOLD_DISTANCE_LOCK (500)
+
+#define MINICONTROL_BUNDLE_KEY_WIDTH "width"
+#define MINICONTROL_BUNDLE_KEY_HEIGHT "height"
+
+#define BUNDLE_BUFFER_LENGTH 100
+
+typedef enum _gesture_state_type {
+       STATE_NORMAL = 0,
+       STATE_GESTURE_WAIT,
+       STATE_GESTURE_CANCELED,
+       STATE_DELETED,
+} gesture_state_type;
+
+struct _viewer_item {
+       char *name;
+       unsigned int width;
+       unsigned int height;
+       Evas_Object *viewer;
+       void *data;
+
+       //for flick gesture
+       QP_VI *vi;
+       int obj_w;
+       int obj_h;
+       int press_x;
+       int press_y;
+       int distance;
+       int need_to_cancel_press;
+       gesture_state_type state;
+       int deletable;
+};
+
+static struct _info {
+       GHashTable *prov_table;
+       Eina_Bool mouse_event_blocker;
+} s_info = {
+       .prov_table = NULL,
+       .mouse_event_blocker = EINA_TRUE,
+};
+
+void _minictrl_sendview_rotation_event(const char* name, int angle);
+
+static int _viewer_check(const char *name)
+{
+       char *pos_start = NULL;
+
+       if (!name) {
+               ERR("Name is NULL");
+               return 0;
+       }
+
+       if ((pos_start = strstr(name, MINICONTROL_TYPE_STR_VIEWER)) != NULL) {
+
+               if (strstr(pos_start, MINICONTROL_TYPE_STR_QUICKPANEL) != NULL)
+                       return 1;
+               else
+                       return 0;
+
+       } else if (strstr(name, MINICONTROL_TYPE_STR_LOCKSCREEN) != NULL)
+               return 0;
+
+       return 1;
+}
+
+static void _viewer_unfreeze(Evas_Object *viewer)
+{
+       int i = 0, freezed_count = 0;
+
+       if (!viewer) {
+               ERR("Invalid parameter");
+               return;
+       }
+
+       freezed_count = elm_object_scroll_freeze_get(viewer);
+
+       for (i = 0 ; i < freezed_count; i++)
+               elm_object_scroll_freeze_pop(viewer);
+
+}
+
+static Evas_Object *_get_minictrl_obj(Evas_Object *layout)
+{
+       if (!layout) {
+               ERR("Invalid parameter");
+               return NULL;
+       }
+
+       return elm_object_part_content_get(layout, "elm.icon");
+}
+
+static void _viewer_set_size(Evas_Object *layout, void *data, int width, int height)
+{
+       Evas_Object *viewer;
+       struct appdata *ad;
+       int max_width;
+       int resized_width;
+       int is_landscape;
+
+       if (!layout || !data || width < 0 || height < 0) {
+               ERR("Invalid parameters (%p, %p, %d, %d)", layout, data, width, height);
+               return;
+       }
+
+       viewer = _get_minictrl_obj(layout);
+       if (!viewer) {
+               ERR("Unable to get the 'viewer'");
+               return;
+       }
+
+       ad = data;
+
+       if (ad->angle == 0 || ad->angle == 180)
+               is_landscape = 0;
+       else
+               is_landscape = 1;
+
+
+       if (width > ad->win_width)
+               DBG("MC Size is not valid. it is larger than window size: %dx%d (%dx%d) %d", width, height, ad->win_width, ad->win_height, ad->angle);
+
+       max_width  = is_landscape ? ad->win_height : ad->win_width;
+       resized_width = (width > max_width) ? max_width : width;
+
+       DBG("minicontroller view is resized to w:%d/%d(%d) h:%d Landscape[%d]", resized_width, max_width, width, height, is_landscape);
+
+       evas_object_size_hint_min_set(viewer, resized_width, height);
+       evas_object_size_hint_max_set(viewer, resized_width, height);
+}
+
+static void _viewer_item_free(struct _viewer_item *item)
+{
+       struct appdata *ad;
+
+       ad = quickpanel_get_app_data();
+       if (!ad || !ad->list || !item) {
+               ERR("Invalid paramter %p, %p, %p", ad, ad ? ad->list : NULL, item);
+               return;
+       }
+
+       free(item->name);
+
+       if (item->viewer) {
+               quickpanel_list_util_item_unpack_by_object(ad->list, item->viewer, 0, 0);
+               quickpanel_list_util_del_item_type(item->viewer);
+               evas_object_del(item->viewer);
+       }
+
+       free(item);
+}
+
+static bool _check_deletable(Evas_Object *obj)
+{
+       struct _viewer_item *vit;
+
+       vit = evas_object_data_get(obj, MINICONTROL_VIEW_DATA);
+       if (vit)
+               return vit->deletable;
+
+       return TRUE;
+}
+
+static void _mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Mouse_Down *ev;
+       struct _viewer_item *vit;
+
+       if (s_info.mouse_event_blocker == EINA_TRUE)
+               s_info.mouse_event_blocker = EINA_FALSE;
+
+
+       vit = evas_object_data_get(obj, MINICONTROL_VIEW_DATA);
+       ev = (Evas_Event_Mouse_Down *)event_info;
+
+       if (!ev || !vit) {
+               ERR("ev %p, vit %p", ev, vit);
+               return;
+       }
+
+       evas_object_geometry_get(obj, NULL, NULL, &vit->obj_w, &vit->obj_h);
+
+       vit->press_x = ev->canvas.x;
+       vit->press_y = ev->canvas.y;
+       vit->state = STATE_NORMAL;
+
+       DBG("mouse down:%d %d %d", vit->obj_w, vit->obj_h, vit->state);
+
+       if (vit->vi != NULL) {
+               quickpanel_vi_user_event_del(vit->vi);
+               vit->vi = NULL;
+       }
+
+       vit->need_to_cancel_press = 0;
+}
+
+static void _mouse_move_cb(void* data, Evas* e, Evas_Object* obj, void* event_info)
+{
+       static int vi_start_x = 0;
+       static int delta_prev = -1;
+       int delta_x;
+       int x;
+       int y;
+       int w;
+       int h;
+       Evas_Event_Mouse_Move* ev;
+       struct _viewer_item *vit;
+       struct appdata *ad;
+
+       if (s_info.mouse_event_blocker == EINA_TRUE)
+               return;
+
+
+       ad = data;
+       ev = event_info;
+       vit = evas_object_data_get(obj, MINICONTROL_VIEW_DATA);
+       if (!ev || !vit || !ad) {
+               ERR("ev: %p, vit: %p, ad: %p", ev, vit, ad);
+               return;
+       }
+
+       if (vit->state == STATE_GESTURE_CANCELED) {
+               DBG("deletion has been canceled");
+               return;
+       }
+
+       if (!_check_deletable(obj)) {
+               DBG("vit->deletable is false");
+               return;
+       }
+
+       evas_object_geometry_get(obj, &x, &y, &w, &h);
+       delta_x = (ev->cur.output.x - vit->press_x) / 2;
+
+       switch (vit->state) {
+       case STATE_NORMAL:
+               if (abs(delta_x) >= THRESHOLD_DELETE_START) {
+                       QP_VI *vi;
+
+                       DBG("start a deletion");
+                       vit->state = STATE_GESTURE_WAIT;
+
+                       vi_start_x = delta_x;
+
+                       vi = quickpanel_vi_new_with_data(
+                                       VI_OP_DELETE,
+                                       QP_ITEM_TYPE_NOTI,
+                                       NULL,
+                                       obj,
+                                       NULL,
+                                       NULL,
+                                       NULL,
+                                       NULL, /* _drag_cancel_cb, */
+                                       NULL, /* vi == null */
+                                       NULL,
+                                       0,
+                                       0);
+
+                       if (vi) {
+                               vit->vi = vi;
+                               quickpanel_vi_user_event_add(vi);
+                       } else {
+                               ERR("Unable to create a 'vi'");
+                       }
+
+                       vit->need_to_cancel_press = 1;
+               }
+               break;
+       case STATE_GESTURE_WAIT:
+               if (delta_prev != delta_x) {
+                       Evas_Map *map;
+
+                       map = evas_map_new(4);
+                       if (map != NULL) {
+                               evas_map_util_points_populate_from_object(map, obj);
+                               evas_map_util_points_populate_from_geometry(map, x + delta_x - vi_start_x, y, w, h, 0);
+                               evas_object_map_enable_set(obj, EINA_TRUE);
+                               evas_object_map_set(obj, map);
+                               evas_map_free(map);
+                               _viewer_unfreeze(ad->scroller);
+                       }
+                       delta_prev = delta_x;
+               }
+               break;
+       default:
+               break;
+       }
+
+       vit->distance = delta_x;
+}
+
+static void _minictrl_remove(const char *name, void *data)
+{
+       DBG("_minictrl_remove [%s]", name);
+
+
+       minicontrol_viewer_send_event(name, MINICONTROL_VIEWER_EVENT_REPORT_ANGLE, NULL);
+
+       if (s_info.prov_table) {
+               if (g_hash_table_remove(s_info.prov_table, name)) {
+                       DBG("success to remove %s", name);
+                       if (!data) {
+                               ERR("data is NULL");
+                               /**
+                                * @todo
+                                * Oh, this function doesn't handles "data".
+                                * Why does this has to check its existence??
+                                */
+                               return;
+                       }
+               } else {
+                       WARN("unknown provider name : %s", name);
+               }
+       }
+}
+
+static void _mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct _viewer_item *vit;
+       struct appdata *ad;
+       int swipe_distance;
+
+       if (s_info.mouse_event_blocker == EINA_FALSE)
+               s_info.mouse_event_blocker = EINA_TRUE;
+
+
+       ad = data;
+       vit = evas_object_data_get(obj, MINICONTROL_VIEW_DATA);
+       if (!vit || !ad) {
+               ERR("vit: %p, ad: %p", vit, ad);
+               return;
+       }
+
+       _viewer_unfreeze(ad->scroller);
+
+       if (!_check_deletable(obj))
+               swipe_distance = THRESHOLD_DISTANCE_LOCK;
+       else
+               swipe_distance = THRESHOLD_DISTANCE;
+
+
+       switch (vit->state) {
+       case STATE_GESTURE_WAIT:
+               if (abs(vit->distance) >= (swipe_distance - 10)) {
+                       Elm_Transit *transit_flick;
+                       int x;
+
+                       x = abs(vit->distance) - THRESHOLD_DELETE_START;
+
+                       if (vit->distance > 0) {
+                               evas_object_map_set(obj, NULL);
+                               transit_flick = elm_transit_add();
+                               if (transit_flick != NULL) {
+                                       elm_transit_effect_translation_add(transit_flick, x, 0, 480, 0);
+                                       elm_transit_object_add(transit_flick, obj);
+                                       elm_transit_duration_set(transit_flick, 0.25 * (480 - x) / 480);
+                                       elm_transit_tween_mode_set(transit_flick, ELM_TRANSIT_TWEEN_MODE_LINEAR);
+                                       elm_transit_objects_final_state_keep_set(transit_flick, EINA_TRUE);
+                                       elm_transit_go(transit_flick);
+                                       _minictrl_remove(vit->name, vit->data);
+                               }
+                       } else if (vit->distance < 0) {
+                               evas_object_map_set(obj, NULL);
+                               transit_flick = elm_transit_add();
+                               if (transit_flick != NULL) {
+                                       elm_transit_effect_translation_add(transit_flick, -x, 0, -480, 0);
+                                       elm_transit_object_add(transit_flick, obj);
+                                       elm_transit_duration_set(transit_flick, 0.25 * (480 - x) / 480);
+                                       elm_transit_tween_mode_set(transit_flick, ELM_TRANSIT_TWEEN_MODE_LINEAR);
+                                       elm_transit_objects_final_state_keep_set(transit_flick, EINA_TRUE);
+                                       elm_transit_go(transit_flick);
+                                       _minictrl_remove(vit->name, vit->data);
+                               }
+                       }
+               } else {
+                       evas_object_map_enable_set(obj, EINA_FALSE);
+               }
+
+               if (vit->vi != NULL) {
+                       quickpanel_vi_user_event_del(vit->vi);
+                       vit->vi = NULL;
+               }
+               break;
+       case STATE_GESTURE_CANCELED:
+               evas_object_map_enable_set(obj, EINA_FALSE);
+
+               if (vit->vi != NULL) {
+                       quickpanel_vi_user_event_del(vit->vi);
+                       vit->vi = NULL;
+               }
+               break;
+       default:
+               break;
+       }
+
+       vit->state = STATE_NORMAL;
+}
+
+static Evas_Object *_minictrl_create_view(struct appdata *ad, const char *name)
+{
+       Evas_Object *layout;
+       Evas_Object *viewer;
+       Evas_Object *focus;
+
+       if (!ad || !ad->list || !name) {
+               ERR("Invalid parameters: %p %p %p", ad, ad ? ad->list : NULL, name);
+               return NULL;
+       }
+
+       layout = elm_layout_add(ad->list);
+       if (!layout) {
+               ERR("Unable to create a layout");
+               return NULL;
+       }
+
+       elm_layout_file_set(layout, util_get_res_file_path(DEFAULT_EDJ), "quickpanel/minictrl/default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(layout);
+
+       viewer = minicontrol_viewer_add(layout, name);
+       if (!viewer) {
+               ERR("fail to add viewer - %s", name);
+               evas_object_del(layout);
+               return NULL;
+       }
+       elm_object_focus_allow_set(viewer, EINA_TRUE);
+       elm_object_part_content_set(layout, "elm.icon", viewer);
+
+       evas_object_event_callback_add(viewer, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, ad);
+       evas_object_event_callback_add(viewer, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, ad);
+       evas_object_event_callback_add(viewer, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, ad);
+
+       focus = quickpanel_accessibility_ui_get_focus_object(layout);
+       elm_object_part_content_set(layout, "focus", focus);
+#ifdef QP_SCREENREADER_ENABLE
+       Evas_Object *ao;
+       ao = quickpanel_accessibility_screen_reader_object_get(layout, SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", layout);
+       if (ao != NULL)
+               elm_access_info_cb_set(ao, ELM_ACCESS_TYPE, quickpanel_accessibility_info_cb, _NOT_LOCALIZED("Mini controller"));
+#endif
+
+       return layout;
+}
+
+static int _minictrl_is_ongoing(const char *str)
+{
+       if (str == NULL)
+               return 0;
+
+       if (strstr(str, MINICONTROL_TYPE_STR_ONGOING) != NULL)
+               return 1;
+       else
+               return 0;
+
+}
+
+static void _minictrl_add(const char *name, unsigned int width, unsigned int height, void *data)
+{
+       struct _viewer_item *vit = NULL;
+       qp_item_type_e type;
+       struct appdata *ad;
+       Evas_Object *viewer = NULL;
+
+       if (!name || !data) {
+               ERR("name: %p, data: %p", name, data);
+               return;
+       }
+
+       ad = data;
+       if (!ad->list) {
+               ERR("List is null");
+               return;
+       }
+
+       if (s_info.prov_table) {
+               struct _viewer_item *found;
+
+               found = g_hash_table_lookup(s_info.prov_table, name);
+               if (found) {
+                       ERR("already have it : %s", name);
+                       return;
+               }
+       } else {
+               ERR("s_info.prov_table is NULL");
+               return;
+       }
+
+       /* elm_plug receives 'server_del' event,
+        * if it repeats connect and disconnect frequently.
+        *
+        */
+       viewer = _minictrl_create_view(ad, name);
+       if (!viewer) {
+               ERR("Failed to create view[%s]", name);
+               return;
+       }
+
+       _viewer_set_size(viewer, ad, width, height);
+       quickpanel_uic_initial_resize(viewer,
+                       (height > QP_THEME_LIST_ITEM_MINICONTRL_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT)
+                       ? height : QP_THEME_LIST_ITEM_MINICONTRL_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+
+       vit = malloc(sizeof(*vit));
+       if (!vit) {
+               ERR("fail to alloc vit");
+               evas_object_del(viewer);
+               return;
+       }
+
+       if (_minictrl_is_ongoing(name) == 1)
+               type = QP_ITEM_TYPE_MINICTRL_ONGOING;
+       else
+               type = QP_ITEM_TYPE_MINICTRL_MIDDLE;
+
+       vit->name = strdup(name);
+       if (!vit->name) {
+               ERR("strdup: %d", errno);
+               evas_object_del(viewer);
+               free(vit);
+               return;
+       }
+       vit->width = width;
+       vit->height = height;
+       vit->viewer = viewer;
+       vit->data = data;
+       vit->deletable = 1;
+
+       quickpanel_list_util_set_item_type(vit->viewer, type);
+       quickpanel_list_util_sort_insert(ad->list, vit->viewer);
+       evas_object_data_set(_get_minictrl_obj(viewer), MINICONTROL_VIEW_DATA, vit);
+
+       g_hash_table_insert(s_info.prov_table, g_strdup(name), vit);
+
+       DBG("success to add minicontrol %s", name);
+       _minictrl_sendview_rotation_event(vit->name, ad->angle);
+}
+
+static void _minictrl_update(const char *name, unsigned int width, unsigned int height, void *data)
+{
+       struct appdata *ad = data;
+       struct _viewer_item *found = NULL;
+
+       if (!s_info.prov_table || !ad) {
+               ERR("name: %s, table: %p, ad: %p", name, s_info.prov_table, ad);
+               return;
+       }
+
+       found = g_hash_table_lookup(s_info.prov_table, name);
+       if (!found) {
+               WARN("unknown provider name : %s", name);
+               return;
+       }
+
+       if (found->viewer) {
+               _viewer_set_size(found->viewer, ad, width, height);
+               quickpanel_uic_initial_resize(found->viewer,
+                               (height > QP_THEME_LIST_ITEM_MINICONTRL_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT)
+                               ? height : QP_THEME_LIST_ITEM_MINICONTRL_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT);
+       }
+}
+
+static void _minictrl_lock(const char *name)
+{
+       struct _viewer_item *found;
+
+       if (!s_info.prov_table) {
+               ERR("table is empty: %s", name);
+               return;
+       }
+
+       DBG("minictrl_lock %s", name);
+       found = g_hash_table_lookup(s_info.prov_table, name);
+       if (!found) {
+               WARN("unknown provider name : %s", name);
+               return;
+       }
+
+       if (found->viewer) {
+               struct _viewer_item *vit;
+
+               vit = evas_object_data_del(_get_minictrl_obj(found->viewer), MINICONTROL_VIEW_DATA);
+               if (vit) {
+                       vit->deletable = 0;
+                       evas_object_data_set(_get_minictrl_obj(found->viewer), MINICONTROL_VIEW_DATA, vit);
+               } else {
+                       WARN("vit is NULL");
+               }
+       }
+}
+
+static void _mctrl_viewer_event_cb(minicontrol_event_e event, const char *name, bundle *event_arg, void *data)
+{
+       struct appdata *ad;
+       int ret;
+       int *width;
+       int *height;
+       int _width;
+       int _height;
+       size_t bundle_size;
+
+       if (!data || !name) {
+               ERR("Invalid parameter");
+               return;
+       }
+
+       ad = data;
+
+       if (_viewer_check(name) == 0) {
+               ERR("%s: ignored", name);
+               return;
+       }
+
+       if ((int)event == MINICONTROL_EVENT_REQUEST_LOCK) {
+               /**
+                * This event type is extra one. not in the enumeration list.
+                */
+               _minictrl_lock(name);
+       } else {
+               switch (event) {
+               case MINICONTROL_EVENT_START:
+                       ret = bundle_get_byte(event_arg, MINICONTROL_BUNDLE_KEY_WIDTH, (void **)&width, &bundle_size);
+                       if (ret != BUNDLE_ERROR_NONE || bundle_size != sizeof(int)) {
+                               ERR("Failed to get bundle value(width) %d : %d", ret, bundle_size);
+                               _width = 0;
+                               width = &_width;
+                       }
+
+                       ret = bundle_get_byte(event_arg, MINICONTROL_BUNDLE_KEY_HEIGHT, (void **)&height, &bundle_size);
+                       if (ret != BUNDLE_ERROR_NONE || bundle_size != sizeof(int)) {
+                               ERR("Failed to get bundle value(height) : %d", ret);
+                               _height = 0;
+                               height = &_height;
+                       }
+
+                       DBG("Name: %s, Size: %dx%d", name, *width, *height);
+                       _minictrl_add(name, *width, *height, data);
+                       break;
+               case MINICONTROL_EVENT_RESIZE:
+                       ret = bundle_get_byte(event_arg, MINICONTROL_BUNDLE_KEY_WIDTH, (void **)&width, &bundle_size);
+                       if (ret != BUNDLE_ERROR_NONE || bundle_size != sizeof(int)) {
+                               ERR("Failed to get bundle value(width) %d : %d", ret, bundle_size);
+                               _width = 0;
+                               width = &_width;
+                       }
+
+                       ret = bundle_get_byte(event_arg, MINICONTROL_BUNDLE_KEY_HEIGHT, (void **)&height, &bundle_size);
+                       if (ret != BUNDLE_ERROR_NONE || bundle_size != sizeof(int)) {
+                               ERR("Failed to get bundle value(height) : %d", ret);
+                               _height = 0;
+                               height = &_height;
+                       }
+
+                       DBG("Name: %s, Size: %dx%d", name, *width, *height);
+                       _minictrl_update(name, *width, *height, data);
+                       break;
+               case MINICONTROL_EVENT_STOP:
+                       _minictrl_remove(name, data);
+                       break;
+               case MINICONTROL_EVENT_REQUEST_HIDE:
+                       quickpanel_uic_close_quickpanel(true, 0);
+                       break;
+               case MINICONTROL_EVENT_REQUEST_ANGLE:
+                       if (ad->list != NULL) {
+                               ERR("need to broadcasting angle by %s %d", name, event);
+                               _minictrl_sendview_rotation_event(name, ad->angle);
+                       }
+                       break;
+               default:
+                       break;
+               }
+       }
+}
+
+static int _init(void *data)
+{
+       minicontrol_error_e ret;
+
+       if (!data) {
+               ERR("Invalid parameter");
+               return QP_FAIL;
+       }
+
+       s_info.prov_table = g_hash_table_new_full(g_str_hash, g_str_equal,
+                       (GDestroyNotify)g_free,
+                       (GDestroyNotify)_viewer_item_free);
+
+       ret = minicontrol_viewer_set_event_cb(_mctrl_viewer_event_cb, data);
+       if (ret != MINICONTROL_ERROR_NONE) {
+               ERR("fail to minicontrol_viewer_set_event_cb()- %d", ret);
+               return QP_FAIL;
+       }
+
+       return QP_OK;
+}
+
+static int _fini(void *data)
+{
+       minicontrol_error_e ret;
+
+       ret = minicontrol_viewer_unset_event_cb();
+       if (ret != MINICONTROL_ERROR_NONE)
+               ERR("fail to minicontrol_viewer_unset_event_cb()- %d", ret);
+
+
+       if (s_info.prov_table) {
+               g_hash_table_destroy(s_info.prov_table);
+               s_info.prov_table = NULL;
+       }
+
+       return QP_OK;
+}
+
+static int _suspend(void *data)
+{
+       struct appdata *ad;
+
+       ad = data;
+       if (!ad) {
+               ERR("Invalid parameter");
+               return QP_FAIL;
+       }
+
+       if (ad->list != NULL)
+               _viewer_unfreeze(ad->scroller);
+
+       return QP_OK;
+}
+
+static int _resume(void *data)
+{
+       struct appdata *ad;
+
+       ad = data;
+       if (!ad) {
+               ERR("Invalid parameter");
+               return QP_FAIL;
+       }
+
+       if (ad->list != NULL)
+               _viewer_unfreeze(ad->scroller);
+
+
+       return QP_OK;
+}
+
+HAPI void quickpanel_minictrl_rotation_report(int angle)
+{
+       bundle *event_arg_bundle;
+
+       if (s_info.prov_table == NULL)
+               return;
+
+
+       if (g_hash_table_size(s_info.prov_table) <= 0)
+               return;
+
+
+       GHashTableIter iter;
+       gpointer key, value;
+
+       g_hash_table_iter_init(&iter, s_info.prov_table);
+       while (g_hash_table_iter_next(&iter, &key, &value)) {
+               INFO("minicontrol name:%s rotation:%d", (char *)key, angle);
+               event_arg_bundle = bundle_create();
+               if (event_arg_bundle) {
+                       char bundle_value_buffer[BUNDLE_BUFFER_LENGTH] = { 0, };
+                       snprintf(bundle_value_buffer, sizeof(bundle_value_buffer) - 1, "%d", angle);
+                       bundle_add_str(event_arg_bundle, "angle", bundle_value_buffer);
+                       minicontrol_viewer_send_event(key, MINICONTROL_VIEWER_EVENT_REPORT_ANGLE, event_arg_bundle);
+                       bundle_free(event_arg_bundle);
+               }
+       }
+}
+
+void _minictrl_sendview_rotation_event(const char* name, int angle)
+{
+       bundle *event_arg_bundle;
+
+       if (!name) {
+               ERR("Invalid parameter");
+               return;
+       }
+
+       if (s_info.prov_table == NULL)
+               return;
+
+
+       if (g_hash_table_size(s_info.prov_table) <= 0)
+               return;
+
+
+       INFO("minicontrol name:%s rotation:%d", name, angle);
+       event_arg_bundle = bundle_create();
+       if (event_arg_bundle) {
+               char bundle_value_buffer[BUNDLE_BUFFER_LENGTH] = { 0, };
+
+               snprintf(bundle_value_buffer, sizeof(bundle_value_buffer) - 1, "%d", angle);
+               bundle_add_str(event_arg_bundle, "angle", bundle_value_buffer);
+               minicontrol_viewer_send_event(name, MINICONTROL_VIEWER_EVENT_REPORT_ANGLE, event_arg_bundle);
+               bundle_free(event_arg_bundle);
+       }
+}
+
+static void _minictrl_send_view_event_cb(gpointer key, gpointer value, gpointer user_data)
+{
+       if (!key) {
+               ERR("Key is null");
+               return;
+       }
+
+       bundle *event_arg_bundle;
+
+       event_arg_bundle = bundle_create();
+       if (event_arg_bundle) {
+               minicontrol_viewer_event_e event;
+
+               event = (minicontrol_viewer_event_e)user_data;
+               minicontrol_viewer_send_event(key, event, event_arg_bundle);
+               bundle_free(event_arg_bundle);
+       }
+}
+
+static void _minictrl_opened(void *data)
+{
+       DBG("");
+
+       g_hash_table_foreach(s_info.prov_table, _minictrl_send_view_event_cb, (gpointer)MINICONTROL_VIEWER_EVENT_SHOW);
+}
+
+static void _minictrl_closed(void *data)
+{
+       DBG("");
+       g_hash_table_foreach(s_info.prov_table, _minictrl_send_view_event_cb, (gpointer)MINICONTROL_VIEWER_EVENT_HIDE);
+}
+
+QP_Module minictrl = {
+       .name = "minictrl",
+       .init = _init,
+       .fini = _fini,
+       .suspend = _suspend,
+       .resume = _resume,
+       .hib_enter = NULL,
+       .hib_leave = NULL,
+       .lang_changed = NULL,
+       .refresh = NULL,
+       .get_height = NULL,
+       .qp_opened = _minictrl_opened,
+       .qp_closed = _minictrl_closed,
+};
+
+/* End of a file */
diff --git a/src/modules.c b/src/modules.c
new file mode 100755 (executable)
index 0000000..3cb6255
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+
+#include "common.h"
+#include "quickpanel-ui.h"
+#include "modules.h"
+
+/*******************************************************************
+ *
+ * MODULES
+ *
+ *****************************************************************/
+
+#ifdef QP_SETTING_ENABLE
+/* setting */
+extern QP_Module settings;
+extern QP_Module settings_view_featured;
+extern QP_Module settings_view_all;
+#endif /* QP_SETTING_ENABLE */
+
+#ifdef QP_MINICTRL_ENABLE
+extern QP_Module minictrl;
+#endif /* QP_MINICTRL_ENABLE */
+
+#ifdef QP_BRIGHTNESS_ENABLE
+/* brightness */
+extern QP_Module brightness_ctrl;
+#endif /* QP_BRIGHTNESS_ENABLE */
+
+#ifdef QP_ANIMATED_IMAGE_ENABLE
+extern QP_Module animated_image;
+#endif
+
+extern QP_Module vi_manager;
+
+/* notification */
+extern QP_Module noti;
+extern QP_Module activenoti;
+extern QP_Module qp_datetime_controller;
+extern QP_Module qp_datetime_view;
+
+/* voice control */
+#ifdef QP_VOICE_CONTROL_ENABLE
+extern QP_Module voice_control;
+#endif
+
+/* do not change the order of modules, result may be changed up to order */
+static QP_Module *modules[] = {
+       &vi_manager,
+       &qp_datetime_controller,
+       &qp_datetime_view,
+#ifdef QP_SETTING_ENABLE
+       &settings,
+       &settings_view_featured,
+#endif /* QP_SETTING_ENABLE */
+#ifdef QP_MINICTRL_ENABLE
+       &minictrl,
+#endif /* QP_MINICTRL_ENABLE */
+#ifdef QP_BRIGHTNESS_ENABLE
+       &brightness_ctrl,
+#endif /* QP_BRIGHTNESS_ENABLE */
+       &noti,
+       &activenoti,
+#ifdef QP_ANIMATED_IMAGE_ENABLE
+       &animated_image,
+#endif
+#ifdef QP_VOICE_CONTROL_ENABLE
+       &voice_control,
+#endif
+};
+
+HAPI int quickpanel_modules_init(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->init)
+                       modules[i]->init(data);
+
+
+               if (modules[i]->init_job_cb)
+                       ecore_job_add(modules[i]->init_job_cb, data);
+
+       }
+
+       return QP_OK;
+}
+
+HAPI int quickpanel_modules_fini(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->fini)
+                       modules[i]->fini(data);
+
+       }
+
+       return QP_OK;
+}
+
+HAPI int quickpanel_modules_suspend(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->suspend)
+                       modules[i]->suspend(data);
+
+       }
+
+       return QP_OK;
+}
+
+HAPI int quickpanel_modules_resume(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->resume)
+                       modules[i]->resume(data);
+
+       }
+
+       return QP_OK;
+}
+
+HAPI int quickpanel_modules_hib_enter(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->hib_enter)
+                       modules[i]->hib_enter(data);
+
+       }
+
+       return QP_OK;
+}
+
+HAPI int quickpanel_modules_hib_leave(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->hib_leave)
+                       modules[i]->hib_leave(data);
+
+       }
+
+       return QP_OK;
+}
+
+/******************************************************************
+ *
+ * LANGUAGE
+ *
+ ****************************************************************/
+
+HAPI void quickpanel_modules_lang_change(void *data)
+{
+       int i;
+       retif(data == NULL, , "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->lang_changed)
+                       modules[i]->lang_changed(data);
+
+       }
+}
+
+HAPI void quickpanel_modules_refresh(void *data)
+{
+       int i;
+       retif(data == NULL, , "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->refresh)
+                       modules[i]->refresh(data);
+
+       }
+}
+
+/******************************************************************
+ *
+ * Quickpanel open/close Events
+ *
+ ****************************************************************/
+HAPI int quickpanel_modules_opened(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->qp_opened)
+                       modules[i]->qp_opened(data);
+
+       }
+
+       return QP_OK;
+}
+
+HAPI int quickpanel_modules_closed(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->qp_closed)
+                       modules[i]->qp_closed(data);
+
+       }
+
+       return QP_OK;
+}
diff --git a/src/notifications/activenoti.c b/src/notifications/activenoti.c
new file mode 100755 (executable)
index 0000000..bdc84d0
--- /dev/null
@@ -0,0 +1,2010 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+
+#include <vconf.h>
+#include <app_control.h>
+#include <notification.h>
+#include <feedback.h>
+#include <system_settings.h>
+#include <notification_internal.h>
+#include <notification_setting_internal.h>
+#include <notification_text_domain.h>
+#include <player.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <app.h>
+#include <camera.h>
+#include <efl_extension.h>
+#include <app_control_internal.h>
+#include <bundle_internal.h>
+
+#include "common.h"
+#include "common_uic.h"
+#include "quickpanel-ui.h"
+#include "media.h"
+#include "noti_node.h"
+#include "noti.h"
+#include "noti_win.h"
+#include "noti_util.h"
+#include "animated_icon.h"
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+#include "emergency_mode.h"
+#endif
+
+#define QP_ACTIVENOTI_DURATION 3
+#define QP_ACTIVENOTI_DETAIL_DURATION 6
+
+#define ACTIVENOTI_MSG_LEN 100
+
+#define DELAY_TIMER_VALUE 0.480
+#define DEL_TIMER_VALUE        8.0
+#define SHOW_MIN_TIMER_VALUE   1.0
+#define RELEASE_TIME 8.0
+
+#define ENTRY_FONT_SIZE ELM_SCALE_SIZE(31)
+#define ENTRY_LINE_HEIGHT ELM_SCALE_SIZE(41)
+#define ENTRY_LINE_MAX_HEIGHT ELM_SCALE_SIZE(140.5)
+#define BUTTON_COLOR                     255, 255, 255, 255
+#define DEFAULT_TEXT_INPUT_MAX_LENGTH 160
+#define DEFAULT_SEND_BUTTON_IMG        "noti_icons/messages_btn_send.png"
+
+static struct info {
+       Evas_Object *activenoti;
+       Evas_Object *layout;
+       Evas_Object *btnbox;
+       Evas_Object *entrybox;
+       Evas_Object *text_input_entry;
+       Evas_Object *entrylayout;
+       Evas_Object *gesture;
+       Ecore_Timer *delay_timer;
+       Ecore_Timer *close_timer;
+       Ecore_Timer *show_min_timer;
+
+       Eina_List *auto_remove_list;
+       Eina_List *non_auto_remove_list;
+       notification_h current_noti;
+       int text_input_max_length;
+       bool is_entry_activated;
+       bool is_entry_displayed;
+} s_info = {
+       .activenoti = NULL,
+       .layout = NULL,
+       .btnbox = NULL,
+       .entrybox = NULL,
+       .text_input_entry = NULL,
+       .entrylayout = NULL,
+       .gesture = NULL,
+       .delay_timer = NULL,
+       .close_timer = NULL,
+       .show_min_timer = NULL,
+       .auto_remove_list = NULL,
+       .non_auto_remove_list = NULL,
+       .current_noti = NULL,
+       .is_entry_activated = false,
+       .is_entry_displayed = false,
+};
+
+struct noti_info {
+       notification_h noti;
+       Ecore_Timer *timer;
+};
+
+static inline char *_get_text(notification_h noti, notification_text_type_e text_type);
+
+static int _activenoti_init(void *data);
+static int _activenoti_fini(void *data);
+static int _activenoti_enter_hib(void *data);
+static int _activenoti_leave_hib(void *data);
+static void _activenoti_reflesh(void *data);
+static void _activenoti_qp_opened(void *data);
+
+static void _activenoti_update_activenoti();
+static void _activenoti_create_activenoti();
+static void _activenoti_win_rotated(void *data, int need_hide);
+
+static void _activenoti_destroy_activenoti();
+static void _media_feedback_sound(notification_h noti);
+static notification_h _activenoti_get_in_list();
+static bool _activenoti_remove_in_list(notification_h noti);
+static void _activenoti_delete_current_noti(void);
+static bool _activenoti_has_pending_noti(void);
+static void _activenoti_hide(void *data, int delay);
+static bool _activenoti_check_text_input_type(notification_h noti);
+static bool _activenoti_check_reply_button_handler(notification_h noti, app_control_h app_control_btn);
+static void _activenoti_show_entry(void);
+static void _activenoti_destroy_entry(void);
+static bool _activenoti_create_entry(Evas_Object *obj, notification_h noti);
+static char *_activenoti_get_entry_text();
+
+
+QP_Module activenoti = {
+       .name = "activenoti",
+       .init = _activenoti_init,
+       .fini = _activenoti_fini,
+       .hib_enter = _activenoti_enter_hib,
+       .hib_leave = _activenoti_leave_hib,
+       .lang_changed = NULL,
+       .qp_opened = _activenoti_qp_opened,
+       .qp_closed = NULL,
+       .refresh = _activenoti_reflesh
+};
+
+static void _app_control_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       if (data) {
+               DBG("_app_control_del_cb %p", data);
+               app_control_destroy(data);
+       }
+}
+
+static int _is_sound_playable(void)
+{
+       int ret = 0;
+       camera_device_state_e primary;
+       camera_device_state_e secondary;
+
+       ret = camera_get_device_state(CAMERA_DEVICE_CAMERA0, &primary);
+       if (ret != CAMERA_ERROR_NONE) {
+               ERR("Failed to get front camera device state, %d, %s", ret, get_error_message(ret));
+               primary = CAMERA_DEVICE_STATE_NULL;
+       }
+
+       ret = camera_get_device_state(CAMERA_DEVICE_CAMERA1, &secondary);
+       if (ret != CAMERA_ERROR_NONE) {
+               ERR("Failed to get back camera device state, %d, %s", ret, get_error_message(ret));
+               secondary = CAMERA_DEVICE_STATE_NULL;
+       }
+
+       if (CAMERA_DEVICE_STATE_WORKING == primary ||
+               CAMERA_DEVICE_STATE_WORKING == secondary) {
+               ERR("camcorder is working, don't play notification sound, front=%d, secondary=%d", primary, secondary);
+               return 0;
+       }
+
+       return 1;
+}
+
+static int _is_security_lockscreen_launched(void)
+{
+       int ret = 0;
+       int is_idle_lock = 0;
+
+       ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &is_idle_lock);
+       retif(ret != 0, 0, "Failed to get VCONFKEY_IDLE_LOCK_STATE %d %d", ret, is_idle_lock);
+
+       if (is_idle_lock  == VCONFKEY_IDLE_LOCK) {
+               DBG("Lock screen is launched");
+               return 1; //don't show on lock screen
+       }
+
+       return 0;
+}
+
+static Eina_Bool _activenoti_hide_timer_cb(void *data)
+{
+       DBG("");
+
+       s_info.delay_timer = NULL;
+
+       _activenoti_hide(data, 0);
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void _activenoti_hide(void *data, int delay)
+{
+       DBG("delay : %d", delay);
+
+       elm_win_prop_focus_skip_set(s_info.activenoti, EINA_TRUE);
+
+       if (delay == 1) {
+               if (s_info.delay_timer == NULL) {
+                       s_info.delay_timer = ecore_timer_add(DELAY_TIMER_VALUE, _activenoti_hide_timer_cb, NULL);
+                       if (!s_info.delay_timer)
+                               ERR("Failed to create a new timer for hide activenoti");
+
+               }
+       } else {
+               _activenoti_delete_current_noti();
+               _activenoti_destroy_entry();
+
+               if (s_info.delay_timer != NULL) {
+                       ecore_timer_del(s_info.delay_timer);
+                       s_info.delay_timer = NULL;
+               }
+
+               if (s_info.close_timer != NULL) {
+                       ecore_timer_del(s_info.close_timer);
+                       s_info.close_timer = NULL;
+               }
+
+               if (s_info.activenoti) {
+                       if (_activenoti_has_pending_noti()) {
+                               _activenoti_update_activenoti();
+                       } else {
+                               DBG("pending noti is null. called evas_object_hide");
+                               evas_object_hide(s_info.activenoti);
+                       }
+               }
+       }
+       DBG("");
+}
+
+static Evas_Event_Flags __flick_end_cb(void *data, void *event_info)
+{
+       Elm_Gesture_Line_Info *line_info = (Elm_Gesture_Line_Info *)event_info;
+
+       DBG("line_info->momentum.my : %d", line_info->momentum.my);
+
+       if (s_info.is_entry_activated)
+               return EVAS_EVENT_FLAG_ON_HOLD;
+
+       /* Flick Up */
+       if (line_info->momentum.my < 0) {
+               DBG("HIDE ACTIVE NOTI");
+               if (_activenoti_has_pending_noti() == false) {
+                       _activenoti_hide(NULL, 0);
+               } else {
+                       _activenoti_delete_current_noti();
+                       _activenoti_update_activenoti();
+               }
+       } else {
+               DBG("HOLD ACTIVE NOTI");
+       }
+       return EVAS_EVENT_FLAG_ON_HOLD;
+}
+
+static Evas_Object *_gesture_create(Evas_Object *layout)
+{
+       Evas_Object *gesture_layer = NULL;
+
+       gesture_layer = elm_gesture_layer_add(layout);
+       retif(!gesture_layer, NULL, "Invalid parameter!");
+
+       elm_gesture_layer_attach(gesture_layer, layout);
+       evas_object_show(gesture_layer);
+
+       elm_gesture_layer_cb_set(gesture_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_END, __flick_end_cb, NULL);
+
+       return gesture_layer;
+}
+
+static int _check_sound_off(notification_h noti)
+{
+       notification_system_setting_h system_setting = NULL;
+       notification_setting_h setting = NULL;
+       char *pkgname = NULL;
+       bool do_not_disturb = false;
+       bool do_not_disturb_except = false;
+       int err = NOTIFICATION_ERROR_NONE;
+       int ret = 0;
+
+       retif(noti == NULL, 0, "Invalid parameter!");
+
+       err = notification_system_setting_load_system_setting(&system_setting);
+       if (err != NOTIFICATION_ERROR_NONE || system_setting == NULL) {
+               DBG("notification_system_setting_load_system_setting failed [%d]\n", err);
+               goto out;
+       }
+
+       err = notification_system_setting_get_do_not_disturb(system_setting, &do_not_disturb);
+       if (err != NOTIFICATION_ERROR_NONE) {
+               DBG("notification_system_setting_get_do_not_disturb failed [%d]", err);
+               goto out;
+       }
+
+       DBG("do_not_disturb [%d]\n", do_not_disturb);
+
+       if (do_not_disturb) {
+               err = notification_get_pkgname(noti, &pkgname);
+               if (err != NOTIFICATION_ERROR_NONE || pkgname == NULL) {
+                       DBG("notification_get_pkgname failed [%d]", err);
+                       goto out;
+               }
+
+               err = notification_setting_get_setting_by_package_name(pkgname, &setting);
+               if (err != NOTIFICATION_ERROR_NONE || setting == NULL) {
+                       DBG("notification_setting_get_setting_by_package_name failed [%d]", err);
+                       goto out;
+               }
+
+               err = notification_setting_get_do_not_disturb_except(setting, &do_not_disturb_except);
+               if (err != NOTIFICATION_ERROR_NONE) {
+                       DBG("notification_setting_get_do_not_disturb_except failed [%d]", err);
+                       goto out;
+               }
+
+               if (do_not_disturb_except)
+                       ret = 0;
+               else
+                       ret = 1;
+
+       }
+
+out:
+       if (system_setting)
+               notification_system_setting_free_system_setting(system_setting);
+
+
+       if (setting)
+               notification_setting_free_notification(setting);
+
+
+       return ret;
+}
+
+static void _gesture_destroy(void)
+{
+       if (s_info.gesture) {
+               evas_object_del(s_info.gesture);
+               s_info.gesture = NULL;
+       } else {
+               ERR("s_info.gesture is NULL");
+       }
+}
+
+static inline void _activenoti_only_noti_del(notification_h noti)
+{
+       retif(noti == NULL, , "Invalid parameter!");
+       int applist = NOTIFICATION_DISPLAY_APP_ALL;
+
+       notification_get_display_applist(noti, &applist);
+       if (applist & NOTIFICATION_DISPLAY_APP_ACTIVE) {
+               if (!(applist & NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY)) {
+                       char *pkgname = NULL;
+                       int priv_id = 0;
+
+                       notification_get_pkgname(noti, &pkgname);
+                       notification_get_id(noti, NULL, &priv_id);
+                       notification_delete_by_priv_id(pkgname, NOTIFICATION_TYPE_NONE, priv_id);
+               }
+       }
+}
+
+static Eina_Bool _activenoti_close_timer_cb(void *data)
+{
+       DBG("%d", _activenoti_has_pending_noti());
+
+       s_info.close_timer = NULL;
+
+       _activenoti_hide(data, 0);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void _activenoti_delete_current_noti(void)
+{
+       if (!s_info.current_noti) {
+               DBG("There is no displaying notification");
+               return;
+       }
+
+       DBG("");
+       notification_free(s_info.current_noti);
+       s_info.current_noti = NULL;
+}
+
+static Evas_Object *_activenoti_create_badge(Evas_Object *parent, notification_h noti)
+{
+       DBG("");
+       retif(noti == NULL || parent == NULL, NULL, "Invalid parameter!");
+
+       char *icon_path = NULL;
+       Evas_Object *icon = NULL;
+       int ret = NOTIFICATION_ERROR_NONE;
+
+       ret = notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_ICON_SUB, &icon_path);
+       if (ret != NOTIFICATION_ERROR_NONE || icon_path == NULL) {
+               DBG("notification_get_image failed [%d]", ret);;
+               return NULL;
+       }
+
+       DBG("NOTIFICATION_IMAGE_TYPE_ICON_SUB :  %s", icon_path);
+
+       icon = elm_image_add(parent);
+       if (icon == NULL) {
+               //              free(icon_path);
+               DBG("icon error");
+               return NULL;
+       }
+
+       elm_image_resizable_set(icon, EINA_FALSE, EINA_TRUE);
+
+       ret = elm_image_file_set(icon, icon_path, NULL);
+       //free(icon_path);
+
+       if (ret == EINA_FALSE) {
+               evas_object_del(icon);
+               return NULL;
+       }
+
+       return icon;
+}
+
+static void _image_press_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       DBG("");
+       app_control_h app_control = data;
+
+       if (app_control) {
+               int ret = APP_CONTROL_ERROR_NONE;
+               ret = app_control_send_launch_request(app_control, NULL, NULL);
+               DBG("app_control_send_launch_request return [%d]", ret);
+       }
+
+       _activenoti_hide(NULL, 1);
+}
+
+static Eina_Bool _delete_timer_cb(void *data)
+{
+       DBG("");
+       struct noti_info *noti = data;
+
+       s_info.auto_remove_list = eina_list_remove(s_info.auto_remove_list, noti);
+       notification_free(noti->noti);
+       free(noti);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static int _compare_noti_time(notification_h noti1, notification_h noti2)
+{
+       time_t noti_time1 = 0;
+       time_t noti_time2 = 0;
+       int ret;
+
+       ret = notification_get_time(noti1, &noti_time1);
+       if (ret != NOTIFICATION_ERROR_NONE || noti_time1 == 0)
+               notification_get_insert_time(noti1, &noti_time1);
+
+
+       ret = notification_get_time(noti2, &noti_time2);
+       if (ret != NOTIFICATION_ERROR_NONE || noti_time2 == 0)
+               notification_get_insert_time(noti2, &noti_time2);
+
+
+       DBG("not_time1 : %ld noti_time2 : %ld", noti_time1, noti_time2);
+
+       return (int)(noti_time1 - noti_time2);
+}
+
+static int _compare_time_cb(const void *data1, const void *data2)
+{
+       struct noti_info *info1 = (struct noti_info *)data1;
+       struct noti_info *info2 = (struct noti_info *)data2;
+
+       return _compare_noti_time(info1->noti, info2->noti);
+}
+
+static void _activenoti_remove_list(void)
+{
+       struct noti_info *info;
+       char *tmp;
+
+       EINA_LIST_FREE(s_info.auto_remove_list, info) {
+               /**
+                * For debugging
+                */
+               tmp = _get_text(info->noti, NOTIFICATION_TEXT_TYPE_TITLE);
+               DBG("auto remove %s", tmp);
+               free(tmp);
+
+               free(info->noti);
+               free(info->timer);
+       }
+
+       EINA_LIST_FREE(s_info.non_auto_remove_list, info) {
+               /**
+                * For debugging
+                */
+               tmp = _get_text(info->noti, NOTIFICATION_TEXT_TYPE_TITLE);
+               DBG("nont auto remove %s", tmp);
+               free(tmp);
+
+               free(info->noti);
+       }
+}
+
+static bool _activenoti_add_in_list(notification_h noti)
+{
+       DBG("");
+       bool auto_remove;
+       struct noti_info *info;
+       int     ret;
+       time_t noti_time = 0;
+
+       ret = notification_get_auto_remove(noti, &auto_remove);
+       if (ret != NOTIFICATION_ERROR_NONE) {
+               DBG("notification_get_auto_remove return [%d]", ret);
+               return false;
+       }
+
+       info = malloc(sizeof(*info));
+       if (!info) {
+               DBG("malloc error, can't make noti_info");
+               return false;
+       }
+
+       ret = notification_clone(noti, &info->noti);
+       if (ret != NOTIFICATION_ERROR_NONE || !info->noti) {
+               free(info);
+               ERR("failed to create a cloned notification");
+               return false;
+       }
+
+       if (auto_remove == true) {
+               ret = notification_get_time(info->noti, &noti_time);
+               if (ret != NOTIFICATION_ERROR_NONE || noti_time == 0) {
+                       ret = notification_get_insert_time(info->noti, &noti_time);
+                       if (ret != NOTIFICATION_ERROR_NONE || noti_time == 0)
+                               DBG("notification_get_insert_time failed. time is 0 ret %d", ret);
+
+               }
+
+               noti_time -= time(NULL);
+
+               if (noti_time > 8.0f) {
+                       DBG("remove noti");
+                       info->timer = NULL;
+                       _delete_timer_cb(info);
+               } else {
+                       info->timer = ecore_timer_add(8.0f - noti_time, _delete_timer_cb, info);
+                       DBG("timer add");
+                       if (!info->timer)
+                               DBG("ecore_timer_add failed");
+
+                       /**
+                        * @todo
+                        * Revise this.
+                        * Do we need to replace this with eina_list_prepend?
+                        */
+                       s_info.auto_remove_list = eina_list_sorted_insert(s_info.auto_remove_list, _compare_time_cb, info);
+               }
+       } else {
+               info->timer = NULL;
+               s_info.non_auto_remove_list = eina_list_sorted_insert(s_info.non_auto_remove_list, _compare_time_cb, info);
+       }
+
+       return 1;
+}
+
+static bool _activenoti_has_pending_noti(void)
+{
+
+       return s_info.non_auto_remove_list || s_info.auto_remove_list;
+}
+
+static bool _activenoti_remove_in_list(notification_h noti)
+{
+       DBG("");
+
+       bool auto_remove;
+       int ret;
+       Eina_List *l;
+       Eina_List *n;
+       struct noti_info *info;
+
+       ret = notification_get_auto_remove(noti, &auto_remove);
+       if (ret != NOTIFICATION_ERROR_NONE) {
+               DBG("notification_get_auto_remove return [%d]", ret);
+               return false;
+       }
+
+       if (auto_remove) {
+               DBG("remove in auto remove list");
+               EINA_LIST_FOREACH_SAFE(s_info.auto_remove_list, l, n, info) {
+                       if (info->noti != noti) {
+                               int priv_id_from_list;
+                               int priv_id_from_arg;
+
+                               notification_get_id(info->noti, NULL, &priv_id_from_list);
+                               notification_get_id(noti, NULL, &priv_id_from_arg);
+
+                               if (priv_id_from_list != priv_id_from_arg)
+                                       continue;
+
+                       }
+                       s_info.auto_remove_list = eina_list_remove(s_info.auto_remove_list, info);
+                       ecore_timer_del(info->timer);
+                       notification_free(info->noti);
+                       free(info);
+                       break;
+               }
+       } else {
+               DBG("remove in non auto remove list");
+               EINA_LIST_FOREACH_SAFE(s_info.non_auto_remove_list, l, n, info) {
+                       if (info->noti != noti) {
+                               int priv_id_from_list;
+                               int priv_id_from_arg;
+
+                               notification_get_id(info->noti, NULL, &priv_id_from_list);
+                               notification_get_id(noti, NULL, &priv_id_from_arg);
+
+                               if (priv_id_from_list != priv_id_from_arg)
+                                       continue;
+
+                       }
+                       s_info.non_auto_remove_list = eina_list_remove(s_info.non_auto_remove_list, info);
+                       notification_free(info->noti);
+                       free(info);
+                       break;
+               }
+       }
+       return 1;
+}
+
+static notification_h _activenoti_get_in_list(notification_h cur_noti)
+{
+       DBG("");
+       notification_h noti = NULL;
+       struct noti_info *info;
+       bool auto_remove = true;
+       int ret;
+
+       if (cur_noti != NULL) {
+               ret = notification_get_auto_remove(cur_noti, &auto_remove);
+               if (ret != NOTIFICATION_ERROR_NONE) {
+                       DBG("notification_get_auto_remove return [%d]", ret);
+                       return NULL;
+               }
+       }
+
+       info = eina_list_nth(s_info.non_auto_remove_list, 0);
+       if (info) {
+               if (!auto_remove) {
+                       ret = _compare_noti_time(cur_noti, info->noti);
+
+                       if (ret > 0)
+                               return NULL;
+
+               }
+               s_info.non_auto_remove_list = eina_list_remove(s_info.non_auto_remove_list, info);
+               // .....
+               noti = info->noti;
+               free(info);
+               return noti;
+       }
+
+       if (auto_remove == false)
+               return noti;
+
+
+       info = eina_list_nth(s_info.auto_remove_list, 0);
+       if (info) {
+               s_info.auto_remove_list = eina_list_remove(s_info.auto_remove_list, info);
+               // .....
+               noti = info->noti;
+               ecore_timer_del(info->timer);
+               free(info);
+               return noti;
+       }
+
+       return noti;
+}
+
+static Evas_Object* _activenoti_create_icon(Evas_Object *parent, notification_h noti, int *image_type)
+{
+       int ret = NOTIFICATION_ERROR_NONE;
+       app_control_h app_control = NULL;
+       Evas_Object *icon = NULL;
+       char *icon_path = NULL;
+       char *temp_path = NULL;
+       char *pkgname = NULL;
+
+       retif(noti == NULL || parent == NULL, NULL, "Invalid parameter!");
+
+       ret = notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL, &temp_path);
+       if (ret == NOTIFICATION_ERROR_NONE && temp_path != NULL) {
+               *image_type = 1;
+
+               ret = notification_get_event_handler(noti, NOTIFICATION_EVENT_TYPE_CLICK_ON_THUMBNAIL, &app_control);
+               if (ret != NOTIFICATION_ERROR_NONE)
+                       ERR("Failed to get handler from NOTIFICATION_EVENT_TYPE_CLICK_ON_THUMBNAIL");
+               else
+                       DBG("thumbnail_path : %s app_control = %p", temp_path, app_control);
+
+
+       } else {
+               ret = notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, &temp_path);
+               if (ret == NOTIFICATION_ERROR_NONE && temp_path != NULL) {
+                       ret = notification_get_event_handler(noti, NOTIFICATION_EVENT_TYPE_CLICK_ON_ICON, &app_control);
+                       if (ret != NOTIFICATION_ERROR_NONE)
+                               ERR("Failed to get handler from NOTIFICATION_EVENT_TYPE_CLICK_ON_ICON");
+                       else
+                               DBG("icon_path : %s app_control = %p", temp_path, app_control);
+
+               } else  {
+                       ret = notification_get_pkgname(noti, &pkgname);
+                       if (ret == NOTIFICATION_ERROR_NONE && pkgname != NULL) {
+                               temp_path = quickpanel_common_ui_get_appinfo_icon(pkgname);
+                               DBG("appInfo_icon_path : %s", temp_path);
+                       }
+
+                       if (!temp_path) {
+                               temp_path = (char*)util_get_shared_res_file_path(QP_DEFAULT_ICON_NAME);
+                               DBG("default_icon_path : %s", temp_path);
+                       }
+               }
+       }
+
+       icon = elm_image_add(parent);
+       if (!icon) {
+               ERR("Failed to create an image object");
+               if (app_control)
+                       app_control_destroy(app_control);
+
+               return NULL;
+       }
+
+       icon_path = strdup(temp_path);
+
+       ret = elm_image_file_set(icon, icon_path, NULL);
+       if (ret == EINA_FALSE) {
+               evas_object_del(icon);
+
+               if (icon_path)
+                       free(icon_path);
+
+
+               if (app_control)
+                       app_control_destroy(app_control);
+
+               return NULL;
+       }
+
+       elm_object_signal_callback_add(parent, "image_press" , "", _image_press_cb, app_control);
+       evas_object_event_callback_add(icon, EVAS_CALLBACK_DEL, _app_control_del_cb, app_control);
+
+       if (icon_path)
+               free(icon_path);
+
+
+       return icon;
+}
+
+static inline char *_get_text(notification_h noti, notification_text_type_e text_type)
+{
+       time_t time = 0;
+       char *text = NULL;
+       char buf[ACTIVENOTI_MSG_LEN] = {0,};
+
+       if (notification_get_time_from_text(noti, text_type, &time) == NOTIFICATION_ERROR_NONE) {
+               if ((int)time > 0) {
+                       quickpanel_noti_util_get_time(time, buf, sizeof(buf));
+                       text = buf;
+               }
+       } else {
+               notification_get_text(noti, text_type, &text);
+       }
+
+       DBG("text : %s", text);
+
+       if (text != NULL)
+               return elm_entry_utf8_to_markup(text);
+
+
+       return NULL;
+}
+
+static void _activenoti_set_text(notification_h noti, int is_screenreader)
+{
+       char *domain = NULL;
+       char *dir = NULL;
+       char *tmp;
+       int ret;
+
+       if (!noti) {
+               ERR("Invalid parameter");
+               return;
+       }
+
+       ret = notification_get_text_domain(noti, &domain, &dir);
+       if (ret == NOTIFICATION_ERROR_NONE && domain != NULL && dir != NULL)
+               bindtextdomain(domain, dir);
+
+
+       tmp = _get_text(noti, NOTIFICATION_TEXT_TYPE_INFO_1);
+       if (tmp != NULL) {
+               elm_object_part_text_set(s_info.layout, "subtitle_text", tmp);
+               free(tmp);
+               elm_object_signal_emit(s_info.layout, "sub_show", "subtitle_text");
+       } else {
+               elm_object_signal_emit(s_info.layout, "sub_hide", "subtitle_text");
+       }
+
+       tmp = _get_text(noti, NOTIFICATION_TEXT_TYPE_TITLE);
+       if (tmp != NULL) {
+               elm_object_part_text_set(s_info.layout, "title_text", tmp);
+               free(tmp);
+       } else {
+               elm_object_part_text_set(s_info.layout, "title_text", "");
+       }
+
+       tmp = _get_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT);
+       if (tmp != NULL) {
+               elm_object_part_text_set(s_info.layout, "content_text", tmp);
+               free(tmp);
+       } else {
+               elm_object_part_text_set(s_info.layout, "content_text", "");
+       }
+}
+
+static void _handle_press_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       DBG("");
+       _activenoti_hide(data, 0);
+}
+
+static void _noti_press_cb(void *data, Evas_Object *obj,       const char *emission, const char *source)
+{
+       DBG("");
+       int ret = APP_CONTROL_ERROR_NONE;
+       char *caller_pkgname = NULL;
+       bundle *responding_service_handle = NULL;
+       bundle *single_service_handle = NULL;
+       bundle *multi_service_handle = NULL;
+       int flags = 0, group_id = 0, priv_id = 0, count = 0, flag_launch = 0;
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+       notification_h noti = NULL;
+       char *entry_text = NULL;
+
+       retif(s_info.activenoti == NULL, , "Invalid parameter!");
+       retif(s_info.current_noti == NULL, , "Invalid parameter!");
+
+       noti = s_info.current_noti;
+       notification_get_pkgname(noti, &caller_pkgname);
+       notification_get_id(noti, &group_id, &priv_id);
+       notification_get_property(noti, &flags);
+       notification_get_type(noti, &type);
+
+       if (flags & NOTIFICATION_PROP_DISABLE_APP_LAUNCH)
+               flag_launch = 0;
+       else
+               flag_launch = 1;
+
+
+       ret = notification_get_execute_option(noti, NOTIFICATION_EXECUTE_TYPE_RESPONDING,       NULL, &responding_service_handle);
+       if (ret != NOTIFICATION_ERROR_NONE || responding_service_handle == NULL)
+               DBG("NOTIFICATION_EXECUTE_TYPE_RESPONDING failed [%d]", ret);
+
+
+       ret = notification_get_execute_option(noti, NOTIFICATION_EXECUTE_TYPE_SINGLE_LAUNCH, NULL, &single_service_handle);
+       if (ret != NOTIFICATION_ERROR_NONE || single_service_handle == NULL)
+               DBG("NOTIFICATION_EXECUTE_TYPE_SINGLE_LAUNCH failed [%d]", ret);
+
+
+       ret = notification_get_execute_option(noti, NOTIFICATION_EXECUTE_TYPE_MULTI_LAUNCH, NULL, &multi_service_handle);
+       if (ret != NOTIFICATION_ERROR_NONE || multi_service_handle == NULL)
+               DBG("NOTIFICATION_EXECUTE_TYPE_MULTI_LAUNCH failed [%d]", ret);
+
+
+       if (s_info.is_entry_activated) {
+               entry_text = _activenoti_get_entry_text();
+               if (responding_service_handle != NULL)
+                       bundle_add(responding_service_handle, APP_CONTROL_DATA_TEXT, entry_text);
+
+               if (single_service_handle != NULL)
+                       bundle_add(single_service_handle, APP_CONTROL_DATA_TEXT, entry_text);
+
+               if (multi_service_handle != NULL)
+                       bundle_add(multi_service_handle, APP_CONTROL_DATA_TEXT, entry_text);
+
+               if (entry_text)
+                       free(entry_text);
+
+       }
+
+       if (responding_service_handle != NULL) {
+               DBG("responding_service_handle : %p", responding_service_handle);
+               ret = quickpanel_common_launch_app(NULL, responding_service_handle);
+       } else if (flag_launch == 1) {
+               char *text_count = NULL;
+               notification_get_text(noti, NOTIFICATION_TEXT_TYPE_EVENT_COUNT, &text_count);
+
+               if (text_count != NULL)
+                       count = atoi(text_count);
+               else
+                       count = 1;
+
+
+               if (single_service_handle != NULL && multi_service_handle == NULL) {
+                       ret = quickpanel_common_launch_app(NULL, single_service_handle);
+               } else if (single_service_handle == NULL && multi_service_handle != NULL) {
+                       ret = quickpanel_common_launch_app(NULL, multi_service_handle);
+               } else if (single_service_handle != NULL && multi_service_handle != NULL) {
+
+                       if (count <= 1)
+                               ret = quickpanel_common_launch_app(NULL, single_service_handle);
+                       else
+                               ret = quickpanel_common_launch_app(NULL, multi_service_handle);
+
+
+               } else { //single_service_handle == NULL && multi_service_handle == NULL
+                       DBG("there is no execution option in notification");
+               }
+               quickpanel_common_inform_launch_app_result(caller_pkgname, ret);
+       }
+
+       _activenoti_hide(data , 1);
+}
+
+static void _reply_button_press_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       _activenoti_show_entry();
+       elm_object_signal_emit(s_info.layout, "button_layout_hide", "button_layout.swallow");
+       elm_object_signal_emit(s_info.layout, "entry_layout_show", "entry_layout.swallow");
+
+       if (s_info.close_timer != NULL) {
+               ecore_timer_del(s_info.close_timer);
+               s_info.close_timer = NULL;
+       }
+       elm_win_prop_focus_skip_set(s_info.activenoti, EINA_FALSE);
+       elm_win_activate(s_info.activenoti);
+
+       elm_object_focus_set(s_info.text_input_entry, EINA_TRUE);
+       s_info.is_entry_activated = true;
+}
+
+static void _button_press_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       app_control_h app_control = data;
+       int ret = APP_CONTROL_ERROR_NONE;
+
+       ret = app_control_send_launch_request(app_control, NULL, NULL);
+       DBG("app_control_send_launch_request return [%d]", ret);
+
+       _activenoti_hide(NULL, 1);
+}
+
+static Evas_Object *_get_btn_img(Evas_Object *parent, notification_h noti, int btn_num)
+{
+       retif(noti == NULL || parent == NULL, NULL, "Invalid parameter!");
+
+       char *btn_path = NULL;
+       Evas_Object *btn_img = NULL;
+       int ret;
+
+       ret = notification_get_image(noti, btn_num + NOTIFICATION_IMAGE_TYPE_BUTTON_1, &btn_path);
+       if (ret != NOTIFICATION_ERROR_NONE || btn_path == NULL) {
+               DBG("notification_get_image return [%d]", ret);
+               return NULL;
+       }
+
+       btn_img = elm_image_add(parent);
+       if (!btn_img) {
+               //free(btn_path);
+               return NULL;
+       }
+
+       evas_object_size_hint_weight_set(btn_img, EVAS_HINT_EXPAND,     EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn_img, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_image_resizable_set(btn_img, EINA_TRUE, EINA_TRUE);
+
+       ret = elm_image_file_set(btn_img, btn_path, NULL);
+       //free(btn_path);
+       if (ret == EINA_FALSE) {
+               evas_object_del(btn_img);
+               return NULL;
+       }
+
+       return btn_img;
+}
+
+static Evas_Object *_get_bg_img(Evas_Object *parent, notification_h noti)
+{
+       char *bg_path = NULL;
+       Evas_Object *bg_img = NULL;
+       int ret;
+
+       if (!parent || !noti) {
+               ERR("Invalid parameters %p %p", parent, noti);
+               return NULL;
+       }
+
+       ret = notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_BACKGROUND, &bg_path);
+       if (ret != NOTIFICATION_ERROR_NONE || bg_path == NULL) {
+               DBG("bg_path is null ret = %d", ret);
+               return NULL;
+       }
+
+       bg_img = elm_image_add(parent);
+       if (!bg_img)
+               return NULL;
+
+
+       evas_object_size_hint_weight_set(bg_img, EVAS_HINT_EXPAND,      EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(bg_img, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_image_resizable_set(bg_img, EINA_TRUE, EINA_TRUE);
+
+       ret = elm_image_file_set(bg_img, bg_path, NULL);
+       if (ret == EINA_FALSE) {
+               evas_object_del(bg_img);
+               return NULL;
+       }
+
+       return bg_img;
+}
+
+static int _activenoti_create_button(Evas_Object *obj, notification_h noti)
+{
+       int btn_cnt;
+       int ret;
+       app_control_h app_control;
+
+       if (!obj || !noti) {
+               ERR("Invalid parameters");
+               return 0;
+       }
+
+       if (s_info.entrybox) {
+               elm_object_part_content_unset(s_info.entrybox, "entry_layout.swallow");
+               evas_object_del(s_info.entrybox);
+               s_info.entrybox = NULL;
+       }
+
+       if (s_info.btnbox) { //if exist, delete and create
+               evas_object_del(s_info.btnbox);
+               s_info.btnbox = NULL;
+       }
+
+       Evas_Object *box;
+       box = elm_box_add(obj);
+
+       if (box == NULL) {
+               ERR("box is null");
+               return 0;
+       }
+
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_box_horizontal_set(box, EINA_TRUE);
+       evas_object_show(box);
+       s_info.btnbox = box;
+
+       for (btn_cnt = 0; btn_cnt < 3; btn_cnt++) {
+               app_control = NULL;
+               ret = notification_get_event_handler(noti, btn_cnt + NOTIFICATION_EVENT_TYPE_CLICK_ON_BUTTON_1, &app_control);
+               DBG("appcontrol %p", app_control);
+               if (ret != NOTIFICATION_ERROR_NONE || app_control == NULL) {
+                       INFO("no more button, button count is %d", btn_cnt);
+                       INFO("ret is %d", ret);
+
+                       /**
+                        * @note
+                        * In this case,
+                        * The app_control is not used and no one cares it.
+                        * So we have to release it from here if it is allocated.
+                        */
+                       if (app_control)
+                               app_control_destroy(app_control);
+
+
+                       if (btn_cnt == 0) { // noti doesn't have button
+                               evas_object_del(s_info.btnbox);
+                               s_info.btnbox = NULL;
+                               return 0;
+                       }
+               } else {
+                       Evas_Object *bt_layout;
+                       char *btn_text;
+                       Evas_Object *image;
+
+                       bt_layout = elm_layout_add(s_info.btnbox);
+                       if (bt_layout == NULL) {
+                               ERR("bt_layout is null");
+                               evas_object_del(s_info.btnbox);
+                               app_control_destroy(app_control);
+                               s_info.btnbox = NULL;
+                               return 0;
+                       }
+
+                       elm_layout_file_set(bt_layout, util_get_res_file_path(ACTIVENOTI_EDJ), "layout.button");
+                       evas_object_size_hint_weight_set(bt_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       evas_object_size_hint_align_set(bt_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+                       image = _get_btn_img(bt_layout, noti, btn_cnt);
+                       if (image != NULL)
+                               elm_object_part_content_set(bt_layout, "content.button.image", image);
+
+
+                       btn_text = _get_text(noti, btn_cnt + NOTIFICATION_TEXT_TYPE_BUTTON_1);
+                       if (btn_text != NULL) {
+                               elm_object_part_text_set(bt_layout, "content.button.text", btn_text);
+                               free(btn_text);
+                       }
+
+                       /* Reply Button Case : button handler is same with text input handler */
+                       if (ret == NOTIFICATION_ERROR_NONE
+                               && _activenoti_check_text_input_type(s_info.current_noti)
+                               && _activenoti_check_reply_button_handler(s_info.current_noti, app_control)
+                               && _activenoti_create_entry(s_info.layout, s_info.current_noti)) {
+
+                               elm_object_signal_callback_add(bt_layout, "button_clicked" , "", _reply_button_press_cb, NULL);
+                               evas_object_event_callback_add(bt_layout, EVAS_CALLBACK_DEL, _app_control_del_cb, app_control);
+                       } else {
+                               elm_object_signal_callback_add(bt_layout, "button_clicked" , "", _button_press_cb, app_control);
+                               evas_object_event_callback_add(bt_layout, EVAS_CALLBACK_DEL, _app_control_del_cb, app_control);
+                       }
+
+                       evas_object_show(bt_layout);
+                       elm_box_pack_end(s_info.btnbox, bt_layout);
+               }
+       }
+
+       elm_object_part_content_set(obj, "button_layout.swallow", s_info.btnbox);
+       quickpanel_noti_win_resize_height(s_info.activenoti, NOTI_LAYOUT_BUTTON, 0, true);
+
+       evas_object_show(obj);
+       return btn_cnt;
+}
+
+static void _entry_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _activenoti_hide(NULL, 0);
+}
+
+static void _entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       retif(!obj, , "Invalid parameters");
+
+       char buf[1024];
+       char *entry_text  = elm_entry_markup_to_utf8(elm_entry_entry_get(obj));
+
+       if (entry_text) {
+               snprintf(buf, sizeof(buf), "%d", (int)(s_info.text_input_max_length-strlen(entry_text)));
+               elm_object_part_text_set(s_info.entrylayout, "text.char_count", buf);
+               free(entry_text);
+       }
+}
+
+static void _entry_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       retif(!obj , , "Invalid parameters");
+
+       if (s_info.close_timer != NULL) {
+               ecore_timer_del(s_info.close_timer);
+               s_info.close_timer = NULL;
+       }
+
+       elm_win_prop_focus_skip_set(s_info.activenoti, EINA_FALSE);
+       elm_win_activate(s_info.activenoti);
+
+       s_info.is_entry_activated = true;
+}
+
+static char *_activenoti_get_entry_text()
+{
+       char *entry_text = NULL;
+
+       entry_text = elm_entry_markup_to_utf8(elm_entry_entry_get(s_info.text_input_entry));
+
+       return entry_text;
+}
+
+static void _send_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       char *entry_text = NULL;
+
+       app_control_h app_control = data;
+       int ret = APP_CONTROL_ERROR_NONE;
+
+       if (data != NULL)
+               entry_text = elm_entry_markup_to_utf8(elm_entry_entry_get(s_info.text_input_entry));
+
+
+       ret = app_control_add_extra_data(app_control, APP_CONTROL_DATA_TEXT, entry_text);
+
+       if (ret == APP_CONTROL_ERROR_NONE)
+               app_control_send_launch_request(app_control, NULL, NULL);
+
+       if (entry_text)
+               free(entry_text);
+
+       _activenoti_hide(NULL, 1);
+}
+
+void _entry_max_length_set(Evas_Object *entry, int length)
+{
+       static Elm_Entry_Filter_Limit_Size entry_filter;
+
+       entry_filter.max_char_count = length;
+       elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &entry_filter);
+}
+
+static void _entry_geometry_changed_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       int h;
+
+       if (!s_info.is_entry_displayed)
+               return;
+
+       evas_object_geometry_get(obj, NULL, NULL, NULL, &h);
+       DBG("ENTRY :: Height : %d",  h);
+
+       if (h < ENTRY_LINE_MAX_HEIGHT)
+               quickpanel_noti_win_resize_height(s_info.activenoti, NOTI_LAYOUT_ENTRY, h - ENTRY_LINE_HEIGHT, false);
+       else
+               quickpanel_noti_win_resize_height(s_info.activenoti, NOTI_LAYOUT_ENTRY,  ENTRY_LINE_MAX_HEIGHT - ENTRY_LINE_HEIGHT, false);
+
+}
+
+static bool _activenoti_check_text_input_type(notification_h noti)
+{
+       int ret;
+       int text_length;
+       app_control_h app_control;
+
+       if (!noti) {
+               ERR("Invalid parameters");
+               return false;
+       }
+
+       app_control = NULL;
+       ret = notification_get_text_input_max_length(noti, &text_length);
+       if (ret != NOTIFICATION_ERROR_NONE || text_length > 0) {
+               ret = notification_get_event_handler(noti, NOTIFICATION_EVENT_TYPE_CLICK_ON_TEXT_INPUT_BUTTON, &app_control);
+               if (ret != NOTIFICATION_ERROR_NONE || app_control == NULL) {
+                       INFO("_activenoti_check_text_input_type return NO text input ret[%d]", ret);
+                       return false;
+               } else {
+                       return true;
+               }
+       }
+
+       return false;
+}
+
+static bool _activenoti_check_reply_button_handler(notification_h noti, app_control_h app_control_btn)
+{
+       int ret;
+       bundle *content_text_input = NULL;
+       bundle *content_btn = NULL;
+       app_control_h app_control_text_input;
+
+       retif(noti == NULL, false, "Invalid parameter!");
+
+       ret = notification_get_event_handler(noti, NOTIFICATION_EVENT_TYPE_CLICK_ON_TEXT_INPUT_BUTTON, &app_control_text_input);
+       if (ret != NOTIFICATION_ERROR_NONE || app_control_text_input == NULL) {
+               INFO("_activenoti_check_text_input_type return NO text input ret[%d]", ret);
+               return false;
+       }
+
+       if (app_control_to_bundle(app_control_text_input, &content_text_input) != APP_CONTROL_ERROR_NONE
+               || app_control_to_bundle(app_control_btn, &content_btn) != APP_CONTROL_ERROR_NONE)
+               return false;
+
+       if (bundle_compare(content_text_input, content_btn) != 0)
+               return false;
+
+       return true;
+}
+
+static void _activenoti_show_entry(void)
+{
+       s_info.is_entry_displayed = true;
+       evas_object_show(s_info.entrylayout);
+       elm_object_part_content_set(s_info.layout, "entry_layout.swallow", s_info.entrybox);
+       quickpanel_noti_win_resize_height(s_info.activenoti, NOTI_LAYOUT_ENTRY, 0, true);
+}
+
+static void _activenoti_destroy_entry(void)
+{
+       s_info.is_entry_displayed = false;
+       s_info.is_entry_activated = false;
+
+       if (s_info.entrybox) {
+               DBG("s_info.entrybox exist, delete and create");
+               elm_object_part_content_unset(s_info.layout, "entry_layout.swallow");
+               evas_object_del(s_info.entrybox);
+               s_info.entrybox = NULL;
+       }
+}
+
+static bool _activenoti_create_entry(Evas_Object *obj, notification_h noti)
+{
+       Evas_Object *box;
+       Evas_Object *entry_layout;
+       Evas_Object *scroller;
+       Evas_Object *entry;
+       Evas_Object *send_button;
+       app_control_h app_control = NULL;
+       int ret;
+       int text_length;
+       char *placeholder_text = NULL;
+       char *button_icon_path = NULL;
+       char buf[MAX_NAM_LEN] = {0, };
+
+       DBG("");
+       retif(!obj || !noti , 0, "Invalid parameters");
+
+       if (s_info.entrybox) {
+               DBG("s_info.entrybox exist, delete and create");
+               elm_object_part_content_unset(obj, "entry_layout.swallow");
+               evas_object_del(s_info.entrybox);
+               s_info.entrybox = NULL;
+       }
+
+       ret = notification_get_event_handler(noti, NOTIFICATION_EVENT_TYPE_CLICK_ON_TEXT_INPUT_BUTTON, &app_control);
+       if (ret != NOTIFICATION_ERROR_NONE || app_control == NULL) {
+               ERR("Notification Text Input handler is null");
+
+               if (app_control)
+                       app_control_destroy(app_control);
+
+       }
+
+       ret = notification_get_text_input_max_length(noti, &text_length);
+       if (ret == NOTIFICATION_ERROR_NONE)
+               s_info.text_input_max_length = text_length;
+       else
+               s_info.text_input_max_length = DEFAULT_TEXT_INPUT_MAX_LENGTH;
+
+
+       placeholder_text = _get_text(noti, NOTIFICATION_TEXT_TYPE_TEXT_INPUT_PLACEHOLDER);
+       ret = notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_TEXT_INPUT_BUTTON, &button_icon_path);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               button_icon_path = NULL;
+
+
+       /* box -----------------------------------------------------------------------------------*/
+       box = elm_box_add(obj);
+       if (box == NULL) {
+               ERR("box is null");
+
+               if (app_control)
+                       app_control_destroy(app_control);
+
+               return false;
+       }
+
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_box_horizontal_set(box, EINA_TRUE);
+       evas_object_show(box);
+       s_info.entrybox = box;
+
+       /* layout ---------------------------------------------------------------------------------*/
+       entry_layout = elm_layout_add(s_info.entrybox);
+       if (entry_layout == NULL) {
+               ERR("entry_layout is null");
+               evas_object_del(s_info.entrybox);
+               s_info.entrybox = NULL;
+
+               if (app_control)
+                       app_control_destroy(app_control);
+
+               return false;
+       }
+
+       elm_layout_file_set(entry_layout, util_get_res_file_path(ACTIVENOTI_EDJ), "layout.entry");
+       evas_object_size_hint_weight_set(entry_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(entry_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       s_info.entrylayout = entry_layout;
+
+       scroller = elm_scroller_add(entry_layout);
+       elm_scroller_propagate_events_set(scroller, EINA_TRUE);
+
+       entry = elm_entry_add(scroller);
+       if (entry == NULL) {
+               DBG("failed to add a entry");
+
+               if (app_control)
+                       app_control_destroy(app_control);
+
+               return false;
+       }
+       elm_entry_text_style_user_push(entry, "DEFAULT='font=Tizen:style=Regular font_size=43 color=#ffffff'");
+
+       if (placeholder_text == NULL)
+               snprintf(buf, sizeof(buf), "<font=Sans:style=Regular font_size=%d color=#ffffff>Text messages</font>", ENTRY_FONT_SIZE);
+       else
+               snprintf(buf, sizeof(buf), "<font=Sans:style=Regular font_size=%d color=#ffffff>%s</font>", ENTRY_FONT_SIZE, placeholder_text);
+
+
+       elm_object_part_text_set(entry, "elm.guide", buf);
+       elm_entry_input_panel_enabled_set(entry, EINA_TRUE);
+       elm_entry_editable_set(entry, EINA_TRUE);
+       elm_entry_cursor_begin_set(entry);
+
+       evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0);
+       s_info.text_input_entry = entry;
+
+       elm_object_content_set(scroller, entry);
+       elm_object_part_content_set(entry_layout, "entry.swallow", scroller);
+
+       _entry_max_length_set(entry, s_info.text_input_max_length);
+
+       eext_object_event_callback_add(entry, EEXT_CALLBACK_BACK, _entry_back_cb, app_control);
+       evas_object_event_callback_add(entry, EVAS_CALLBACK_RESIZE, _entry_geometry_changed_cb, NULL);
+       evas_object_smart_callback_add(entry, "changed", _entry_changed_cb, NULL);
+       evas_object_smart_callback_add(entry, "clicked", _entry_clicked_cb, NULL);
+       evas_object_show(entry);
+
+       /* send button-------------------------------------------------------------------------------*/
+       send_button = elm_button_add(entry_layout);
+       if (send_button == NULL) {
+               DBG("failed to add a button");
+
+               if (app_control)
+                       app_control_destroy(app_control);
+
+               return false;
+       }
+
+       elm_object_style_set(send_button, "transparent");
+       evas_object_size_hint_weight_set(send_button, 0.0, 0.0);
+       evas_object_show(send_button);
+
+       Evas_Object *icon = elm_icon_add(send_button);
+       if (button_icon_path == NULL)
+               elm_image_file_set(icon, util_get_shared_res_file_path(DEFAULT_SEND_BUTTON_IMG), NULL);
+       else
+               elm_image_file_set(icon, button_icon_path, NULL);
+
+
+       evas_object_color_set(icon, BUTTON_COLOR);
+       evas_object_show(icon);
+
+       elm_object_content_set(send_button, icon);
+       evas_object_smart_callback_add(send_button, "clicked", _send_button_clicked_cb, app_control);
+
+       elm_box_pack_end(s_info.entrybox, entry_layout);
+       elm_object_part_content_set(entry_layout, "send_button.swallow", send_button);
+
+       /* count label ------------------------------------------------------------------------------*/
+       snprintf(buf, sizeof(buf), "%d", s_info.text_input_max_length);
+       elm_object_part_text_set(entry_layout, "text.char_count", buf);
+
+       return true;
+}
+
+static void _activenoti_create_activenoti(void)
+{
+       DBG("");
+       Eina_Bool ret = EINA_FALSE;
+       Evas_Object *base = NULL;
+       Evas_Object *conform = NULL;
+
+       if (s_info.activenoti != NULL) {
+               ERR("Instant notification exists");
+               return;
+       }
+
+       s_info.activenoti = quickpanel_noti_win_add(NULL);
+       retif(s_info.activenoti == NULL, , "Failed to add elm activenoti.");
+       evas_object_show(s_info.activenoti);
+
+       /* Add Conformant */
+       elm_win_conformant_set(s_info.activenoti, EINA_TRUE);
+       conform = elm_conformant_add(s_info.activenoti);
+       evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(s_info.activenoti, conform);
+       evas_object_show(conform);
+
+       s_info.layout = elm_layout_add(conform);
+       if (!s_info.layout) {
+               ERR("Failed to get detailview.");
+               _activenoti_destroy_activenoti();
+               return;
+       }
+
+       ret = elm_layout_file_set(s_info.layout, util_get_res_file_path(ACTIVENOTI_EDJ), "headsup/base");
+       retif(ret == EINA_FALSE, , "failed to load layout");
+
+       elm_object_signal_callback_add(s_info.layout, "noti_press" , "", _noti_press_cb, NULL);
+       elm_object_signal_callback_add(s_info.layout, "del" , "", _handle_press_cb, NULL);
+       evas_object_show(s_info.layout);
+
+       /* create base rectangle */
+       base = evas_object_rectangle_add(evas_object_evas_get(s_info.layout));
+       if (!base) {
+               ERR("Failed to get detailview.");
+               _activenoti_destroy_activenoti();
+               return;
+       }
+
+       evas_object_color_set(base, 0, 165, 198, 255);
+       elm_object_part_content_set(s_info.layout, "background", base);
+       elm_object_content_set(conform, s_info.layout);
+
+       s_info.gesture = _gesture_create(s_info.layout);
+
+       _activenoti_win_rotated(quickpanel_get_app_data(), 0);
+}
+
+static void _activenoti_update_activenoti(void)
+{
+       DBG("");
+       Eina_Bool ret = EINA_FALSE;
+       notification_h noti;
+       Evas_Object *icon = NULL;
+       Evas_Object *badge = NULL;
+       Evas_Object *bg_img = NULL;
+       int btn_cnt = 0;
+       bool auto_remove = true;
+       bool current_auto_remove = true;
+       int image_type = 0;
+
+       if (s_info.activenoti == NULL) {
+               ERR("Active notification doesn't exist");
+               return;
+       }
+
+       if (s_info.layout == NULL) {
+               ERR("Active notification doesn't exist");
+               return;
+       }
+
+       if (s_info.delay_timer != NULL) {
+               ERR("s_info.delay_timer");
+               ecore_timer_del(s_info.delay_timer);
+               s_info.delay_timer = NULL;
+       }
+
+       if (s_info.close_timer != NULL) {
+               ERR("s_info.close_timer");
+               ecore_timer_del(s_info.close_timer);
+               s_info.close_timer = NULL;
+       }
+
+       noti = _activenoti_get_in_list(s_info.current_noti);
+       if (noti == NULL) {
+               DBG("noti is null");
+               return;
+       }
+
+       if (s_info.current_noti) {
+               ret = notification_get_auto_remove(s_info.current_noti, &current_auto_remove);
+               if (ret != NOTIFICATION_ERROR_NONE) {
+                       DBG("notification_get_auto_remove return [%d] from current_noti", ret);
+                       return;
+               }
+
+               if (!current_auto_remove) {
+                       DBG("!auto_remove");
+                       ret = notification_get_auto_remove(noti, &auto_remove);
+                       if (ret != NOTIFICATION_ERROR_NONE) {
+                               DBG("notification_get_auto_remove return [%d] from new noti", ret);
+                               return;
+                       }
+
+                       if (auto_remove) {
+                               DBG("auto_remove");
+                               _activenoti_add_in_list(noti); // timer
+                               return; // check!!!
+                       } else {
+                               DBG("!auto_remove");
+                               _activenoti_add_in_list(s_info.current_noti);
+                       }
+               }
+       } else {
+               ret = notification_get_auto_remove(noti, &current_auto_remove);
+               if (ret != NOTIFICATION_ERROR_NONE) {
+                       DBG("notification_get_auto_remove return [%d] from current_noti", ret);
+                       return;
+               }
+       }
+
+       s_info.current_noti = noti;
+
+       if (current_auto_remove == true) {
+               time_t noti_time = 0;
+               ret = notification_get_time(s_info.current_noti, &noti_time);
+               if (ret != NOTIFICATION_ERROR_NONE || noti_time == 0)
+                       notification_get_insert_time(s_info.current_noti, &noti_time);
+
+
+               noti_time = time(NULL) - noti_time;
+               s_info.close_timer = ecore_timer_add(DEL_TIMER_VALUE - noti_time, _activenoti_close_timer_cb, NULL);
+       }
+
+       bg_img = elm_object_part_content_unset(s_info.layout, "bg_img");
+       DBG("bg_img %p", bg_img);
+       if (bg_img != NULL) {
+               evas_object_del(bg_img);
+               bg_img = NULL;
+       }
+
+       bg_img = _get_bg_img(s_info.layout , s_info.current_noti);
+       if (bg_img != NULL)
+               elm_object_part_content_set(s_info.layout, "bg_img", bg_img);
+
+
+       btn_cnt = _activenoti_create_button(s_info.layout, s_info.current_noti);
+
+       if (btn_cnt == 0) { //no button
+               if (_activenoti_check_text_input_type(s_info.current_noti)
+                       && _activenoti_create_entry(s_info.layout, s_info.current_noti)) {
+                       /* Entry Layout */
+                       _activenoti_show_entry();
+                       elm_object_signal_emit(s_info.layout, "button_layout_hide", "button_layout.swallow");
+                       elm_object_signal_emit(s_info.layout, "entry_layout_show", "entry_layout.swallow");
+               } else {
+                       /* Empty Layout */
+                       elm_object_signal_emit(s_info.layout, "entry_layout_hide", "entry_layout.swallow");
+                       elm_object_signal_emit(s_info.layout, "button_layout_hide", "button_layout.swallow");
+               }
+       } else {
+               elm_object_signal_emit(s_info.layout, "entry_layout_hide", "entry_layout.swallow");
+               elm_object_signal_emit(s_info.layout, "button_layout_show", "button_layout.swallow");
+       }
+
+       icon = elm_object_part_content_unset(s_info.layout, "icon_big");
+       DBG("icon %p", icon);
+       if (icon != NULL) {
+               evas_object_del(icon);
+               icon = NULL;
+       }
+
+       icon = elm_object_part_content_unset(s_info.layout, "icon_thumbnail");
+       DBG("icon %p", icon);
+       if (icon != NULL) {
+               evas_object_del(icon);
+               icon = NULL;
+       }
+
+       icon = _activenoti_create_icon(s_info.layout, s_info.current_noti, &image_type);
+       if (icon != NULL) {
+               if (image_type == 0) {
+                       elm_object_part_content_set(s_info.layout, "icon_big", icon);
+                       elm_object_signal_emit(s_info.layout, "thumbnail_hide", "icon_thumbnail");
+                       elm_object_signal_emit(s_info.layout, "icon_show", "icon_big");
+               } else {
+                       elm_image_fill_outside_set(icon, EINA_TRUE);
+                       elm_object_part_content_set(s_info.layout, "icon_thumbnail", icon);
+                       elm_object_signal_emit(s_info.layout, "icon_hide", "icon_big");
+                       elm_object_signal_emit(s_info.layout, "thumbnail_show", "icon_thumbnail");
+               }
+
+               badge = elm_object_part_content_unset(s_info.layout, "icon_badge");
+               DBG("badget %p", badge);
+               if (badge != NULL)
+                       evas_object_del(badge);
+
+
+               badge = _activenoti_create_badge(s_info.layout, s_info.current_noti);
+               if (badge != NULL)
+                       elm_object_part_content_set(s_info.layout, "icon_badge", badge);
+               else
+                       INFO("badge is NULL");
+
+
+       } else {
+               INFO("icon is NULL");
+       }
+
+       _activenoti_set_text(noti, 0);
+
+       evas_object_show(s_info.activenoti);
+
+       ERR("activenoti noti is updated");
+}
+
+static void _activenoti_destroy_activenoti(void)
+{
+       retif(!s_info.activenoti, , "s_info->activenoti is null");
+
+       _gesture_destroy();
+
+       if (s_info.delay_timer != NULL) {
+               ecore_timer_del(s_info.delay_timer);
+               s_info.delay_timer = NULL;
+       }
+
+       if (s_info.close_timer != NULL) {
+               ecore_timer_del(s_info.close_timer);
+               s_info.close_timer = NULL;
+       }
+
+       if (s_info.btnbox) {
+               evas_object_del(s_info.btnbox);
+               s_info.btnbox = NULL;
+       }
+
+       if (s_info.layout) {
+               evas_object_del(s_info.layout);
+               s_info.layout = NULL;
+       }
+
+       if (s_info.activenoti) {
+               evas_object_del(s_info.activenoti);
+               s_info.activenoti = NULL;
+       }
+}
+
+static void _activenoti_win_rotated(void *data, int need_hide)
+{
+       retif(data == NULL, , "data is NULL");
+       int angle = 0;
+       struct appdata *ad = data;
+
+       if (s_info.activenoti != NULL) {
+               angle = elm_win_rotation_get(s_info.activenoti);
+
+               if (((angle == 0 || angle == 180) && (ad->angle == 90 || ad->angle == 270))
+                       || ((angle == 90 || angle == 270) && (ad->angle == 0 || ad->angle == 180))) {
+
+                       if (need_hide == 1)
+                               evas_object_hide(s_info.activenoti);
+
+               }
+       }
+}
+
+static void _media_feedback_sound(notification_h noti)
+{
+       retif(noti == NULL, , "op_list is NULL");
+       int ret = 0, priv_id = 0;
+       const char *nsound_path = NULL;
+       notification_sound_type_e nsound_type = NOTIFICATION_SOUND_TYPE_NONE;
+       char *default_msg_tone = NULL;
+
+       notification_get_id(noti, NULL, &priv_id);
+       notification_get_sound(noti, &nsound_type, &nsound_path);
+       DBG("notification sound: %d, %s", nsound_type, nsound_path);
+
+       switch (nsound_type) {
+       case NOTIFICATION_SOUND_TYPE_USER_DATA:
+               /*
+                *  if user data file isn't playable, play the default ringtone
+                */
+               if (nsound_path != NULL) {
+                       if (quickpanel_media_playable_check(nsound_path) == EINA_TRUE) {
+                               ret = quickpanel_media_player_play(SOUND_TYPE_NOTIFICATION, nsound_path);
+                               if (quickpanel_media_player_is_drm_error(ret) == 1) {
+                                       ERR("failed to play notification sound due to DRM problem");
+                                       ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION, &default_msg_tone);
+                                       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "ailed to get key(%s) : %d", "SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION", ret);
+
+
+                                       if (default_msg_tone != NULL) {
+                                               DBG("setting sound[%s]", default_msg_tone);
+                                               ret = quickpanel_media_player_play(SOUND_TYPE_NOTIFICATION, default_msg_tone);
+                                               free(default_msg_tone);
+                                       }
+                               }
+
+                               if (ret == PLAYER_ERROR_NONE)
+                                       quickpanel_media_player_id_set(priv_id);
+                               else
+                                       ERR("failed to play notification sound");
+
+                               break;
+                       } else {
+                               ERR("playable false, So unlock tone");
+                               feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_UNLOCK);
+                       }
+               } else {
+                       ERR("sound path null");
+               }
+
+               break;
+       case NOTIFICATION_SOUND_TYPE_DEFAULT:
+               ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION, &default_msg_tone);
+               msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "ailed to get key(%s) : %d", "SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION", ret);
+
+               if (default_msg_tone != NULL) {
+                       DBG("Reminded setting sound[%s]", default_msg_tone);
+                       ret = quickpanel_media_player_play(SOUND_TYPE_NOTIFICATION, default_msg_tone);
+                       free(default_msg_tone);
+
+                       if (ret == PLAYER_ERROR_NONE)
+                               quickpanel_media_player_id_set(priv_id);
+                       else
+                               ERR("failed to play notification sound(default)");
+
+               }
+               break;
+       case NOTIFICATION_SOUND_TYPE_NONE:
+               ERR("None type: No sound");
+               break;
+
+       default:
+               ERR("UnKnown type[%d]", (int)nsound_type);
+               break;
+       }
+}
+
+static void _media_feedback_vibration(notification_h noti)
+{
+       retif(noti == NULL, , "Invalid parameter!");
+
+       /* Play Vibration */
+       notification_vibration_type_e nvibration_type = NOTIFICATION_VIBRATION_TYPE_NONE;
+       const char *nvibration_path = NULL;
+
+       notification_get_vibration(noti, &nvibration_type, &nvibration_path);
+       DBG("notification vibration: %d, %s", nvibration_type, nvibration_path);
+       switch (nvibration_type) {
+       case NOTIFICATION_VIBRATION_TYPE_USER_DATA:
+       case NOTIFICATION_VIBRATION_TYPE_DEFAULT:
+               feedback_play_type(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_MESSAGE);
+               break;
+       case NOTIFICATION_VIBRATION_TYPE_NONE:
+               break;
+       }
+}
+
+static void _activenoti_noti_detailed_changed_cb(void *data, notification_type_e type, notification_op *op_list, int num_op)
+{
+       DBG("");
+       retif(op_list == NULL, , "op_list is NULL");
+
+       notification_h noti = NULL;
+       int flags = 0;
+       int applist = NOTIFICATION_DISPLAY_APP_ALL;
+       int op_type = 0;
+       int priv_id = 0;
+
+       notification_op_get_data(op_list, NOTIFICATION_OP_DATA_TYPE, &op_type);
+       notification_op_get_data(op_list, NOTIFICATION_OP_DATA_PRIV_ID, &priv_id);
+       notification_op_get_data(op_list, NOTIFICATION_OP_DATA_NOTI, &noti);
+
+       DBG("op_type:%d", op_type);
+       DBG("op_priv_id:%d", priv_id);
+       DBG("noti:%p", noti);
+
+       if (op_type == NOTIFICATION_OP_DELETE) {
+               DBG("NOTIFICATION_OP_DELETE");
+               int priv_id_current = 0;
+
+               if (s_info.current_noti) {
+                       notification_get_id(s_info.current_noti, NULL, &priv_id_current);
+                       if (s_info.current_noti == noti || priv_id_current == priv_id) {
+                               _activenoti_hide(NULL, 0);
+                               return;
+                       }
+               }
+
+               _activenoti_remove_in_list(noti);
+
+               return;
+       } else if (op_type == NOTIFICATION_OP_DELETE_ALL) {
+               if (s_info.current_noti)
+                       _activenoti_hide(NULL, 0);
+
+               _activenoti_remove_list();
+       }
+
+       retif(noti == NULL, , "noti is NULL");
+
+       if (op_type == NOTIFICATION_OP_INSERT || op_type == NOTIFICATION_OP_UPDATE) {
+               if (_is_sound_playable() == 1) {
+                       if (_check_sound_off(noti) == 0) {
+                               DBG("try to play notification sound %lu", pthread_self());
+                               _media_feedback_sound(noti);
+                               if (quickpanel_media_is_vib_enabled() == 1
+                                               || quickpanel_media_is_sound_enabled() == 1) {
+                                       _media_feedback_vibration(noti);
+                               }
+                       }
+
+               }
+       }
+
+       notification_get_display_applist(noti, &applist);
+       DBG("applist : %x", applist);
+
+       /* Check activenoti flag */
+       notification_get_property(noti, &flags);
+
+       if (applist & NOTIFICATION_DISPLAY_APP_ACTIVE) {
+               if (_is_security_lockscreen_launched() || _check_sound_off(noti) == 1) {
+                       INFO("lock screen is launched");
+                       return;
+               }
+
+               if (quickpanel_uic_is_opened() && (applist & NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY)) {
+                       ERR("quickpanel is opened, activenoti will be not displayed");
+                       return;
+               }
+
+               /* wait if s_info.activenoti is not NULL */
+               _activenoti_add_in_list(noti);
+
+               _activenoti_create_activenoti();
+               if (s_info.activenoti == NULL) {
+                       ERR("Fail to create activenoti");
+                       _activenoti_only_noti_del(noti);
+                       return;
+               }
+
+               _activenoti_update_activenoti();
+       }
+}
+
+/*****************************************************************************
+ *
+ * Util functions
+ *
+ *****************************************************************************/
+static Eina_Bool _activenoti_callback_register_idler_cb(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, EINA_FALSE, "Invalid parameter!");
+
+       notification_register_detailed_changed_cb(_activenoti_noti_detailed_changed_cb, ad);
+
+       return EINA_FALSE;
+}
+
+static int _activenoti_init(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+
+       /* Register notification changed cb */
+       ecore_idler_add(_activenoti_callback_register_idler_cb, ad);
+       return QP_OK;
+}
+
+static int _activenoti_fini(void *data)
+{
+       // struct appdata *ad = (struct appdata *)data;
+
+       _activenoti_destroy_activenoti();
+
+       return QP_OK;
+}
+
+static int _activenoti_enter_hib(void *data)
+{
+       return QP_OK;
+}
+
+static int _activenoti_leave_hib(void *data)
+{
+       return QP_OK;
+}
+
+static void _activenoti_reflesh(void *data)
+{
+       retif(data == NULL, , "Invalid parameter!");
+
+       if (s_info.activenoti != NULL)
+               _activenoti_win_rotated(data, 1);
+
+}
+
+static void _activenoti_qp_opened(void *data)
+{
+       DBG("");
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (_activenoti_has_pending_noti())
+               _activenoti_remove_list();
+
+       _activenoti_hide(NULL, 0);
+}
+
+void quickpanel_activenoti_set_display_mode(bool is_landscape)
+{
+       int w, h;
+       evas_object_geometry_get(s_info.text_input_entry, NULL, NULL, &w, &h);
+       DBG("### Rotate ENTRY :: Height : w[%d] h[%d]", w, h);
+
+       if (is_landscape && s_info.is_entry_displayed) {
+               quickpanel_noti_win_resize_height(s_info.activenoti, NOTI_LAYOUT_ENTRY, 0, true);
+/* Temporary workaround for entry single set API issue */
+//             elm_entry_single_line_set(s_info.text_input_entry, EINA_TRUE);
+       } else {
+/* Temporary workaround for entry single set API issue */
+//             elm_entry_single_line_set(s_info.text_input_entry, EINA_FALSE);
+       }
+}
diff --git a/src/notifications/animated_image.c b/src/notifications/animated_image.c
new file mode 100755 (executable)
index 0000000..a6329f5
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "common_uic.h"
+#include "quickpanel-ui.h"
+#include "animated_image.h"
+
+static int _init(void *data);
+static int _fini(void *data);
+static int _suspend(void *data);
+static int _resume(void *data);
+
+QP_Module animated_image = {
+       .name = "animated_image",
+       .init = _init,
+       .fini = _fini,
+       .suspend = _suspend,
+       .resume = _resume,
+       .lang_changed = NULL,
+       .refresh = NULL
+};
+
+static Eina_List *g_animated_image_list = NULL;
+static char g_animated_image_group_name[32] = {0,};
+
+static void _animated_image_list_add(Evas_Object *image)
+{
+       retif(image == NULL, , "Invalid parameter");
+
+       g_animated_image_list = eina_list_append(g_animated_image_list, image);
+}
+
+static void _animated_image_play(Eina_Bool on)
+{
+       const Eina_List *l = NULL;
+       const Eina_List *ln = NULL;
+       Evas_Object *entry_obj = NULL;
+
+       retif(g_animated_image_list == NULL, , "Invalid parameter");
+
+       EINA_LIST_FOREACH_SAFE(g_animated_image_list, l, ln, entry_obj) {
+               if (entry_obj == NULL)
+                       continue;
+
+
+               if (on == EINA_TRUE) {
+                       if (elm_image_animated_play_get(entry_obj) == EINA_FALSE)
+                               elm_image_animated_play_set(entry_obj, EINA_TRUE);
+
+               } else {
+                       if (elm_image_animated_play_get(entry_obj) == EINA_TRUE)
+                               elm_image_animated_play_set(entry_obj, EINA_FALSE);
+
+               }
+       }
+}
+
+static void _animated_image_deleted_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       retif(obj == NULL, , "obj is NULL");
+       retif(g_animated_image_list == NULL, , "list is empty");
+
+       g_animated_image_list = eina_list_remove(g_animated_image_list, obj);
+}
+
+HAPI void quickpanel_animated_image_add(Evas_Object *image)
+{
+       retif(image == NULL, , "image is NULL");
+
+       if (elm_image_animated_available_get(image) == EINA_TRUE) {
+               elm_image_animated_set(image, EINA_TRUE);
+               if (quickpanel_uic_is_suspended() == 0)
+                       elm_image_animated_play_set(image, EINA_TRUE);
+               else
+                       elm_image_animated_play_set(image, EINA_FALSE);
+
+               _animated_image_list_add(image);
+               evas_object_event_callback_add(image, EVAS_CALLBACK_DEL, _animated_image_deleted_cb, NULL);
+       }
+}
+
+HAPI char *quickpanel_animated_image_get_groupname(const char *path)
+{
+       static int s_image_index = 0;
+
+       if (path != NULL) {
+               if (strstr(path, "gif") != NULL || strstr(path, "GIF") != NULL) {
+                       snprintf(g_animated_image_group_name, sizeof(g_animated_image_group_name),
+                                       "%d:EVAS", s_image_index++);
+
+                       return g_animated_image_group_name;
+               }
+       }
+
+       return NULL;
+}
+
+/*****************************************************************************
+ *
+ * Util functions
+ *
+ *****************************************************************************/
+static int _init(void *data)
+{
+       return QP_OK;
+}
+
+static int _fini(void *data)
+{
+       return QP_OK;
+}
+
+static int _suspend(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       DBG("animated image going to be suspened");
+       _animated_image_play(EINA_FALSE);
+
+       return QP_OK;
+}
+
+static int _resume(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       DBG("animated image going to be resumed");
+       _animated_image_play(EINA_TRUE);
+
+       return QP_OK;
+}
diff --git a/src/notifications/noti.c b/src/notifications/noti.c
new file mode 100755 (executable)
index 0000000..b8f32ae
--- /dev/null
@@ -0,0 +1,1404 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+
+#include <time.h>
+
+#include <vconf.h>
+#include <app_control.h>
+#include <notification.h>
+#include <notification_internal.h>
+#include <notification_list.h>
+#include <notification_ongoing_flag.h>
+#include <notification_setting_internal.h>
+#include <notification_ongoing.h>
+#include <system_settings.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <sound_manager.h>
+
+#include "media.h"
+#include "quickpanel-ui.h"
+#include "quickpanel_def.h"
+#include "common_uic.h"
+#include "common.h"
+#include "list_util.h"
+#include "noti_node.h"
+#include "vi_manager.h"
+#include "noti_listbox.h"
+#include "noti_list_item.h"
+#include "noti_section.h"
+#include "noti_view.h"
+#include "noti.h"
+#include "list_util.h"
+#include "page_base.h"
+#include "noti_util.h"
+
+#ifdef QP_SERVICE_NOTI_LED_ENABLE
+#include "noti_led.h"
+#endif
+
+#ifdef QP_REMINDER_ENABLE
+#include "reminder.h"
+#endif
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+#include "emergency_mode.h"
+#endif
+
+static struct _info {
+       noti_node   *noti_node;
+       Evas_Object *ongoing_noti_section_view;
+       Evas_Object *noti_section_view;
+       Evas_Object *noti_box;
+
+       struct tm last_time;
+
+       int is_ongoing_hided;
+       notification_h current_noti;
+} s_info = {
+       .noti_node = NULL,
+       .ongoing_noti_section_view = NULL,
+       .noti_section_view = NULL,
+       .noti_box = NULL,
+
+       .is_ongoing_hided = 0,
+
+       .last_time.tm_mday = 0,
+       .last_time.tm_mon = 0,
+       .last_time.tm_year = 0,
+       .current_noti = NULL,
+};
+
+static void _ongoing_noti_section_deleted_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+
+static notification_h _update_item_progress(const char *pkgname, int priv_id, double progress)
+{
+       char *noti_pkgname = NULL;
+       int noti_priv_id = 0;
+
+       noti_node_item *node = quickpanel_noti_node_get(s_info.noti_node, priv_id);
+
+       if (node != NULL && node->noti != NULL) {
+               notification_get_pkgname(node->noti, &noti_pkgname);
+               notification_get_id(node->noti, NULL, &noti_priv_id);
+
+               if (!pkgname || !noti_pkgname)
+                       return NULL;
+
+               if (!strcmp(noti_pkgname, pkgname) && priv_id == noti_priv_id) {
+
+                       if (notification_set_progress(node->noti, progress) != NOTIFICATION_ERROR_NONE)
+                               ERR("fail to set progress");
+
+                       return node->noti;
+               }
+       }
+
+       return NULL;
+}
+
+static notification_h _update_item_size(const char *pkgname, int priv_id, double size)
+{
+       char *noti_pkgname = NULL;
+       int noti_priv_id = 0;
+
+       noti_node_item *node = quickpanel_noti_node_get(s_info.noti_node, priv_id);
+
+       if (node != NULL && node->noti != NULL) {
+               notification_get_pkgname(node->noti, &noti_pkgname);
+               notification_get_id(node->noti, NULL, &noti_priv_id);
+
+               if (!pkgname || !noti_pkgname)
+                       return NULL;
+
+               if (!strcmp(noti_pkgname, pkgname) && priv_id == noti_priv_id) {
+                       notification_set_size(node->noti, size);
+                       return node->noti;
+               }
+       }
+
+       return NULL;
+}
+
+static notification_h _update_item_content(const char *pkgname, int priv_id, char *content)
+{
+       char *noti_pkgname = NULL;
+       int noti_priv_id = 0;
+       int ret = NOTIFICATION_ERROR_NONE;
+
+       noti_node_item *node = quickpanel_noti_node_get(s_info.noti_node, priv_id);
+
+       if (node != NULL && node->noti != NULL) {
+               notification_get_pkgname(node->noti, &noti_pkgname);
+               notification_get_id(node->noti, NULL, &noti_priv_id);
+
+               if (!pkgname || !noti_pkgname)
+                       return NULL;
+
+               if (!strcmp(noti_pkgname, pkgname) && priv_id == noti_priv_id) {
+                       ret = notification_set_text(node->noti, NOTIFICATION_TEXT_TYPE_CONTENT, content, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+                       if (ret != NOTIFICATION_ERROR_NONE)
+                               ERR("Failed to set text[%d]", ret);
+
+                       return node->noti;
+               }
+       }
+
+       return NULL;
+}
+
+static void _update_progressbar(void *data, notification_h update_noti)
+{
+       int priv_id = 0;
+       struct appdata *ad = data;
+       noti_node_item *node = NULL;
+       retif(ad == NULL, , "data is NULL");
+       retif(ad->list == NULL, , "ad->list is NULL");
+
+       if (notification_get_id(update_noti, NULL, &priv_id) == NOTIFICATION_ERROR_NONE)
+               node = quickpanel_noti_node_get(s_info.noti_node, priv_id);
+
+       retif(node == NULL, , "fail to find node of priv_id:%d", priv_id);
+       retif(node->view == NULL, , "fail to find %p", node->view);
+
+       quickpanel_noti_listbox_update_item(ad->list, node->view);
+}
+
+static int _is_item_deletable(notification_h noti)
+{
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+       notification_ly_type_e ly_type = NOTIFICATION_LY_NONE;
+       bool ongoing_flag = false;
+
+       notification_get_type(noti, &type);
+       notification_get_layout(noti, &ly_type);
+       notification_get_ongoing_flag(noti, &ongoing_flag);
+
+       if ((type == NOTIFICATION_TYPE_ONGOING && ongoing_flag) ||
+               (type == NOTIFICATION_TYPE_ONGOING && ly_type == NOTIFICATION_LY_ONGOING_PROGRESS))
+               return 0;
+
+       return 1;
+}
+
+static int _do_noti_delete(notification_h noti)
+{
+       char *pkgname = NULL;
+       char *caller_pkgname = NULL;
+       int flags = 0, priv_id = 0, flag_delete = 0;
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+       int ret = NOTIFICATION_ERROR_INVALID_PARAMETER;
+       int ret_event = NOTIFICATION_ERROR_INVALID_PARAMETER;
+       quickpanel_media_play_feedback();
+
+       retif(noti == NULL, NOTIFICATION_ERROR_INVALID_PARAMETER, "Invalid parameter!");
+
+       notification_get_pkgname(noti, &caller_pkgname);
+       //      notification_get_application(noti, &pkgname);
+       if (pkgname == NULL)
+               pkgname = caller_pkgname;
+
+       notification_get_id(noti, NULL, &priv_id);
+       notification_get_property(noti, &flags);
+       notification_get_type(noti, &type);
+
+       if (flags & NOTIFICATION_PROP_PERMANENT_DISPLAY)
+               flag_delete = 0;
+       else
+               flag_delete = 1;
+
+       if (flag_delete == 1 && (type == NOTIFICATION_TYPE_NOTI || _is_item_deletable(noti))) {
+               ret_event = notification_send_event(noti, NOTIFICATION_EVENT_TYPE_DELETED);
+               if (ret_event != NOTIFICATION_ERROR_NONE)
+                       DBG("notification_send_event is failed [%d]", ret_event);
+
+               ret = notification_delete_by_priv_id(caller_pkgname, NOTIFICATION_TYPE_NOTI, priv_id);
+       }
+
+       return ret;
+}
+
+static void _do_noti_press(notification_h noti, int pressed_area)
+{
+       DBG("");
+       int ret = APP_CONTROL_ERROR_NONE;
+       char *pkgname = NULL;
+       char *caller_pkgname = NULL;
+
+       bundle *responding_service_handle = NULL;
+       bundle *single_service_handle = NULL;
+       bundle *multi_service_handle = NULL;
+       int flags = 0, group_id = 0, priv_id = 0, count = 0, flag_launch = 0,
+               flag_delete = 0;
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+
+       quickpanel_media_play_feedback();
+
+       retif(noti == NULL, , "Invalid parameter!");
+
+       notification_get_pkgname(noti, &caller_pkgname);
+       //      notification_get_application(noti, &pkgname);
+       if (pkgname == NULL)
+               pkgname = caller_pkgname;
+
+       notification_get_id(noti, &group_id, &priv_id);
+       notification_get_property(noti, &flags);
+       notification_get_type(noti, &type);
+
+       if (flags & NOTIFICATION_PROP_DISABLE_APP_LAUNCH)
+               flag_launch = 0;
+       else
+               flag_launch = 1;
+
+       if (flags & NOTIFICATION_PROP_DISABLE_AUTO_DELETE)
+               flag_delete = 0;
+       else
+               flag_delete = 1;
+
+       notification_get_execute_option(noti,
+                       NOTIFICATION_EXECUTE_TYPE_RESPONDING,
+                       NULL, &responding_service_handle);
+       notification_get_execute_option(noti,
+                       NOTIFICATION_EXECUTE_TYPE_SINGLE_LAUNCH,
+                       NULL, &single_service_handle);
+       notification_get_execute_option(noti,
+                       NOTIFICATION_EXECUTE_TYPE_MULTI_LAUNCH,
+                       NULL, &multi_service_handle);
+
+       ret = notification_send_event(noti, NOTIFICATION_EVENT_TYPE_PRESSED);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               DBG("notification_send_event is failed [%d]", ret);
+
+       if (pressed_area == NOTI_PRESS_BUTTON_1 && responding_service_handle != NULL) {
+               DBG("");
+               quickpanel_uic_close_quickpanel(true, 1);
+               ret = quickpanel_common_launch_app(NULL, responding_service_handle);
+       } else if (flag_launch == 1) {
+               /* Hide quickpanel */
+               quickpanel_uic_close_quickpanel(true, 1);
+
+               char *text_count = NULL;
+               notification_get_text(noti, NOTIFICATION_TEXT_TYPE_EVENT_COUNT, &text_count);
+
+               if (text_count != NULL)
+                       count = atoi(text_count);
+               else
+                       count = 1;
+
+               if (single_service_handle != NULL && multi_service_handle == NULL) {
+                       DBG("");
+                       ret = quickpanel_common_launch_app(NULL, single_service_handle);
+               }
+               if (single_service_handle == NULL && multi_service_handle != NULL) {
+                       DBG("");
+                       ret = quickpanel_common_launch_app(NULL, multi_service_handle);
+               }
+               if (single_service_handle != NULL && multi_service_handle != NULL) {
+                       DBG("");
+                       if (count <= 1)
+                               ret = quickpanel_common_launch_app(NULL, single_service_handle);
+                       else
+                               ret = quickpanel_common_launch_app(NULL, multi_service_handle);
+               }
+               quickpanel_common_inform_launch_app_result(pkgname, ret);
+       }
+
+       if (flag_delete == 1 && type == NOTIFICATION_TYPE_NOTI) {
+               notification_delete_by_priv_id(caller_pkgname,
+                               NOTIFICATION_TYPE_NOTI,
+                               priv_id);
+       }
+}
+
+static void _notibox_delete_cb(noti_node_item *item, Evas_Object *obj)
+{
+       DBG("");
+       retif(obj == NULL, , "Invalid parameter!");
+       retif(item == NULL, , "Invalid parameter!");
+
+       notification_h noti = item->noti;
+       retif(noti == NULL, , "Invalid parameter!");
+
+       _do_noti_delete(noti);
+}
+
+static void _notibox_button_1_cb(noti_node_item *item, Evas_Object *obj)
+{
+       DBG("");
+       retif(item == NULL, , "Invalid parameter!");
+
+       notification_h noti = item->noti;
+       retif(noti == NULL, , "Invalid parameter!");
+
+       _do_noti_press(noti, NOTI_PRESS_BUTTON_1);
+}
+
+static void _notibox_select_cb(noti_node_item *item, Evas_Object *obj)
+{
+       DBG("");
+       retif(item == NULL, , "Invalid parameter!");
+       notification_h noti = item->noti;
+       retif(noti == NULL, , "Invalid parameter!");
+
+       _do_noti_press(noti, NOTI_PRESS_BG);
+}
+
+static void _noti_listitem_select_cb(noti_node_item *item, Evas_Object * obj)
+{
+       DBG("");
+       retif(item == NULL, , "Invalid parameter!");
+
+       notification_h noti = item->noti;
+       retif(noti == NULL, , "Invalid parameter!");
+
+       _do_noti_press(noti, NOTI_PRESS_BG);
+}
+
+static void _noti_node_clear_list_cb(gpointer key, gpointer value, gpointer user_data)
+{
+       Evas_Object *noti_listbox = user_data;
+       noti_node_item *node = (noti_node_item *)value;
+
+       if (noti_listbox != NULL && node != NULL) {
+               if (node->noti != NULL && node->view != NULL)
+                       quickpanel_noti_listbox_remove_item(noti_listbox, node->view, EINA_TRUE);
+       }
+}
+
+static void _noti_clear_list_all(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (s_info.noti_node != NULL && s_info.noti_node->table != NULL) {
+               g_hash_table_foreach(s_info.noti_node->table, _noti_node_clear_list_cb, ad->list);
+
+               quickpanel_noti_node_remove_all(s_info.noti_node);
+       }
+}
+
+static void _ongoing_noti_section_icon_state_set(int is_closed)
+{
+       if (s_info.ongoing_noti_section_view != NULL) {
+
+               if (is_closed == 1)
+                       elm_object_signal_emit(s_info.ongoing_noti_section_view, "button,opened", "prog");
+               else
+                       elm_object_signal_emit(s_info.ongoing_noti_section_view, "button,closed", "prog");
+
+       }
+}
+
+static void _ongoing_noti_section_add(void)
+{
+       int noti_count;
+       struct appdata *ad;
+
+       ad = quickpanel_get_app_data();
+       if (!ad) {
+               ERR("Invalid parameter");
+               return;
+       }
+
+       if (!ad->list) {
+               ERR("Invalid list");
+               return;
+       }
+
+       if (s_info.noti_node)
+               noti_count = quickpanel_noti_node_get_item_count(s_info.noti_node, NOTIFICATION_TYPE_NONE);
+       else
+               noti_count = 0;
+
+       DBG("[%d] ", noti_count);
+
+       if (!s_info.ongoing_noti_section_view) {
+               s_info.ongoing_noti_section_view = quickpanel_noti_section_create(ad->list, QP_ITEM_TYPE_ONGOING_NOTI_GROUP);
+               if (s_info.ongoing_noti_section_view) {
+                       quickpanel_noti_section_set_deleted_cb(s_info.ongoing_noti_section_view, _ongoing_noti_section_deleted_cb, ad);
+                       quickpanel_noti_section_update(s_info.ongoing_noti_section_view, noti_count);
+
+                       if (s_info.is_ongoing_hided == 1) {
+                               DBG("Hide NOTI.SECTION");
+                               _ongoing_noti_section_icon_state_set(0);
+                       }
+               }
+       } else {
+               DBG("noti section update %d ", noti_count);
+               quickpanel_noti_section_update(s_info.ongoing_noti_section_view, noti_count);
+       }
+}
+
+static void _ongoing_noti_section_deleted_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       DBG("");
+       struct appdata *ad = data;
+       s_info.ongoing_noti_section_view = NULL;
+       DBG("VIM ongoing noti_section deleted");
+
+       if (quickpanel_noti_node_get_item_count(s_info.noti_node, NOTIFICATION_TYPE_NONE) > 0)
+               _ongoing_noti_section_add();
+
+       quickpanel_noti_listbox_remove_item(ad->list, s_info.noti_section_view, 1);
+       s_info.noti_section_view = NULL;
+}
+
+static void _noti_ongoing_add(Evas_Object *list, void *data, int is_prepend)
+{
+       Evas_Object *noti_list_item = NULL;
+       notification_h noti = data;
+       retif(list == NULL, , "Invalid parameter!");
+
+       if (noti != NULL && quickpanel_noti_util_get_noti_privacy_mode(noti) != QP_PRIVACY_MODE_DO_NOT_SHOW) {
+
+               noti_list_item = quickpanel_noti_list_item_create(list, noti);
+
+               if (noti_list_item != NULL) {
+                       noti_node_item *item = quickpanel_noti_node_add(s_info.noti_node, (void*)data, (void*)noti_list_item);
+                       if (item != NULL) {
+                               quickpanel_noti_list_item_node_set(noti_list_item, item);
+                               quickpanel_noti_list_item_set_item_selected_cb(noti_list_item, _noti_listitem_select_cb);
+                               quickpanel_noti_list_item_set_item_deleted_cb(noti_list_item, _notibox_delete_cb);
+
+                               if (s_info.ongoing_noti_section_view == NULL)
+                                       _ongoing_noti_section_add();
+
+                               quickpanel_noti_listbox_add_item(list, noti_list_item, is_prepend, s_info.ongoing_noti_section_view);
+                       }
+               } else
+                       ERR("fail to insert item to list : %p", data);
+       }
+
+       DBG("noti[%p] data[%p] added listbox[%p]",
+                       data, noti_list_item, list);
+}
+
+static void _noti_add(Evas_Object *list, void *data, int insert_pos)
+{
+       notification_h noti = data;
+       notification_ly_type_e layout = NOTIFICATION_LY_NOTI_EVENT_SINGLE;
+       Evas_Object *noti_view = NULL;
+
+       retif(list == NULL, , "Invalid parameter!");
+
+       if (noti != NULL && quickpanel_noti_util_get_noti_privacy_mode(noti) != QP_PRIVACY_MODE_DO_NOT_SHOW) {
+               notification_get_layout(noti, &layout);
+               noti_view = quickpanel_noti_list_item_create(list, noti);
+
+               if (noti_view != NULL) {
+                       noti_node_item *item = quickpanel_noti_node_add(s_info.noti_node, (void*)data, (void*)noti_view);
+                       if (item != NULL) {
+                               quickpanel_noti_list_item_node_set(noti_view, item);
+                               quickpanel_noti_list_item_set_item_selected_cb(noti_view, _notibox_select_cb);
+                               quickpanel_noti_list_item_set_item_button_1_cb(noti_view, _notibox_button_1_cb);
+                               quickpanel_noti_list_item_set_item_deleted_cb(noti_view, _notibox_delete_cb);
+
+                               if (s_info.noti_section_view == NULL)
+                                       _ongoing_noti_section_add();
+
+                               quickpanel_noti_listbox_add_item(list, noti_view, insert_pos, s_info.noti_section_view);
+                       }
+               } else
+                       ERR("fail to insert item to list : %p", data);
+       }
+
+       DBG("noti[%p] view[%p] added gridbox[%p]",
+                       data, noti_view, list);
+}
+
+static void _update_notilist(struct appdata *ad)
+{
+       DBG("");
+       Evas_Object *list = NULL;
+       notification_h noti = NULL;
+       notification_h noti_save = NULL;
+       notification_list_h list_head = NULL;
+       notification_list_h list_traverse = NULL;
+       int applist = NOTIFICATION_DISPLAY_APP_ALL;
+
+       DBG("");
+
+       retif(ad == NULL, , "Invalid parameter!");
+
+       list = ad->list;
+       retif(list == NULL, , "Failed to get noti genlist.");
+
+       _noti_clear_list_all();
+
+       notification_get_list(NOTIFICATION_TYPE_ONGOING, -1, &list_head);
+       list_traverse = list_head;
+       while (list_traverse != NULL) {
+               noti = notification_list_get_data(list_traverse);
+               notification_get_display_applist(noti, &applist);
+
+               if (applist &
+                               NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY) {
+                       notification_clone(noti, &noti_save);
+                       _noti_ongoing_add(list, noti_save, LISTBOX_APPEND);
+               }
+               list_traverse = notification_list_get_next(list_traverse);
+       }
+       if (list_head != NULL) {
+               notification_free_list(list_head);
+               list_head = NULL;
+       }
+
+       notification_get_list(NOTIFICATION_TYPE_NOTI , -1, &list_head);
+       list_traverse = list_head;
+       while (list_traverse != NULL) {
+               noti = notification_list_get_data(list_traverse);
+               notification_get_display_applist(noti, &applist);
+
+               if (applist &
+                               NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY) {
+                       notification_clone(noti, &noti_save);
+                       _noti_add(list, noti_save, LISTBOX_APPEND);
+               }
+               list_traverse = notification_list_get_next(list_traverse);
+       }
+       if (list_head != NULL) {
+               notification_free_list(list_head);
+               list_head = NULL;
+       }
+
+       if (list != NULL)
+               elm_box_recalculate(list);
+
+}
+
+static inline void _print_debuginfo_from_noti(notification_h noti)
+{
+       retif(noti == NULL, , "Invalid parameter!");
+
+       char *noti_pkgname = NULL;
+       notification_type_e noti_type = NOTIFICATION_TYPE_NONE;
+
+       notification_get_pkgname(noti, &noti_pkgname);
+       notification_get_type(noti, &noti_type);
+
+       if (noti_pkgname != NULL)
+               ERR("pkg:%s", noti_pkgname);
+
+       ERR("type:%d", noti_type);
+}
+
+static void _set_current_notification(notification_h noti)
+{
+       retif(noti == NULL, , "Invalid parameter!");
+
+       if (s_info.current_noti != NULL)
+               notification_free(s_info.current_noti);
+
+       if (notification_clone(noti, &s_info.current_noti) != NOTIFICATION_ERROR_NONE)
+               ERR("failed to create a cloned notification");
+
+}
+
+static void _detailed_changed_cb(void *data, notification_type_e type, notification_op *op_list, int num_op)
+{
+       int i = 0;
+       int op_type = 0;
+       int priv_id = 0;
+       struct appdata *ad = NULL;
+       notification_h noti_new = NULL;
+       notification_h noti_from_master = NULL;
+       notification_type_e noti_type = NOTIFICATION_TYPE_NONE;
+       int noti_applist = NOTIFICATION_DISPLAY_APP_ALL;
+       notification_ly_type_e noti_layout = NOTIFICATION_LY_NONE;
+       notification_ly_type_e old_noti_layout = NOTIFICATION_LY_NONE;
+
+       retif(data == NULL, , "Invalid parameter!");
+       ad = data;
+
+       ERR("num_op:%d", num_op);
+
+       for (i = 0; i < num_op; i++) {
+               notification_op_get_data(op_list + i, NOTIFICATION_OP_DATA_TYPE, &op_type);
+               notification_op_get_data(op_list + i, NOTIFICATION_OP_DATA_PRIV_ID, &priv_id);
+               notification_op_get_data(op_list + i, NOTIFICATION_OP_DATA_NOTI, &noti_from_master);
+
+               ERR("noti operation:%d privid:%d", op_type, priv_id);
+
+               switch (op_type) {
+               case NOTIFICATION_OP_INSERT:
+                       DBG("NOTIFICATION_OP_INSERT");
+                       if (noti_from_master == NULL) {
+                               ERR("failed to get a notification from master");
+                               continue;
+                       }
+                       if (notification_clone(noti_from_master, &noti_new) != NOTIFICATION_ERROR_NONE) {
+                               ERR("failed to create a cloned notification");
+                               continue;
+                       }
+
+                       _print_debuginfo_from_noti(noti_new);
+
+                       _set_current_notification(noti_from_master);
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+                       if (quickpanel_emergency_mode_is_on()) {
+                               if (quickpanel_emergency_mode_notification_filter(noti_new, 0)) {
+                                       notification_free(noti_new);
+                                       return;
+                               }
+                       }
+#endif
+#ifdef QP_SERVICE_NOTI_LED_ENABLE
+                       quickpanel_noti_led_proc(noti_new, op_type);
+#endif
+
+                       notification_get_type(noti_new, &noti_type);
+                       notification_get_display_applist(noti_new, &noti_applist);
+                       notification_get_layout(noti_new, &noti_layout);
+
+                       if (noti_applist & NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY) {
+                               noti_node_item *node = quickpanel_noti_node_get(s_info.noti_node, priv_id);
+                               if (node != NULL) {
+                                       if (noti_type == NOTIFICATION_TYPE_NOTI)
+                                               DBG("cb after inserted:%d", priv_id);
+
+                                       notification_free(noti_new);
+                               } else {
+                                       if (noti_type == NOTIFICATION_TYPE_NOTI) {
+                                               _noti_add(ad->list, noti_new, LISTBOX_APPEND);
+#ifdef QP_REMINDER_ENABLE
+                                               quickpanel_reminder_start(NULL);
+#endif
+                                       } else if (noti_type == NOTIFICATION_TYPE_ONGOING) {
+                                               _noti_ongoing_add(ad->list, noti_new, LISTBOX_PREPEND);
+                                       } else {
+                                               notification_free(noti_new);
+                                       }
+                               }
+                       } else {
+                               notification_free(noti_new);
+                       }
+                       break;
+
+               case NOTIFICATION_OP_DELETE:
+                       {
+                               DBG("NOTIFICATION_OP_DELETE");
+                               noti_node_item *node = quickpanel_noti_node_get(s_info.noti_node, priv_id);
+
+                               if (node != NULL && node->noti != NULL) {
+                                       notification_h noti = node->noti;
+                                       notification_get_type(noti, &noti_type);
+
+#ifdef QP_SERVICE_NOTI_LED_ENABLE
+                                       quickpanel_noti_led_proc(noti, op_type);
+#endif
+                                       _print_debuginfo_from_noti(noti);
+
+                                       if (noti_type == NOTIFICATION_TYPE_NOTI)
+                                               quickpanel_noti_listbox_remove_item(ad->list, node->view, 1);
+                                       else if (noti_type == NOTIFICATION_TYPE_ONGOING)
+                                               quickpanel_noti_listbox_remove_item(ad->list, node->view, 1);
+
+                                       quickpanel_noti_node_remove(s_info.noti_node, priv_id);
+                                       if (quickpanel_media_player_id_get() == priv_id)
+                                               quickpanel_media_player_stop();
+
+                               } else {
+                                       ERR("node = NULL or node->noti == NULL");
+                               }
+
+#ifdef QP_REMINDER_ENABLE
+                               if (quickpanel_noti_node_get_item_count(s_info.noti_node, NOTIFICATION_TYPE_NOTI) <= 0)
+                                       quickpanel_reminder_stop(NULL);
+
+#endif
+                       }
+                       break;
+
+               case NOTIFICATION_OP_UPDATE:
+                       {
+                               DBG("NOTIFICATION_OP_UPDATE");
+                               noti_node_item *node = quickpanel_noti_node_get(s_info.noti_node, priv_id);
+                               notification_h old_noti = NULL;
+
+                               DBG("Notification update priv_id[%d]", priv_id);
+
+                               if (noti_from_master == NULL) {
+                                       ERR("failed to get a notification from master");
+                                       continue;
+                               }
+
+                               if (notification_clone(noti_from_master, &noti_new) != NOTIFICATION_ERROR_NONE) {
+                                       ERR("failed to create a cloned notification");
+                                       continue;
+                               }
+#ifdef QP_EMERGENCY_MODE_ENABLE
+                               if (quickpanel_emergency_mode_is_on()) {
+                                       if (quickpanel_emergency_mode_notification_filter(noti_new, 0)) {
+                                               DBG("notification filtered");
+                                               notification_free(noti_new);
+                                               return;
+                                       }
+                               }
+#endif
+#ifdef QP_SERVICE_NOTI_LED_ENABLE
+                               quickpanel_noti_led_proc(noti_new, op_type);
+#endif
+                               _print_debuginfo_from_noti(noti_new);
+
+                               _set_current_notification(noti_from_master);
+
+                               notification_get_layout(noti_new, &noti_layout);
+
+                               if (node != NULL && node->view != NULL && node->noti != NULL) {
+                                       notification_get_type(noti_new, &noti_type);
+
+                                       notification_get_layout(node->noti, &old_noti_layout);
+                                       if (noti_type == NOTIFICATION_TYPE_NOTI || old_noti_layout != noti_layout) {
+                                               if (quickpanel_noti_view_is_view_handler_changed(node->view, noti_new) == 1) {
+                                                       quickpanel_noti_listbox_remove_item(ad->list, node->view, 1);
+                                                       quickpanel_noti_node_remove(s_info.noti_node, priv_id);
+                                               } else {
+                                                       old_noti = node->noti;
+                                                       node->noti = noti_new;
+                                                       quickpanel_noti_listbox_update_item(ad->list, node->view);
+                                               }
+                                       } else if (noti_type == NOTIFICATION_TYPE_ONGOING) {
+                                               old_noti = node->noti;
+                                               node->noti = noti_new;
+
+                                               quickpanel_noti_listbox_update_item(ad->list, node->view);
+                                       } else {
+                                               notification_free(noti_new);
+                                       }
+
+                                       if (old_noti != NULL)
+                                               notification_free(old_noti);
+
+                               } else {
+                                       notification_get_display_applist(noti_new, &noti_applist);
+
+                                       if (noti_applist & NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY) {
+                                               if (noti_type == NOTIFICATION_TYPE_NOTI)
+                                                       _noti_add(ad->list, noti_new, LISTBOX_PREPEND);
+                                               else if (noti_type == NOTIFICATION_TYPE_ONGOING)
+                                                       _noti_ongoing_add(ad->list, noti_new, LISTBOX_PREPEND);
+                                               else
+                                                       notification_free(noti_new);
+
+                                       } else {
+                                               notification_free(noti_new);
+                                       }
+                               }
+                       }
+                       break;
+
+               case NOTIFICATION_OP_SERVICE_READY:
+                       _update_notilist(ad);
+
+#ifdef QP_SERVICE_NOTI_LED_ENABLE
+                       quickpanel_noti_led_init(ad, s_info.noti_node);
+#endif
+                       quickpanel_vim_set_state_ready();
+
+#ifdef QP_REMINDER_ENABLE
+                       if (quickpanel_noti_node_get_item_count(s_info.noti_node, NOTIFICATION_TYPE_NOTI) > 0)
+                               quickpanel_reminder_start(NULL);
+                       else
+                               quickpanel_reminder_stop(NULL);
+
+#endif
+                       //quickpanel_chg_init();
+                       break;
+
+               default:
+                       ERR("Unknown op type");
+                       break;
+               }
+       }
+
+       int noti_count = quickpanel_noti_node_get_item_count(s_info.noti_node, NOTIFICATION_TYPE_NOTI);
+       int ongoing_noti_count = quickpanel_noti_node_get_item_count(s_info.noti_node, NOTIFICATION_TYPE_ONGOING);
+
+       if (s_info.noti_section_view != NULL)
+               quickpanel_noti_section_update(s_info.noti_section_view, noti_count+ongoing_noti_count);
+
+       if (s_info.ongoing_noti_section_view != NULL)
+               quickpanel_noti_section_update(s_info.ongoing_noti_section_view, noti_count+ongoing_noti_count);
+
+       ERR("current noti count:%d, ongoing:%d", noti_count, ongoing_noti_count);
+}
+
+static void _update_sim_status_cb(keynode_t *node, void *data)
+{
+       struct appdata *ad = data;
+
+       if (ad != NULL && ad->list != NULL) {
+               if (notification_is_service_ready() == 1)
+                       _update_notilist(ad);
+
+       }
+}
+
+void _ongoing_item_update_cb(struct ongoing_info_s *ongoing_info, void *data)
+{
+       notification_h noti = NULL;
+
+       retif(data == NULL, , "Invalid parameter!");
+       retif(ongoing_info == NULL, , "Invalid parameter!");
+
+       retif(ongoing_info->pkgname == NULL, , "Invalid parameter!");
+
+       DBG("pkgname [%s] type [%d]", ongoing_info->pkgname, ongoing_info->type);
+
+       if (ongoing_info->type == ONGOING_TYPE_PROGRESS)
+               noti = _update_item_progress(ongoing_info->pkgname, ongoing_info->priv_id, ongoing_info->progress);
+       else if (ongoing_info->type == ONGOING_TYPE_SIZE)
+               noti = _update_item_size(ongoing_info->pkgname, ongoing_info->priv_id, ongoing_info->size);
+       else if (ongoing_info->type == ONGOING_TYPE_CONTENT)
+               noti = _update_item_content(ongoing_info->pkgname, ongoing_info->priv_id, ongoing_info->content);
+
+       retif(noti == NULL, , "Can not found noti data.");
+
+       _update_progressbar(data, noti);
+
+}
+
+static Eina_Bool _noti_callback_register_idler_cb(void *data)
+{
+       struct appdata *ad = data;
+       int ret = NOTIFICATION_ERROR_NONE;
+       retif(ad == NULL, EINA_FALSE, "Invalid parameter!");
+
+       ret = notification_register_detailed_changed_cb(_detailed_changed_cb, ad);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               DBG("notification_register_detailed_changed_cb error [%d]", ret);
+
+       ret = notification_ongoing_update_cb_set(_ongoing_item_update_cb, ad);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               DBG("notification_ongoing_update_cb_set error [%d]", ret);
+
+       return EINA_FALSE;
+}
+
+static int _register_event_handler(struct appdata *ad)
+{
+       int ret = 0;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       /* Notify vconf key */
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SIM_SLOT, _update_sim_status_cb, (void *)ad);
+       if (ret != 0)
+               ERR("Failed to register SIM_SLOT change callback!");
+
+       /* Register notification changed cb */
+       ecore_idler_add(_noti_callback_register_idler_cb, ad);
+
+       return ret;
+}
+
+static int _unregister_event_handler(struct appdata *ad)
+{
+       int ret = 0;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       notification_ongoing_update_cb_unset();
+
+       /* Unregister notification changed cb */
+       notification_unregister_detailed_changed_cb(_detailed_changed_cb, (void *)ad);
+
+       ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SIM_SLOT, _update_sim_status_cb);
+       if (ret != 0)
+               ERR("Failed to ignore SIM_SLOT change callback!");
+
+       return QP_OK;
+}
+
+/*static void _quickpanel_noti_init(void *data)
+  {
+  struct appdata *ad = NULL;
+
+  retif(data == NULL, , "Invalid parameter!");
+  ad = data;
+
+  retif(ad->list == NULL, , "Invalid parameter!");
+
+  DBG("wr");
+
+  if (s_info.noti_box == NULL) {
+  s_info.noti_box = quickpanel_noti_listbox_create(ad->list
+  , quickpanel_get_app_data(), QP_ITEM_TYPE_ONGOING_NOTI);
+  quickpanel_noti_listbox_set_item_deleted_cb(s_info.noti_box, _quickpanel_list_box_deleted_cb);
+  quickpanel_list_util_sort_insert(ad->list, s_info.noti_box);
+  }
+  }
+
+  static void _quickpanel_noti_fini(void *data)
+  {
+  struct appdata *ad = NULL;
+
+  retif(data == NULL, , "Invalid parameter!");
+  ad = data;
+
+  retif(ad->list == NULL, , "Invalid parameter!");
+
+  DBG("dr");
+  }*/
+
+static void _on_time_changed(keynode_t *key, void *data)
+{
+       struct appdata *ad = data;
+       time_t current_time;
+       struct tm loc_time;
+
+       if (!key) {
+               /**
+                * @todo
+                * Todo something for this case.
+                */
+       }
+
+       current_time = time(NULL);
+       localtime_r(&current_time, &loc_time);
+
+       if (loc_time.tm_yday != s_info.last_time.tm_yday || loc_time.tm_year != s_info.last_time.tm_year)
+               _update_notilist(ad);
+
+       s_info.last_time = loc_time;
+}
+
+static void _noti_time_init(void *data)
+{
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       time_t current_time;
+
+       current_time = time(NULL);
+       localtime_r(&current_time, &s_info.last_time);
+
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_TIMEZONE_INT, _on_time_changed, data);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_SETAPPL_TIMEZONE_INT, ret);
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SVC_ROAM, _on_time_changed, data);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_TELEPHONY_SVC_ROAM, ret);
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_TIMEZONE_ID, _on_time_changed, data);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_SETAPPL_TIMEZONE_ID, ret);
+}
+
+static int _init(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       quickpanel_noti_node_create(&s_info.noti_node);
+
+       //_quickpanel_noti_init(ad);
+
+       _register_event_handler(ad);
+
+       // NOTI TIME
+       _noti_time_init(data);
+
+       return QP_OK;
+}
+
+static void _noti_time_fini(void *data)
+{
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_TIMEZONE_INT, _on_time_changed);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_SETAPPL_TIMEZONE_INT, ret);
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_TIMEZONE_ID, _on_time_changed);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_SETAPPL_TIMEZONE_ID, ret);
+       ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SVC_ROAM, _on_time_changed);
+       msgif(ret != 0, "failed to set key(%s) : %d", VCONFKEY_TELEPHONY_SVC_ROAM, ret);
+}
+
+static int _fini(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+#ifdef QP_SERVICE_NOTI_LED_ENABLE
+       quickpanel_noti_led_fini(ad);
+#endif
+
+       /* Unregister event handler */
+       _unregister_event_handler(data);
+
+       _noti_clear_list_all();
+
+       //_quickpanel_noti_fini(ad);
+
+       if (s_info.noti_node != NULL)
+               quickpanel_noti_node_destroy(&s_info.noti_node);
+
+       // NOTI TIME
+       _noti_time_fini(data);
+
+       return QP_OK;
+}
+
+static int _suspend(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       return QP_OK;
+}
+
+static void _noti_node_ongoing_update_cb(gpointer key, gpointer value, gpointer user_data)
+{
+       notification_type_e noti_type = NOTIFICATION_TYPE_NONE;
+       Evas_Object *noti_listbox = user_data;
+       noti_node_item *node = (noti_node_item *)value;
+
+       if (noti_listbox != NULL && node != NULL) {
+               if (node->noti != NULL && node->view != NULL) {
+                       notification_get_type(node->noti, &noti_type);
+                       if (noti_type == NOTIFICATION_TYPE_ONGOING)
+                               quickpanel_noti_listbox_update_item(noti_listbox, node->view);
+               }
+       }
+}
+
+static int _resume(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       if (ad->list != NULL && s_info.noti_node != NULL) {
+               if (quickpanel_noti_node_get_item_count(s_info.noti_node, NOTIFICATION_TYPE_ONGOING) > 0) {
+                       if (s_info.noti_node->table != NULL)
+                               g_hash_table_foreach(s_info.noti_node->table, _noti_node_ongoing_update_cb, ad->list);
+               }
+       }
+
+       return QP_OK;
+}
+
+static void _refresh(void *data)
+{
+       struct appdata *ad = NULL;
+
+       retif(data == NULL, , "Invalid parameter!");
+       ad = data;
+
+       quickpanel_noti_listbox_rotation(ad->list, ad->angle);
+}
+
+static void _lang_changed(void *data)
+{
+       int noti_count = 0;
+       int ongoing_noti_count = 0;
+       struct appdata *ad = data;
+
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (notification_is_service_ready() == 1) {
+
+               _update_notilist(ad);
+
+               noti_count = quickpanel_noti_node_get_item_count(s_info.noti_node, NOTIFICATION_TYPE_NOTI);
+               ongoing_noti_count = quickpanel_noti_node_get_item_count(s_info.noti_node, NOTIFICATION_TYPE_ONGOING);
+
+               if (s_info.noti_section_view != NULL)
+                       quickpanel_noti_section_update(s_info.noti_section_view, noti_count+ongoing_noti_count);
+
+               if (s_info.ongoing_noti_section_view != NULL)
+                       quickpanel_noti_section_update(s_info.ongoing_noti_section_view, noti_count+ongoing_noti_count);
+       }
+
+       quickpanel_page_secured_lock_text_set();
+}
+
+HAPI int quickpanel_noti_get_count(void)
+{
+       return quickpanel_noti_node_get_item_count(s_info.noti_node, NOTIFICATION_TYPE_NONE);
+}
+
+HAPI int quickpanel_noti_get_type_count(notification_type_e noti_type)
+{
+       return quickpanel_noti_node_get_item_count(s_info.noti_node, noti_type);
+}
+
+HAPI int quickpanel_noti_get_geometry(int *limit_h, int *limit_partial_h, int *limit_partial_w)
+{
+       retif(limit_h == NULL, 0, "invalid parameter");
+       retif(limit_partial_h == NULL, 0, "invalid parameter");
+       retif(limit_partial_w == NULL, 0, "invalid parameter");
+       struct appdata *ad = quickpanel_get_app_data();
+
+       return quickpanel_noti_listbox_get_geometry(ad->list, limit_h, limit_partial_h, limit_partial_w);
+}
+
+HAPI noti_node_item *quickpanel_noti_node_get_by_priv_id(int priv_id)
+{
+       retif(s_info.noti_node == NULL, NULL, "invalid parameter");
+
+       return quickpanel_noti_node_get(s_info.noti_node, priv_id);
+}
+
+HAPI noti_node_item *quickpanel_noti_node_get_first_noti(void)
+{
+       // get box list
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj = NULL;
+       Eina_List *item_list = NULL;
+       noti_node_item *node = NULL;
+       noti_node_item *node_first_noti = NULL;
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, NULL, "invalid data");
+
+       item_list = elm_box_children_get(ad->list);
+       retif(item_list == NULL, NULL, "invalid parameter");
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+               if (obj != NULL) {
+                       node = quickpanel_noti_list_item_node_get(obj);
+                       if (node) {
+                               notification_h noti = node->noti;
+                               if (noti) {
+                                       notification_get_type(noti, &type);
+                                       if (type == NOTIFICATION_TYPE_NOTI) {
+                                               node_first_noti = node;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       if (item_list != NULL)
+               eina_list_free(item_list);
+
+       return node_first_noti;
+}
+
+HAPI void quickpanel_noti_closing_trigger_set(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+
+       retif(ad == NULL, , "invalid parameter");
+
+       quickpanel_noti_listbox_closing_trigger_set(ad->list);
+}
+
+static void _opened(void *data)
+{
+       if (elm_config_access_get() == EINA_TRUE)
+               elm_access_say(_NOT_LOCALIZED("Notification panel"));
+
+}
+
+HAPI void quickpanel_noti_set_clear_all_status()
+{
+       notification_h noti;
+       notification_list_h list_head;
+       notification_list_h list_traverse;
+       bool ongoing_cnt = false;
+       Evas_Object* clear_all_button = NULL;
+       int ret;
+
+       list_head = NULL;
+       ret = notification_get_list(NOTIFICATION_TYPE_ONGOING, -1, &list_head);
+       if (ret != NOTIFICATION_ERROR_NONE) {
+               ERR("Unable to get the list of notification");
+               return;
+       }
+
+       list_traverse = list_head;
+       while (list_traverse != NULL) {
+               noti = notification_list_get_data(list_traverse);
+               if (_is_item_deletable(noti))
+                       ongoing_cnt++;
+
+               list_traverse = notification_list_get_next(list_traverse);
+       }
+
+       if (list_head != NULL)
+               notification_free_list(list_head);
+
+
+       clear_all_button = elm_object_part_content_get(s_info.ongoing_noti_section_view, "focus");
+       if (clear_all_button == NULL) {
+               ERR("Unable to get object content");
+               return;
+       }
+
+       if (ongoing_cnt == 0 && quickpanel_noti_node_get_item_count(s_info.noti_node, NOTIFICATION_TYPE_NOTI) <= 0) {
+               INFO("NOTI SECTION CLEAR ALL DISABLE");
+               elm_object_signal_emit(s_info.ongoing_noti_section_view, "notifaction,section,clear_all,disabled", "base");
+               elm_object_disabled_set(clear_all_button, EINA_TRUE);
+       } else {
+               INFO("NOTI SECTION CLEAR ALL SHOW");
+               elm_object_signal_emit(s_info.ongoing_noti_section_view, "notifaction,section,clear_all,show", "base");
+               elm_object_disabled_set(clear_all_button, EINA_FALSE);
+       }
+}
+
+HAPI void quickpanel_noti_on_noti_setting_clicked(void *data, Evas_Object *obj, void *info)
+{
+       DBG("Noti Setting clicked");
+
+       quickpanel_media_play_feedback();
+
+       quickpanel_common_launch_app(QP_SETTING_PKG_NOTI, NULL);
+
+       quickpanel_uic_close_quickpanel(true, 1);
+}
+
+HAPI void quickpanel_noti_on_clear_all_clicked(void *data, Evas_Object *obj, void *info)
+{
+       DBG("");
+
+       quickpanel_media_play_feedback();
+
+       notification_h noti;
+       notification_list_h list_head;
+       notification_list_h list_traverse;
+       int ret;
+
+       quickpanel_noti_closing_trigger_set();
+       notification_clear(NOTIFICATION_TYPE_NOTI);
+
+       list_head = NULL;
+       ret = notification_get_list(NOTIFICATION_TYPE_ONGOING, -1, &list_head);
+       if (ret != NOTIFICATION_ERROR_NONE) {
+               ERR("Unable to get the list of notifications");
+               return;
+       }
+
+       list_traverse = list_head;
+       while (list_traverse != NULL) {
+               noti = notification_list_get_data(list_traverse);
+               if (_is_item_deletable(noti)) {
+                       char *caller_pkgname;
+                       int priv_id;
+
+                       ret = notification_get_id(noti, NULL, &priv_id);
+                       if (ret != NOTIFICATION_ERROR_NONE) {
+                               ERR("Unable to get ID from noti object: %p", noti);
+                               priv_id = 0;
+                       }
+                       ret = notification_get_pkgname(noti, &caller_pkgname);
+                       if (ret != NOTIFICATION_ERROR_NONE) {
+                               ERR("Unable to get caller package name: %p", noti);
+                               caller_pkgname = NULL;
+                       }
+
+                       notification_delete_by_priv_id(caller_pkgname, NOTIFICATION_TYPE_NOTI, priv_id);
+               }
+
+               list_traverse = notification_list_get_next(list_traverse);
+       }
+
+       if (list_head != NULL) {
+               notification_free_list(list_head);
+               list_head = NULL;
+       }
+
+       quickpanel_uic_close_quickpanel(EINA_FALSE, EINA_FALSE);
+
+}
+
+static Eina_Bool _notification_time_format_changed_cb(void *data)
+{
+       struct appdata *ad = data;
+
+       _update_notilist(ad);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+HAPI void quickpanel_noti_update_by_system_time_changed_setting_cb(system_settings_key_e key, void *data)
+{
+       // struct appdata *ad = data;
+       if (key == SYSTEM_SETTINGS_KEY_TIME_CHANGED || key == SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY) {
+               _on_time_changed(NULL, data);
+       } else { //key == SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR
+               _notification_time_format_changed_cb(data);
+       }
+}
+
+HAPI void quickpanel_noti_update_by_system_time_changed_vconf_cb(keynode_t *key, void *data)
+{
+       _notification_time_format_changed_cb(data);
+}
+
+HAPI void quickpanel_noti_init_noti_section(void)
+{
+       if (s_info.ongoing_noti_section_view == NULL)
+               _ongoing_noti_section_add();
+
+}
+
+HAPI void quickpanel_noti_update_for_dismiss_ticker()
+{
+       int app_list;
+       int ret = NOTIFICATION_ERROR_NONE;
+
+       retif(s_info.current_noti == NULL, , "current notification is NULL");
+
+       ret = notification_get_display_applist(s_info.current_noti, &app_list);
+       if (ret != NOTIFICATION_ERROR_NONE) {
+               ERR("notification_set_display_applist failed: %s", get_error_message(ret));
+               return;
+       }
+
+       if (app_list & NOTIFICATION_DISPLAY_APP_TICKER) {
+               ret = notification_set_display_applist(s_info.current_noti, app_list & ~NOTIFICATION_DISPLAY_APP_TICKER);
+               if (ret != NOTIFICATION_ERROR_NONE) {
+                       ERR("notification_set_display_applist failed: %s", get_error_message(ret));
+                       return;
+               }
+
+               ret = notification_update(s_info.current_noti);
+               if (ret != NOTIFICATION_ERROR_NONE) {
+                       ERR("notification_update failed: %s", get_error_message(ret));
+                       return;
+               }
+       }
+}
+
+
+HAPI void quickpanel_noti_update_list()
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       _update_notilist(ad);
+}
+
+
+QP_Module noti = {
+       .name = "noti",
+       .init = _init,
+       .fini = _fini,
+       .suspend = _suspend,
+       .resume = _resume,
+       .lang_changed = _lang_changed,
+       .hib_enter = NULL,
+       .hib_leave = NULL,
+       .refresh = _refresh,
+       .get_height = NULL,
+       .qp_opened = _opened,
+};
+
+/* End of a file */
diff --git a/src/notifications/noti_list_item.c b/src/notifications/noti_list_item.c
new file mode 100755 (executable)
index 0000000..0ccb89c
--- /dev/null
@@ -0,0 +1,664 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <string.h>
+#include <glib.h>
+
+#include <vconf.h>
+#include <notification.h>
+#include <notification_internal.h>
+#include <notification_ongoing_flag.h>
+#include <notification_setting_internal.h>
+#include <system_settings.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "list_util.h"
+#include "quickpanel_def.h"
+#include "vi_manager.h"
+#include "noti_node.h"
+#include "noti_list_item.h"
+#include "noti.h"
+#include "noti_util.h"
+#include "animated_icon.h"
+
+#ifdef QP_SCREENREADER_ENABLE
+#include "accessibility.h"
+#endif
+
+#ifdef QP_ANIMATED_IMAGE_ENABLE
+#include "animated_image.h"
+#endif
+
+extern Noti_View_H noti_view_h;
+extern Noti_View_H ongoing_noti_view_h;
+
+#define THRESHOLD_DRAGGING_TIME_LIMIT 1.0
+#define LIMIT_ZOOM_RATIO 0.57
+#define LIMIT_FADEOUT_RATIO 0.1
+#define THRESHOLD_DELETE_START 80
+#define THRESHOLD_DELETE_START_Y_LIMIT 60
+#define THRESHOLD_DISTANCE (300)
+#define MAX_DRAG_X_DISTANCE_FOR_ONGOING_NOTI 60
+
+static struct _info {
+       int item_debug_step;
+       Noti_View_H *view_handlers[NOTIFICATION_LY_MAX + 1];
+       Eina_Bool mouse_event_blocker;
+} s_info = {
+       .item_debug_step = 0,
+       .view_handlers = {
+               NULL,
+               &noti_view_h,
+               &noti_view_h,
+               &noti_view_h,
+               &ongoing_noti_view_h,
+               &ongoing_noti_view_h,
+               NULL,
+       },
+       .mouse_event_blocker = EINA_TRUE,
+};
+
+static int _is_item_deletable_by_gesture(noti_list_item_h *handler)
+{
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+       notification_ly_type_e ly_type = NOTIFICATION_LY_NONE;
+
+       retif(handler == NULL, 0, "Invalid parameter!");
+       retif(handler->noti_node == NULL, 0, "Invalid parameter!");
+       retif(handler->noti_node->noti == NULL, 0, "Invalid parameter!");
+       bool ongoing_flag = false;
+
+       notification_h noti = handler->noti_node->noti;
+
+       notification_get_type(noti, &type);
+       notification_get_layout(noti, &ly_type);
+       notification_get_ongoing_flag(noti, &ongoing_flag);
+
+       if ((type == NOTIFICATION_TYPE_ONGOING && ongoing_flag) ||
+                       (type == NOTIFICATION_TYPE_ONGOING && ly_type == NOTIFICATION_LY_ONGOING_PROGRESS)) {
+               return 0;
+       }
+
+       return 1;
+}
+
+static void _item_handler_set(Evas_Object *item, noti_list_item_h *handler)
+{
+       retif(item == NULL, , "Invalid parameter!");
+       retif(handler == NULL, , "Invalid parameter!");
+
+       evas_object_data_set(item, E_DATA_NOTI_LIST_ITEM_H, handler);
+}
+
+static noti_list_item_h *_item_handler_get(Evas_Object *item)
+{
+       retif(item == NULL, NULL, "Invalid parameter!");
+
+       return evas_object_data_get(item, E_DATA_NOTI_LIST_ITEM_H);
+}
+
+static noti_node_item *_get_noti_node(Evas_Object *item)
+{
+       retif(item == NULL, NULL, "invalid parameter");
+
+       noti_list_item_h *handler = _item_handler_get(item);
+       retif(handler == NULL, NULL, "invalid parameter");
+
+       return quickpanel_noti_node_get_by_priv_id(handler->priv_id);
+}
+
+static void _response_callback_call(Evas_Object *item, const char *emission)
+{
+       static double time_called = 0.0;
+       retif(item == NULL, , "invalid parameter");
+       retif(emission == NULL, , "invalid parameter");
+
+       if (time_called == 0.0) {
+               time_called = ecore_loop_time_get();
+       } else {
+               if ((ecore_loop_time_get() - time_called) < 0.4) {
+                       DBG("click rejected");
+                       return;
+               }
+               time_called = ecore_loop_time_get();
+       }
+
+       response_cb cb = NULL;
+       noti_list_item_h *handler = _item_handler_get(item);
+       noti_node_item *noti_node = _get_noti_node(item);
+       if (handler != NULL && noti_node != NULL) {
+               if (strncmp(emission, "selected", strlen("selected")) == 0) {
+                       if (handler->need_to_cancel_press > 0) {
+                               handler->need_to_cancel_press = 0;
+                               return;
+                       }
+
+                       cb = handler->selected_cb;
+                       if (cb != NULL)
+                               cb(noti_node, item);
+
+               }
+               if (strncmp(emission, "button_1", strlen("button_1")) == 0) {
+                       if (handler->need_to_cancel_press > 0) {
+                               handler->need_to_cancel_press = 0;
+                               return;
+                       }
+
+                       cb = handler->button_1_cb;
+                       if (cb != NULL)
+                               cb(noti_node, item);
+
+               }
+               if (strncmp(emission, "deleted", strlen("deleted")) == 0) {
+                       cb = handler->deleted_cb;
+                       if (cb != NULL)
+                               cb(noti_node, item);
+
+               }
+       }
+}
+
+static void _signal_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
+       retif(data == NULL, , "invalid parameter");
+       retif(o == NULL, , "invalid parameter");
+       retif(emission == NULL, , "invalid parameter");
+
+       _response_callback_call(o, emission);
+}
+
+static void _mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       int w = 0, h = 0;
+       noti_list_item_h *handler = NULL;
+       Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info;
+       retif(ev == NULL, , "event_info is NULL");
+
+       if (s_info.mouse_event_blocker == EINA_TRUE)
+               s_info.mouse_event_blocker = EINA_FALSE;
+
+
+       handler = _item_handler_get(obj);
+       retif(handler == NULL, , "handler is NULL");
+
+       evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+
+       handler->press_x = ev->canvas.x;
+       handler->press_y = ev->canvas.y;
+       handler->obj_w = w;
+       handler->obj_h = h;
+       handler->state = NOTILISTITEM_STATE_NORMAL;
+
+       s_info.item_debug_step = 1;
+       DBG("mouse down:%d %d %d", handler->obj_w, handler->obj_h, handler->state);
+
+       if (handler->vi != NULL) {
+               quickpanel_vi_user_event_del(handler->vi);
+               handler->vi = NULL;
+       }
+
+       handler->need_to_cancel_press = 0;
+}
+
+static void _mouse_move_cb(void* data, Evas* e, Evas_Object* obj, void* event_info)
+{
+       int delta_x = 0;
+       static int vi_start_x = 0;
+       static int delta_prev = -1;
+       int x = 0, y = 0;
+       int w = 0, h = 0;
+       noti_list_item_h *handler = NULL;
+       Evas_Map *map = NULL;
+       Evas_Event_Mouse_Move* ev = event_info;
+       QP_VI *vi = NULL;
+       retif(ev == NULL, , "event_info is NULL");
+
+       if (s_info.mouse_event_blocker == EINA_TRUE)
+               return;
+
+
+       handler = _item_handler_get(obj);
+       retif(handler == NULL, , "handler is NULL");
+
+       if (handler->state == NOTILISTITEM_STATE_GETSTURE_CANCELED) {
+               DBG("deletion has been canceled");
+               return;
+       }
+
+       evas_object_geometry_get(obj, &x, &y, &w, &h);
+       delta_x = ev->cur.output.x - handler->press_x;
+
+       if (s_info.item_debug_step == 1) {
+               DBG("mouse move:%d %d %d", delta_x, vi_start_x, handler->state);
+               s_info.item_debug_step = 2;
+       }
+
+       if (handler->state == NOTILISTITEM_STATE_NORMAL) {
+               if (abs(delta_x) >= THRESHOLD_DELETE_START) {
+                       DBG("start a deletion");
+                       handler->state = NOTILISTITEM_STATE_GETSTURE_WAIT;
+
+                       vi_start_x = delta_x;
+
+                       if (_is_item_deletable_by_gesture(handler) == 1) {
+                       vi = quickpanel_vi_new_with_data(
+                                       VI_OP_DELETE,
+                                       QP_ITEM_TYPE_NOTI,
+                                       NULL,
+                                       obj,
+                                       NULL,
+                                       NULL,
+                                       NULL,
+                                       NULL,
+                                       vi,
+                                       NULL,
+                                       0,
+                                       0);
+                       handler->vi = vi;
+                       handler->need_to_cancel_press = 1;
+                       quickpanel_vi_user_event_add(vi);
+                       } else {
+                               /* It is need to ignore callback function one time when release touch. Because after touch and move over threshold, available action is  the delete only. */
+                               handler->need_to_cancel_press = 1;
+                       }
+               }
+       } else if (handler->state == NOTILISTITEM_STATE_GETSTURE_WAIT) {
+               if (delta_prev != delta_x) {
+                       map = evas_map_new(4);
+                       if (map != NULL) {
+                               evas_map_util_points_populate_from_object(map, obj);
+
+                               if (_is_item_deletable_by_gesture(handler) == 1) {
+                                       evas_map_util_points_populate_from_geometry(map, x + delta_x - vi_start_x, y, w, h, 0);
+                               } else {
+                                       /* Ongoing Noti Case, limit drag position*/
+                                       int diff = delta_x - vi_start_x;
+
+                                       if (diff > MAX_DRAG_X_DISTANCE_FOR_ONGOING_NOTI)
+                                               diff = MAX_DRAG_X_DISTANCE_FOR_ONGOING_NOTI;
+                                       else if (diff < -MAX_DRAG_X_DISTANCE_FOR_ONGOING_NOTI)
+                                               diff = -MAX_DRAG_X_DISTANCE_FOR_ONGOING_NOTI;
+
+                                       evas_map_util_points_populate_from_geometry(map, x + diff, y, w, h, 0);
+                               }
+
+                               evas_object_map_enable_set(obj, EINA_TRUE);
+                               evas_object_map_set(obj, map);
+                               evas_map_free(map);
+                               quickpanel_list_util_scroll_freeze_set(EINA_TRUE);
+                       }
+                       delta_prev = delta_x;
+               }
+       }
+
+       handler->distance = delta_x;
+}
+
+static void _mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       int x = 0;
+       noti_list_item_h *handler;
+
+       if (s_info.mouse_event_blocker == EINA_FALSE)
+               s_info.mouse_event_blocker = EINA_TRUE;
+
+
+       handler = _item_handler_get(obj);
+       retif(handler == NULL, , "handler is NULL");
+
+       quickpanel_list_util_scroll_freeze_set(EINA_FALSE);
+
+       if (s_info.item_debug_step == 2) {
+               DBG("mouse up:%d", handler->state);
+               s_info.item_debug_step = 3;
+       }
+
+       if (handler->state == NOTILISTITEM_STATE_GETSTURE_WAIT) {
+               if (abs(handler->distance) >= (THRESHOLD_DISTANCE - 10) && _is_item_deletable_by_gesture(handler) == 1) {
+                       x = abs(handler->distance) - THRESHOLD_DELETE_START;
+
+                       if (handler->distance > 0) {
+                               Elm_Transit *transit_flick;
+
+                               evas_object_map_set(obj, NULL);
+                               transit_flick = elm_transit_add();
+                               if (transit_flick != NULL) {
+                                       elm_transit_effect_translation_add(transit_flick, x, 0, 480, 0);
+                                       elm_transit_object_add(transit_flick, obj);
+                                       elm_transit_duration_set(transit_flick, 0.25 * (480 - x) / 480);
+                                       elm_transit_tween_mode_set(transit_flick, ELM_TRANSIT_TWEEN_MODE_LINEAR);
+                                       elm_transit_objects_final_state_keep_set(transit_flick, EINA_TRUE);
+                                       elm_transit_go(transit_flick);
+
+                                       _response_callback_call(obj, "deleted");
+                               }
+                       } else if (handler->distance < 0) {
+                               Elm_Transit *transit_flick;
+
+                               evas_object_map_set(obj, NULL);
+                               transit_flick = elm_transit_add();
+                               if (transit_flick != NULL) {
+                                       elm_transit_effect_translation_add(transit_flick, -x, 0, -480, 0);
+                                       elm_transit_object_add(transit_flick, obj);
+                                       elm_transit_duration_set(transit_flick, 0.25 * (480 - x) / 480);
+                                       elm_transit_tween_mode_set(transit_flick, ELM_TRANSIT_TWEEN_MODE_LINEAR);
+                                       elm_transit_objects_final_state_keep_set(transit_flick, EINA_TRUE);
+                                       elm_transit_go(transit_flick);
+
+                                       _response_callback_call(obj, "deleted");
+                               }
+                       }
+               } else {
+                       evas_object_map_enable_set(obj, EINA_FALSE);
+               }
+
+               if (handler->vi != NULL) {
+                       quickpanel_vi_user_event_del(handler->vi);
+                       handler->vi = NULL;
+               }
+       } else if (handler->state == NOTILISTITEM_STATE_GETSTURE_CANCELED) {
+               evas_object_map_enable_set(obj, EINA_FALSE);
+
+               if (handler->vi != NULL) {
+                       quickpanel_vi_user_event_del(handler->vi);
+                       handler->vi = NULL;
+               }
+       }
+
+       handler->state = NOTILISTITEM_STATE_NORMAL;
+}
+
+static Evas_Event_Flags _flick_end_cb(void *data, void *event_info)
+{
+       int x = 0;
+       noti_list_item_h *handler = NULL;
+       Evas_Object *view = NULL;
+       Elm_Transit *transit_flick = NULL;
+       Elm_Gesture_Momentum_Info *info = (Elm_Gesture_Momentum_Info *)event_info;
+
+       view = (Evas_Object *)data;
+       handler = _item_handler_get(view);
+
+       if (handler != NULL) {
+               handler->state = NOTILISTITEM_STATE_GETSTURE_CANCELED;
+
+               if (_is_item_deletable_by_gesture(handler) != 1)
+                       return EVAS_EVENT_FLAG_NONE;
+
+
+               x = abs(handler->distance) - THRESHOLD_DELETE_START;
+       }
+
+       if (info->x2 - info->x1 > 50) {
+               DBG("Flick event is occurred to right.");
+               evas_object_map_set(view, NULL);
+               transit_flick = elm_transit_add();
+               if (transit_flick != NULL) {
+                       elm_transit_effect_translation_add(transit_flick, x, 0, 480, 0);
+                       elm_transit_object_add(transit_flick, view);
+                       elm_transit_duration_set(transit_flick, 0.25 * (480 - x) /480);
+                       elm_transit_tween_mode_set(transit_flick, ELM_TRANSIT_TWEEN_MODE_LINEAR);
+                       elm_transit_objects_final_state_keep_set(transit_flick, EINA_TRUE);
+                       elm_transit_go(transit_flick);
+
+                       _response_callback_call(view, "deleted");
+               }
+       } else if (info->x1 - info->x2 > 50) {
+               DBG("Flick event is occurred to left.");
+               evas_object_map_set(view, NULL);
+               transit_flick = elm_transit_add();
+               if (transit_flick != NULL) {
+                       elm_transit_effect_translation_add(transit_flick, -x, 0, -480, 0);
+                       elm_transit_object_add(transit_flick, view);
+                       elm_transit_duration_set(transit_flick, 0.25 * (480 - x) / 480);
+                       elm_transit_tween_mode_set(transit_flick, ELM_TRANSIT_TWEEN_MODE_LINEAR);
+                       elm_transit_objects_final_state_keep_set(transit_flick, EINA_TRUE);
+                       elm_transit_go(transit_flick);
+
+                       _response_callback_call(view, "deleted");
+               }
+       }
+
+       return EVAS_EVENT_FLAG_NONE;
+}
+
+HAPI Evas_Object *quickpanel_noti_list_item_create(Evas_Object *parent, notification_h noti)
+{
+       Evas_Object *view = NULL;
+       retif(noti == NULL, NULL, "invalid parameter");
+
+       notification_ly_type_e layout = NOTIFICATION_LY_NOTI_EVENT_SINGLE;
+       notification_get_layout(noti, &layout);
+
+       retif(s_info.view_handlers[layout] == NULL, NULL, "invalid parameter");
+       retif(s_info.view_handlers[layout]->create == NULL, NULL, "invalid parameter");
+
+       view = s_info.view_handlers[layout]->create(noti, parent);
+       if (view != NULL) {
+               noti_list_item_h *handler = (noti_list_item_h *) malloc(sizeof(noti_list_item_h));
+               retif(handler == NULL, NULL, "failed to allocate a memory");
+
+               memset(handler, 0, sizeof(noti_list_item_h));
+
+               handler->layout = layout;
+               handler->status = STATE_NORMAL;
+               handler->noti_node = NULL;
+               handler->state = NOTILISTITEM_STATE_NORMAL;
+
+               Evas_Object *focus = quickpanel_accessibility_ui_get_focus_object(view);
+               elm_object_part_content_set(view, "focus", focus);
+
+               //add event
+               elm_object_signal_callback_add(view,
+                               "selected",
+                               "edje",
+                               _signal_cb,
+                               parent
+                               );
+
+               //add event
+               elm_object_signal_callback_add(view,
+                               "button_1",
+                               "edje",
+                               _signal_cb,
+                               parent
+                               );
+
+               //add event
+               elm_object_signal_callback_add(view,
+                               "deleted",
+                               "edje",
+                               _signal_cb,
+                               parent
+                               );
+
+               DBG("created box:%p", view);
+
+               evas_object_event_callback_add(view, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
+               evas_object_event_callback_add(view, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
+               evas_object_event_callback_add(view, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, NULL);
+
+               Evas_Object *gl = elm_gesture_layer_add(parent);
+               elm_gesture_layer_flick_time_limit_ms_set(gl, 300);
+               elm_gesture_layer_attach(gl, view);
+
+               elm_gesture_layer_cb_set(gl, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_END, _flick_end_cb, view);
+               handler->gesture_layer = gl;
+
+               _item_handler_set(view, handler);
+
+       } else {
+               ERR("failed to create notification view(%s)"
+                               , s_info.view_handlers[layout]->name);
+       }
+
+       return view;
+}
+
+HAPI void quickpanel_noti_list_item_update(Evas_Object *item)
+{
+       retif(item == NULL, , "invalid parameter");
+
+       noti_list_item_h *handler = _item_handler_get(item);
+       if (handler != NULL) {
+               retif(s_info.view_handlers[handler->layout] == NULL, , "invalid parameter");
+               retif(s_info.view_handlers[handler->layout]->update == NULL, , "invalid parameter");
+
+               noti_node_item *noti_node = _get_noti_node(item);
+               s_info.view_handlers[handler->layout]->update(noti_node, handler->layout, item);
+       }
+}
+
+HAPI void quickpanel_noti_list_item_remove(Evas_Object *item)
+{
+       retif(item == NULL, , "invalid parameter");
+
+       noti_list_item_h *handler = _item_handler_get(item);
+       if (handler != NULL) {
+               retif(s_info.view_handlers[handler->layout] == NULL, , "invalid parameter");
+
+               if (s_info.view_handlers[handler->layout] != NULL) {
+                       if (s_info.view_handlers[handler->layout]->remove != NULL) {
+                               noti_node_item *noti_node = _get_noti_node(item);
+                               s_info.view_handlers[handler->layout]->remove(noti_node, handler->layout, item);
+                       }
+               }
+
+               if (handler->gesture_layer)
+                       evas_object_del(handler->gesture_layer);
+
+
+               free(handler);
+       }
+       evas_object_data_del(item, E_DATA_NOTI_LIST_ITEM_H);
+       evas_object_del(item);
+       item = NULL;
+}
+
+HAPI void quickpanel_noti_list_item_set_status(Evas_Object *item, int status)
+{
+       retif(item == NULL, , "invalid parameter");
+
+       noti_list_item_h *handler = _item_handler_get(item);
+       if (handler != NULL)
+               handler->status = status;
+
+}
+
+HAPI int quickpanel_noti_list_item_get_status(Evas_Object *item)
+{
+       retif(item == NULL, STATE_NORMAL, "invalid parameter");
+
+       noti_list_item_h *handler = _item_handler_get(item);
+       if (handler != NULL)
+               return handler->status;
+
+
+       return STATE_DELETING;
+}
+
+HAPI void quickpanel_noti_list_item_node_set(Evas_Object *item, noti_node_item *noti_node)
+{
+       int priv_id = 0;
+       retif(item == NULL, , "invalid parameter");
+       retif(noti_node == NULL, , "invalid parameter");
+
+       noti_list_item_h *handler = _item_handler_get(item);
+       if (handler != NULL) {
+               handler->noti_node = noti_node;
+               notification_get_id(handler->noti_node->noti, NULL, &priv_id);
+               handler->priv_id = priv_id;
+               quickpanel_noti_list_item_update(item);
+       }
+}
+
+HAPI void *quickpanel_noti_list_item_node_get(Evas_Object *item)
+{
+       retif(item == NULL, NULL, "invalid parameter");
+
+       noti_node_item *noti_node = _get_noti_node(item);
+       if (noti_node != NULL)
+               return noti_node;
+
+
+       return NULL;
+}
+
+#ifdef QP_SCREENREADER_ENABLE
+static void _focus_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *item = data;
+       retif(item == NULL, , "invalid parameter");
+
+       _response_callback_call(item, "selected");
+}
+#endif
+
+HAPI void quickpanel_noti_list_item_set_item_selected_cb(Evas_Object *item, response_cb callback)
+{
+       retif(item == NULL, , "invalid parameter");
+       retif(callback == NULL, , "invalid parameter");
+
+       noti_list_item_h *handler = _item_handler_get(item);
+       if (handler != NULL)
+               handler->selected_cb = callback;
+
+
+#ifdef QP_SCREENREADER_ENABLE
+       Evas_Object *ao = NULL;
+       ao = quickpanel_accessibility_screen_reader_object_get(item,
+                       SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", item);
+
+       if (ao != NULL)
+               evas_object_smart_callback_add(ao, "clicked", _focus_selected_cb, item);
+
+#endif
+}
+
+HAPI void quickpanel_noti_list_item_set_item_button_1_cb(Evas_Object *item, response_cb callback)
+{
+       retif(item == NULL, , "invalid parameter");
+       retif(callback == NULL, , "invalid parameter");
+
+       noti_list_item_h *handler = _item_handler_get(item);
+
+       if (handler != NULL)
+               handler->button_1_cb = callback;
+
+}
+
+HAPI void quickpanel_noti_list_item_set_item_deleted_cb(Evas_Object *item, response_cb callback)
+{
+       retif(item == NULL, , "invalid parameter");
+       retif(callback == NULL, , "invalid parameter");
+
+       noti_list_item_h *handler = _item_handler_get(item);
+
+       if (handler != NULL)
+               handler->deleted_cb = callback;
+
+}
+
+HAPI noti_list_item_h *quickpanel_noti_list_item_handler_get(Evas_Object *item)
+{
+       return _item_handler_get(item);
+}
diff --git a/src/notifications/noti_listbox.c b/src/notifications/noti_listbox.c
new file mode 100755 (executable)
index 0000000..5213e67
--- /dev/null
@@ -0,0 +1,953 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+
+#include <vconf.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <notification.h>
+#include <system_settings.h>
+#include <notification_setting_internal.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "common_uic.h"
+#include "list_util.h"
+#include "quickpanel_def.h"
+#include "noti_listbox.h"
+#include "vi_manager.h"
+#include "noti_node.h"
+#include "noti_list_item.h"
+#include "noti.h"
+
+#define E_DATA_LAYOUT_PORTRAIT "layout_portrait"
+#define E_DATA_LAYOUT_LANDSCAPE "layout_landscape"
+#define E_DATA_CB_DELETE_ITEM "cb_delete_item"
+#define E_DATA_CB_REMOVED "cb_removed"
+#define E_DATA_APP_DATA "app_data"
+#define E_DATA_IS_HIDED "hided"
+
+static Eina_Bool _anim_init_cb(void *data);
+static Eina_Bool _anim_job_cb(void *data);
+static Eina_Bool _anim_done_cb(void *data);
+
+static void _listbox_flag_set(Evas_Object *container, const char *key, int value)
+{
+       retif(container == NULL, , "invalid parameter");
+       retif(key == NULL, , "invalid parameter");
+
+       evas_object_data_set(container, key, (void *)(long)value);
+}
+
+static int _listbox_flag_get(Evas_Object *container, const char *key)
+{
+       retif(container == NULL, 0, "invalid parameter");
+       retif(key == NULL, 0, "invalid parameter");
+
+       return (int)(long)evas_object_data_get(container, key);
+}
+
+static int _listbox_layout_item_valid(Evas_Object *container, Evas_Object *item)
+{
+       int ret = 0;
+       Eina_List *list = NULL;
+       retif(container == NULL, 0, "invalid parameter");
+       list = elm_box_children_get(container);
+       retif(list == NULL, 0, "invalid parameter. containter[%p]", container);
+
+       if (eina_list_data_find(list, item) != NULL)
+               ret = 1;
+
+
+       eina_list_free(list);
+
+       return ret;
+}
+static void _listbox_layout_get_coord(Evas_Object *container, int insert_position, int *coord_x, int *coord_y, Evas_Object *noti_section)
+{
+       int x, y, h;
+       int off_y = 0;
+       struct appdata *ad = quickpanel_get_app_data();
+
+       retif(container == NULL, , "invalid parameter");
+       retif(ad == NULL, , "invalid data.");
+
+       if (insert_position == 0) {
+               Eina_List *l;
+               Eina_List *l_next;
+               Evas_Object *obj = NULL;
+               Eina_List *item_list = elm_box_children_get(container);
+               noti_node_item *node = NULL;
+               notification_type_e type = NOTIFICATION_TYPE_NONE;
+
+               EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+                       node = quickpanel_noti_list_item_node_get(obj);
+                       if (node) {
+                               notification_h noti = node->noti;
+                               if (noti) {
+                                       notification_get_type(noti, &type);
+                                       if (type == NOTIFICATION_TYPE_NOTI) {
+                                               break;
+                                       } else {
+                                               evas_object_geometry_get(obj, NULL, NULL, NULL, &h);
+                                               off_y += h;
+                                       }
+                               }
+                       } else {
+                               evas_object_geometry_get(obj, NULL, NULL, NULL, &h);
+                               off_y += h;
+                       }
+               }
+
+               if (item_list != NULL)
+                       eina_list_free(item_list);
+
+       } else if (insert_position == 1) {
+               Eina_List *l;
+               Eina_List *l_next;
+               Evas_Object *obj = NULL;
+               Eina_List *item_list = elm_box_children_get(container);
+
+               EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+                       if (obj != NULL) {
+                               evas_object_geometry_get(obj, NULL, NULL, NULL, &h);
+                               off_y += h;
+                       }
+
+                       if (obj == noti_section)
+                               break;
+
+               }
+
+               if (item_list != NULL)
+                       eina_list_free(item_list);
+
+       }
+
+       evas_object_geometry_get(container, &x, &y, NULL, &h);
+       if (off_y == 0 || y == 0)
+               ERR("Failed get a valid height offset : %d %d", off_y, y);
+
+
+       if (coord_x != NULL)
+               *coord_x = x;
+
+
+       if (coord_y != NULL)
+               *coord_y = y + off_y;
+
+}
+
+static void _listbox_layout_size_get(Evas_Object *container, int *w, int *h)
+{
+       int h_temp = 0;
+       int w_item = 0, h_item = 0;
+       Evas_Object *obj = NULL;
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid data.");
+       retif(container == NULL, , "invalid parameter");
+
+       Eina_List *item_list = elm_box_children_get(container);
+
+       EINA_LIST_FREE(item_list, obj)
+       {
+               if (obj != NULL) {
+                       evas_object_geometry_get(obj, NULL, NULL, NULL, &h_temp);
+                       h_item += h_temp;
+               }
+       }
+       evas_object_geometry_get(container, NULL, NULL, &w_item, NULL);
+
+       if (w != NULL)
+               *w = w_item;
+
+
+       if (h != NULL)
+               *h = h_item;
+
+}
+
+HAPI Evas_Object *quickpanel_noti_listbox_create(Evas_Object *parent, void *data, qp_item_type_e item_type)
+{
+
+       struct appdata *ad = data;
+       Evas_Object *listbox = NULL;
+
+       retif(parent == NULL, NULL, "invalid parameter");
+       retif(data == NULL, NULL, "invalid parameter");
+
+       listbox = elm_box_add(parent);
+       evas_object_size_hint_weight_set(listbox, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(listbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_box_horizontal_set(listbox, EINA_FALSE);
+       evas_object_show(listbox);
+
+       evas_object_data_set(listbox, E_DATA_CB_DELETE_ITEM, NULL);
+       evas_object_data_set(listbox, E_DATA_APP_DATA, ad);
+       _listbox_flag_set(listbox, E_DATA_IS_HIDED, 0);
+
+       quickpanel_list_util_set_item_type(listbox, item_type);
+
+       return listbox;
+}
+
+HAPI void quickpanel_noti_listbox_remove(Evas_Object *listbox)
+{
+       retif(listbox == NULL, , "invalid parameter");
+
+       quickpanel_noti_listbox_remove_all_item(listbox, 0);
+       evas_object_data_del(listbox, E_DATA_CB_DELETE_ITEM);
+       evas_object_data_del(listbox, E_DATA_APP_DATA);
+       quickpanel_list_util_del_item_type(listbox);
+       evas_object_del(listbox);
+       listbox = NULL;
+}
+
+HAPI void quickpanel_noti_listbox_set_item_deleted_cb(Evas_Object *listbox, void(*deleted_cb)(void *data, Evas_Object *obj))
+{
+       retif(listbox == NULL, , "invalid parameter");
+       retif(deleted_cb == NULL, , "invalid parameter");
+
+       evas_object_data_set(listbox, E_DATA_CB_DELETE_ITEM, deleted_cb);
+}
+
+static void _listbox_call_item_deleted_cb(Evas_Object *listbox, void *data, Evas_Object *obj)
+{
+       retif(listbox == NULL, , "invalid parameter");
+
+       void (*deleted_cb)(void *data, Evas_Object *obj) = NULL;
+
+       deleted_cb = evas_object_data_get(listbox, E_DATA_CB_DELETE_ITEM);
+
+       if (deleted_cb != NULL)
+               deleted_cb(data, obj);
+
+}
+
+HAPI void quickpanel_noti_listbox_add_item(Evas_Object *listbox, Evas_Object *item, int insert_pos, Evas_Object *noti_section)
+{
+       QP_VI *vi = NULL;
+       const char *signal = NULL;
+       retif(listbox == NULL, , "invalid parameter");
+       retif(item == NULL, , "invalid parameter");
+
+       struct appdata *ad = evas_object_data_get(listbox, E_DATA_APP_DATA);
+
+       if (ad != NULL) {
+               if (ad->angle == 270 || ad->angle == 90)
+                       signal = "box.landscape";
+               else
+                       signal = "box.portrait";
+
+       }
+
+       DBG("set to %s, %p", signal, item);
+
+       elm_object_signal_emit(item, signal, "box.prog");
+       edje_object_message_signal_process(_EDJ(item));
+       elm_layout_sizing_eval(item);
+
+       vi = quickpanel_vi_new_with_data(
+                       VI_OP_INSERT,
+                       QP_ITEM_TYPE_ONGOING_NOTI,
+                       listbox,
+                       item,
+                       _anim_init_cb,
+                       _anim_job_cb,
+                       _anim_done_cb,
+                       _anim_done_cb,
+                       vi,
+                       noti_section,
+                       insert_pos,
+                       0);
+       quickpanel_vi_start(vi);
+}
+
+HAPI void quickpanel_noti_listbox_remove_item(Evas_Object *listbox, Evas_Object *item, int with_animation)
+{
+       QP_VI *vi = NULL;
+       retif(listbox == NULL, , "invalid parameter");
+       retif(item == NULL, , "invalid parameter");
+
+
+       DBG("remove:%p", item);
+
+       if (with_animation == 1) {
+               vi = quickpanel_vi_new_with_data(
+                               VI_OP_DELETE,
+                               QP_ITEM_TYPE_ONGOING_NOTI,
+                               listbox,
+                               item,
+                               _anim_init_cb,
+                               _anim_job_cb,
+                               _anim_done_cb,
+                               _anim_done_cb,
+                               vi,
+                               NULL,
+                               0,
+                               0);
+               quickpanel_vi_start(vi);
+       } else {
+               DBG("%p", item);
+               void *node = quickpanel_noti_list_item_node_get(item);
+               elm_box_unpack(listbox, item);
+               quickpanel_noti_list_item_remove(item);
+               _listbox_call_item_deleted_cb(listbox,
+                               node, NULL);
+       }
+}
+
+static void _anim_job_delete_all(void *data)
+{
+       QP_VI *vi = data;
+       retif(vi == NULL, , "invalid parameter");
+
+       quickpanel_vi_done(vi);
+}
+
+static void _anim_done_delete_all(void *data)
+{
+       QP_VI *vi = data;
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj = NULL;
+       Eina_List *item_list = NULL;
+
+       retif(vi == NULL, , "invalid parameter");
+       retif(vi->container == NULL, , "invalid parameter");
+
+       Evas_Object *listbox = vi->container;
+
+       item_list = elm_box_children_get(listbox);
+       retif(item_list == NULL, , "invalid parameter");
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+               if (obj != NULL) {
+                       DBG("try to remove:%p", obj);
+                       quickpanel_noti_listbox_remove_item(listbox, obj, EINA_TRUE);
+               }
+       }
+
+       if (item_list != NULL)
+               eina_list_free(item_list);
+
+
+       quickpanel_noti_listbox_update_item_background_color();
+}
+
+HAPI void quickpanel_noti_listbox_remove_all_item(Evas_Object *listbox, int with_animation)
+{
+       QP_VI *vi = NULL;
+       retif(listbox == NULL, , "invalid parameter");
+
+       vi = quickpanel_vi_new_with_data(
+                       VI_OP_DELETE_ALL,
+                       QP_ITEM_TYPE_ONGOING_NOTI,
+                       listbox,
+                       NULL,
+                       _anim_init_cb,
+                       _anim_job_cb,
+                       _anim_done_cb,
+                       _anim_done_cb,
+                       vi,
+                       NULL,
+                       0,
+                       0);
+       quickpanel_vi_start(vi);
+}
+
+HAPI void quickpanel_noti_listbox_update(Evas_Object *listbox)
+{
+       retif(listbox == NULL, , "invalid parameter");
+
+       Evas_Object *obj;
+       Eina_List *item_list = elm_box_children_get(listbox);
+
+       EINA_LIST_FREE(item_list, obj) {
+               quickpanel_noti_list_item_update(obj);
+       }
+}
+
+HAPI void quickpanel_noti_listbox_items_visibility_set(Evas_Object *listbox, int is_visible)
+{
+       retif(listbox == NULL, , "invalid parameter");
+
+       _listbox_flag_set(listbox, E_DATA_IS_HIDED, is_visible);
+}
+
+HAPI void quickpanel_noti_listbox_update_item(Evas_Object *listbox, Evas_Object *item)
+{
+       retif(listbox == NULL, , "invalid parameter");
+       retif(item == NULL, , "invalid parameter");
+
+       if (_listbox_layout_item_valid(listbox, item))
+               quickpanel_noti_list_item_update(item);
+
+}
+
+HAPI void quickpanel_noti_listbox_update_item_background_color(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       int i = 0;
+       retif(ad == NULL, , "invalid data.");
+
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj = NULL;
+       Eina_List *item_list = elm_box_children_get(ad->list);
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+               char signal[64] = {0, };
+               if (i == 0) { //1st item is clear all section. It should not be changed.
+                       i++;
+                       continue;
+               } else if (i < 10) {
+                       snprintf(signal, sizeof(signal), "%s%d", "bgcolor.step", i);
+               } else {
+                       snprintf(signal, sizeof(signal), "%s", "bgcolor.step10");
+               }
+
+               elm_object_signal_emit(obj, signal, "bgcolor");
+               i++;
+       }
+
+       if (item_list != NULL)
+               eina_list_free(item_list);
+
+}
+
+HAPI void quickpanel_noti_listbox_rotation(Evas_Object *listbox, int angle)
+{
+       int h = 0;
+       Evas_Object *obj = NULL;
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid parameter");
+       retif(listbox == NULL, , "invalid parameter");
+
+       Eina_List *item_list = elm_box_children_get(listbox);
+
+       DBG("items in listbox:%d", eina_list_count(item_list));
+
+       EINA_LIST_FREE(item_list, obj)
+       {
+               if (obj != NULL) {
+                       evas_object_geometry_get(obj, NULL, NULL, NULL, &h);
+                       if (angle == 270 || angle == 90)
+                               evas_object_resize(obj, ad->win_height, h);
+                       else
+                               evas_object_resize(obj, ad->win_width, h);
+
+
+                       elm_layout_sizing_eval(obj);
+               }
+       }
+
+       _listbox_layout_size_get(listbox, NULL, &h);
+
+       if (angle == 270 || angle == 90)
+               evas_object_resize(listbox, ad->win_height, h);
+       else
+               evas_object_resize(listbox, ad->win_width, h);
+
+
+       DBG("listbox has been rotated to %d", angle);
+}
+
+HAPI int quickpanel_noti_listbox_get_item_count(Evas_Object *listbox)
+{
+       int item_count = 0;
+       Eina_List *items = NULL;
+       retif(listbox == NULL, 0, "invalid parameter");
+
+       if ((items = elm_box_children_get(listbox)) != NULL) {
+               item_count = eina_list_count(items);
+               eina_list_free(items);
+               return item_count;
+       } else {
+               return 0;
+       }
+}
+
+static void _anim_init_insert(void *data)
+{
+
+       QP_VI *vi = data;
+       retif(vi == NULL, , "invalid parameter");
+       retif(vi->container == NULL, , "invalid parameter");
+       retif(vi->target == NULL, , "invalid parameter");
+
+       Evas_Object *container = vi->container;
+       Evas_Object *item = vi->target;
+
+       evas_object_clip_set(item, evas_object_clip_get(container));
+       evas_object_color_set(item, 0, 0, 0, 0);
+}
+
+static void _anim_job_insert(void *data)
+{
+
+       QP_VI *vi = data;
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj = NULL;
+       Eina_List *item_list = NULL;
+       int item_width, item_height = 0;
+       int coord_x = 0, coord_y = 0;
+       int insert_position = 0;
+       Elm_Transit *transit_layout_parent = NULL;
+       Elm_Transit *transit_layout = NULL;
+       Elm_Transit *transit_fadein = NULL;
+       Evas_Object *container = NULL;
+       Evas_Object *item = NULL;
+       int flag = 0;
+       noti_node_item *node = NULL;
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+
+       retif(vi == NULL, , "Invalid parameter");
+       retif(vi->container == NULL, , "Invalid parameter");
+       retif(vi->target == NULL, , "Invalid parameter");
+
+       container = vi->container;
+       item = vi->target;
+       insert_position = vi->extra_flag_1;
+       item_list = elm_box_children_get(container);
+
+       _listbox_layout_get_coord(container, insert_position, &coord_x, &coord_y, (Evas_Object *)vi->extra_data_2);
+       evas_object_move(item, coord_x, coord_y);
+
+       evas_object_geometry_get(item, NULL, NULL, &item_width, &item_height);
+       if (item_width == 0 && item_height == 0) {
+               ERR("Failed to get a size of item %d %d", item_width, item_height);
+               evas_object_size_hint_min_get(item, &item_width, &item_height);
+       }
+
+       transit_layout_parent = quickpanel_list_util_get_reorder_transit(container, NULL, item_height);
+
+       if (insert_position) {
+               EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+                       if (obj == (Evas_Object *)vi->extra_data_2) {
+                               flag = 1;
+                       } else if (flag == 1) {
+                               transit_layout = elm_transit_add();
+                               if (transit_layout != NULL) {
+                                       elm_transit_effect_translation_add(transit_layout, 0, 0, 0, item_height);
+                                       elm_transit_object_add(transit_layout, obj);
+                                       elm_transit_duration_set(transit_layout,
+                                                       quickpanel_vim_get_duration(VI_OP_REORDER));
+                                       elm_transit_tween_mode_set(transit_layout,
+                                                       quickpanel_vim_get_tweenmode(VI_OP_REORDER));
+                                       elm_transit_objects_final_state_keep_set(transit_layout, EINA_TRUE);
+
+                                       elm_transit_go(transit_layout);
+                               } else {
+                                       ERR("failed to create a transit");
+                               }
+                       }
+               }
+       } else if (insert_position == 0) {
+               EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+                       node = quickpanel_noti_list_item_node_get(obj);
+                       if (node) {
+                               notification_h noti = node->noti;
+                               if (noti) {
+                                       notification_get_type(noti, &type);
+                                       if (type == NOTIFICATION_TYPE_NOTI)
+                                               flag = 1;
+
+                               }
+                       }
+                       if (flag == 1) {
+                               transit_layout = elm_transit_add();
+                               if (transit_layout != NULL) {
+                                       elm_transit_effect_translation_add(transit_layout, 0, 0, 0, item_height);
+                                       elm_transit_object_add(transit_layout, obj);
+                                       elm_transit_duration_set(transit_layout,
+                                                       quickpanel_vim_get_duration(VI_OP_REORDER));
+                                       elm_transit_tween_mode_set(transit_layout,
+                                                       quickpanel_vim_get_tweenmode(VI_OP_REORDER));
+                                       elm_transit_objects_final_state_keep_set(transit_layout, EINA_TRUE);
+
+                                       elm_transit_go(transit_layout);
+                               } else {
+                                       ERR("failed to create a transit");
+                               }
+                       }
+               }
+       }
+
+       if (item_list != NULL)
+               eina_list_free(item_list);
+
+
+       transit_fadein = elm_transit_add();
+       if (transit_fadein != NULL) {
+               elm_transit_object_add(transit_fadein, item);
+               elm_transit_effect_color_add(transit_fadein, 0, 0, 0, 0, 255, 255, 255, 255);
+               elm_transit_duration_set(transit_fadein,
+                               quickpanel_vim_get_duration(VI_OP_INSERT));
+               elm_transit_tween_mode_set(transit_fadein,
+                               quickpanel_vim_get_tweenmode(VI_OP_INSERT));
+               elm_transit_del_cb_set(transit_fadein, quickpanel_vi_done_cb_for_transit, vi);
+
+               if (transit_layout != NULL) {
+                       elm_transit_chain_transit_add(transit_layout, transit_fadein);
+               } else {
+                       if (transit_layout_parent != NULL)
+                               elm_transit_chain_transit_add(transit_layout_parent, transit_fadein);
+                       else
+                               elm_transit_go(transit_fadein);
+
+               }
+       } else {
+               ERR("Failed to create all the transit");
+               quickpanel_vi_done(vi);
+       }
+}
+
+static void _anim_done_insert(void *data)
+{
+
+       QP_VI *vi = data;
+       int inset_position = 0;
+       Eina_List *l;
+       Eina_List *l_next;
+       Eina_List *item_list = NULL;
+       Evas_Object *obj = NULL;
+       noti_node_item *node = NULL;
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+       int flag = 0;
+
+       retif(vi == NULL, , "invalid parameter");
+       retif(vi->container == NULL, , "invalid parameter");
+       retif(vi->target == NULL, , "invalid parameter");
+
+       Evas_Object *container = vi->container;
+       Evas_Object *item = vi->target;
+       inset_position = vi->extra_flag_1;
+       item_list = elm_box_children_get(container);
+
+       evas_object_color_set(item, 255, 255, 255, 255);
+
+       if (inset_position == LISTBOX_PREPEND) {
+               EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+                       if (obj == (Evas_Object *)vi->extra_data_2) {
+                               elm_box_pack_after(container, item, obj);
+                               break;
+                       }
+               }
+       } else if (inset_position == LISTBOX_APPEND) {
+               EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+                       node = quickpanel_noti_list_item_node_get(obj);
+                       if (node) {
+                               notification_h noti = node->noti;
+                               if (noti) {
+                                       notification_get_type(noti, &type);
+                                       if (type == NOTIFICATION_TYPE_NOTI) {
+                                               //node_first_noti = node;
+                                               elm_box_pack_before(container, item, obj);
+                                               flag = 1;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+               if (flag == 0)
+                       elm_box_pack_end(container, item);
+
+       } else {
+               int ongoing_count = quickpanel_noti_get_type_count(NOTIFICATION_TYPE_ONGOING);
+               DBG("NOTI INSERT AT: %d", ongoing_count);
+
+               if (ongoing_count == 0) {
+                       DBG("NOTI INSERT START");
+                       elm_box_pack_start(container, item);
+               } else {
+                       Eina_List *items = elm_box_children_get(container);
+                       if (!items) {
+                               ERR("Failed to recieve container items, adding new notification to end of the list");
+                               elm_box_pack_end(container, item);
+                               return;
+                       }
+
+                       Evas_Object *before = eina_list_nth(items, ongoing_count - 1);
+                       if (!before) {
+                               ERR("Failed to recieve preceding item, adding new notification to end of the list");
+                               elm_box_pack_end(container, item);
+                               return;
+                       }
+
+                       DBG("NOTI INSERT BEFORE: %p", before);
+                       elm_box_pack_after(container, item, before);
+               }
+       }
+
+       quickpanel_noti_listbox_update_item_background_color();
+}
+
+static void _anim_job_delete(void *data)
+{
+       QP_VI *vi = data;
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj = NULL;
+       Eina_List *item_list = NULL;
+       int is_start_relayout = 0;
+       int item_width, item_height = 0;
+       Elm_Transit *transit_layout_parent = NULL;
+       Elm_Transit *transit_layout = NULL;
+       Elm_Transit *transit_fadeout = NULL;
+       Evas_Object *container = NULL;
+       Evas_Object *item = NULL;
+
+       retif(vi == NULL, , "invalid parameter");
+       retif(vi->container == NULL, , "invalid parameter");
+       retif(vi->target == NULL, , "invalid parameter");
+
+       container = vi->container;
+       item = vi->target;
+       item_list = elm_box_children_get(container);
+
+       evas_object_geometry_get(item, NULL, NULL, &item_width, &item_height);
+       if (item_width == 0 && item_height == 0) {
+               ERR("failed to get a size of item %d %d", item_width, item_height);
+               evas_object_size_hint_min_get(item, &item_width, &item_height);
+       }
+
+       transit_fadeout = elm_transit_add();
+       if (transit_fadeout != NULL) {
+               elm_transit_object_add(transit_fadeout, item);
+               elm_transit_effect_color_add(transit_fadeout, 255, 255, 255, 255, 0, 0, 0, 0);
+               elm_transit_objects_final_state_keep_set(transit_fadeout, EINA_TRUE);
+               elm_transit_duration_set(transit_fadeout, quickpanel_vim_get_duration(VI_OP_DELETE));
+               elm_transit_go(transit_fadeout);
+       } else {
+               ERR("failed to create a transit");
+       }
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+               if (obj == item) {
+                       is_start_relayout = 1;
+               } else if (obj != NULL && is_start_relayout == 1) {
+                       transit_layout = elm_transit_add();
+                       if (transit_layout != NULL) {
+                               elm_transit_effect_translation_add(transit_layout, 0, 0, 0, -item_height);
+                               elm_transit_object_add(transit_layout, obj);
+                               elm_transit_duration_set(transit_layout,
+                                               quickpanel_vim_get_duration(VI_OP_REORDER));
+                               elm_transit_tween_mode_set(transit_layout,
+                                               quickpanel_vim_get_tweenmode(VI_OP_REORDER));
+                               elm_transit_objects_final_state_keep_set(transit_layout, EINA_TRUE);
+                               if (transit_fadeout != NULL)
+                                       elm_transit_chain_transit_add(transit_fadeout, transit_layout);
+
+                       } else {
+                               ERR("failed to create a transit");
+                       }
+               }
+       }
+
+       if (item_list != NULL)
+               eina_list_free(item_list);
+
+
+       transit_layout_parent = quickpanel_list_util_get_reorder_transit(container,
+                       transit_fadeout, -item_height);
+
+       if (transit_layout_parent != NULL) {
+               elm_transit_del_cb_set(transit_layout_parent, quickpanel_vi_done_cb_for_transit,
+                               vi);
+       } else if (transit_layout != NULL) {
+               elm_transit_del_cb_set(transit_layout, quickpanel_vi_done_cb_for_transit,
+                               vi);
+       } else if (transit_fadeout != NULL) {
+               elm_transit_del_cb_set(transit_fadeout, quickpanel_vi_done_cb_for_transit,
+                               vi);
+       } else {
+               ERR("Failed to create all the transit");
+               quickpanel_vi_done(vi);
+       }
+}
+
+static void _anim_done_delete(void *data)
+{
+       int w = 0, h = 0;
+       QP_VI *vi = data;
+
+       retif(vi == NULL, , "invalid parameter");
+       retif(vi->container == NULL, , "invalid parameter");
+       retif(vi->target == NULL, , "invalid parameter");
+
+       Evas_Object *container = vi->container;
+       Evas_Object *item = vi->target;
+
+       elm_box_unpack(container, item);
+       quickpanel_noti_list_item_remove(item);
+       _listbox_call_item_deleted_cb(container,
+                       quickpanel_noti_list_item_node_get(item), NULL);
+
+       if (_listbox_flag_get(container, E_DATA_IS_HIDED) == 1) {
+               _listbox_layout_size_get(container, &w, &h);
+               evas_object_resize(container, w, h);
+       }
+
+       quickpanel_noti_listbox_update_item_background_color();
+}
+
+static Eina_Bool _anim_init_cb(void *data)
+{
+       QP_VI *vi = data;
+       retif(vi == NULL, EINA_FALSE, "invalid parameter");
+
+       static qp_vi_op_table anim_init_table[] = {
+               {
+                       .op_type = VI_OP_INSERT,
+                       .handler = _anim_init_insert,
+               },
+               {
+                       .op_type = VI_OP_NONE,
+                       .handler = NULL,
+               },
+       };
+
+       int i = 0;
+       for (i = 0; anim_init_table[i].op_type != VI_OP_NONE; i++) {
+               if (anim_init_table[i].op_type != vi->op_type)
+                       continue;
+
+
+               anim_init_table[i].handler(vi);
+               break;
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool _anim_job_cb(void *data)
+{
+       QP_VI *vi = data;
+       retif(vi == NULL, EINA_FALSE, "invalid parameter");
+
+       static qp_vi_op_table anim_job_table[] = {
+               {
+                       .op_type = VI_OP_INSERT,
+                       .handler = _anim_job_insert,
+               },
+               {
+                       .op_type = VI_OP_DELETE,
+                       .handler = _anim_job_delete,
+               },
+               {
+                       .op_type = VI_OP_DELETE_ALL,
+                       .handler = _anim_job_delete_all,
+               },
+               {
+                       .op_type = VI_OP_NONE,
+                       .handler = NULL,
+               },
+       };
+
+       int i = 0;
+       for (i = 0; anim_job_table[i].op_type != VI_OP_NONE; i++) {
+               if (anim_job_table[i].op_type != vi->op_type)
+                       continue;
+
+
+               anim_job_table[i].handler(vi);
+               break;
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool _anim_done_cb(void *data)
+{
+       QP_VI *vi = data;
+       retif(vi == NULL, EINA_FALSE, "invalid parameter");
+
+       static qp_vi_op_table anim_done_table[] = {
+               {
+                       .op_type = VI_OP_INSERT,
+                       .handler = _anim_done_insert,
+               },
+               {
+                       .op_type = VI_OP_DELETE,
+                       .handler = _anim_done_delete,
+               },
+               {
+                       .op_type = VI_OP_DELETE_ALL,
+                       .handler = _anim_done_delete_all,
+               },
+               {
+                       .op_type = VI_OP_NONE,
+                       .handler = NULL,
+               },
+       };
+
+       int i = 0;
+       for (i = 0; anim_done_table[i].op_type != VI_OP_NONE; i++) {
+               if (anim_done_table[i].op_type != vi->op_type)
+                       continue;
+
+
+               anim_done_table[i].handler(vi);
+               break;
+       }
+
+       return EINA_TRUE;
+}
+
+HAPI int quickpanel_noti_listbox_get_geometry(Evas_Object *listbox, int *limit_h, int *limit_partial_h, int *limit_partial_w)
+{
+
+       int x = 0, y = 0, w = 0, h = 0;
+
+       retif(listbox == NULL, 0, "invalid parameter");
+       retif(limit_h == NULL, 0, "invalid parameter");
+       retif(limit_partial_h == NULL, 0, "invalid parameter");
+       retif(limit_partial_w == NULL, 0, "invalid parameter");
+       evas_object_geometry_get(listbox, &x, &y, &w, &h);
+
+       *limit_h =  y + h;
+       *limit_partial_h = *limit_h;
+       *limit_partial_w = 0;
+
+       return 1;
+}
+
+static void _notibox_deleted_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       quickpanel_uic_close_quickpanel(EINA_FALSE, EINA_FALSE);
+}
+
+HAPI void quickpanel_noti_listbox_closing_trigger_set(Evas_Object *listbox)
+{
+       Evas_Object *item = NULL;
+       Eina_List *items = NULL;
+       retif(listbox == NULL, , "invalid parameter");
+
+       if ((items = elm_box_children_get(listbox)) != NULL) {
+               item = eina_list_nth(items, 0);
+               if (item != NULL) {
+                       evas_object_event_callback_add(item,
+                                       EVAS_CALLBACK_DEL, _notibox_deleted_cb, NULL);
+               }
+               eina_list_free(items);
+       }
+}
diff --git a/src/notifications/noti_node.c b/src/notifications/noti_node.c
new file mode 100755 (executable)
index 0000000..23aee82
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <notification.h>
+#include <notification_internal.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "list_util.h"
+#include "noti_node.h"
+
+static void _noti_node_free(noti_node_item *node);
+
+HAPI void quickpanel_noti_node_create(noti_node **handle)
+{
+       retif(handle == NULL, , "Invalid parameter!");
+
+       *handle = (noti_node *)malloc(sizeof(noti_node));
+
+       if (*handle != NULL) {
+               (*handle)->table = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)_noti_node_free);
+               (*handle)->n_ongoing = 0;
+               (*handle)->n_noti = 0;
+       } else {
+               *handle = NULL;
+       }
+}
+
+HAPI void quickpanel_noti_node_destroy(noti_node **handle)
+{
+       retif(handle == NULL, , "Invalid parameter!");
+       retif(*handle == NULL, , "Invalid parameter!");
+
+       g_hash_table_remove_all((*handle)->table);
+       g_hash_table_destroy((*handle)->table);
+       (*handle)->table = NULL;
+
+       free((*handle));
+       *handle = NULL;
+}
+
+HAPI noti_node_item *quickpanel_noti_node_add(noti_node *handle, notification_h noti, void *view)
+{
+       int priv_id = 0;
+       notification_type_e noti_type = NOTIFICATION_TYPE_NONE;
+       noti_node_item *node = NULL;
+
+       retif(handle == NULL || noti == NULL, NULL, "Invalid parameter!");
+
+       if (notification_get_id(noti, NULL, &priv_id) == NOTIFICATION_ERROR_NONE) {
+               node = malloc(sizeof(noti_node_item));
+               if (!node) {
+                       ERR("fail to alloc item");
+                       return NULL;
+               }
+
+               node->noti = noti;
+               node->view = view;
+
+               g_hash_table_insert(handle->table, GINT_TO_POINTER(priv_id), (gpointer *)node);
+
+               notification_get_type(noti, &noti_type);
+
+               if (noti_type == NOTIFICATION_TYPE_NOTI)
+                       handle->n_noti++;
+               else if (noti_type == NOTIFICATION_TYPE_ONGOING)
+                       handle->n_ongoing++;
+
+
+               DBG("n_noti = [%d] n_ongoing = [%d]", handle->n_noti, handle->n_ongoing);
+               return node;
+       }
+
+       return NULL;
+}
+
+HAPI void quickpanel_noti_node_remove(noti_node *handle, int priv_id)
+{
+       notification_type_e noti_type = NOTIFICATION_TYPE_NONE;
+
+       retif(handle == NULL, , "Invalid parameter!");
+       retif(handle->table == NULL, , "Invalid parameter!");
+
+       noti_node_item *item = quickpanel_noti_node_get(handle, priv_id);
+
+       if (item != NULL) {
+               if (item->noti != NULL) {
+                       notification_get_type(item->noti, &noti_type);
+
+                       if (noti_type == NOTIFICATION_TYPE_NOTI)
+                               handle->n_noti--;
+                       else if (noti_type == NOTIFICATION_TYPE_ONGOING)
+                               handle->n_ongoing--;
+
+               }
+
+               notification_free(item->noti);
+               item->noti = NULL;
+               item->view = NULL;
+
+               if (g_hash_table_remove(handle->table, GINT_TO_POINTER(priv_id)))
+                       DBG("success to remove %d", priv_id);
+
+       }
+}
+
+HAPI void quickpanel_noti_node_remove_all(noti_node *handle)
+{
+       retif(handle == NULL, , "Invalid parameter!");
+       retif(handle->table == NULL, , "Invalid parameter!");
+
+       g_hash_table_remove_all(handle->table);
+       handle->n_noti = 0;
+       handle->n_ongoing = 0;
+       DBG("all the nodes are removed");
+}
+
+HAPI noti_node_item *quickpanel_noti_node_get(noti_node *handle, int priv_id)
+{
+       retif(handle == NULL, NULL, "Invalid parameter!");
+       retif(handle->table == NULL, NULL, "Invalid parameter!");
+
+       return (noti_node_item *)g_hash_table_lookup(handle->table, GINT_TO_POINTER(priv_id));
+}
+
+HAPI int quickpanel_noti_node_get_item_count(noti_node *handle, notification_type_e noti_type)
+{
+       retif(handle == NULL, 0, "Invalid parameter!");
+
+       DBG("n_noti %d , n_ongoing %d ", handle->n_noti, handle->n_ongoing);
+
+       if (noti_type == NOTIFICATION_TYPE_NOTI)
+               return handle->n_noti;
+       else if (noti_type == NOTIFICATION_TYPE_ONGOING)
+               return handle->n_ongoing;
+       else if (noti_type == NOTIFICATION_TYPE_NONE)
+               return handle->n_noti + handle->n_ongoing;
+
+
+       return 0;
+}
+
+static void _noti_node_free(noti_node_item *node)
+{
+       retif(node == NULL, , "Invalid parameter!");
+
+       DBG("item_node is freed:%p", node);
+
+       free(node);
+}
diff --git a/src/notifications/noti_section.c b/src/notifications/noti_section.c
new file mode 100755 (executable)
index 0000000..45e2d9e
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+
+#include <vconf.h>
+#include <notification.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <system_settings.h>
+#include <notification_setting_internal.h>
+
+#include "quickpanel-ui.h"
+#include "quickpanel_def.h"
+#include "common_uic.h"
+#include "common.h"
+#include "noti_node.h"
+#include "noti.h"
+#include "list_util.h"
+#include "noti_section.h"
+#include "accessibility.h"
+
+
+#define NOTI_CLEAR_ALL_SECTION "quickpanel/notisection/clear_all"
+#define NOTI_DEFAULT_SECTION "quickpanel/notisection/default"
+
+static void _noti_section_set_text(Evas_Object *noti_section, int count)
+{
+       if (!noti_section) {
+               ERR("Invalid parameter");
+               return;
+       }
+
+#ifdef QP_SCREENREADER_ENABLE
+       Evas_Object *ao;
+
+       ao = quickpanel_accessibility_screen_reader_object_get(noti_section, SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus.label", noti_section);
+       if (ao != NULL) {
+               elm_access_info_set(ao, ELM_ACCESS_TYPE, "");
+               elm_access_info_set(ao, ELM_ACCESS_INFO, _("IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"));
+       }
+#endif
+
+       elm_object_part_text_set(noti_section, "text.button.notisetting", _("IDS_QP_ACBUTTON_NOTI_SETTINGS_ABB"));
+       elm_object_part_text_set(noti_section, "text.button.clear_all", _("IDS_LCKSCN_ACBUTTON_CLEAR_ALL"));
+}
+
+HAPI Evas_Object *quickpanel_noti_section_create(Evas_Object *parent, qp_item_type_e type)
+{
+       Evas_Object *section;
+       Evas_Object *focus_clear;
+       Evas_Object *focus_setting;
+       struct appdata *ad;
+       Eina_Bool ret;
+
+       ad = quickpanel_get_app_data();
+       if (!ad || !parent) {
+               ERR("Invalid parameter");
+               return NULL;
+       }
+
+       section = elm_layout_add(parent);
+       ret = elm_layout_file_set(section, util_get_res_file_path(DEFAULT_EDJ), NOTI_CLEAR_ALL_SECTION);
+       if (ret == EINA_FALSE) {
+               ERR("Failed to set a file");
+               evas_object_del(section);
+               return NULL;
+       }
+
+       evas_object_size_hint_weight_set(section, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(section, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       quickpanel_uic_initial_resize(section, QP_THEME_LIST_ITEM_NOTI_SECTION_HEIGHT);
+       evas_object_show(section);
+
+       quickpanel_list_util_set_item_type(section, type);
+       quickpanel_list_util_sort_insert(ad->list, section);
+
+       focus_clear = quickpanel_accessibility_ui_get_focus_object(section);
+       if (!focus_clear) {
+               ERR("Unable to get the focus object");
+               evas_object_del(section);
+               return NULL;
+       }
+       focus_setting = quickpanel_accessibility_ui_get_focus_object(section);
+       if (!focus_setting) {
+               ERR("Unable to get the focus object");
+               evas_object_del(section);
+               return NULL;
+       }
+       elm_object_part_content_set(section, "focus", focus_clear);
+       evas_object_smart_callback_add(focus_clear, "clicked", quickpanel_noti_on_clear_all_clicked, NULL);
+       elm_object_part_content_set(section, "focus.setting", focus_setting);
+       evas_object_smart_callback_add(focus_setting, "clicked", quickpanel_noti_on_noti_setting_clicked, NULL);
+
+       return section;
+}
+
+static void _focus_pair_set(Evas_Object *view)
+{
+       Evas_Object *label = NULL;
+       Evas_Object *button = NULL;
+       retif(view == NULL, , "Invalid parameter!");
+
+       label = elm_object_part_content_get(view, "focus.label");
+       button = elm_object_part_content_get(view, "elm.swallow.icon");
+
+       if (label != NULL && button != NULL) {
+               /* label */
+               elm_object_focus_next_object_set(label, button, ELM_FOCUS_RIGHT);
+               elm_object_focus_next_object_set(label, button, ELM_FOCUS_DOWN);
+
+               /* button */
+               elm_object_focus_next_object_set(button, label, ELM_FOCUS_LEFT);
+               elm_object_focus_next_object_set(button, label, ELM_FOCUS_UP);
+       }
+}
+
+HAPI void quickpanel_noti_section_update(Evas_Object *noti_section, int noti_count)
+{
+       retif(noti_section == NULL, , "invalid parameter");
+
+       _noti_section_set_text(noti_section, noti_count);
+       _focus_pair_set(noti_section);
+
+       quickpanel_noti_set_clear_all_status();
+}
+
+HAPI void quickpanel_noti_section_set_deleted_cb(Evas_Object *noti_section,
+               Evas_Object_Event_Cb func, void *data)
+{
+       retif(noti_section == NULL, , "invalid parameter");
+       retif(func == NULL, , "invalid parameter");
+
+       evas_object_event_callback_add(noti_section, EVAS_CALLBACK_DEL, func, data);
+}
+
+HAPI void quickpanel_noti_section_remove(Evas_Object *noti_section)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid parameter");
+       retif(noti_section == NULL, , "invalid parameter");
+
+       quickpanel_list_util_del_item_type(noti_section);
+       quickpanel_list_util_item_unpack_by_object(ad->list, noti_section, 0, 0);
+}
diff --git a/src/notifications/noti_util.c b/src/notifications/noti_util.c
new file mode 100755 (executable)
index 0000000..c0f5cff
--- /dev/null
@@ -0,0 +1,593 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <stdlib.h>
+
+#include <Elementary.h>
+
+#include <utils_i18n_ulocale.h>
+#include <utils_i18n_udate.h>
+#include <utils_i18n_udatepg.h>
+#include <utils_i18n_ustring.h>
+#include <utils_i18n_ucalendar.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <notification_setting_internal.h>
+#include <runtime_info.h>
+#include <vconf.h>
+#include <system_settings.h>
+#include <notification_list.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "noti_util.h"
+#include "animated_icon.h"
+#include "animated_image.h"
+#include "util-time.h"
+
+#define QP_NOTI_DAY_DEC        (24 * 60 * 60)
+#define QP_NOTI_TIME_LEN_LIMIT 12
+
+
+
+HAPI int quickpanel_noti_util_get_event_count_from_noti(notification_h noti)
+{
+       char *text_count = NULL;
+
+       retif(noti == NULL, 0, "Invalid parameter!");
+
+       notification_get_text(noti, NOTIFICATION_TEXT_TYPE_EVENT_COUNT, &text_count);
+       if (text_count != NULL)
+               return atoi(text_count);
+
+
+       return 1;
+}
+
+HAPI int quickpanel_noti_util_get_event_count_by_pkgname(const char *pkgname)
+{
+       int count = 0;
+       notification_h noti = NULL;
+       notification_list_h noti_list = NULL;
+
+       retif(pkgname == NULL, 0, "Invalid parameter!");
+
+       notification_get_detail_list(pkgname, NOTIFICATION_GROUP_ID_NONE, NOTIFICATION_PRIV_ID_NONE, -1, &noti_list);
+       if (noti_list != NULL) {
+               noti = notification_list_get_data(noti_list);
+               if (noti != NULL)
+                       count = quickpanel_noti_util_get_event_count_from_noti(noti);
+
+
+               notification_free_list(noti_list);
+               return count;
+       }
+
+       return 0;
+}
+
+static char* _get_locale(void)
+{
+       char locale_tmp[32] = { 0, };
+       char *locale = NULL;
+       int ret = 0;
+
+       ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, &locale);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "ailed to set key(%s) : %d", "SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY", ret);
+
+
+       if (locale == NULL) {
+               ERR("vconf_get_str() failed : region format");
+               return strdup("en_US");
+       }
+
+       strncpy(locale_tmp, locale, sizeof(locale_tmp) - 1);
+
+       // remove .UTF-8
+       if (strlen(locale_tmp) > 0) {
+               char *p = strstr(locale_tmp, ".UTF-8");
+               if (p)
+                       *p = 0;
+
+       }
+
+       free(locale);
+
+       if (strlen(locale_tmp) > 0)
+               return strdup(locale_tmp);
+
+
+       return strdup("en_US");
+}
+
+static char* _get_timezone_from_vconf(void)
+{
+       char *szTimezone = NULL;
+       szTimezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
+       if (szTimezone == NULL) {
+               ERR("Cannot get time zone.");
+               return strdup("N/A");
+       }
+
+       return szTimezone;
+}
+
+static char* _get_timezone(void)
+{
+       char buf[1024] = {0,};
+       ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
+
+       if (len != -1) {
+               buf[len] = '\0';
+       } else {
+               ERR("failed to get a timezone information");
+               return _get_timezone_from_vconf();
+       }
+
+       return strdup(buf + 20);
+}
+
+HAPI char *quickpanel_noti_util_get_time(time_t t, char *buf, int buf_len)
+{
+       int ret = 0;
+       int status = I18N_ERROR_NONE;
+       i18n_udate date;
+       i18n_udatepg_h generator = NULL;
+       i18n_udate_format_h formatter = NULL;
+       i18n_uchar utimezone_id[40] = {0,};
+       i18n_uchar skeleton[40] = { 0 };
+       i18n_uchar pattern[40] = { 0 };
+       i18n_uchar formatted[40] = { 0 };
+       int32_t patternCapacity, formattedCapacity;
+       int32_t skeletonLength, patternLength;
+       time_t today;
+       struct tm loc_time;
+       char *timezone = NULL;
+       char *locale = NULL;
+       char bf1[32] = { 0, };
+       bool is_24hour_enabled = FALSE;
+       int is_show_time = 0;
+       int32_t buf_size_needed;
+
+       today = time(NULL);
+       localtime_r(&today, &loc_time);
+
+       loc_time.tm_sec = 0;
+       loc_time.tm_min = 0;
+       loc_time.tm_hour = 0;
+       today = mktime(&loc_time);
+
+       localtime_r(&t, &loc_time);
+
+       if (buf == NULL)
+               return NULL;
+
+
+       if (t < today) {
+               /* ascii to unicode for input skeleton */
+               i18n_ustring_copy_ua(skeleton, I18N_UDATE_ABBR_MONTH_DAY);
+               skeletonLength = strlen(I18N_UDATE_ABBR_MONTH_DAY);
+               is_show_time = 0;
+       } else {
+               ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, &is_24hour_enabled);
+
+               if (ret == SYSTEM_SETTINGS_ERROR_NONE && is_24hour_enabled == true) {
+                       /* ascii to unicode for input skeleton */
+                       i18n_ustring_copy_ua(skeleton, "HHmm");
+                       skeletonLength = strlen("HHmm");
+               } else {
+                       /* ascii to unicode for input skeleton */
+                       i18n_ustring_copy_ua(skeleton, "hhmm");
+                       skeletonLength = strlen("hhmm");
+               }
+               is_show_time = 1;
+       }
+
+       /* set i18n_udate  from time_t */
+       date = (i18n_udate)t * 1000;
+
+       patternCapacity =
+               (int32_t) (sizeof(pattern) / sizeof((pattern)[0]));
+
+       timezone = _get_timezone();
+       locale = _get_locale();
+
+       if (i18n_ustring_copy_ua_n(utimezone_id, timezone, 40) == NULL) {
+               ERR("i18n_ustring_copy_ua_n() error.");
+               ret = 0;
+               goto err;
+       }
+
+       status = i18n_ucalendar_set_default_timezone(utimezone_id);
+       if (status != I18N_ERROR_NONE) {
+               ERR("i18n_ucalendar_set_default_timezone() is failed.");
+               ret = 0;
+               goto err;
+       }
+
+#ifdef HAVE___SECURE_GETENV
+       status = i18n_ulocale_set_default(__secure_getenv("LC_TIME"));
+#elif defined HAVE_SECURE_GETENV
+       status = i18n_ulocale_set_default(secure_getenv("LC_TIME"));
+#else
+       status = i18n_ulocale_set_default(getenv("LC_TIME"));
+#endif
+       if (status != I18N_ERROR_NONE) {
+               ERR("i18n_ulocale_set_default() is failed.");
+               ret = 0;
+               goto err;
+       }
+
+       /* open datetime pattern generator */
+       status = i18n_udatepg_create(locale, &generator);
+       if (generator == NULL) {
+               ret = 0;
+               goto err;
+       }
+
+       /* get best pattern using skeleton */
+       status = i18n_udatepg_get_best_pattern(generator, skeleton, skeletonLength, pattern, patternCapacity, &patternLength);
+
+
+       /* open datetime formatter using best pattern */
+       i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, locale, NULL, -1, pattern, patternLength, &formatter);
+
+       if (formatter == NULL) {
+               ret = 0;
+               goto err;
+       }
+
+       /* calculate formatted string capacity */
+       formattedCapacity =
+               (int32_t) (sizeof(formatted) / sizeof((formatted)[0]));
+
+       /* formatting date using formatter by best pattern */
+       i18n_udate_format_date(formatter, date, formatted, formattedCapacity, NULL, &buf_size_needed);
+
+       /* unicode to ascii to display */
+       i18n_ustring_copy_au(bf1, formatted);
+       ret = snprintf(buf, buf_len, "%s", bf1);
+
+       if (is_show_time == 1 && strlen(buf) > QP_NOTI_TIME_LEN_LIMIT) {
+               if (is_24hour_enabled == TRUE) {
+                       ret = strftime(buf, buf_len, "%H:%M", &loc_time);
+               } else {
+                       strftime(bf1, sizeof(bf1), "%l:%M", &loc_time);
+
+                       if (loc_time.tm_hour >= 0 && loc_time.tm_hour < 12)
+                               ret = snprintf(buf, buf_len, "%s%s", bf1, "AM");
+                       else
+                               ret = snprintf(buf, buf_len, "%s%s", bf1, "PM");
+
+               }
+       }
+
+err:
+       if (timezone) {
+               free(timezone);
+               timezone = NULL;
+       }
+
+       if (locale) {
+               free(locale);
+               locale = NULL;
+       }
+
+       if (generator) {
+               i18n_udatepg_destroy(generator);
+               generator = NULL;
+       }
+
+       if (formatter) {
+               i18n_udate_destroy(formatter);
+               formatter = NULL;
+       }
+
+       return ret <= 0 ? NULL : buf;
+}
+
+HAPI char *quickpanel_noti_util_get_text(notification_h noti, notification_text_type_e text_type)
+{
+       time_t time = 0;
+       char *text = NULL;
+       char buf[128] = {0,};
+
+       if (notification_get_time_from_text(noti, text_type, &time) == NOTIFICATION_ERROR_NONE) {
+               if ((int)time > 0) {
+                       quickpanel_noti_util_get_time(time, buf, sizeof(buf));
+                       text = buf;
+               }
+       } else {
+               notification_get_text(noti, text_type, &text);
+       }
+
+       DBG("text : %s", text);
+
+       if (text != NULL)
+               return elm_entry_utf8_to_markup(text);
+
+
+       return NULL;
+}
+
+
+HAPI lock_screen_content_level_e _get_package_privacy_mode(notification_h noti)
+{
+       int noti_err = 0;
+       char *pkgname = NULL;
+       notification_setting_h app_setting = NULL;
+       lock_screen_content_level_e app_level = SHOW_ALL_CONTENT;
+       retif(noti == NULL, 0, "Invalid parameter!");
+
+       noti_err = notification_get_pkgname(noti, &pkgname);
+       if (noti_err != NOTIFICATION_ERROR_NONE || pkgname == NULL) {
+               DBG("notification_get_pkgname failed [%d, %s]", noti_err, get_error_message(noti_err));
+       } else {
+
+               noti_err = notification_setting_get_setting_by_package_name(pkgname, &app_setting);
+               if (noti_err != NOTIFICATION_ERROR_NONE || app_setting == NULL) {
+                       DBG("notification_setting_get_setting_by_package_name failed [%d, %s]", noti_err, get_error_message(noti_err));
+               } else {
+                       noti_err = notification_setting_get_lock_screen_content(app_setting, &app_level);
+                       if (noti_err != NOTIFICATION_ERROR_NONE)
+                               DBG("notification_setting_get_lock_screen_content failed [%d]", noti_err);
+
+               }
+
+               if (app_setting)
+                       notification_setting_free_notification(app_setting);
+
+       }
+
+       return app_level;
+}
+
+
+HAPI qp_privacy_mode quickpanel_noti_util_get_noti_privacy_mode(notification_h noti)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+
+       qp_privacy_mode system_level = QP_PRIVACY_MODE_SHOW_ALL;
+       lock_screen_content_level_e package_level = SHOW_ALL_CONTENT;
+
+       if (ad->is_lock_launched == QP_LOCKSCREEN_STATE_UNLOCK)
+               return QP_PRIVACY_MODE_SHOW_ALL;
+
+       system_level = ad->system_privacy_mode;
+       package_level = _get_package_privacy_mode(noti);
+
+       if (system_level == QP_PRIVACY_MODE_DO_NOT_SHOW || package_level == DO_NOT_SHOW_NOTIFICATIONS)
+               return QP_PRIVACY_MODE_DO_NOT_SHOW;
+       else if (system_level == QP_PRIVACY_MODE_HIDE_CONTENT || package_level == HIDE_SENSITIVE_CONTENT)
+               return QP_PRIVACY_MODE_HIDE_CONTENT;
+
+       return QP_PRIVACY_MODE_SHOW_ALL;
+}
+
+
+HAPI char* quickpanel_noti_util_get_icon_from_app_info(notification_h noti)
+{
+       int ret = NOTIFICATION_ERROR_NONE;
+       char *pkgname = NULL;
+       char *icon_path = NULL;
+
+       ret = notification_get_pkgname(noti, &pkgname);
+       if (ret == NOTIFICATION_ERROR_NONE && pkgname != NULL) {
+
+               icon_path = quickpanel_common_ui_get_appinfo_icon(pkgname);
+               if (icon_path == NULL || !ecore_file_exists(icon_path)) {
+
+                       icon_path = strdup((char*)util_get_shared_res_file_path(QP_DEFAULT_ICON_NAME));
+                       DBG("[%s] : default_icon_path is [%s]", pkgname, icon_path);
+               }
+       }
+
+       return icon_path;
+}
+
+
+HAPI char* quickpanel_noti_util_get_icon_from_noti_info(notification_h noti, notification_image_type_e type)
+{
+       int ret = NOTIFICATION_ERROR_NONE;
+       char *image_path = NULL;
+
+       ret = notification_get_image(noti, type, &image_path);
+       if (ret == NOTIFICATION_ERROR_NONE && image_path != NULL) {
+
+               if (ecore_file_exists(image_path) == EINA_FALSE) {
+                       DBG("[%s] is not exist", image_path);
+                       return NULL;
+               }
+
+               return strdup(image_path);
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_check_duplicated_image_loading(Evas_Object *obj, const char *part, const char *file_path)
+{
+       Evas_Object *old_ic = NULL;
+       const char *old_ic_path = NULL;
+
+       retif(obj == NULL, NULL, "Invalid parameter!");
+       retif(part == NULL, NULL, "Invalid parameter!");
+       retif(file_path == NULL, NULL, "Invalid parameter!");
+
+       old_ic = elm_object_part_content_get(obj, part);
+
+       if (quickpanel_animated_icon_is_same_icon(old_ic, file_path) == 1)
+               return old_ic;
+
+
+       if (old_ic != NULL) {
+               elm_image_file_get(old_ic, &old_ic_path, NULL);
+               if (old_ic_path != NULL) {
+                       if (strcmp(old_ic_path, file_path) == 0)
+                               return old_ic;
+
+               }
+
+               elm_object_part_content_unset(obj, part);
+               evas_object_del(old_ic);
+               old_ic = NULL;
+       }
+
+       return NULL;
+}
+
+
+HAPI void quickpanel_noti_util_set_hidden_icon(Evas_Object *item, notification_h noti)
+{
+       Evas_Object *ic = NULL;
+       Evas_Object *old_ic = NULL;
+       char *icon_path = NULL;
+
+       icon_path = quickpanel_noti_util_get_icon_from_app_info(noti);
+       if (icon_path != NULL) {
+               DBG("icon_type : hidden, path : [%s]", icon_path);
+               old_ic = _check_duplicated_image_loading(item, "elm.swallow.mainicon", icon_path);
+               if (old_ic == NULL) {
+                       ic = elm_image_add(item);
+                       elm_image_file_set(ic, icon_path, NULL);
+
+                       elm_object_part_content_set(item, "elm.swallow.mainicon", ic);
+                       elm_object_signal_emit(item, "masking.hide", "prog");
+                       elm_object_signal_emit(item, "mainicon.show", "prog");
+               }
+
+               free(icon_path);
+       }
+}
+
+
+
+HAPI void quickpanel_noti_util_set_icon(Evas_Object *item, notification_h noti)
+{
+       DBG("");
+       int ret = NOTIFICATION_ERROR_NONE;
+       Evas_Object *ic = NULL;
+       Evas_Object *old_ic = NULL;
+       char *main_icon_path = NULL;
+       char *sub_icon_path = NULL;
+       char *shared_icon_path = NULL;
+
+       retif(item == NULL || noti == NULL, , "Invalid parameter!");
+
+       main_icon_path = quickpanel_noti_util_get_icon_from_noti_info(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL);
+       if (main_icon_path != NULL) {
+               DBG("Set thumbnail, path : [%s]", main_icon_path);
+
+               old_ic = _check_duplicated_image_loading(item, "elm.swallow.thumbnail", main_icon_path);
+               if (old_ic == NULL) {
+                       ic = quickpanel_animated_icon_get(item, main_icon_path);
+                       if (ic == NULL) {
+                               ic = elm_image_add(item);
+                               elm_image_file_set(ic, main_icon_path, quickpanel_animated_image_get_groupname(main_icon_path));
+                               elm_image_fill_outside_set(ic, EINA_TRUE);
+                               quickpanel_animated_image_add(ic);
+                       }
+                       elm_object_part_content_set(item, "elm.swallow.thumbnail", ic);
+                       elm_object_signal_emit(item, "mainicon.hide", "prog");
+                       elm_object_signal_emit(item, "masking.show", "prog");
+               }
+       } else {
+               main_icon_path = quickpanel_noti_util_get_icon_from_noti_info(noti, NOTIFICATION_IMAGE_TYPE_ICON);
+               if (main_icon_path == NULL)
+                       main_icon_path = quickpanel_noti_util_get_icon_from_app_info(noti);
+
+               if (main_icon_path != NULL) {
+                       DBG("Set icon, path : [%s]", main_icon_path);
+                       old_ic = _check_duplicated_image_loading(item, "elm.swallow.mainicon", main_icon_path);
+                       if (old_ic == NULL) {
+                               ic = quickpanel_animated_icon_get(item, main_icon_path);
+                               if (ic == NULL) {
+                                       ic = elm_image_add(item);
+                                       elm_image_file_set(ic, main_icon_path, quickpanel_animated_image_get_groupname(main_icon_path));
+
+                                       shared_icon_path = (char*)util_get_shared_res_file_path(QP_SHARED_ICON_FOLDER_NAME);
+                                       if (!strncmp(main_icon_path, shared_icon_path, strlen(shared_icon_path)))
+                                               evas_object_color_set(ic, 155, 216, 226, 255);
+
+                                       quickpanel_animated_image_add(ic);
+                               }
+                               elm_object_part_content_set(item, "elm.swallow.mainicon", ic);
+                               elm_object_signal_emit(item, "masking.hide", "prog");
+                               elm_object_signal_emit(item, "mainicon.show", "prog");
+                       }
+               }
+       }
+
+       if (main_icon_path)
+               free(main_icon_path);
+
+
+       /* sub icon add*/
+       sub_icon_path = quickpanel_noti_util_get_icon_from_noti_info(noti, NOTIFICATION_IMAGE_TYPE_ICON_SUB);
+       if (ret == NOTIFICATION_ERROR_NONE && sub_icon_path != NULL) {
+               DBG("Set sub, path : [%s]", sub_icon_path);
+               old_ic = _check_duplicated_image_loading(item, "elm.swallow.subicon", sub_icon_path);
+               if (old_ic == NULL) {
+                       ic = elm_image_add(item);
+                       elm_image_resizable_set(ic, EINA_FALSE, EINA_TRUE);
+                       elm_image_file_set(ic, sub_icon_path, NULL);
+                       elm_object_part_content_set(item, "elm.swallow.subicon", ic);
+                       elm_object_signal_emit(item, "elm.icon.bg.show", "elm");
+               }
+
+               free(sub_icon_path);
+       }
+}
+
+
+
+HAPI char *quickpanel_noti_util_get_hidden_text(notification_h noti, notification_text_type_e text_type)
+{
+       DBG("");
+       char *label = NULL, *package = NULL;
+       int ret = NOTIFICATION_ERROR_NONE;
+
+       switch (text_type) {
+       case NOTIFICATION_TEXT_TYPE_TITLE:
+
+               ret = notification_get_pkgname(noti, &package);
+               if (ret != NOTIFICATION_ERROR_NONE) {
+                       ERR("notification_get_pkgname failed: %s", get_error_message(ret));
+                       return NULL;
+               }
+
+               label = quickpanel_common_ui_get_pkginfo_label(package);
+
+               break;
+       case NOTIFICATION_TEXT_TYPE_CONTENT:
+
+               label = strdup("Content hidden");  // TO DO
+
+               break;
+       default:
+               break;
+       }
+
+       if (label != NULL)
+               return elm_entry_utf8_to_markup(label);
+
+       return NULL;
+}
+
+
diff --git a/src/notifications/noti_view.c b/src/notifications/noti_view.c
new file mode 100755 (executable)
index 0000000..a44cb93
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+
+#include <string.h>
+#include <vconf.h>
+#include <notification.h>
+#include <system_settings.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <notification_setting_internal.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "list_util.h"
+#include "quickpanel_def.h"
+#include "vi_manager.h"
+#include "noti_node.h"
+#include "noti_list_item.h"
+#include "noti.h"
+#include "noti_util.h"
+#include "animated_icon.h"
+#include "noti_list_item.h"
+
+#ifdef QP_SCREENREADER_ENABLE
+#include "accessibility.h"
+#endif
+
+#ifdef QP_ANIMATED_IMAGE_ENABLE
+#include "animated_image.h"
+#endif
+
+#define NOTI_LAYOUT_LISTTYPE 0
+#define NOTI_LAYOUT_BOXTYPE 1
+
+#define E_DATA_VIEW_HANDLER_KEY "view_handler_cache"
+
+extern Noti_View_H noti_view_listtype_h;
+
+static struct _info {
+       Noti_View_H *view_handlers[NOTI_LAYOUT_BOXTYPE + 1];
+} s_info = {
+       .view_handlers = {
+               &noti_view_listtype_h,
+       },
+};
+
+static void _view_handler_set(Evas_Object *item, Noti_View_H *handler)
+{
+       retif(item == NULL, , "Invalid parameter!");
+       retif(handler == NULL, , "Invalid parameter!");
+
+       evas_object_data_set(item, E_DATA_VIEW_HANDLER_KEY, handler);
+}
+
+static Noti_View_H *_view_handler_cached_get(Evas_Object *item)
+{
+       retif(item == NULL, NULL, "Invalid parameter!");
+
+       return (Noti_View_H *)evas_object_data_get(item, E_DATA_VIEW_HANDLER_KEY);
+}
+
+static Noti_View_H *_view_handler_get_by_contents(notification_h noti)
+{
+       return s_info.view_handlers[NOTI_LAYOUT_LISTTYPE];
+}
+
+static void _view_handler_del(Evas_Object *item)
+{
+       retif(item == NULL, , "Invalid parameter!");
+
+       evas_object_data_del(item, E_DATA_VIEW_HANDLER_KEY);
+}
+
+static Evas_Object *_create(notification_h noti, Evas_Object *parent)
+{
+       Evas_Object *view = NULL;
+       Noti_View_H *view_handler = NULL;
+       retif(parent == NULL, NULL, "Invalid parameter!");
+       retif(noti == NULL, NULL, "Invalid parameter!");
+
+       view_handler = _view_handler_get_by_contents(noti);
+       if (view_handler != NULL && view_handler->create != NULL) {
+               view = view_handler->create(noti, parent);
+               if (view == NULL)
+                       ERR("failed to create notification view(%s)", view_handler->name);
+               else
+                       _view_handler_set(view, view_handler);
+
+       } else {
+               ERR("create handler isn't supported");
+       }
+
+       return view;
+}
+
+static void _update(noti_node_item *noti_node, notification_ly_type_e layout, Evas_Object *item)
+{
+       Noti_View_H *view_handler = NULL;
+       retif(item == NULL, , "Invalid parameter!");
+       retif(noti_node == NULL, , "Invalid parameter!");
+       retif(noti_node->noti == NULL, , "Invalid parameter!");
+
+       view_handler = _view_handler_get_by_contents(noti_node->noti);
+       if (view_handler != NULL && view_handler->update != NULL) {
+               _view_handler_set(item, view_handler);
+               view_handler->update(noti_node, layout, item);
+       } else {
+               ERR("update handler isn't supported");
+       }
+}
+
+static void _remove(noti_node_item *noti_node, notification_ly_type_e layout, Evas_Object *item)
+{
+       Noti_View_H *view_handler = NULL;
+       retif(item == NULL, , "Invalid parameter!");
+       retif(noti_node == NULL, , "Invalid parameter!");
+       retif(noti_node->noti == NULL, , "Invalid parameter!");
+
+       view_handler = _view_handler_cached_get(item);
+       if (view_handler != NULL && view_handler->remove != NULL) {
+               _view_handler_del(item);
+               view_handler->remove(noti_node, layout, item);
+       } else {
+               ERR("remove handler isn't supported");
+       }
+}
+
+HAPI int quickpanel_noti_view_is_view_handler_changed(Evas_Object *item, notification_h noti)
+{
+       Noti_View_H *view_handler_old = NULL;
+       Noti_View_H *view_handler_new = NULL;
+
+       view_handler_old = _view_handler_cached_get(item);
+       view_handler_new = _view_handler_get_by_contents(noti);
+
+       if (view_handler_old != view_handler_new)
+               return 1;
+
+
+       return 0;
+}
+
+Noti_View_H noti_view_h = {
+       .name                   = "noti_view",
+       .create                 = _create,
+       .update                 = _update,
+       .remove                 = _remove,
+};
diff --git a/src/notifications/noti_view_listype.c b/src/notifications/noti_view_listype.c
new file mode 100755 (executable)
index 0000000..e79d17b
--- /dev/null
@@ -0,0 +1,276 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <string.h>
+#include <glib.h>
+
+#include <notification.h>
+#include <notification_text_domain.h>
+#include <system_settings.h>
+#include <vconf.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <notification_setting_internal.h>
+
+#include "quickpanel-ui.h"
+#include "common_uic.h"
+#include "common.h"
+#include "list_util.h"
+#include "quickpanel_def.h"
+#include "vi_manager.h"
+#include "noti_node.h"
+#include "noti_list_item.h"
+#include "noti.h"
+#include "noti_util.h"
+#include "animated_icon.h"
+#include "util-time.h"
+
+#ifdef QP_SCREENREADER_ENABLE
+#include "accessibility.h"
+#endif
+
+#ifdef QP_ANIMATED_IMAGE_ENABLE
+#include "animated_image.h"
+#endif
+
+#ifdef QP_SCREENREADER_ENABLE
+static inline void _check_and_add_to_buffer(Eina_Strbuf *str_buf, const char *text)
+{
+       char buf_number[QP_UTIL_PHONE_NUMBER_MAX_LEN * 2] = { 0, };
+
+       retif(str_buf == NULL, , "Invalid parameter!");
+
+       if (text != NULL) {
+               if (strlen(text) > 0) {
+                       if (quickpanel_common_util_is_phone_number(text)) {
+                               quickpanel_common_util_phone_number_tts_make(buf_number, text,
+                                               (QP_UTIL_PHONE_NUMBER_MAX_LEN * 2) - 1);
+                               eina_strbuf_append(str_buf, buf_number);
+                       } else {
+                               eina_strbuf_append(str_buf, text);
+                       }
+                       eina_strbuf_append_char(str_buf, '\n');
+               }
+       }
+}
+#endif
+
+static void _set_text_to_part(Evas_Object *obj, const char *part, const char *text)
+{
+       const char *old_text = NULL;
+
+       retif(obj == NULL, , "Invalid parameter!");
+       retif(part == NULL, , "Invalid parameter!");
+       retif(text == NULL, , "Invalid parameter!");
+
+       old_text = elm_object_part_text_get(obj, part);
+       if (old_text != NULL) {
+               if (strcmp(old_text, text) == 0)
+                       return;
+
+       }
+
+       elm_object_part_text_set(obj, part, text);
+}
+
+static void _set_text(Evas_Object *item, notification_h noti)
+{
+       int noti_err = NOTIFICATION_ERROR_NONE;
+       bool is_exist_count = false;
+       char *title_text = NULL;
+       char *count_text = NULL;
+       char *content_text = NULL;
+       char *domain = NULL;
+       char *dir = NULL;
+
+       time_t noti_time;
+       char buf[512] = {0,};
+#ifdef QP_SCREENREADER_ENABLE
+       Evas_Object *ao = NULL;
+       Eina_Strbuf *str_buf = NULL;
+#endif
+       struct appdata *ad = quickpanel_get_app_data();
+       qp_privacy_mode noti_privacy_mode = quickpanel_noti_util_get_noti_privacy_mode(noti);
+
+       retif(ad == NULL, , "Invalid parameter!");
+       retif(item == NULL, , "Invalid parameter!");
+       retif(noti == NULL, , "noti is NULL");
+
+       /* Set text domain */
+       notification_get_text_domain(noti, &domain, &dir);
+       if (domain != NULL && dir != NULL) {
+               DBG("domain : %s dir : %s", domain, dir);
+               bindtextdomain(domain, dir);
+       }
+
+#ifdef QP_SCREENREADER_ENABLE
+       ao = quickpanel_accessibility_screen_reader_object_get(item,
+                       SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", item);
+       if (ao != NULL) {
+               str_buf = eina_strbuf_new();
+               elm_access_info_set(ao, ELM_ACCESS_TYPE, _("IDS_QP_BUTTON_NOTIFICATION"));
+       }
+#endif
+
+       /* Get pkgname & id */
+       if (noti_privacy_mode == QP_PRIVACY_MODE_HIDE_CONTENT)
+               title_text = quickpanel_noti_util_get_hidden_text(noti, NOTIFICATION_TEXT_TYPE_TITLE);
+
+       if (title_text == NULL)
+               title_text = quickpanel_noti_util_get_text(noti, NOTIFICATION_TEXT_TYPE_TITLE);
+
+       if (title_text != NULL) {
+               DBG("TITLE text : %s", title_text);
+               quickpanel_common_util_char_replace(title_text, _NEWLINE, _SPACE);
+               _set_text_to_part(item, "elm.text.title", title_text);
+#ifdef QP_SCREENREADER_ENABLE
+               _check_and_add_to_buffer(str_buf, title_text);
+#endif
+       }
+
+       noti_err = notification_get_text(noti, NOTIFICATION_TEXT_TYPE_EVENT_COUNT, &count_text);
+       if (noti_err == NOTIFICATION_ERROR_NONE && count_text != NULL) {
+               quickpanel_common_util_char_replace(count_text, _NEWLINE, _SPACE);
+               int count = atoi(count_text);
+
+               if (count > 999)
+                       _set_text_to_part(item, "elm.text.count", "999+");
+               else
+                       _set_text_to_part(item, "elm.text.count", count_text);
+
+
+               is_exist_count = true;
+#ifdef QP_SCREENREADER_ENABLE
+               _check_and_add_to_buffer(str_buf, count_text);
+#endif
+       }
+
+       if (noti_privacy_mode == QP_PRIVACY_MODE_HIDE_CONTENT)
+               content_text = quickpanel_noti_util_get_hidden_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT);
+
+       if (content_text == NULL)
+               content_text = quickpanel_noti_util_get_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT);
+
+       if (content_text != NULL) {
+               DBG("CONTENT text : %s", content_text);
+               quickpanel_common_util_char_replace(content_text, _NEWLINE, _SPACE);
+               _set_text_to_part(item, "elm.text.content", content_text);
+#ifdef QP_SCREENREADER_ENABLE
+               _check_and_add_to_buffer(str_buf, content_text);
+#endif
+       }
+
+       noti_err = notification_get_time(noti, &noti_time);
+       if (noti_time == 0.0)
+               noti_err = notification_get_insert_time(noti, &noti_time);
+
+       if (noti_err == NOTIFICATION_ERROR_NONE) {
+
+               if (noti_privacy_mode == QP_PRIVACY_MODE_HIDE_CONTENT)
+                       quickpanel_util_time_formatted_date_get(ad, noti_time, buf, 512);
+               else
+                       quickpanel_noti_util_get_time(noti_time, buf, 512);
+
+               _set_text_to_part(item, "elm.text.time", buf);
+#ifdef QP_SCREENREADER_ENABLE
+               _check_and_add_to_buffer(str_buf, buf);
+#endif
+       }
+
+       if (elm_object_part_text_get(item, "elm.text.count") != NULL) {
+               elm_object_signal_emit(item, "content.short", "prog");
+               elm_object_signal_emit(item, "count.show", "prog");
+       }
+
+       if (elm_object_part_text_get(item, "elm.text.time") != NULL)
+               elm_object_signal_emit(item, "title.short", "prog");
+
+
+       const char *get_content = elm_object_part_text_get(item, "elm.text.content");
+       if (false == is_exist_count &&
+               (get_content == NULL || strlen(get_content) == 0)) {
+               // if there is no content, move title to vertical center.
+               elm_object_signal_emit(item, "title.move.center", "prog");
+               if (elm_object_part_text_get(item, "elm.text.time") != NULL) {
+                       elm_object_signal_emit(item, "title.short.center", "prog");
+                       elm_object_signal_emit(item, "time.move.center", "prog");
+               }
+       } else {
+               elm_object_signal_emit(item, "title.move.default", "prog");
+               if (elm_object_part_text_get(item, "elm.text.time") != NULL) {
+                       elm_object_signal_emit(item, "time.move.default", "prog");
+                       elm_object_signal_emit(item, "title.short", "prog");
+               } else {
+                       elm_object_signal_emit(item, "title.text.default", "prog");
+               }
+       }
+#ifdef QP_SCREENREADER_ENABLE
+       if (ao != NULL && str_buf != NULL) {
+               elm_access_info_set(ao, ELM_ACCESS_INFO, eina_strbuf_string_get(str_buf));
+               eina_strbuf_free(str_buf);
+       }
+#endif
+}
+
+static Evas_Object *_create(notification_h noti, Evas_Object *parent)
+{
+       int view_height = 0;
+       Evas_Object *view = NULL;
+       const char *view_layout_group = NULL;
+       retif(parent == NULL, NULL, "Invalid parameter!");
+       retif(noti == NULL, NULL, "Invalid parameter!");
+
+       notification_ly_type_e layout = NOTIFICATION_LY_NOTI_EVENT_SINGLE;
+       notification_get_layout(noti, &layout);
+
+       view_layout_group = "quickpanel/listitem/notification";
+       view_height = QP_THEME_LIST_ITEM_NOTIFICATION_LISTTYPE_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT;
+
+       view = elm_layout_add(parent);
+       if (view != NULL) {
+               elm_layout_file_set(view, util_get_res_file_path(DEFAULT_EDJ), view_layout_group);
+               evas_object_size_hint_weight_set(view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(view, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               quickpanel_uic_initial_resize(view, view_height);
+               evas_object_show(view);
+       } else {
+               ERR("failed to create single notification view");
+       }
+
+       return view;
+}
+
+static void _update(noti_node_item *noti_node, notification_ly_type_e layout, Evas_Object *item)
+{
+       DBG("");
+       retif(item == NULL || noti_node == NULL, , "Invalid parameter!");
+
+       if (quickpanel_noti_util_get_noti_privacy_mode(noti_node->noti) == QP_PRIVACY_MODE_HIDE_CONTENT)
+               quickpanel_noti_util_set_hidden_icon(item, noti_node->noti);
+       else
+               quickpanel_noti_util_set_icon(item, noti_node->noti);
+
+       _set_text(item, noti_node->noti);
+}
+
+Noti_View_H noti_view_listtype_h = {
+       .name                   = "noti_view_listtype",
+       .create                 = _create,
+       .update                 = _update,
+       .remove                 = NULL,
+};
diff --git a/src/notifications/noti_view_ongoing.c b/src/notifications/noti_view_ongoing.c
new file mode 100755 (executable)
index 0000000..5e7c78f
--- /dev/null
@@ -0,0 +1,451 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <string.h>
+#include <glib.h>
+
+#include <Elementary.h>
+
+#include <vconf.h>
+#include <notification.h>
+#include <notification_internal.h>
+#include <notification_text_domain.h>
+#include <notification_setting_internal.h>
+#include <system_settings.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "quickpanel-ui.h"
+#include "common_uic.h"
+#include "common.h"
+#include "list_util.h"
+#include "quickpanel_def.h"
+#include "vi_manager.h"
+#include "noti_node.h"
+#include "noti_list_item.h"
+#include "noti.h"
+#include "noti_util.h"
+#include "animated_icon.h"
+
+#ifdef QP_SCREENREADER_ENABLE
+#include "accessibility.h"
+#endif
+
+#ifdef QP_ANIMATED_IMAGE_ENABLE
+#include "animated_image.h"
+#endif
+
+#define LEN_UNIT_TEXTBLOCK 555
+
+#ifdef QP_SCREENREADER_ENABLE
+static inline void _check_and_add_to_buffer(Eina_Strbuf *str_buf, const char *text)
+{
+       char buf_number[QP_UTIL_PHONE_NUMBER_MAX_LEN * 2] = { 0, };
+
+       retif(str_buf == NULL, , "Invalid parameter!");
+
+       if (text != NULL) {
+               if (strlen(text) > 0) {
+                       if (quickpanel_common_util_is_phone_number(text)) {
+                               quickpanel_common_util_phone_number_tts_make(buf_number, text,
+                                               (QP_UTIL_PHONE_NUMBER_MAX_LEN * 2) - 1);
+                               eina_strbuf_append(str_buf, buf_number);
+                       } else {
+                               eina_strbuf_append(str_buf, text);
+                       }
+                       eina_strbuf_append_char(str_buf, '\n');
+               }
+       }
+}
+#endif
+
+static Evas_Object *_check_duplicated_progress_loading(Evas_Object *obj, const char *part, const char *style_name)
+{
+       Evas_Object *old_content = NULL;
+       const char *old_style_name = NULL;
+
+       retif(obj == NULL, NULL, "Invalid parameter!");
+       retif(part == NULL, NULL, "Invalid parameter!");
+       retif(style_name == NULL, NULL, "Invalid parameter!");
+
+       old_content = elm_object_part_content_get(obj, part);
+       if (old_content != NULL) {
+               old_style_name = elm_object_style_get(old_content);
+               if (old_style_name != NULL) {
+                       if (strcmp(old_style_name, style_name) == 0)
+                               return old_content;
+
+
+                       elm_object_part_content_unset(obj, part);
+                       evas_object_del(old_content);
+                       old_content = NULL;
+               }
+       }
+
+       return NULL;
+}
+
+static void _set_text_to_part(Evas_Object *obj, const char *part, const char *text)
+{
+       const char *old_text = NULL;
+
+       retif(obj == NULL, , "Invalid parameter!");
+       retif(part == NULL, , "Invalid parameter!");
+       retif(text == NULL, , "Invalid parameter!");
+
+       old_text = elm_object_part_text_get(obj, part);
+       if (old_text != NULL) {
+               if (strcmp(old_text, text) == 0)
+                       return;
+
+       }
+
+       elm_object_part_text_set(obj, part, text);
+}
+
+static char *_noti_get_progress(notification_h noti, char *buf, int buf_len)
+{
+       double size = 0.0;
+       double percentage = 0.0;
+
+       retif(noti == NULL, NULL, "Invalid parameter!");
+       retif(buf == NULL, NULL, "Invalid parameter!");
+
+       notification_get_size(noti, &size);
+       notification_get_progress(noti, &percentage);
+
+       if (percentage > 0) {
+               if (percentage < 1.0) {
+                       if (snprintf(buf, buf_len, "%d%%", (int)(percentage * 100.0 + 0.5)) <= 0)
+                               return NULL;
+
+               }
+
+               if (percentage >= 1.0)
+                       snprintf(buf, buf_len, "%d%%", 100);
+
+
+               return buf;
+       } else if (size > 0 && percentage == 0) {
+               if (size > (1 << 30)) {
+                       if (snprintf(buf, buf_len, "%.1lfGB", size / 1000000000.0) <= 0)
+                               return NULL;
+
+                       return buf;
+               } else if (size > (1 << 20)) {
+                       if (snprintf(buf, buf_len, "%.1lfMB", size / 1000000.0) <= 0)
+                               return NULL;
+
+                       return buf;
+               } else if (size > (1 << 10)) {
+                       if (snprintf(buf, buf_len, "%.1lfKB", size / 1000.0) <= 0)
+                               return NULL;
+
+                       return buf;
+               } else {
+                       if (snprintf(buf, buf_len, "%.0lfB", size) <= 0)
+                               return NULL;
+
+                       return buf;
+               }
+       }
+
+       return NULL;
+}
+
+static void _set_progressbar(Evas_Object *item, notification_h noti)
+{
+       Evas_Object *ic = NULL;
+       Evas_Object *old_ic = NULL;
+       double size = 0.0;
+       double percentage = 0.0;
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+       notification_ly_type_e layout = NOTIFICATION_LY_NONE ;
+
+       retif(item == NULL, , "Invalid parameter!");
+       retif(noti == NULL, , "noti is NULL");
+
+       notification_get_type(noti, &type);
+       if (type == NOTIFICATION_TYPE_ONGOING) {
+               notification_get_size(noti, &size);
+               notification_get_progress(noti, &percentage);
+               notification_get_layout(noti, &layout);
+
+               if (layout != NOTIFICATION_LY_ONGOING_EVENT) {
+                       if (percentage > 0.0 && percentage <= 1.0) {
+                               old_ic = _check_duplicated_progress_loading(item, "elm.swallow.progress", "list_progress");
+                               if (old_ic == NULL) {
+                                       ic = elm_progressbar_add(item);
+                                       elm_progressbar_unit_format_set(ic, "%0.0f%%");
+                                       if (ic == NULL)
+                                               return;
+
+                                       elm_object_style_set(ic, "list_progress");
+                               } else {
+                                       ic = old_ic;
+                               }
+
+                               elm_progressbar_value_set(ic, percentage);
+                               elm_progressbar_horizontal_set(ic, EINA_TRUE);
+                               elm_progressbar_pulse(ic, EINA_FALSE);
+                       } else if ((size >= 0.0 && percentage == 0.0) || ((size < 0.0 && percentage == 0.0) || (size == 0.0 && percentage < 0.0))) {
+                               old_ic = _check_duplicated_progress_loading(item, "elm.swallow.progress", "pending");
+                               if (old_ic == NULL) {
+                                       ic = elm_progressbar_add(item);
+                                       elm_progressbar_unit_format_set(ic, "%0.0f%%");
+                                       if (ic == NULL)
+                                               return;
+
+                                       elm_object_style_set(ic, "pending");
+                               } else {
+                                       ic = old_ic;
+                               }
+
+                               elm_progressbar_horizontal_set(ic, EINA_TRUE);
+                               elm_progressbar_pulse(ic, EINA_TRUE);
+                       }
+               }
+       }
+
+       if (ic != NULL)
+               elm_object_part_content_set(item, "elm.swallow.progress", ic);
+
+}
+
+static void _set_text(Evas_Object *item, notification_h noti)
+{
+       char *title_text = NULL;
+       char *count_text = NULL;
+       char *content_text = NULL;
+       char *progress_text = NULL;
+       char *text_utf8 = NULL;
+       char *domain = NULL;
+       char *dir = NULL;
+       char *pkgname = NULL;
+       //      char *caller_pkgname = NULL;
+       int group_id = 0, priv_id = 0;
+       char buf[128] = { 0, };
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+       double size = 0.0;
+       double percentage = 0.0;
+       notification_ly_type_e layout = NOTIFICATION_LY_NONE ;
+#ifdef QP_SCREENREADER_ENABLE
+       Evas_Object *ao = NULL;
+       Eina_Strbuf *str_buf = NULL;
+#endif
+       Evas_Object *textblock = NULL;
+       int len_w = 0, num_line = 1, view_height = 0;
+       struct appdata *ad = quickpanel_get_app_data();
+       int ret;
+       qp_privacy_mode noti_privacy_mode = quickpanel_noti_util_get_noti_privacy_mode(noti);
+
+       if (!ad || !item || !noti) {
+               ERR("Invalid parameters: %p %p %p", ad, item, noti);
+               return;
+       }
+
+       /* Set text domain */
+       notification_get_text_domain(noti, &domain, &dir);
+       if (domain != NULL && dir != NULL) {
+               DBG("domain : %s dir : %s", domain, dir);
+               bindtextdomain(domain, dir);
+       }
+
+#ifdef QP_SCREENREADER_ENABLE
+       ao = quickpanel_accessibility_screen_reader_object_get(item, SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", item);
+       if (ao != NULL) {
+               str_buf = eina_strbuf_new();
+               elm_access_info_set(ao, ELM_ACCESS_TYPE, _("IDS_QP_BUTTON_NOTIFICATION"));
+       }
+#endif
+
+       /* Get pkgname & id */
+       ret = notification_get_pkgname(noti, &pkgname);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               ERR("Unable to get the pkgname");
+
+       ret = notification_get_id(noti, &group_id, &priv_id);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               ERR("Unable to get id");
+
+       ret = notification_get_type(noti, &type);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               ERR("Unable to get type");
+
+       ret = notification_get_size(noti, &size);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               ERR("Unable to get size");
+
+       ret = notification_get_progress(noti, &percentage);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               ERR("Unable to get progress");
+
+       ret = notification_get_layout(noti, &layout);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               ERR("Unable to get layout");
+
+       ret = notification_get_text(noti, NOTIFICATION_TEXT_TYPE_EVENT_COUNT, &count_text);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               ERR("Unable to get event_count");
+
+
+       DBG("percentage:%f size:%f", percentage, size);
+
+       if (noti_privacy_mode == QP_PRIVACY_MODE_HIDE_CONTENT)
+               title_text = quickpanel_noti_util_get_hidden_text(noti, NOTIFICATION_TEXT_TYPE_TITLE);
+
+       if (title_text == NULL)
+               title_text = quickpanel_noti_util_get_text(noti, NOTIFICATION_TEXT_TYPE_TITLE);
+
+       if (title_text != NULL) {
+               quickpanel_common_util_char_replace(title_text, _NEWLINE, _SPACE);
+               _set_text_to_part(item, "elm.text.title", title_text);
+#ifdef QP_SCREENREADER_ENABLE
+               _check_and_add_to_buffer(str_buf, title_text);
+#endif
+       }
+
+       if (noti_privacy_mode == QP_PRIVACY_MODE_HIDE_CONTENT)
+               content_text = quickpanel_noti_util_get_hidden_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT);
+       else
+               content_text = quickpanel_noti_util_get_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT);
+
+       if (content_text != NULL) {
+               if (layout == NOTIFICATION_LY_ONGOING_EVENT) {
+                       text_utf8 = elm_entry_utf8_to_markup(content_text);
+                       if (text_utf8 != NULL) {
+                               _set_text_to_part(item, "elm.text.content", text_utf8);
+                               free(text_utf8);
+                       } else {
+                               _set_text_to_part(item, "elm.text.content", content_text);
+                       }
+                       textblock = (Evas_Object *)edje_object_part_object_get(_EDJ(item), "elm.text.content");
+                       evas_object_textblock_size_native_get(textblock, &len_w, NULL);
+                       num_line = len_w / (LEN_UNIT_TEXTBLOCK * ad->scale);
+                       num_line = (len_w - (num_line * (LEN_UNIT_TEXTBLOCK * ad->scale))) > 0 ? num_line + 1 : num_line;
+                       if (num_line <= 1) {
+                               elm_object_signal_emit(item, "line1.set", "prog");
+                               view_height = QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT;
+                       } else /*if (num_line >= 2 && num_line < 3)*/ {
+                               elm_object_signal_emit(item, "line2.set", "prog");
+                               view_height = QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT;
+                       } /*else {
+                               elm_object_signal_emit(item, "line3.set", "prog");
+                               view_height = QP_THEME_LIST_ITEM_ONGOING_EVENT_LINE3_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT;
+                               }*/
+                       quickpanel_uic_initial_resize(item, view_height);
+#ifdef QP_SCREENREADER_ENABLE
+                       _check_and_add_to_buffer(str_buf, content_text);
+#endif
+               } else {
+                       quickpanel_common_util_char_replace(content_text, _NEWLINE, _SPACE);
+                       _set_text_to_part(item, "elm.text.content", content_text);
+#ifdef QP_SCREENREADER_ENABLE
+                       _check_and_add_to_buffer(str_buf, content_text);
+#endif
+               }
+       }
+
+       if (layout != NOTIFICATION_LY_ONGOING_EVENT) {
+               progress_text = _noti_get_progress(noti, buf,  sizeof(buf));
+               if (progress_text != NULL) {
+                       quickpanel_common_util_char_replace(progress_text, _NEWLINE, _SPACE);
+#ifdef QP_SCREENREADER_ENABLE
+                       _check_and_add_to_buffer(str_buf, progress_text);
+#endif
+               } else {
+                       _set_text_to_part(item, "elm.text.time", "");
+               }
+       } else {
+               const char *get_content;
+
+               get_content = elm_object_part_text_get(item, "elm.text.content");
+               if (get_content == NULL || strlen(get_content) == 0) {
+                       // if there is no content, move title to vertical center.
+                       elm_object_signal_emit(item, "title.move.center", "prog");
+               }
+       }
+
+       if (layout == NOTIFICATION_LY_ONGOING_PROGRESS && count_text != NULL) {
+               _set_text_to_part(item, "elm.text.count", count_text);
+               if (elm_object_part_text_get(item, "elm.text.count") != NULL) {
+                       elm_object_signal_emit(item, "content.short", "prog");
+                       elm_object_signal_emit(item, "count.show", "prog");
+               }
+       }
+
+#ifdef QP_SCREENREADER_ENABLE
+       if (ao != NULL && str_buf != NULL) {
+               elm_access_info_set(ao, ELM_ACCESS_INFO, eina_strbuf_string_get(str_buf));
+               eina_strbuf_free(str_buf);
+       }
+#endif
+}
+
+static Evas_Object *_create(notification_h noti, Evas_Object *parent)
+{
+       int view_height = 0;
+       Evas_Object *view = NULL;
+       const char *view_layout_group = NULL;
+       retif(parent == NULL, NULL, "Invalid parameter!");
+       retif(noti == NULL, NULL, "Invalid parameter!");
+
+       notification_ly_type_e layout = NOTIFICATION_LY_NOTI_EVENT_SINGLE;
+       notification_get_layout(noti, &layout);
+
+       if (layout == NOTIFICATION_LY_ONGOING_EVENT) {
+               view_layout_group = "quickpanel/listitem/event";
+               view_height = QP_THEME_LIST_ITEM_ONGOING_EVENT_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT;
+       } else if (layout == NOTIFICATION_LY_ONGOING_PROGRESS) {
+               view_layout_group = "quickpanel/listitem/progress";
+               view_height = QP_THEME_LIST_ITEM_ONGOING_PROGRESS_HEIGHT + QP_THEME_LIST_ITEM_SEPERATOR_HEIGHT;
+       }
+
+       view = elm_layout_add(parent);
+       if (view != NULL) {
+               elm_layout_file_set(view, util_get_res_file_path(DEFAULT_EDJ), view_layout_group);
+               evas_object_size_hint_weight_set(view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(view, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               quickpanel_uic_initial_resize(view, view_height);
+               evas_object_show(view);
+       } else {
+               ERR("failed to create ongoing notification view");
+       }
+
+       return view;
+}
+
+static void _update(noti_node_item *noti_node, notification_ly_type_e layout, Evas_Object *item)
+{
+       retif(item == NULL || noti_node == NULL, , "Invalid parameter!");
+
+       _set_progressbar(item, noti_node->noti);
+
+       if (quickpanel_noti_util_get_noti_privacy_mode(noti_node->noti) == QP_PRIVACY_MODE_HIDE_CONTENT)
+               quickpanel_noti_util_set_hidden_icon(item, noti_node->noti);
+       else
+               quickpanel_noti_util_set_icon(item, noti_node->noti);
+
+       _set_text(item, noti_node->noti);
+}
+
+Noti_View_H ongoing_noti_view_h = {
+       .name                   = "ongoing_noti_view",
+       .create                 = _create,
+       .update                 = _update,
+       .remove                 = NULL,
+};
diff --git a/src/notifications/noti_win.c b/src/notifications/noti_win.c
new file mode 100755 (executable)
index 0000000..17d5862
--- /dev/null
@@ -0,0 +1,305 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <efl_util.h>
+
+#ifndef __UNUSED__
+#define __UNUSED__ __attribute__((unused))
+#endif
+/* Using this macro to emphasize that some portion like stacking and
+   rotation handling are implemented for X based platform
+ */
+
+#include "common.h"
+#include "noti_win.h"
+#include "activenoti.h"
+
+struct Internal_Data {
+       Evas_Object *content;
+       Ecore_Event_Handler *rotation_event_handler;
+       Evas_Coord scr_w;
+       Evas_Coord scr_h;
+       Evas_Coord w;
+       Evas_Coord h;
+       int angle;
+       enum Noti_Orient orient;
+};
+
+#define NOTI_HEIGHT ELM_SCALE_SIZE(232)
+#define NOTI_START_Y ELM_SCALE_SIZE(36)
+
+#define E_DATA_KEY "E_DATA_KEY"
+#define E_DATA_BASE_RECT "E_DATA_BASE_RECT"
+
+static bool g_isLandscape = false;
+
+static void _show(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+       struct Internal_Data *wd = evas_object_data_get(obj, E_DATA_KEY);
+
+       if (wd != NULL && wd->content)
+               evas_object_show(wd->content);
+
+}
+
+static void _resized(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+       evas_object_show(obj);
+}
+
+static void _del(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+       struct Internal_Data *wd = evas_object_data_get(obj, E_DATA_KEY);
+
+       if (wd) {
+               if (wd->rotation_event_handler)
+                       ecore_event_handler_del(wd->rotation_event_handler);
+
+
+               free(wd);
+       }
+
+       evas_object_data_set(data, E_DATA_KEY, NULL);
+}
+
+static void _win_rotated(Evas_Object *obj)
+{
+       int angle = 0;
+       struct Internal_Data *wd =  evas_object_data_get(obj, E_DATA_KEY);
+
+       if (!wd)
+               return;
+
+
+       angle = elm_win_rotation_get(obj);
+       if (angle % 90)
+               return;
+
+
+       angle %= 360;
+       if (angle < 0)
+               angle += 360;
+
+
+       wd->angle = angle;
+
+       evas_object_resize(obj, wd->scr_w, wd->h);
+
+       switch (angle) {
+       case 0:
+       case 180:
+               quickpanel_activenoti_set_display_mode(false);
+               g_isLandscape =  false;
+
+               evas_object_move(obj, 0, 0);
+               break;
+       case 90:
+               quickpanel_activenoti_set_display_mode(true);
+               g_isLandscape =  true;
+
+               evas_object_move(obj, 0, ((wd->scr_h - wd->scr_w) /2));
+               break;
+       case 270:
+               quickpanel_activenoti_set_display_mode(true);
+               g_isLandscape =  true;
+
+               evas_object_move(obj, wd->scr_w - wd->h, ((wd->scr_h - wd->scr_w) /2));
+               break;
+       default:
+               ERR("cannot reach here");
+       }
+
+       evas_object_data_set(obj, E_DATA_KEY, wd);
+}
+
+static void _ui_rotation_wm_cb(void *data, Evas_Object *obj, void *event)
+{
+       int angle = 0;
+       angle = elm_win_rotation_get((Evas_Object *)obj);
+
+       DBG("ACTIVENOTI ROTATE:%d", angle);
+
+       _win_rotated(obj);
+}
+
+HAPI Evas_Object *quickpanel_noti_win_add(Evas_Object *parent)
+{
+       Evas_Object *win;
+       struct Internal_Data *wd;
+       Evas_Coord w = 0, h = 0;
+       Evas *e = NULL;
+       Ecore_Evas *ee = NULL;
+
+       win = elm_win_add(parent, "noti_win", ELM_WIN_NOTIFICATION);
+       if (!win)
+               return NULL;
+
+
+       e = evas_object_evas_get(win);
+       if (!e) {
+               evas_object_del(win);
+               return NULL;
+       }
+
+       ee = ecore_evas_ecore_evas_get(e);
+       if (!ee) {
+               evas_object_del(win);
+               return NULL;
+       }
+
+       ecore_evas_name_class_set(ee, "APP_POPUP", "APP_POPUP");
+
+       elm_win_alpha_set(win, EINA_FALSE);
+       elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_HIDE);
+       elm_win_title_set(win, "noti_win");
+       elm_win_borderless_set(win, EINA_TRUE);
+       elm_win_autodel_set(win, EINA_TRUE);
+       evas_object_size_hint_weight_set(win, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(win, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       efl_util_set_notification_window_level(win, EFL_UTIL_NOTIFICATION_LEVEL_MEDIUM);
+       elm_win_prop_focus_skip_set(win, EINA_TRUE);
+       elm_win_aux_hint_add(win, "wm.policy.win.user.geometry", "1");
+
+       if (elm_win_wm_rotation_supported_get(win)) {
+               int rots[4] = { 0, 90, 180, 270 };
+               elm_win_wm_rotation_available_rotations_set(win, rots, 4);
+       }
+       evas_object_smart_callback_add(win, "wm,rotation,changed", _ui_rotation_wm_cb, NULL);
+
+       wd = (struct Internal_Data *) calloc(1, sizeof(struct Internal_Data));
+       if (!wd) {
+               if (win)
+                       evas_object_del(win);
+
+
+               return NULL;
+       }
+       evas_object_data_set(win, E_DATA_KEY, wd);
+       wd->angle = 0;
+       wd->orient = NOTI_ORIENT_TOP;
+       evas_object_move(win, 0, 0);
+       elm_win_screen_size_get(win, NULL, NULL, &w, &h);
+
+       wd->scr_w = w;
+       wd->scr_h = h;
+       wd->w = w;
+       wd->h = NOTI_HEIGHT;
+
+       evas_object_resize(win, w, wd->h);
+       evas_object_event_callback_add(win, EVAS_CALLBACK_SHOW, _show, NULL);
+       evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _del, NULL);
+       evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, _resized, NULL);
+
+       return win;
+}
+
+HAPI void quickpanel_noti_win_content_set(Evas_Object *obj, Evas_Object *content)
+{
+       struct Internal_Data *wd;
+
+       if (!obj)
+               return;
+
+
+       wd = evas_object_data_get(obj, E_DATA_KEY);
+       if (!wd)
+               return;
+
+
+       if (wd->content && content != NULL) {
+               evas_object_del(wd->content);
+               wd->content = NULL;
+       }
+
+       wd->content = content;
+
+       if (!content)
+               return;
+
+
+       evas_object_size_hint_weight_set(content, EVAS_HINT_EXPAND,     EVAS_HINT_EXPAND);
+       evas_object_resize(obj, wd->w, wd->h);
+       elm_win_resize_object_add(obj, content);
+}
+
+
+HAPI void quickpanel_noti_win_resize_height(Evas_Object *obj, enum noti_layout_type type, int entry_extended_size, bool force)
+{
+       struct Internal_Data *wd;
+
+       if (!obj)
+               return;
+
+
+       wd = evas_object_data_get(obj, E_DATA_KEY);
+       if (!wd)
+               return;
+
+
+       DBG("Get WINDOW internal data : width %d scr_w : %d height : %d scr_h : %d angle %d", wd->w, wd->scr_w, wd->h, wd->scr_h, wd->angle);
+       if (g_isLandscape && !force)
+               return;
+
+
+       wd->h =  NOTI_HEIGHT + entry_extended_size;
+
+       evas_object_data_set(obj, E_DATA_KEY, wd);
+       DBG("Set WINDOW internal data : width %d scr_w : %d height : %d scr_h : %d angle %d", wd->w, wd->scr_w, wd->h, wd->scr_h, wd->angle);
+
+       evas_object_resize(obj, 0, 0);
+       evas_object_resize(obj, wd->scr_w, wd->h);
+       switch (wd->angle) {
+       case 0:
+       case 180:
+               evas_object_move(obj, 0, 0);
+               break;
+       case 90:
+               evas_object_move(obj, 0, ((wd->scr_h - wd->scr_w) /2));
+               break;
+       case 270:
+               evas_object_move(obj, wd->scr_w - wd->h, ((wd->scr_h - wd->scr_w) /2));
+               break;
+       default:
+               ERR("cannot reach here");
+       }
+}
+
+HAPI void quickpanel_noti_win_orient_set(Evas_Object *obj, enum Noti_Orient orient)
+{
+       struct Internal_Data *wd = evas_object_data_get(obj, E_DATA_KEY);
+
+       if (!wd)
+               return;
+
+
+       if (orient >= NOTI_ORIENT_LAST)
+               return;
+
+
+       switch (orient) {
+       case NOTI_ORIENT_BOTTOM:
+               evas_object_move(obj, 0, wd->scr_h - wd->h);
+               wd->orient = NOTI_ORIENT_BOTTOM;
+               break;
+       case NOTI_ORIENT_TOP:
+       default:
+               evas_object_move(obj, 0, NOTI_START_Y);
+               wd->orient = NOTI_ORIENT_TOP;
+               break;
+       }
+}
diff --git a/src/page/page_base.c b/src/page/page_base.c
new file mode 100755 (executable)
index 0000000..73d63ba
--- /dev/null
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <stdbool.h>
+#include <glib.h>
+
+#include <vconf.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <notification.h>
+#include <system_settings.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "common_uic.h"
+#include "pager.h"
+#include "pager_common.h"
+#include "list_util.h"
+#include "noti_node.h"
+#include "vi_manager.h"
+#include "setting_utils.h"
+#include "settings.h"
+#include "settings_view_featured.h"
+#include "noti.h"
+#include "page_base.h"
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+#include "emergency_mode.h"
+#endif
+
+#define FICKUP_TIME_LIMIT 150
+#define FICKUP_DISTANCE_LIMIT 160
+
+static void _mapbuf_enable_set(Eina_Bool is_enable);
+static void _content_resize(int width, int height, const char *signal);
+static int _up_cb(void *event_info, void *data);
+static int _down_cb(void *event_info, void *data);
+static int _scroll_start_cb(void *event_info, void *data);
+static int _scroll_done_cb(void *event_info, void *data);
+static int _page_changed_cb(void *event_info, void *data);
+
+static struct info {
+       Evas_Object *mapbuf;
+       Evas_Object *view;
+       Evas_Object *view_scroller;
+       Evas_Object *view_box;
+
+       int flick_press_x;
+       int flick_press_y;
+       int flick_available;
+       int flick_time;
+} s_info = {
+       .mapbuf = NULL,
+       .view = NULL,
+       .view_scroller = NULL,
+       .view_box = NULL,
+
+       .flick_press_x = 0,
+       .flick_press_y = 0,
+       .flick_available = 0,
+       .flick_time = 0,
+};
+
+static QP_Page_Handler page_handler  = {
+       .status = 0,
+       .name = NULL,
+       /* func */
+       .mapbuf_enable_set = _mapbuf_enable_set,
+       .content_resize = _content_resize,
+       .down_cb = _down_cb,
+       .up_cb = _up_cb,
+       .scroll_start_cb = _scroll_start_cb,
+       .scroll_done_cb = _scroll_done_cb,
+       .page_changed_cb = _page_changed_cb,
+};
+
+static void _mapbuf_enable_set(Eina_Bool is_enable)
+{
+       Evas_Coord y;
+
+       if (s_info.mapbuf != NULL)
+               elm_mapbuf_enabled_set(s_info.mapbuf, is_enable);
+
+
+       if (is_enable) {
+               evas_object_geometry_get(s_info.view_scroller, NULL, &y, NULL, NULL);
+               evas_object_move(s_info.view, 0, y);
+       }
+}
+
+static void _content_resize(int width, int height, const char *signal)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid parameter");
+
+       if (s_info.view != NULL) {
+               elm_object_signal_emit(s_info.view, signal, "prog");
+               evas_object_size_hint_min_set(s_info.view, width, height);
+       }
+}
+
+static void _flick_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       int limit_h = 0;
+       int limit_partial_h = 0;
+       int limit_partial_w = 0;
+       Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info;
+       retif(ev == NULL, , "event_info is NULL");
+
+       s_info.flick_press_x = ev->canvas.x;
+       s_info.flick_press_y = ev->canvas.y;
+       s_info.flick_time = ev->timestamp;
+
+       quickpanel_noti_get_geometry(&limit_h, &limit_partial_h, &limit_partial_w);
+
+       if (s_info.flick_press_y > limit_h) {
+               s_info.flick_available = 1;
+       } else {
+               if (s_info.flick_press_x > limit_partial_w && s_info.flick_press_y > limit_partial_h)
+                       s_info.flick_available = 1;
+               else
+                       s_info.flick_available = 0;
+
+       }
+}
+
+static void  _flick_mouse_move_cb(void* data, Evas* e, Evas_Object* obj, void* event_info)
+{
+       int delta_y = 0;
+       Evas_Event_Mouse_Move* ev = event_info;
+       retif(ev == NULL, , "event_info is NULL");
+
+       if (s_info.flick_available == 0)
+               return;
+
+       if (ev->cur.output.y > ev->prev.output.y) {
+               s_info.flick_available = 0;
+               return;
+       }
+
+       if (abs(ev->cur.output.x - ev->prev.output.x) > 40) {
+               s_info.flick_available = 0;
+               return;
+       }
+
+       if (ev->timestamp - s_info.flick_time > FICKUP_TIME_LIMIT) {
+               s_info.flick_available = 0;
+               return;
+       }
+
+       delta_y = s_info.flick_press_y - ev->cur.output.y;
+
+       if (delta_y > FICKUP_DISTANCE_LIMIT) {
+               ERR("closed by flick up base area");
+               quickpanel_uic_close_quickpanel(false, 0);
+       }
+}
+
+static int _up_cb(void *event_info, void *data)
+{
+       quickpanel_page_scroll_hold_set(EINA_TRUE);
+       quickpanel_page_scroll_freeze_set(EINA_FALSE);
+
+       return QP_OK;
+}
+
+static int _down_cb(void *event_info, void *data)
+{
+       int x = 0, y = 0;
+       static int settings_y = -1, settings_h = -1;
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+       if (quickpanel_emergency_mode_is_on())
+               return QP_OK;
+
+#endif
+
+       if (settings_y == -1 || settings_h == -1) {
+               Evas_Object *obj_settings = NULL;
+               struct appdata *ad = quickpanel_get_app_data();
+               if (ad != NULL && ad->ly != NULL) {
+                       obj_settings = quickpanel_setting_box_get(ad->ly);
+                       if (obj_settings != NULL)
+                               evas_object_geometry_get(obj_settings, NULL, &settings_y, NULL, &settings_h);
+
+               }
+       }
+
+       quickpanel_page_get_touched_pos(&x, &y);
+
+       if (y >= settings_y && y <= settings_y + settings_h) {
+               if (quickpanel_settings_is_in_left_edge() == EINA_TRUE)
+                       quickpanel_page_scroll_hold_set(EINA_FALSE);
+
+       } else {
+               quickpanel_page_scroll_freeze_set(EINA_TRUE);
+       }
+
+       return QP_OK;
+}
+
+static int _scroll_start_cb(void *event_info, void *data)
+{
+       quickpanel_vim_set_state_suspend();
+
+       return QP_OK;
+}
+
+static int _scroll_done_cb(void *event_info, void *data)
+{
+       quickpanel_vim_set_state_ready();
+
+       return QP_OK;
+}
+
+static int _page_changed_cb(void *event_info, void *data)
+{
+       quickpanel_setting_view_featured_initial_focus_set();
+
+       return QP_OK;
+}
+
+HAPI Evas_Object *quickpanel_page_base_create(Evas_Object *parent, void *data)
+{
+       Evas_Object *mapbuf = NULL;
+       Evas_Object *view = NULL;
+
+       retif(parent == NULL, NULL, "invalid parameter");
+
+       if (s_info.view != NULL)
+               return s_info.view;
+
+
+       mapbuf = elm_mapbuf_add(parent);
+       elm_mapbuf_enabled_set(mapbuf, EINA_FALSE);
+       elm_mapbuf_smooth_set(mapbuf, EINA_FALSE);
+
+       evas_object_size_hint_weight_set(mapbuf, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(mapbuf, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       view = quickpanel_uic_load_edj(mapbuf, util_get_res_file_path(DEFAULT_EDJ), "quickpanel/base", 0);
+       retif(view == NULL, NULL, "failed to load base layout");
+
+       Evas_Object *scroller = elm_scroller_add(parent);
+       retif(!scroller, NULL, "fail to add scroller");
+       //elm_object_style_set(scroller, "default");
+       elm_object_style_set(scroller, "bg/default");
+       elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_fill_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(scroller);
+
+       Evas_Object *box = elm_box_add(scroller);
+       if (!box) {
+               ERR("fail to add box");
+               if (scroller != NULL) {
+                       evas_object_del(scroller);
+                       scroller = NULL;
+               }
+               return NULL;
+       }
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0);
+       elm_box_horizontal_set(box, EINA_FALSE);
+
+       elm_object_content_set(scroller, box);
+       elm_object_part_content_set(view, "qp.base.list.swallow", scroller);
+       evas_object_show(scroller);
+
+       Evas_Object *bg_touch = elm_bg_add(view);
+       if (bg_touch != NULL) {
+               evas_object_color_set(bg_touch, 232, 240, 244, 250);
+               //evas_object_color_set(bg_touch, 0, 0, 0, 0);
+               evas_object_event_callback_add(bg_touch,
+                               EVAS_CALLBACK_MOUSE_DOWN, _flick_mouse_down_cb, NULL);
+               evas_object_event_callback_add(bg_touch,
+                               EVAS_CALLBACK_MOUSE_MOVE, _flick_mouse_move_cb, NULL);
+               elm_object_part_content_set(view, "background.touch", bg_touch);
+       }
+
+       quickpanel_page_handler_set(mapbuf, &page_handler);
+
+       elm_object_content_set(mapbuf, view);
+       evas_object_show(mapbuf);
+
+
+       s_info.mapbuf = mapbuf;
+       s_info.view = view;
+       s_info.view_scroller = scroller;
+       s_info.view_box = box;
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+       if (quickpanel_emergency_mode_is_on())
+               quickpanel_page_scroll_freeze_set(EINA_TRUE);
+
+#endif
+
+       quickpanel_page_secured_lock_text_set();
+
+       return s_info.mapbuf;
+}
+
+HAPI Evas_Object *quickpanel_page_base_view_get(const char *view_name)
+{
+       retif(view_name == NULL, NULL, "invalid parameter");
+
+       if (strcmp(view_name, "LAYOUT") == 0)
+               return s_info.view;
+       else if (strcmp(view_name, "SCROLLER") == 0)
+               return s_info.view_scroller;
+       else if (strcmp(view_name, "BOX") == 0)
+               return s_info.view_box;
+
+
+       return NULL;
+}
+
+HAPI void quickpanel_page_secured_lock_set(qp_secured_lock_state_e state)
+{
+       Evas_Object *view = s_info.view;
+
+       switch (state) {
+       case QP_SECURED_LOCK_ON:
+               elm_object_signal_emit(view, "secured_lock.exec", "quickpanel.prog");
+               break;
+       case QP_SECURED_LOCK_OFF:
+       default:
+               elm_object_signal_emit(view, "secured_lock.exit", "quickpanel.prog");
+               break;
+       }
+
+}
+
+HAPI void quickpanel_page_secured_lock_text_set(void)
+{
+       elm_object_part_text_set(s_info.view, "qp.base.list.secured.text", _("IDS_QP_NPBODY_UNLOCK_SCREEN_TO_VIEW_CONTENT"));
+}
diff --git a/src/page/pager.c b/src/page/pager.c
new file mode 100755 (executable)
index 0000000..bd1e12b
--- /dev/null
@@ -0,0 +1,504 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "pager.h"
+#include "pager_common.h"
+#include "quickpanel-ui.h"
+#include "quickpanel_def.h"
+
+static int _init(void *data);
+static void _init_job_cb(void *data);
+static int _fini(void *data);
+static int _resume(void *data);
+static void _opened(void *data);
+static void _closed(void *data);
+static void _refresh(void *data);
+
+
+typedef enum _qp_pager_state_type {
+       PAGER_STATE_NOT_READY = 0,
+       PAGER_STATE_IDLE,
+       PAGER_STATE_WILL_SCROLL,
+       PAGER_STATE_SCROLLING,
+       PAGER_STATE_FINISHED_SCROLLING,
+} qp_pager_state_type;
+
+QP_Module pager = {
+       .name = "pager",
+       .init = _init,
+       .init_job_cb = _init_job_cb,
+       .fini = _fini,
+       .resume = _resume,
+       .qp_opened = _opened,
+       .qp_closed = _closed,
+       .refresh = _refresh,
+};
+
+static struct info {
+       qp_pager_state_type state;
+       int last_page;
+       int is_in_edge;
+
+       Evas_Object *view_scroller;
+       Evas_Object *view_box;
+
+       Ecore_Event_Handler *hdl_move;
+       Ecore_Event_Handler *hdl_up;
+       Ecore_Event_Handler *hdl_down;
+
+       Ecore_Timer *timer_scroll_adj;
+
+       int scroll_start_from;
+} s_info = {
+       .state = PAGER_STATE_NOT_READY,
+       .last_page = PAGE_IDX_MAIN,
+       .is_in_edge = 0,
+
+       .view_scroller = NULL,
+       .view_box = NULL,
+
+       .hdl_move = NULL,
+       .hdl_up = NULL,
+       .hdl_down = NULL,
+
+       .timer_scroll_adj = NULL,
+
+       .scroll_start_from = -1,
+};
+
+static inline void _set_state(qp_pager_state_type state)
+{
+       s_info.state = state;
+}
+
+static inline qp_pager_state_type _get_state(void)
+{
+       return s_info.state;
+}
+
+static inline void _page_show(int page_index)
+{
+       elm_scroller_page_show(s_info.view_scroller, page_index, 0);
+       s_info.last_page = page_index;
+}
+
+static Eina_Bool _page_adjust_timer_cb(void *data)
+{
+       int index = 0;
+
+       if (s_info.timer_scroll_adj != NULL) {
+               ecore_timer_del(s_info.timer_scroll_adj);
+               s_info.timer_scroll_adj = NULL;
+       }
+
+       elm_scroller_current_page_get(s_info.view_scroller, &index, NULL);
+       elm_scroller_page_bring_in(s_info.view_scroller, index, 0);
+       s_info.last_page = index;
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static inline void _page_adjust(int is_use_timer)
+{
+       if (s_info.timer_scroll_adj != NULL) {
+               ecore_timer_del(s_info.timer_scroll_adj);
+               s_info.timer_scroll_adj = NULL;
+       }
+
+       if (is_use_timer)
+               s_info.timer_scroll_adj = ecore_timer_add(0.1, _page_adjust_timer_cb, NULL);
+       else
+               _page_adjust_timer_cb(NULL);
+
+}
+
+static inline int _current_page_index_get(void)
+{
+       int index = 0;
+
+       elm_scroller_current_page_get(s_info.view_scroller, &index, NULL);
+
+       return index;
+}
+
+static inline Evas_Object *_current_page_get(void)
+{
+       int index = 0;
+       int list_cnt = 0;
+       Eina_List *list = NULL;
+       static int last_page = -1;
+       Evas_Object *obj = NULL;
+
+       elm_scroller_current_page_get(s_info.view_scroller, &index, NULL);
+
+       if (last_page != index) {
+               DBG("current selected page:%d", index);
+               last_page = index;
+       }
+
+       list = elm_box_children_get(s_info.view_box);
+       if (list != NULL) {
+               list_cnt = eina_list_count(list);
+
+               if (index < list_cnt)
+                       obj = (Evas_Object *)eina_list_nth(list, index);
+
+
+               eina_list_free(list);
+       }
+
+       return obj;
+}
+
+static inline void _page_resize(Evas_Object *box, int width, int height, const char *signal)
+{
+       Eina_List *list = NULL;
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *item = NULL;
+       QP_Page_Handler *page_handler = NULL;
+       retif(box == NULL, , "invalid parameter");
+
+       list = elm_box_children_get(box);
+       retif(list == NULL, , "empty box");
+
+       EINA_LIST_FOREACH_SAFE(list, l, l_next, item) {
+               page_handler = quickpanel_page_handler_get(item);
+
+               if (page_handler != NULL && page_handler->content_resize != NULL)
+                       page_handler->content_resize(width, height, signal);
+
+       }
+
+       eina_list_free(list);
+}
+
+static inline void _page_rotation(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (ad->angle == 90 || ad->angle == 270)
+               _page_resize(s_info.view_box, ad->win_height, ad->win_width - ELM_SCALE_SIZE((QP_DATE_H + QP_HANDLE_H)), "landscape");
+       else
+               _page_resize(s_info.view_box, ad->win_width, ad->win_height - ELM_SCALE_SIZE((QP_DATE_H + QP_HANDLE_H)), "portrait");
+
+}
+
+static Eina_Bool _up_cb(void *data, int type, void *event)
+{
+       Evas_Object *page = _current_page_get();
+       QP_Page_Handler *page_handler = NULL;
+       retif(page == NULL, EINA_FALSE, "Invalid parameter!");
+
+       if (_get_state() == PAGER_STATE_WILL_SCROLL) {
+               _set_state(PAGER_STATE_SCROLLING);
+               _page_adjust(1);
+       }
+
+       page_handler = quickpanel_page_handler_get(page);
+       retif(page_handler == NULL, EINA_FALSE, "no page handler found");
+
+       if (page_handler->up_cb != NULL)
+               page_handler->up_cb(event, NULL);
+
+
+       if (_get_state() == PAGER_STATE_SCROLLING)
+               _page_adjust(1);
+
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool _down_cb(void *data, int type, void *event)
+{
+       Evas_Object *page = _current_page_get();
+       QP_Page_Handler *page_handler = NULL;
+       retif(page == NULL, EINA_FALSE, "Invalid parameter!");
+
+       page_handler = quickpanel_page_handler_get(page);
+       retif(page_handler == NULL, EINA_FALSE, "no page handler found");
+
+       if (page_handler->down_cb != NULL)
+               page_handler->down_cb(event, NULL);
+
+
+       return EINA_TRUE;
+}
+
+static void _scroller_anim_start_cb(void *data, Evas_Object *scroller, void *event_info)
+{
+       Evas_Object *page = _current_page_get();
+       QP_Page_Handler *page_handler = NULL;
+       retif(page == NULL, , "Invalid parameter!");
+
+       s_info.scroll_start_from = _current_page_index_get();
+
+       if (_get_state() == PAGER_STATE_IDLE) {
+               _set_state(PAGER_STATE_WILL_SCROLL);
+
+               page_handler = quickpanel_page_handler_get(page);
+               retif(page_handler == NULL, , "no page handler found");
+
+               if (page_handler->scroll_start_cb != NULL)
+                       page_handler->scroll_start_cb(event_info, NULL);
+
+       }
+}
+
+static void _scroller_anim_stop_cb(void *data, Evas_Object *scroller, void *event_info)
+{
+       Evas_Object *page = _current_page_get();
+       QP_Page_Handler *page_handler = NULL;
+       retif(page == NULL, , "Invalid parameter!");
+
+       if (s_info.is_in_edge == 1 || _get_state() == PAGER_STATE_FINISHED_SCROLLING) {
+               _set_state(PAGER_STATE_IDLE);
+
+               page_handler = quickpanel_page_handler_get(page);
+               retif(page_handler == NULL, , "no page handler found");
+
+               if (page_handler->scroll_done_cb != NULL)
+                       page_handler->scroll_done_cb(event_info, NULL);
+
+
+       }
+}
+
+static void _scroller_edge_cb(void *data, Evas_Object *scroller, void *event_info)
+{
+       if (_get_state() == PAGER_STATE_WILL_SCROLL
+                       || _get_state() == PAGER_STATE_SCROLLING) {
+               _set_state(PAGER_STATE_FINISHED_SCROLLING);
+               s_info.is_in_edge = 1;
+               _page_adjust(0);
+       }
+}
+
+static void _scroller_scroll_cb(void *data, Evas_Object *scroller, void *event_info)
+{
+       s_info.is_in_edge = 0;
+}
+
+/*****************************************************************************
+ *
+ * Util functions
+ *
+ *****************************************************************************/
+static int _init(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+       retif(s_info.view_scroller == NULL, QP_FAIL, "Invalid parameter!");
+
+       s_info.hdl_up = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, _up_cb
+                       , s_info.view_scroller);
+       s_info.hdl_down = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _down_cb
+                       , s_info.view_scroller);
+
+       evas_object_smart_callback_add(s_info.view_scroller, "scroll,drag,start",
+                       _scroller_anim_start_cb, s_info.view_scroller);
+       evas_object_smart_callback_add(s_info.view_scroller, "scroll,anim,stop",
+                       _scroller_anim_stop_cb, s_info.view_scroller);
+       evas_object_smart_callback_add(s_info.view_scroller, "scroll,drag,stop",
+                       _scroller_anim_stop_cb, s_info.view_scroller);
+       evas_object_smart_callback_add(s_info.view_scroller, "scroll",
+                       _scroller_scroll_cb, s_info.view_scroller);
+
+       evas_object_smart_callback_add(s_info.view_scroller, "edge,left",
+                       _scroller_edge_cb, s_info.view_scroller);
+       evas_object_smart_callback_add(s_info.view_scroller, "edge,right",
+                       _scroller_edge_cb, s_info.view_scroller);
+
+       _set_state(PAGER_STATE_IDLE);
+
+       return QP_OK;
+}
+
+static void _init_job_cb(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       retif(ad == NULL, , "Invalid parameter!");
+       retif(s_info.view_scroller == NULL, , "Invalid parameter!");
+
+       _page_rotation(ad);
+
+       _page_show(PAGE_IDX_MAIN);
+       evas_object_show(s_info.view_scroller);
+}
+
+static int _fini(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       if (s_info.hdl_up != NULL)
+               ecore_event_handler_del(s_info.hdl_up);
+
+       if (s_info.hdl_down != NULL)
+               ecore_event_handler_del(s_info.hdl_down);
+
+
+       return QP_OK;
+}
+
+static int _resume(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       return QP_OK;
+}
+
+static void _opened(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+
+       quickpanel_page_editing_icon_visible_status_update();
+}
+
+static void _closed(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+       retif(s_info.view_scroller == NULL, , "Invalid parameter!");
+
+       _page_show(PAGE_IDX_MAIN);
+
+       quickpanel_page_editing_icon_visible_status_update();
+}
+
+static void _refresh(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+       retif(s_info.view_box == NULL, , "Invalid parameter!");
+       retif(s_info.view_scroller == NULL, , "Invalid parameter!");
+
+       _page_rotation(ad);
+}
+
+
+static void _scroller_resized_cb(void *data, Evas * e,
+               Evas_Object * obj, void *event_info)
+{
+       _page_show(PAGE_IDX_MAIN);
+       evas_object_event_callback_del(s_info.view_scroller, EVAS_CALLBACK_RESIZE, _scroller_resized_cb);
+}
+
+
+HAPI Evas_Object *quickpanel_pager_new(Evas_Object *parent, void *data)
+{
+       Evas_Object *box = NULL;
+       Evas_Object *scroller = NULL;
+
+       retif(parent == NULL, NULL, "failed to memory allocation");
+
+       if (s_info.view_scroller != NULL && s_info.view_box != NULL)
+               return s_info.view_scroller;
+
+
+       scroller = elm_scroller_add(parent);
+       retif(!scroller, NULL, "fail to add scroller");
+       elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
+       elm_scroller_propagate_events_set(scroller, EINA_FALSE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_fill_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_scroller_page_relative_set(scroller, 1.0, 0.0);
+
+       box = elm_box_add(scroller);
+       if (!box) {
+               ERR("fail to add box");
+               if (scroller != NULL) {
+                       evas_object_del(scroller);
+                       scroller = NULL;
+               }
+               return NULL;
+       }
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_fill_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_box_horizontal_set(box, EINA_TRUE);
+       evas_object_show(box);
+
+       elm_object_content_set(scroller, box);
+
+       s_info.view_scroller = scroller;
+       s_info.view_box = box;
+
+       evas_object_event_callback_add(s_info.view_scroller, EVAS_CALLBACK_RESIZE, _scroller_resized_cb, NULL);
+
+       return scroller;
+}
+
+HAPI void quickpanel_pager_destroy(void)
+{
+       if (s_info.view_box != NULL) {
+               elm_box_unpack_all(s_info.view_box);
+               evas_object_del(s_info.view_box);
+               s_info.view_box = NULL;
+       }
+       if (s_info.view_scroller != NULL) {
+               evas_object_del(s_info.view_scroller);
+               s_info.view_scroller = NULL;
+       }
+}
+
+HAPI Evas_Object *quickpanel_pager_view_get(const char *view_name)
+{
+       retif(view_name == NULL, NULL, "invalid parameter");
+
+       if (strcmp(view_name, "SCROLLER") == 0)
+               return s_info.view_scroller;
+       else if (strcmp(view_name, "BOX") == 0)
+               return s_info.view_box;
+
+
+       return NULL;
+}
+
+HAPI int quickpanel_pager_current_page_get(void)
+{
+       int index = 0;
+
+       elm_scroller_current_page_get(s_info.view_scroller, &index, NULL);
+
+       return index;
+}
+
+HAPI void quickpanel_pager_page_set(int page_index, int need_resize)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid parameter");
+
+       if (need_resize)
+               _page_rotation(ad);
+
+
+       _page_show(page_index);
+
+       evas_object_show(s_info.view_scroller);
+}
+
diff --git a/src/page/pager_common.c b/src/page/pager_common.c
new file mode 100755 (executable)
index 0000000..8e364f7
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "pager.h"
+#include "datetime.h"
+
+#define EVAS_DATA_PAGE_HANDLER "page_handler"
+
+static inline void _scroll_hold(Evas_Object *viewer)
+{
+       int hold_count = 0;
+       retif(viewer == NULL, , "Invalid parameter!");
+
+       hold_count = elm_object_scroll_hold_get(viewer);
+
+       if (hold_count <= 0)
+               elm_object_scroll_hold_push(viewer);
+
+}
+
+static inline void _scroll_unhold(Evas_Object *viewer)
+{
+       int i = 0, hold_count = 0;
+       retif(viewer == NULL, , "Invalid parameter!");
+
+       hold_count = elm_object_scroll_hold_get(viewer);
+
+       for (i = 0 ; i < hold_count; i++)
+               elm_object_scroll_hold_pop(viewer);
+
+}
+
+static inline void _scroll_freeze(Evas_Object *viewer)
+{
+       int freezed_count = 0;
+       retif(viewer == NULL, , "Invalid parameter!");
+
+       freezed_count = elm_object_scroll_freeze_get(viewer);
+
+       if (freezed_count <= 0)
+               elm_object_scroll_freeze_push(viewer);
+
+}
+
+static inline void _scroll_unfreeze(Evas_Object *viewer)
+{
+       int i = 0, freezed_count = 0;
+       retif(viewer == NULL, , "Invalid parameter!");
+
+       freezed_count = elm_object_scroll_freeze_get(viewer);
+
+       for (i = 0 ; i < freezed_count; i++)
+               elm_object_scroll_freeze_pop(viewer);
+
+}
+
+HAPI void quickpanel_page_handler_set(Evas_Object *page, QP_Page_Handler *handler)
+{
+       retif(page == NULL, , "invalid parameter");
+
+       evas_object_data_set(page, EVAS_DATA_PAGE_HANDLER, handler);
+}
+
+HAPI QP_Page_Handler *quickpanel_page_handler_get(Evas_Object *page)
+{
+       retif(page == NULL, NULL, "invalid parameter");
+
+       return evas_object_data_get(page, EVAS_DATA_PAGE_HANDLER);
+}
+
+HAPI void quickpanel_page_scroll_freeze_set(Eina_Bool is_freeze)
+{
+       Evas_Object *pager_scroller = quickpanel_pager_view_get("SCROLLER");
+       retif(pager_scroller == NULL, , "pager null");
+
+       if (is_freeze)
+               _scroll_freeze(pager_scroller);
+       else
+               _scroll_unfreeze(pager_scroller);
+
+}
+
+HAPI void quickpanel_page_scroll_hold_set(Eina_Bool is_freeze)
+{
+       Evas_Object *pager_scroller = quickpanel_pager_view_get("SCROLLER");
+       retif(pager_scroller == NULL, , "pager null");
+
+       if (is_freeze)
+               _scroll_hold(pager_scroller);
+       else
+               _scroll_unhold(pager_scroller);
+
+}
+
+HAPI void quickpanel_page_get_recoordinated_pos(int local_x, int local_y, int *x, int *y)
+{
+       int rot_x = 0;
+       int rot_y = 0;
+       int width = 0;
+       int height = 0;
+       retif(x == NULL && y == NULL, , "invalid parameter");
+
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid parameter");
+
+       elm_win_screen_size_get(ad->win, NULL, NULL, &width, &height);
+
+       switch (ad->angle) {
+       case 0:
+               rot_x = local_x;
+               rot_y = local_y;
+               break;
+       case 90:
+               rot_x = height - local_y;
+               rot_y = local_x;
+               break;
+       case 180:
+               rot_x = width - local_x;
+               rot_y = height - local_y;
+               break;
+       case 270:
+               rot_x = local_y;
+               rot_y = width - local_x;
+               break;
+       default:
+               break;
+       }
+
+       if (x != NULL)
+               *x = rot_x;
+
+
+       if (y != NULL)
+               *y = rot_y;
+
+}
+
+HAPI void quickpanel_page_get_touched_pos(int *x, int *y)
+{
+       int rot_x = 0;
+       int rot_y = 0;
+       int local_x = 0;
+       int local_y = 0;
+       retif(x == NULL && y == NULL, , "invalid parameter");
+
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid parameter");
+
+#if defined(WINSYS_X11)
+       ecore_x_pointer_last_xy_get(&local_x, &local_y);
+#endif
+
+       quickpanel_page_get_recoordinated_pos(local_x, local_y, &rot_x, &rot_y);
+
+       if (x != NULL)
+               *x = rot_x;
+
+
+       if (y != NULL)
+               *y = rot_y;
+
+}
+
+HAPI void quickpanel_page_editing_icon_visible_status_update(void)
+{
+       int is_visible = 0;
+       struct appdata *ad;
+
+       ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid parameter");
+
+       if (quickpanel_pager_current_page_get() == PAGE_IDX_EDITING)
+               is_visible = 1;
+       else
+               is_visible = 0;
+
+
+       quickpanel_datetime_editing_icon_visibility_set(is_visible);
+}
diff --git a/src/preference.c b/src/preference.c
new file mode 100755 (executable)
index 0000000..7d51eb8
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <app_preference.h>
+#include <Elementary.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <app_common.h>
+
+#include "preference.h"
+#include "common.h"
+#include "quickpanel-ui.h"
+
+
+static const char *_default_preference_get(const char *key)
+{
+       retif(key == NULL, NULL, "invalid parameter");
+
+       if (strcmp(key, PREF_BRIGHTNESS) == 0)
+               return "OFF";
+       else if (strcmp(key, PREF_QUICKSETTING_ORDER) == 0)
+               return "wifi,gps,sound,rotate,bluetooth,mobile_data,assisitvelight,u_power_saving,wifi_hotspot,flightmode";
+       else if (strcmp(key, PREF_QUICKSETTING_FEATURED_NUM) == 0)
+               return "11";
+       else if (strcmp(key, PREF_SHORTCUT_ENABLE) == 0)
+               return "ON";
+       else if (strcmp(key, PREF_SHORTCUT_EARPHONE_ORDER) == 0)
+               return "org.tizen.music-player,org.tizen.videos,org.tizen.phone,srfxzv8GKR.YouTube,org.tizen.voicerecorder";
+
+
+       return NULL;
+}
+
+static inline int _key_validation_check(const char *key)
+{
+       if (strcmp(key, PREF_BRIGHTNESS) == 0)
+               return 1;
+       else if (strcmp(key, PREF_QUICKSETTING_ORDER) == 0)
+               return 1;
+       else if (strcmp(key, PREF_QUICKSETTING_FEATURED_NUM) == 0)
+               return 1;
+       else if (strcmp(key, PREF_SHORTCUT_ENABLE) == 0)
+               return 1;
+       else if (strcmp(key, PREF_SHORTCUT_EARPHONE_ORDER) == 0)
+               return 1;
+
+       return 0;
+}
+
+HAPI int quickpanel_preference_get(const char *key, char **value)
+{
+       bool existing = false;
+
+       retif(key == NULL, QP_FAIL, "Invalid parameter!");
+       retif(value == NULL, QP_FAIL, "Invalid parameter!");
+
+       if (preference_is_existing(key, &existing) == PREFERENCE_ERROR_NONE && !existing
+               && _key_validation_check(key)) {
+               DBG("preference does not exist");
+               /* Create preference */
+               if (preference_set_string(PREF_BRIGHTNESS, _default_preference_get(PREF_BRIGHTNESS)) != PREFERENCE_ERROR_NONE) {
+                       DBG("preference set error %s", PREF_BRIGHTNESS);
+                       return QP_FAIL;
+               }
+
+               if (preference_set_string(PREF_QUICKSETTING_ORDER, _default_preference_get(PREF_QUICKSETTING_ORDER)) != PREFERENCE_ERROR_NONE) {
+                       DBG("preference set error %s", PREF_QUICKSETTING_ORDER);
+                       return QP_FAIL;
+               }
+
+               if (preference_set_string(PREF_QUICKSETTING_FEATURED_NUM, _default_preference_get(PREF_QUICKSETTING_FEATURED_NUM)) != PREFERENCE_ERROR_NONE) {
+                       DBG("preference set error %s", PREF_QUICKSETTING_FEATURED_NUM);
+                       return QP_FAIL;
+               }
+
+               if (preference_set_string(PREF_SHORTCUT_ENABLE, _default_preference_get(PREF_SHORTCUT_ENABLE)) != PREFERENCE_ERROR_NONE) {
+                       DBG("preference set error %s", PREF_SHORTCUT_ENABLE);
+                       return QP_FAIL;
+               }
+
+               if (preference_set_string(PREF_SHORTCUT_EARPHONE_ORDER, _default_preference_get(PREF_SHORTCUT_EARPHONE_ORDER)) != PREFERENCE_ERROR_NONE) {
+                       DBG("preference set error %s", PREF_SHORTCUT_EARPHONE_ORDER);
+                       return QP_FAIL;
+               }
+       }
+
+       if (preference_get_string(key, value) != PREFERENCE_ERROR_NONE) {
+               DBG("preference_get_string error : key(%s)", key);
+               return QP_FAIL;
+       }
+
+       return QP_OK;
+}
+
+HAPI const char *quickpanel_preference_default_get(const char *key)
+{
+       retif(key == NULL, NULL, "Invalid parameter!");
+
+       return _default_preference_get(key);
+}
+
+HAPI int quickpanel_preference_set(const char *key, char *value)
+{
+       retif(key == NULL, QP_FAIL, "Invalid parameter!");
+       retif(value == NULL, QP_FAIL, "Invalid parameter!");
+
+       if (preference_set_string(key, value) == PREFERENCE_ERROR_NONE) {
+               DBG("quickpanel_preference_set  key[%s] value [%s]", key, value);
+       } else {
+               DBG("quickpanel_preference_set  failed key[%s]", key);
+               return QP_FAIL;
+       }
+
+       return QP_OK;
+}
diff --git a/src/quickpanel-ui.c b/src/quickpanel-ui.c
new file mode 100755 (executable)
index 0000000..6f0301d
--- /dev/null
@@ -0,0 +1,1085 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <signal.h>
+#include <sys/utsname.h>
+#include <Elementary.h>
+#include <Ecore_Input.h>
+#include <unistd.h>
+#include <malloc.h>
+
+#include <app.h>
+#include <vconf.h>
+#include <tapi_common.h>
+#include <ITapiSim.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <notification.h>
+#include <notification_setting_internal.h>
+#include <sound_manager.h>
+#include <media.h>
+#include <system_settings.h>
+
+/* quickpanel basics */
+#include "common.h"
+#include "common_uic.h"
+#include "quickpanel-ui.h"
+#include "modules.h"
+#include "quickpanel_def.h"
+#include "list_util.h"
+#include "noti_node.h"
+#include "vi_manager.h"
+#include "pager.h"
+#include "page_base.h"
+#include "settings.h"
+#include "setting_module_api.h"
+
+#include "sim_controller.h"
+#include "noti.h"
+
+/* services */
+#include "keyboard.h"
+#include "uninstall.h"
+#ifdef QP_REMINDER_ENABLE
+#include "reminder.h"
+#endif
+#ifdef QP_EMERGENCY_MODE_ENABLE
+#include "emergency_mode.h"
+#endif
+#include "minictrl.h"
+#include "util-time.h"
+
+#define QP_WINDOW_PRIO 300
+
+#define APP_CONTROL_OPERATION_CANCEL_NOTIFICATION "http://tizen.org/appcontrol/operation/cancel_notification"
+
+#define PACKAGE_INDICATOR "org.tizen.indicator"
+
+static struct appdata g_app_data;
+
+static void _ui_rotate(void *data, int new_angle);
+static void _ui_geometry_info_set(void *data);
+static void _ui_handler_info_set(void *data);
+static void _ui_efl_cache_flush(void *evas);
+
+static void _change_state_on_secured_lock(void);
+static qp_secured_lock_state_e secured_lock = QP_SECURED_LOCK_OFF;
+
+HAPI qp_secured_lock_state_e quickpanel_get_secured_lock_state(void)
+{
+       return secured_lock;
+}
+
+HAPI void *quickpanel_get_app_data(void)
+{
+       return &g_app_data;
+}
+
+HAPI Elm_Transit *quickpanel_brightness_transparent_background_set(bool on)
+{
+       Elm_Transit *transit = elm_transit_add();
+
+       if (on) {
+               elm_transit_object_add(transit, g_app_data.view_root);
+               elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL);
+               elm_transit_effect_color_add(transit, 255, 255, 255, 255, 255, 255, 255, 0);
+               elm_transit_duration_set(transit, 0.4);
+               elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
+               elm_transit_go(transit);
+               return transit;
+       } else {
+               int r, g, b, a;
+               evas_object_color_get(g_app_data.view_root, &r, &g, &b, &a);
+
+               elm_transit_object_add(transit, g_app_data.view_root);
+               elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL);
+               elm_transit_effect_color_add(transit, r, g, b, a, 255, 255, 255, 255);
+               elm_transit_duration_set(transit, 0.4);
+               elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
+               elm_transit_go(transit);
+               return transit;
+       }
+}
+
+/******************************************************************************
+ *
+ * UI
+ *
+ ****************************************************************************/
+static void _ui_efl_cache_flush(void *evas)
+{
+       int file_cache;
+       int collection_cache;
+       int image_cache;
+       int font_cache;
+
+       retif(evas == NULL, , "Evas is NULL\n");
+       file_cache = edje_file_cache_get();
+       collection_cache = edje_collection_cache_get();
+       image_cache = evas_image_cache_get(evas);
+       font_cache = evas_font_cache_get(evas);
+
+       edje_file_cache_set(file_cache);
+       edje_collection_cache_set(collection_cache);
+       evas_image_cache_set(evas, 0);
+       evas_font_cache_set(evas, 0);
+
+       evas_image_cache_flush(evas);
+       evas_render_idle_flush(evas);
+       evas_font_cache_flush(evas);
+
+       edje_file_cache_flush();
+       edje_collection_cache_flush();
+
+       edje_file_cache_set(file_cache);
+       edje_collection_cache_set(collection_cache);
+       evas_image_cache_set(evas, image_cache);
+       evas_font_cache_set(evas, font_cache);
+
+       elm_cache_all_flush();
+       malloc_trim(0);
+}
+
+static void _ui_handler_input_region_set(void *data, int contents_height)
+{
+       struct appdata *ad = NULL;
+       tzsh_region_h region;
+       unsigned int window_input_region[4] = {0,};
+
+       retif(data == NULL,  , "Invialid parameter!");
+       ad = data;
+
+       region = tzsh_region_create(ad->tzsh);
+
+       switch (ad->angle) {
+       case 0:
+               window_input_region[0] = 0; //X
+               window_input_region[1] = contents_height; // Y
+               window_input_region[2] = ad->win_width; // Width
+               window_input_region[3] = ELM_SCALE_SIZE(QP_HANDLE_H); // height
+               break;
+       case 90:
+               window_input_region[0] = contents_height; //X
+               window_input_region[1] = 0; // Y
+               window_input_region[2] = ELM_SCALE_SIZE(QP_HANDLE_H); // Width
+               window_input_region[3] = ad->win_height; // height
+               break;
+       case 180:
+               window_input_region[0] = 0; //X
+               window_input_region[1] = ad->win_height - contents_height - ELM_SCALE_SIZE(QP_HANDLE_H); // Y
+               window_input_region[2] = ad->win_width; // Width
+               window_input_region[3] = ELM_SCALE_SIZE(QP_HANDLE_H); // height
+               break;
+       case 270:
+               window_input_region[0] = ad->win_width - contents_height - ELM_SCALE_SIZE(QP_HANDLE_H); //X
+               window_input_region[1] = 0; // Y
+               window_input_region[2] = ELM_SCALE_SIZE(QP_HANDLE_H); // Width
+               window_input_region[3] = ad->win_height; // height
+               break;
+       }
+
+       INFO("window_input_region [0]: %d  [1]: %d  [2]: %d [3]: %d",
+               window_input_region[0], window_input_region[1], window_input_region[2], window_input_region[3]);
+
+       tzsh_region_add(region, window_input_region[0], window_input_region[1], window_input_region[2], window_input_region[3]);
+       tzsh_quickpanel_service_handler_region_set(ad->quickpanel_service, ad->angle, region);
+       tzsh_region_destroy(region);
+}
+
+static void _ui_handler_content_region_set(void *data, int contents_height)
+{
+       struct appdata *ad = NULL;
+
+       tzsh_region_h region;
+
+       unsigned int window_contents_region[4] = {0,};
+
+       retif(data == NULL,  , "Invialid parameter!");
+       ad = data;
+
+       region = tzsh_region_create(ad->tzsh);
+
+       switch (ad->angle) {
+       case 0:
+               window_contents_region[0] = 0; //X
+               window_contents_region[1] = 0; // Y
+               window_contents_region[2] = ad->win_width; // Width
+               window_contents_region[3] = contents_height; // height
+               break;
+       case 90:
+               window_contents_region[0] = 0; //X
+               window_contents_region[1] = 0; // Y
+               window_contents_region[2] = contents_height; // Width
+               window_contents_region[3] = ad->win_height; // height
+               break;
+       case 180:
+               window_contents_region[0] = 0; //X
+               window_contents_region[1] = ad->win_height - contents_height; // Y
+               window_contents_region[2] = ad->win_width; // Width
+               window_contents_region[3] = contents_height; // height
+               break;
+       case 270:
+               window_contents_region[0] = ad->win_width - contents_height ; //X
+               window_contents_region[1] = 0; // Y
+               window_contents_region[2] = contents_height; // Width
+               window_contents_region[3] = ad->win_height; // height
+               break;
+       }
+
+       DBG("window_contents_region [0]: %d  [1]: %d  [2]: %d [3]: %d",
+               window_contents_region[0], window_contents_region[1], window_contents_region[2], window_contents_region[3]);
+
+       tzsh_region_add(region, window_contents_region[0], window_contents_region[1], window_contents_region[2], window_contents_region[3]);
+       tzsh_quickpanel_service_content_region_set(ad->quickpanel_service, ad->angle, region);
+       tzsh_region_destroy(region);
+
+}
+
+static void _ui_handler_info_set(void *data)
+{
+       int contents_height = 0;
+       struct appdata *ad = NULL;
+
+       retif(data == NULL, , "data is NULL");
+       ad = data;
+
+       contents_height = ad->gl_distance_from_top + ad->gl_limit_height;
+
+       _ui_handler_input_region_set(ad, contents_height);
+       _ui_handler_content_region_set(ad, contents_height);
+}
+
+static void _ui_geometry_info_set(void *data)
+{
+       struct appdata *ad = NULL;
+       int max_height_window = 0;
+       Evas_Coord genlist_y = 0;
+
+       retif(data == NULL, , "data is NULL");
+       ad = data;
+
+       if (ad->angle == 90 || ad->angle == 270)
+               max_height_window = ad->win_width;
+       else
+               max_height_window = ad->win_height;
+
+
+       edje_object_part_geometry_get(_EDJ(ad->ly), "qp.base.list.swallow", NULL, &genlist_y, NULL, NULL);
+
+       ad->gl_distance_from_top = genlist_y;
+       ad->gl_distance_to_bottom = ELM_SCALE_SIZE(QP_HANDLE_H);
+       ad->gl_limit_height = max_height_window - ad->gl_distance_from_top - ad->gl_distance_to_bottom;
+}
+
+/*****************************************************************************
+ *
+ * ui rotation functions
+ *
+ ****************************************************************************/
+static void _ui_rotation_wm_cb(void *data, Evas_Object *obj, void *event)
+{
+       int angle = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       angle = elm_win_rotation_get((Evas_Object *)obj);
+
+       DBG("ROTATE:%d", angle);
+
+       quickpanel_minictrl_rotation_report(angle);
+
+       _ui_rotate(ad, angle);
+}
+
+static int _ui_rotation_angle_get(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       retif(ad == NULL, 0, "Invalid parameter!");
+       retif(ad->win == NULL, 0, "Invalid parameter!");
+
+       return elm_win_rotation_get(ad->win);
+}
+
+static void _ui_handler_enable_set(Eina_Bool is_enable)
+{
+       const char *signal = NULL;
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid data.");
+       retif(ad->view_root == NULL, , "data is NULL");
+
+       if (is_enable == EINA_TRUE)
+               signal = "mouse,down,1";
+       else
+               signal = "mouse,up,1";
+
+       elm_object_signal_emit(ad->view_root, signal, "qp.handler.bg");
+}
+
+static void _ui_rotation_handler(struct appdata *ad, int angle)
+{
+       const char *signal = NULL;
+
+       retif(ad == NULL, , "data is NULL");
+       retif(ad->view_root == NULL, , "data is NULL");
+
+
+       if (angle == 90 || angle == 270)
+               signal = "quickpanel.landscape";
+       else
+               signal = "quickpanel.portrait";
+
+       elm_object_signal_emit(ad->view_root, signal, "quickpanel.prog");
+}
+
+static void _ui_rotate(void *data, int new_angle)
+{
+       struct appdata *ad = data;
+       retif(data == NULL, , "Invalid parameter!");
+
+       DBG("ROTATION: new:%d old:%d", new_angle, ad->angle);
+
+       if (new_angle == 0 || new_angle == 90 || new_angle == 180 || new_angle == 270) {
+               if (new_angle != ad->angle) {
+                       ad->angle = new_angle;
+                       quickpanel_modules_refresh(ad);
+                       _ui_geometry_info_set(ad);
+                       _ui_handler_info_set(ad);
+                       _ui_rotation_handler(ad, ad->angle);
+               }
+       }
+}
+
+static int _tzsh_set(Evas_Object *win)
+{
+       tzsh_h tzsh = NULL;
+       tzsh_quickpanel_service_h quickpanel_service = NULL;
+       tzsh_window tz_win;
+
+       retif(!win, QP_FAIL, "Invialid parameter!");
+
+       tzsh = tzsh_create(TZSH_TOOLKIT_TYPE_EFL);
+       retif(!tzsh, QP_FAIL, "tzsh_create ERROR!");
+
+       struct appdata *ad = quickpanel_get_app_data();
+
+       ad->tzsh = tzsh;
+
+       tz_win = elm_win_window_id_get(win);
+       if (!tz_win) {
+               tzsh_destroy(tzsh);
+               return QP_FAIL;
+       }
+
+       quickpanel_service = tzsh_quickpanel_service_create(tzsh, tz_win);
+       if (!quickpanel_service) {
+               tzsh_destroy(tzsh);
+               return QP_FAIL;
+       }
+       ad->quickpanel_service = quickpanel_service;
+
+       return QP_OK;
+}
+
+static void _tzsh_unset(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+
+       if (ad->quickpanel_service) {
+               tzsh_quickpanel_service_destroy(ad->quickpanel_service);
+               ad->quickpanel_service = NULL;
+       }
+
+       if (ad->tzsh) {
+               tzsh_destroy(ad->tzsh);
+               ad->tzsh = NULL;
+       }
+}
+
+/*****************************************************************************
+ *
+ * ui creation/deletion functions
+ *
+ ****************************************************************************/
+static Evas_Object *_ui_window_add(const char *name, int prio)
+{
+       Evas_Object *eo = NULL;
+
+       eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+
+       if (eo != NULL) {
+               elm_win_alpha_set(eo, EINA_TRUE);
+               elm_win_indicator_mode_set(eo, ELM_WIN_INDICATOR_HIDE);
+
+               elm_win_title_set(eo, name);
+               elm_win_borderless_set(eo, EINA_TRUE);
+               elm_win_autodel_set(eo, EINA_TRUE);
+
+               if (elm_win_wm_rotation_supported_get(eo)) {
+                       int rots[4] = { 0, 90, 180, 270 };
+                       elm_win_wm_rotation_available_rotations_set(eo, rots, 4);
+               }
+
+               evas_object_show(eo);
+
+               if (QP_OK != _tzsh_set(eo))
+                       ERR("Failed to set tzsh");
+       }
+
+       return eo;
+}
+
+static int _ui_gui_create(void *data)
+{
+       struct appdata *ad = data;
+       int w = 0, h = 0;
+       int initial_angle = 0;
+       Evas_Object *page_base = NULL;
+
+       retif(data == NULL, QP_FAIL, "Invialid parameter!");
+
+       ad->win = _ui_window_add("Quickpanel Window", QP_WINDOW_PRIO);
+       retif(ad->win == NULL, QP_FAIL, "Failed to create main window");
+
+       evas_object_smart_callback_add(ad->win, "wm,rotation,changed", _ui_rotation_wm_cb, ad);
+
+       ad->view_root = quickpanel_uic_load_edj(ad->win, util_get_res_file_path(DEFAULT_EDJ), "quickpanel/root", 0);
+       retif(ad->view_root == NULL, QP_FAIL, "Failed to create main page");
+
+       Evas_Object *pager_scroller = quickpanel_pager_new(ad->view_root, NULL);
+       Evas_Object *pager_box = quickpanel_pager_view_get("BOX");
+
+       page_base = quickpanel_page_base_create(pager_box, NULL);
+       retif(page_base == NULL, QP_FAIL, "Failed to create main page");
+
+       ad->ly = quickpanel_page_base_view_get("LAYOUT");
+       retif(ad->ly == NULL, QP_FAIL, "Failed to create main page");
+
+       elm_box_pack_end(pager_box, page_base);
+       elm_win_resize_object_add(ad->win, ad->view_root);
+       elm_object_part_content_set(ad->view_root, "qp.root.swallow", pager_scroller);
+
+       /* get noti evas */
+       ad->evas = evas_object_evas_get(ad->win);
+       ad->list = quickpanel_page_base_view_get("BOX");
+       ad->scroller = quickpanel_page_base_view_get("SCROLLER");
+
+       elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
+       evas_object_resize(ad->win, w, h);
+
+       ad->win_width = w;
+       ad->win_height = h;
+
+       _ui_geometry_info_set(ad);
+
+       initial_angle = _ui_rotation_angle_get(ad);
+       _ui_rotate(ad, initial_angle);
+
+       quickpanel_pager_page_set(PAGE_IDX_MAIN, 1);
+
+       sim_controller_init(ad->ly);
+
+       quickpanel_noti_init_noti_section();
+
+       return 0;
+}
+
+static int _ui_gui_destroy(void *data)
+{
+       struct appdata *ad = data;
+       retif(data == NULL, QP_FAIL, "Invialid parameter!");
+
+       if (ad->list != NULL) {
+               evas_object_del(ad->list);
+               ad->list = NULL;
+       }
+       if (ad->scroller != NULL) {
+               evas_object_del(ad->scroller);
+               ad->scroller = NULL;
+       }
+       if (ad->ly != NULL) {
+               evas_object_del(ad->ly);
+               ad->ly = NULL;
+       }
+       if (ad->win != NULL) {
+               evas_object_del(ad->win);
+               ad->win = NULL;
+       }
+
+       _tzsh_unset();
+
+       return QP_OK;
+}
+
+static void _ui_setting_visibility_set(struct appdata *ad, int show)
+{
+       retif(ad == NULL, , "data is NULL");
+       retif(ad->ly == NULL, , "data is NULL");
+
+       elm_object_signal_emit(ad->ly, "quickpanel.setting.show",
+                       "quickpanel.prog");
+}
+
+/*****************************************************************************
+ *
+ * event handler initialization functions
+ *
+ ****************************************************************************/
+static void _vconf_event_powerff_cb(keynode_t *node,
+               void *data)
+{
+       int val;
+       if (vconf_get_int(VCONFKEY_SYSMAN_POWER_OFF_STATUS, &val) == 0 &&
+                       (val == VCONFKEY_SYSMAN_POWER_OFF_DIRECT || val == VCONFKEY_SYSMAN_POWER_OFF_RESTART)) {
+               ui_app_exit();
+       }
+}
+
+static void _vconf_event_lcdoff_cb(keynode_t *node,
+               void *data)
+{
+       int ret = 0;
+       int pm_state = VCONFKEY_PM_STATE_NORMAL;
+
+       ret = vconf_get_int(VCONFKEY_PM_STATE, &pm_state);
+
+       if (ret == 0 && pm_state == VCONFKEY_PM_STATE_LCDOFF)
+               quickpanel_uic_close_quickpanel(false, 0);
+}
+
+
+HAPI qp_privacy_mode _get_system_privacy_mode()
+{
+       int noti_err = 0;
+       notification_system_setting_h system_setting = NULL;
+       lock_screen_content_level_e system_level = SHOW_ALL_CONTENT;
+       qp_privacy_mode return_level = QP_PRIVACY_MODE_SHOW_ALL;
+
+       noti_err = notification_system_setting_load_system_setting(&system_setting);
+       if (noti_err != NOTIFICATION_ERROR_NONE) {
+               DBG("notifiacation_system_setting_load_system_setting failed [%d, %s]", noti_err, get_error_message(noti_err));
+               return QP_PRIVACY_MODE_SHOW_ALL;
+       }
+
+       noti_err = notification_system_setting_get_lock_screen_content(system_setting, &system_level);
+       if (noti_err != NOTIFICATION_ERROR_NONE)
+               DBG("notifiacation_system_setting_get_lock_screen_content failed [%d, %s]", noti_err, get_error_message(noti_err));
+
+       notification_system_setting_free_system_setting(system_setting);
+
+       if (system_level == SHOW_ALL_CONTENT)
+               return_level = QP_PRIVACY_MODE_SHOW_ALL;
+       else if (system_level == HIDE_SENSITIVE_CONTENT)
+               return_level = QP_PRIVACY_MODE_HIDE_CONTENT;
+       else if (system_level == DO_NOT_SHOW_NOTIFICATIONS)
+               return_level = QP_PRIVACY_MODE_DO_NOT_SHOW;
+
+       return return_level;
+}
+
+
+static void _lock_state_changed_cb(keynode_t *key, void *data)
+{
+       struct appdata *ad = data;
+       int ret = 0, state = 0;
+
+       ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &state);
+       retif(ret != 0, , "Failed to get VCONFKEY_IDLE_LOCK_STATE [%d]", ret);
+
+       if (state  == VCONFKEY_IDLE_UNLOCK)
+               ad->is_lock_launched = QP_LOCKSCREEN_STATE_UNLOCK;
+       else
+               ad->is_lock_launched = QP_LOCKSCREEN_STATE_LOCK;
+
+       ad->system_privacy_mode = _get_system_privacy_mode();
+
+       quickpanel_noti_update_list();
+}
+
+
+static void _lock_type_changed_cb(keynode_t *node, void *data)
+{
+       int ret = -1, type = 0;
+
+       if (node == NULL) {
+               ret = vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &type);
+               if (ret != 0)
+                       ERR("Failed to get int of %s (%d), %s", VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, ret, get_error_message(ret));
+
+       } else {
+               type = node->value.i;
+       }
+
+       DBG("Change lock type : %d", type);
+
+       switch (type) {
+       case SETTING_SCREEN_LOCK_TYPE_NONE:
+       case SETTING_SCREEN_LOCK_TYPE_SWIPE:
+               secured_lock = QP_SECURED_LOCK_OFF;
+               quickpanel_page_secured_lock_set(secured_lock);
+               break;
+       case SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD:
+       case SETTING_SCREEN_LOCK_TYPE_PASSWORD:
+       default:
+               secured_lock = QP_SECURED_LOCK_ON;
+               quickpanel_page_secured_lock_set(secured_lock);
+               break;
+       }
+}
+
+static void _change_state_on_secured_lock(void)
+{
+       int ret, val;
+
+       ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_LOCK_STATE, &val);
+       if (ret != SYSTEM_SETTINGS_ERROR_NONE) {
+               ERR("Failed get value of %s : %d", "SYSTEM_SETTINGS_KEY_LOCK_STATE", ret);
+               return;
+       }
+
+       if (val == SYSTEM_SETTINGS_LOCK_STATE_UNLOCK) {
+               if (secured_lock == QP_SECURED_LOCK_OFF) {
+                       return;
+               } else {
+                       quickpanel_page_secured_lock_set(QP_SECURED_LOCK_OFF);
+                       return;
+               }
+       }
+}
+
+void _event_message_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       bool visiblity = (bool)event_info;
+       struct appdata *ad = data;
+
+       if (visiblity == 1) { // show
+               DBG("quickpanel is opened");
+
+               ad->is_opened = 1;
+               quickpanel_util_time_timer_enable_set(1);
+               quickpanel_keyboard_openning_init(ad);
+               quickpanel_modules_opened(data);
+               quickpanel_uic_opened_reason_set(OPENED_NO_REASON);
+
+               _change_state_on_secured_lock();
+       } else {
+               DBG("quickpanel is closed");
+
+               ad->is_opened = 0;
+               quickpanel_noti_update_for_dismiss_ticker();
+               quickpanel_util_time_timer_enable_set(0);
+               quickpanel_keyboard_closing_fini(ad);
+               quickpanel_modules_closed(data);
+       }
+       quickpanel_media_player_stop();
+}
+
+static void _vconf_init(struct appdata *ad)
+{
+       int ret = 0;
+
+       ret = vconf_notify_key_changed(VCONFKEY_PM_STATE,
+                       _vconf_event_lcdoff_cb, ad);
+       if (ret != 0)
+               ERR("VCONFKEY_PM_STATE: %d", ret);
+
+       ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS, _vconf_event_powerff_cb, ad);
+       if (ret != 0)
+               ERR("VCONFKEY_PM_STATE: %d", ret);
+
+
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, _lock_type_changed_cb, ad);
+       if (ret != 0)
+               ERR("Failed to set changed callback of %s (%d), %s", VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, ret, get_error_message(ret));
+
+       _lock_type_changed_cb(NULL, NULL);
+       ret = vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE, _lock_state_changed_cb, ad);
+       if (ret != 0)
+               ERR("Failed to set changed callback of %s (%d), %s", VCONFKEY_IDLE_LOCK_STATE, ret, get_error_message(ret));
+}
+
+static void _vconf_fini(struct appdata *ad)
+{
+       int ret = 0;
+
+       ret = vconf_ignore_key_changed(VCONFKEY_PM_STATE, _vconf_event_lcdoff_cb);
+       if (ret != 0)
+               ERR("VCONFKEY_PM_STATE: %d", ret);
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS,
+                       _vconf_event_powerff_cb);
+       if (ret != 0)
+               ERR("VCONFKEY_PM_STATE: %d", ret);
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, _lock_type_changed_cb);
+       if (ret != 0)
+               ERR("Failed to remove changed callback of %s (%d), %s", VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, ret, get_error_message(ret));
+       ret = vconf_ignore_key_changed(VCONFKEY_IDLE_LOCK_STATE, _lock_state_changed_cb);
+       if (ret != 0)
+               ERR("Failed to remove changed callback of %s (%d), %s", VCONFKEY_IDLE_LOCK_STATE, ret, get_error_message(ret));
+}
+
+static void _ecore_event_init(struct appdata *ad)
+{
+       DBG("");
+       evas_object_smart_callback_add(ad->win, "visibility,changed", _event_message_cb, ad);
+}
+
+static void _ecore_event_fini(struct appdata *ad)
+{
+       if (ad->hdl_client_message != NULL) {
+               ecore_event_handler_del(ad->hdl_client_message);
+               ad->hdl_client_message = NULL;
+       }
+}
+
+/*****************************************************************************
+ *
+ * App efl main interface
+ *
+ ****************************************************************************/
+static void _sigaction_terminate_handler(int signum, siginfo_t *info, void *unused)
+{
+       ERR("quickpanel going to be terminated");
+       ui_app_exit();
+}
+
+static void _service_request_process(app_control_h service, void *data)
+{
+       char *value = NULL;
+       retif(service == NULL, , "Invialid parameter!");
+
+       if (!app_control_get_extra_data(service, "HIDE_LAUNCH", &value)) {
+               if (value != NULL) {
+                       ERR("HIDE_LAUNCH: %s", value);
+                       if (!strcmp(value, "1"))
+                               quickpanel_uic_close_quickpanel(false, 0);
+                       else
+                               quickpanel_uic_open_quickpanel(OPENED_BY_CMD_HIDE_LAUNCH);
+
+                       free(value);
+               }
+       } else if (!app_control_get_extra_data(service, "SHOW_SETTINGS", &value)) {
+               if (value != NULL) {
+                       ERR("SHOW_SETTINGS: %s", value);
+                       if (!strcmp(value, "1")) {
+                               quickpanel_pager_page_set(PAGE_IDX_EDITING, 0);
+                               quickpanel_uic_open_quickpanel(OPENED_BY_CMD_SHOW_SETTINGS);
+                       }
+
+                       free(value);
+               }
+       }
+#ifdef QP_EMERGENCY_MODE_ENABLE
+       else if (!app_control_get_extra_data(service, "EMERGENCY_MODE_LAUNCH", &value)) {
+               if (value != NULL) {
+                       ERR("EMERGENCY_MODE_LAUNCH: %s", value);
+                       if (!strcmp(value, "1")) {
+                               if (quickpanel_emergency_mode_syspopup_launch() == QP_FAIL)
+                                       ERR("failed to launch emergency mode syspopup");
+                               else
+                                       quickpanel_uic_close_quickpanel(true, 0);
+                       }
+
+                       free(value);
+               }
+       }
+#endif
+}
+
+static Eina_Bool _appcore_cache_flush_timer_cb(void *data)
+{
+       if (!quickpanel_uic_is_suspended())
+               return ECORE_CALLBACK_CANCEL;
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static Eina_Bool _ui_refresh_idler_cb(void *data)
+{
+       DBG("");
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       quickpanel_modules_refresh(ad);
+       _ui_geometry_info_set(ad);
+       _ui_handler_info_set(ad);
+
+/*     Cache memory is cleared when the application paused (every time, after 5 seconds (in appcore)),
+ *     but after running in a minimized mode application have status AS_RUNNING.
+ *     Application have status AS_PAUSED only after change of visibility to hidden condition by user (on hiding window)
+ *     Cleaning must be performed only once after application loading in hidden condition
+ *     (and stay in a hidden condition at time of cleaning).
+ */
+       ecore_timer_add(10, _appcore_cache_flush_timer_cb, NULL);
+
+       return EINA_FALSE;
+}
+
+static void _quickpanel_initialize(void *data)
+{
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invialid parameter!");
+
+       INFO(">> Creating Quickpanel");
+       /* Check emulator */
+       ad->is_emul = quickpanel_uic_is_emul();
+       INFO("quickpanel run in %s", ad->is_emul ? "Emul" : "Device");
+
+       int w, h;
+       elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
+       ad->scale = elm_config_scale_get();
+       if (ad->scale < 0)
+               ad->scale = 1.0;
+
+       INFO("quickpanel scale %f", ad->scale);
+
+       ad->is_suspended = 1;
+
+       /* Get theme */
+       elm_theme_extension_add(NULL, util_get_res_file_path(DEFAULT_THEME_EDJ));
+       /* create quickpanel window */
+       ret = _ui_gui_create(ad);
+       retif(ret != QP_OK, , "Failed to create window!");
+
+       quickpanel_media_init();
+
+       _ecore_event_init(ad);
+       _vconf_init(ad);
+
+       quickpanel_uninstall_init(ad);
+#ifdef QP_EMERGENCY_MODE_ENABLE
+       quickpanel_emergency_mode_init(ad);
+#endif
+       quickpanel_keyboard_init(ad);
+#ifdef QP_REMINDER_ENABLE
+       quickpanel_reminder_init(ad);
+#endif
+
+#ifdef QP_SETTING_ENABLE
+       _ui_setting_visibility_set(ad, 1);
+#else /* QP_SETTING_ENABLE */
+       _ui_setting_visibility_set(ad, 0);
+#endif /* QP_SETTING_ENABLE */
+
+       /* init quickpanel modules */
+       quickpanel_modules_init(ad);
+       ecore_idler_add(_ui_refresh_idler_cb, ad);
+
+       /* for notification on lockscreen */
+       _lock_state_changed_cb(NULL, ad);
+}
+
+static bool _app_create_cb(void *data)
+{
+       DBG("");
+
+       elm_app_base_scale_set(1.8);
+
+       pid_t pid;
+       int r;
+       char err_buf[128] = {0,};
+
+       // signal handler
+       struct sigaction act;
+       act.sa_sigaction = _sigaction_terminate_handler;
+       act.sa_flags = SA_SIGINFO;
+
+       int ret = sigemptyset(&act.sa_mask);
+       if (ret < 0) {
+               strerror_r(errno, err_buf, sizeof(err_buf));
+               ERR("Failed to sigemptyset[%d / %s]", errno, err_buf);
+       }
+       ret = sigaddset(&act.sa_mask, SIGTERM);
+       if (ret < 0) {
+               strerror_r(errno, err_buf, sizeof(err_buf));
+               ERR("Failed to sigaddset[%d / %s]", errno, err_buf);
+       }
+       ret = sigaction(SIGTERM, &act, NULL);
+       if (ret < 0) {
+               strerror_r(errno, err_buf, sizeof(err_buf));
+               ERR("Failed to sigaction[%d / %s]", errno, err_buf);
+       }
+
+       pid = setsid();
+       if (pid < 0)
+               WARN("Failed to set session id!");
+
+       r = nice(2);
+       if (r == -1)
+               WARN("Failed to set nice value!");
+
+       return TRUE;
+}
+
+static void _app_service_cb(app_control_h service, void *data)
+{
+       DBG("");
+
+       struct appdata *ad = data;
+
+       retif(ad == NULL, , "Invialid parameter!");
+
+       if (ad->win == NULL && ad->ly == NULL) {
+               _quickpanel_initialize(data);
+               return;
+       }
+
+       int ret;
+       char *op = NULL;
+       char *moudle_info = NULL;
+       char *search_click_event = NULL;
+       char *search_longpress_event = NULL;
+
+       ret = app_control_get_operation(service, &op);
+       if (ret != APP_CONTROL_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to app_control_get_operation");
+
+       DBG("[%d] %s : operation(%s)", __LINE__, __func__, op);
+
+       if (!strncmp(APP_CONTROL_OPERATION_SECURED_LOCK, op, strlen(APP_CONTROL_OPERATION_SECURED_LOCK))) {
+
+               ret = app_control_get_extra_data(service, QP_QUICK_SETTINGS, &moudle_info);
+               if (ret == APP_CONTROL_ERROR_NONE && moudle_info != NULL) {
+
+                       search_click_event = strstr(moudle_info, QP_QUICK_SETTINGS_EVENT_CLICKED);
+                       if (search_click_event != NULL) {
+                               *(moudle_info + strlen(moudle_info) - strlen(QP_QUICK_SETTINGS_EVENT_CLICKED)) = '\0';
+                               quickpanel_setting_module_operate(moudle_info);
+                       } else {
+                               search_longpress_event = strstr(moudle_info, QP_QUICK_SETTINGS_EVENT_LONGPRESSED);
+                               if (search_longpress_event != NULL) {
+                                       *(moudle_info + strlen(moudle_info) - strlen(QP_QUICK_SETTINGS_EVENT_LONGPRESSED)) = '\0';
+                                       quickpanel_setting_module_longpress_operate(moudle_info);
+                               }
+                       }
+
+                       free(moudle_info);
+
+                       quickpanel_page_secured_lock_set(QP_SECURED_LOCK_OFF);
+               }
+
+       } else {
+               _service_request_process(service, data);
+       }
+
+       free(op);
+}
+
+static void _app_terminate_cb(void *data)
+{
+       DBG("");
+
+       struct appdata *ad = data;
+       retif(ad == NULL, , "invalid data.");
+
+       quickpanel_media_fini();
+
+       /* fini quickpanel modules */
+       quickpanel_modules_fini(ad);
+       _vconf_fini(ad);
+       _ecore_event_fini(ad);
+
+       quickpanel_keyboard_fini(ad);
+       quickpanel_uninstall_fini(ad);
+#ifdef QP_REMINDER_ENABLE
+       quickpanel_reminder_fini(ad);
+#endif
+#ifdef QP_EMERGENCY_MODE_ENABLE
+       quickpanel_emergency_mode_fini(ad);
+#endif
+
+       /* delete quickpanel window */
+       _ui_gui_destroy(ad);
+
+       INFO("Quickpanel is terminated");
+}
+
+static void _app_resume_cb(void *data)
+{
+       DBG("");
+       struct appdata *ad = data;
+       retif(ad == NULL, , "invalid data.");
+
+       ad->is_suspended = 0;
+       _ui_handler_enable_set(EINA_FALSE);
+
+       quickpanel_modules_resume(data);
+}
+
+static void _app_pause_cb(void *data)
+{
+       DBG("");
+       struct appdata *ad = data;
+       retif(ad == NULL, , "invalid data.");
+
+       quickpanel_modules_suspend(ad);
+
+       ad->is_suspended = 1;
+
+       if (ad->evas != NULL) {
+               _ui_efl_cache_flush(ad->evas);
+               evas_event_feed_mouse_cancel(ad->evas, ecore_time_get(), NULL);
+       }
+
+       if (secured_lock == QP_SECURED_LOCK_ON)
+               quickpanel_page_secured_lock_set(secured_lock);
+
+}
+
+static void _app_language_changed_cb(app_event_info_h event_info, void *data)
+{
+       DBG("");
+       quickpanel_modules_lang_change(data);
+
+       sim_controller_on_language_change();
+}
+
+static void _app_region_format_changed_cb(app_event_info_h event_info, void *data)
+{
+       DBG("");
+       quickpanel_modules_lang_change(data);
+}
+
+int main(int argc, char *argv[])
+{
+       int ret = 0;
+
+       ui_app_lifecycle_callback_s event_callback = {0,};
+       app_event_handler_h handlers[5] = {NULL, };
+
+       ERR("quickpanel is forked");
+
+       event_callback.create = _app_create_cb;
+       event_callback.terminate = _app_terminate_cb;
+       event_callback.pause = _app_pause_cb;
+       event_callback.resume = _app_resume_cb;
+       event_callback.app_control = _app_service_cb;
+
+       memset(&g_app_data, 0x0, sizeof(struct appdata));
+
+       ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, _app_language_changed_cb, &g_app_data);
+       ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, _app_region_format_changed_cb, &g_app_data);
+
+       ret = ui_app_main(argc, argv, &event_callback, (void*)&g_app_data);
+       if (ret != APP_ERROR_NONE)
+               ERR("ui_app_main() is failed. err = %d", ret);
+
+       return ret;
+
+}
diff --git a/src/service/animated_icon.c b/src/service/animated_icon.c
new file mode 100755 (executable)
index 0000000..f68973f
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "quickpanel_def.h"
+#include "animated_icon.h"
+
+#define E_DATA_ANI_ICON_TYPE "ANI_ICON_TYPE"
+#define PATH_DOWNLOAD "reserved://quickpanel/ani/downloading"
+#define PATH_UPLOAD "reserved://quickpanel/ani/uploading"
+#define PATH_INSTALL "reserved://quickpanel/ani/install"
+
+static qp_animated_icon_type _animated_type_get(const char *path)
+{
+       retif_nomsg(path == NULL, QP_ANIMATED_ICON_NONE);
+
+       if (strncasecmp(path, PATH_DOWNLOAD, MIN(strlen(PATH_DOWNLOAD), strlen(path))) == 0)
+               return QP_ANIMATED_ICON_DOWNLOAD;
+       else if (strncasecmp(path, PATH_UPLOAD, MIN(strlen(PATH_UPLOAD), strlen(path))) == 0)
+               return QP_ANIMATED_ICON_UPLOAD;
+       else if (strncasecmp(path, PATH_INSTALL, MIN(strlen(PATH_INSTALL), strlen(path))) == 0)
+               return QP_ANIMATED_ICON_INSTALL;
+
+
+       return QP_ANIMATED_ICON_NONE;
+}
+
+HAPI Evas_Object *quickpanel_animated_icon_get(Evas_Object *parent, const char *path)
+{
+       qp_animated_icon_type type = QP_ANIMATED_ICON_NONE;
+       const char *layout_icon = NULL;
+       Evas_Object *layout = NULL;
+       retif_nomsg(parent == NULL, NULL);
+       retif_nomsg(path == NULL, NULL);
+
+       type = _animated_type_get(path);
+
+       if (type == QP_ANIMATED_ICON_DOWNLOAD)
+               layout_icon = "quickpanel/animated_icon_download";
+       else if (type == QP_ANIMATED_ICON_UPLOAD)
+               layout_icon = "quickpanel/animated_icon_upload";
+       else if (type == QP_ANIMATED_ICON_INSTALL)
+               layout_icon = "quickpanel/animated_icon_install";
+       else
+               return NULL;
+
+
+       layout = elm_layout_add(parent);
+       if (layout != NULL) {
+               elm_layout_file_set(layout, util_get_res_file_path(DEFAULT_EDJ), layout_icon);
+               evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_data_set(layout, E_DATA_ANI_ICON_TYPE, (void *)type);
+               evas_object_show(layout);
+       }
+
+       return layout;
+}
+
+HAPI int quickpanel_animated_icon_is_same_icon(Evas_Object *view, const char *path)
+{
+       qp_animated_icon_type type = QP_ANIMATED_ICON_NONE;
+       qp_animated_icon_type type_old = QP_ANIMATED_ICON_NONE;
+       retif_nomsg(view == NULL, 0);
+       retif_nomsg(path == NULL, 0);
+
+       type = _animated_type_get(path);
+       type_old = (qp_animated_icon_type)evas_object_data_get(view,
+                       E_DATA_ANI_ICON_TYPE);
+
+       if (type == type_old)
+               return 1;
+
+
+       return 0;
+}
diff --git a/src/service/emergency_mode.c b/src/service/emergency_mode.c
new file mode 100755 (executable)
index 0000000..025e82e
--- /dev/null
@@ -0,0 +1,335 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <vconf.h>
+
+
+#include <syspopup_caller.h>
+
+#include <package_manager.h>
+#include <bundle_internal.h>
+#include <notification.h>
+#include <notification_internal.h>
+#include <notification_list.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "modules.h"
+#include "datetime.h"
+#include "emergency_mode.h"
+#include "quickpanel-ui.h"
+
+#ifdef QP_SETTING_ENABLE
+extern QP_Module settings_view_featured;
+#endif
+#ifdef QP_BRIGHTNESS_ENABLE
+extern QP_Module brightness_ctrl;
+#endif
+
+#define SETTING_SYSPOPUP "mode-syspopup"
+#define BT_SHARE_DAEMON "/usr/bin/bluetooth-share"
+#define BT_SHARE_SERVER "bluetooth-share-opp-server"
+#define BT_SHARE_CLIENT "bluetooth-share-opp-client"
+#define SCREEN_SHOT "shot-tizen"
+
+static struct _info {
+       int is_enabled;
+       Eina_List *permitted_apps;
+} s_info = {
+       .is_enabled = 0,
+       .permitted_apps = NULL,
+};
+
+static void _delete_unpermitted_app(void)
+{
+       notification_list_h noti_list = NULL;
+       notification_list_h list_traverse = NULL;
+       notification_h noti = NULL;
+
+       notification_get_list(NOTIFICATION_TYPE_NONE, -1, &noti_list);
+
+       list_traverse = noti_list;
+
+       while (list_traverse != NULL) {
+               noti = notification_list_get_data(list_traverse);
+
+               quickpanel_emergency_mode_notification_filter(noti, 1);
+
+               list_traverse = notification_list_get_next(list_traverse);
+       }
+
+       if (noti_list != NULL) {
+               notification_free_list(noti_list);
+               noti_list = NULL;
+       }
+}
+
+static void _emergency_mode_start(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (s_info.is_enabled)
+               return;
+
+
+       quickpanel_datetime_datentime_event_set(0);
+#ifdef QP_SETTING_ENABLE
+       if (settings_view_featured.fini != NULL)
+               settings_view_featured.fini(ad);
+
+#endif
+#ifdef QP_BRIGHTNESS_ENABLE
+       if (brightness_ctrl.fini != NULL)
+               brightness_ctrl.fini(ad);
+
+#endif
+
+       _delete_unpermitted_app();
+       s_info.is_enabled = 1;
+       ERR("emergency mode is enabled");
+}
+
+static void _emergency_mode_stop(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (!s_info.is_enabled)
+               return;
+
+
+       quickpanel_datetime_datentime_event_set(1);
+
+#ifdef QP_SETTING_ENABLE
+       if (settings_view_featured.init != NULL)
+               settings_view_featured.init(ad);
+
+
+       if (settings_view_featured.init_job_cb != NULL)
+               settings_view_featured.init_job_cb(ad);
+
+#endif
+#ifdef QP_BRIGHTNESS_ENABLE
+       if (brightness_ctrl.init != NULL)
+               brightness_ctrl.init(ad);
+
+#endif
+
+       _delete_unpermitted_app();
+       s_info.is_enabled = 0;
+       ERR("emergency mode is disabled");
+}
+
+static void _vconf_cb(keynode_t *node, void *data)
+{
+       int mode = 0;
+
+       if (vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &mode) == 0) {
+               if (mode == SETTING_PSMODE_EMERGENCY)
+                       _emergency_mode_start(data);
+               else
+                       _emergency_mode_stop(data);
+
+
+       } else {
+               ERR("failed to get the value of VCONFKEY_SETAPPL_PSMODE");
+       }
+}
+
+static bool _app_list_cb(package_info_h handle, void *user_data)
+{
+       char *appid = NULL;
+       char *permitted_appid = NULL;
+
+       /* NEED TO CHANGE */
+       package_info_get_package(handle, &appid);
+
+       permitted_appid = strdup(appid);
+
+       s_info.permitted_apps = eina_list_append(s_info.permitted_apps, permitted_appid);
+       DBG("%s is permitted.", permitted_appid);
+
+       return 0;
+}
+
+
+static int _register_permitted_apps(void)
+{
+       DBG("");
+       int ret = 0;
+       package_manager_filter_h handle;
+
+       s_info.permitted_apps = eina_list_append(s_info.permitted_apps, BT_SHARE_DAEMON);
+       s_info.permitted_apps = eina_list_append(s_info.permitted_apps, SCREEN_SHOT);
+       s_info.permitted_apps = eina_list_append(s_info.permitted_apps, BT_SHARE_SERVER);
+       s_info.permitted_apps = eina_list_append(s_info.permitted_apps, BT_SHARE_CLIENT);
+
+       ret = package_manager_filter_create(&handle);
+       if (ret != PACKAGE_MANAGER_ERROR_NONE) {
+               package_manager_filter_destroy(handle);
+               return -1;
+       }
+
+#if defined(WINSYS_X11)
+       /* NEED TO CHANGE */
+       ret = package_manager_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_SUPPORT_MODE, 1);
+       if (ret != PACKAGE_MANAGER_ERROR_NONE) {
+               package_manager_filter_destroy(handle);
+               return -1;
+       }
+#endif
+
+       ret = package_manager_filter_foreach_package_info(handle, _app_list_cb, NULL);
+       if (ret != PACKAGE_MANAGER_ERROR_NONE) {
+               package_manager_filter_destroy(handle);
+               return -1;
+       }
+
+       package_manager_filter_destroy(handle);
+       return 0;
+
+}
+
+static int _delete_permitted_apps(void)
+{
+       Eina_List *list = NULL;
+       char *appid = NULL;
+
+       if (!s_info.permitted_apps) {
+               EINA_LIST_FOREACH(s_info.permitted_apps, list, appid)
+                       free(appid);
+               eina_list_free(s_info.permitted_apps);
+               s_info.permitted_apps = NULL;
+       }
+
+       return 0;
+}
+
+HAPI void quickpanel_emergency_mode_init(void *data)
+{
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       ret = _register_permitted_apps();
+       msgif(ret != 0, "failed to register permitted apps");
+
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE,
+                       _vconf_cb, ad);
+       msgif(ret != 0, "failed to notify key(VCONFKEY_SETAPPL_PSMODE) : %d", ret);
+
+       if (quickpanel_emergency_mode_is_on())
+               s_info.is_enabled = 1;
+
+}
+
+HAPI void quickpanel_emergency_mode_fini(void *data)
+{
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       ret = _delete_permitted_apps();
+       msgif(ret != 0, "failed to delete permitted apps");
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, _vconf_cb);
+       msgif(ret != 0, "failed to ignore key(VCONFKEY_SETAPPL_PSMODE) : %d", ret);
+}
+
+HAPI int quickpanel_emergency_mode_is_permitted_app(const char *appid)
+{
+       int i = 0;
+       int count = 0;
+       char *permitted_app = NULL;
+       retif(appid == NULL, 0, "Invalid parameter!");
+
+       count = eina_list_count(s_info.permitted_apps);
+       for (i = 0; i < count; i++) {
+               permitted_app = (char *)eina_list_nth(s_info.permitted_apps, i);
+               if (permitted_app != NULL && strcmp(permitted_app, appid) == 0)
+                       return 1;
+
+       }
+
+       return 0;
+}
+
+HAPI int quickpanel_emergency_mode_is_on(void)
+{
+       int mode = 0;
+
+       if (vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &mode) == 0) {
+               if (mode == SETTING_PSMODE_EMERGENCY)
+                       return 1;
+
+       }
+
+       return 0;
+}
+
+HAPI int quickpanel_emergency_mode_notification_filter(notification_h noti, int is_delete)
+{
+       int priv_id = 0;
+       char *pkgname = NULL;
+
+       notification_get_pkgname(noti, &pkgname);
+       notification_get_id(noti, NULL, &priv_id);
+
+       DBG("Emergency mode filter is called: %s", pkgname);
+       if (!quickpanel_emergency_mode_is_permitted_app(pkgname)) {
+               if (is_delete)
+                       notification_delete_by_priv_id(pkgname, NOTIFICATION_TYPE_NONE, priv_id);
+
+
+               return 1;
+       }
+
+       return 0;
+}
+
+HAPI int quickpanel_emergency_mode_syspopup_launch(void)
+{
+
+       int ret;
+       bundle *b = NULL;
+
+       DBG("");
+
+       b = bundle_create();
+       if (b == NULL)
+               return QP_FAIL;
+
+
+       bundle_add(b, "_MODE_SYSTEM_POPUP_TYPE_", "POPUP_EMERGENCY_PSMODE");
+       ret = syspopup_launch(SETTING_SYSPOPUP, b);
+       if (ret < 0) {
+               ERR("failed to launch syspopup (%s):%d\n", SETTING_SYSPOPUP, ret);
+               bundle_free(b);
+               return QP_FAIL;
+       }
+
+       DBG("");
+
+       bundle_free(b);
+
+       return QP_OK;
+}
diff --git a/src/service/keyboard.c b/src/service/keyboard.c
new file mode 100755 (executable)
index 0000000..008c19b
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <vconf.h>
+#include <Ecore_Input.h>
+#include <feedback.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <notification.h>
+#include <notification_setting_internal.h>
+
+
+#include "quickpanel-ui.h" // appdata
+#include "common_uic.h"
+#include "common.h"
+#include "noti_util.h"
+#include "keyboard.h"
+
+#define KEY_BACK       "XF86Back"
+#define KEY_CANCEL     "Cancel"
+#define KEY_MENU       "XF86Menu"
+#define KEY_QUICKPANEL "XF86QuickPanel"
+#define KEY_HOME       "XF86Home"
+
+static Eina_Bool _service_hardkey_up_cb(void *data, int type, void *event)
+{
+       struct appdata *ad = NULL;
+       Ecore_Event_Key *key_event = NULL;
+
+       retif(data == NULL || event == NULL, EINA_FALSE, "Invalid parameter!");
+       ad = data;
+       key_event = event;
+
+       if (!strcmp(key_event->keyname, KEY_HOME)) {
+               if (ad->is_hardkey_cancel == EINA_FALSE)
+                       quickpanel_uic_close_quickpanel(false, 0);
+               else
+                       DBG("Cancel status, do nothing");
+
+       } else if (!strcmp(key_event->keyname, KEY_CANCEL)) {
+               ad->is_hardkey_cancel = EINA_FALSE;
+       } else if (!strcmp(key_event->keyname, KEY_BACK)) {
+               if (ad->popup != NULL) {
+                       Evas_Smart_Cb back_cb = evas_object_data_get(ad->popup, EDATA_BACKKEY_CB);
+                       if (back_cb != NULL)
+                               back_cb(ad->popup, ad->popup, NULL);
+
+
+               } else {
+                       quickpanel_uic_close_quickpanel(false, 0);
+               }
+       }
+       return EINA_FALSE;
+}
+
+static Eina_Bool _service_hardkey_down_cb(void *data, int type, void *event)
+{
+       Ecore_Event_Key *key_event = event;
+       struct appdata *ad = data;
+       retif(key_event == NULL, EINA_FALSE, "Invalid parameter!");
+       retif(ad == NULL, EINA_FALSE, "Invalid parameter!");
+
+       if (!strcmp(key_event->keyname, KEY_CANCEL))
+               ad->is_hardkey_cancel = EINA_TRUE;
+       else if (!strcmp(key_event->keyname, KEY_QUICKPANEL))
+               quickpanel_uic_toggle_openning_quickpanel();
+
+
+       return EINA_FALSE;
+}
+
+HAPI void quickpanel_keyboard_init(void *data)
+{
+       struct appdata *ad = data;
+       Ecore_Event_Handler *hdl_key_down = NULL;
+       Ecore_Event_Handler *hdl_key_up = NULL;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (elm_win_keygrab_set(ad->win, KEY_QUICKPANEL, 0, 0, 0, ELM_WIN_KEYGRAB_SHARED) == EINA_FALSE)
+               ERR("failed to grab KEY_QUICKPANEL");
+
+
+       hdl_key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _service_hardkey_down_cb, ad);
+       if (hdl_key_down == NULL)
+               ERR("failed to add handler(ECORE_EVENT_KEY_DOWN)");
+
+
+       ad->hdl_hardkey_down = hdl_key_down;
+
+       hdl_key_up = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _service_hardkey_up_cb, ad);
+       if (hdl_key_up == NULL)
+               ERR("failed to add handler(ECORE_EVENT_KEY_UP)");
+
+
+       ad->hdl_hardkey_up = hdl_key_up;
+       ad->is_hardkey_cancel = EINA_FALSE;
+}
+
+HAPI void quickpanel_keyboard_fini(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (ad->hdl_hardkey_up != NULL) {
+               ecore_event_handler_del(ad->hdl_hardkey_up);
+               ad->hdl_hardkey_up = NULL;
+       }
+
+       if (ad->hdl_hardkey_down != NULL) {
+               ecore_event_handler_del(ad->hdl_hardkey_down);
+               ad->hdl_hardkey_down = NULL;
+       }
+
+       if (elm_win_keygrab_unset(ad->win, KEY_QUICKPANEL, 0, 0) == EINA_FALSE)
+               ERR("failed to ungrab KEY_QUICKPANEL");
+
+
+}
+
+HAPI void quickpanel_keyboard_openning_init(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (elm_win_keygrab_set(ad->win, KEY_BACK, 0, 0, 0, ELM_WIN_KEYGRAB_EXCLUSIVE)  == EINA_FALSE)
+               ERR("failed to grab KEY_BACK");
+
+
+       if (elm_win_keygrab_set(ad->win, KEY_MENU, 0, 0, 0, ELM_WIN_KEYGRAB_EXCLUSIVE) == EINA_FALSE)
+               ERR("failed to grab KEY_MENU");
+
+
+       if (elm_win_keygrab_set(ad->win, KEY_HOME, 0, 0, 0, ELM_WIN_KEYGRAB_SHARED)  == EINA_FALSE)
+               ERR("failed to grab KEY_HOME");
+
+
+}
+
+HAPI void quickpanel_keyboard_closing_fini(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (elm_win_keygrab_unset(ad->win, KEY_BACK, 0, 0) == EINA_FALSE)
+               ERR("failed to ungrab KEY_BACK");
+
+
+       if (elm_win_keygrab_unset(ad->win, KEY_MENU, 0, 0) == EINA_FALSE)
+               ERR("failed to ungrab KEY_MENU");
+
+
+       if (elm_win_keygrab_unset(ad->win, KEY_HOME, 0, 0) == EINA_FALSE)
+               ERR("failed to ungrab KEY_HOME");
+
+}
+
+
diff --git a/src/service/noti_led.c b/src/service/noti_led.c
new file mode 100755 (executable)
index 0000000..98dcba6
--- /dev/null
@@ -0,0 +1,378 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+
+#include <vconf.h>
+#include <notification.h>
+#include <notification_internal.h>
+#include <notification_setting_internal.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "noti_util.h"
+#include "noti_led.h"
+#include "noti_node.h"
+
+#define LED_ON 1
+#define LED_OFF 0
+#define LED_MISSED_NOTI        5
+
+typedef struct _QP_LED {
+       int priv_id;
+       notification_led_op_e op;
+       int argb;
+       int timestamp;
+       int time_on;
+       int time_off;
+} QP_LED_T;
+
+static struct _s_led_info {
+       Eina_List *list;
+       int is_turned_on;
+} s_led_info = {
+       .list = NULL,
+       .is_turned_on = 0,
+};
+
+static QP_LED_T * _led_entry_new(int priv_id, notification_led_op_e op, int argb, int time_on, int time_off)
+{
+       QP_LED_T *led_entry = (QP_LED_T *)calloc(1, sizeof(QP_LED_T));
+
+       retif(led_entry == NULL, NULL, "failed to memory allocation");
+
+       led_entry->priv_id = priv_id;
+       led_entry->op = op;
+       led_entry->argb = argb;
+       led_entry->time_on = (time_on <= 0) ? -1 : time_on ;
+       led_entry->time_off = (time_off <= 0) ? -1 : time_off;
+       led_entry->timestamp = (int)time(NULL);
+
+       return led_entry;
+}
+
+static void _led_entry_del(QP_LED_T *led_entry)
+{
+       retif(led_entry == NULL, , "invalid parameter");
+
+       free(led_entry);
+}
+
+static int _led_list_sort_cb(const void *data1, const void *data2)
+{
+       QP_LED_T *entry_1 = (QP_LED_T *)data1;
+       QP_LED_T *entry_2 = (QP_LED_T *)data2;
+
+       if (entry_1 == NULL || entry_2 == NULL)
+               return 0;
+
+
+       return entry_2->timestamp - entry_1->timestamp;
+}
+
+static void _led_list_add(QP_LED_T *led_entry)
+{
+       retif(led_entry == NULL, , "invalid parameter");
+
+       s_led_info.list = eina_list_sorted_insert(s_led_info.list, _led_list_sort_cb, led_entry);
+}
+
+static void _led_list_del(QP_LED_T *led_entry)
+{
+       retif(led_entry == NULL, , "invalid parameter");
+
+       s_led_info.list = eina_list_remove(s_led_info.list, led_entry);
+}
+
+static void _led_list_sort(void)
+{
+       retif(s_led_info.list == NULL, , "invalid parameter");
+
+       s_led_info.list = eina_list_sort(s_led_info.list, 0, _led_list_sort_cb);
+}
+
+static QP_LED_T *_led_list_find_by_priv_id(int priv_id)
+{
+       Eina_List *l;
+       Eina_List *n;
+       QP_LED_T *led_entry = NULL;
+
+       retif(s_led_info.list == NULL, NULL, "invalid parameter");
+
+       EINA_LIST_FOREACH_SAFE(s_led_info.list, l, n, led_entry) {
+               if (led_entry != NULL) {
+                       if (led_entry->priv_id == priv_id) return led_entry;
+               }
+       }
+
+       return NULL;
+}
+
+static void _led_list_clean_up(void)
+{
+       Eina_List *l;
+       Eina_List *n;
+       QP_LED_T *led_entry = NULL;
+       Eina_List *list_temp = NULL;
+
+       retif(s_led_info.list == NULL, , "invalid parameter");
+
+       list_temp = s_led_info.list;
+       s_led_info.list = NULL;
+       EINA_LIST_FOREACH_SAFE(list_temp, l, n, led_entry) {
+               if (led_entry != NULL)
+                       _led_entry_del(led_entry);
+
+       }
+
+       eina_list_free(list_temp);
+
+}
+
+static QP_LED_T *_led_list_get_first(void)
+{
+       return eina_list_nth(s_led_info.list, 0);
+}
+
+static inline int _is_led_enabled(void)
+{
+       int ret = -1;
+       int status = 1;
+
+       ret = vconf_get_bool(VCONFKEY_SETAPPL_LED_INDICATOR_NOTIFICATIONS, &status);
+
+       if (ret == 0) {
+               if (status == 0) {
+                       ERR("LED notification turned off");
+                       return 0;
+               }
+       } else {
+               ERR("failed to get value of VCONFKEY_SETAPPL_LED_INDICATOR_NOTIFICATIONS:%d", ret);
+       }
+
+       return 1;
+}
+
+static int _led_set_mode(int mode, bool val, int on, int off, unsigned int color)
+{
+       // TODO: Kiran device does not support front led.
+       // Because H/W is not fixed, if led should work, use dbus method call.
+       //
+       // bus name : org.tizen.system.deviced
+       // object path : /Org/Tizen/System/DeviceD/Led
+       // interface name : org.tizen.system.deviced.Led
+       // method name : SetMode
+       // input argument : "iiiiu" (int32:mode,
+       //                                                      int32:on(1)/off(0),
+       //                                                      int32:[custom]on duty (default:-1),
+       //                                                      int32:[custom]off duty (default:-1),
+       //                                                      uint32:[custom]color (default:0))
+       // mode LED_MISSED_NOTI = 5, LED_VOICE_RECORDING = 6, LED_REMOTE_CONTROLLER = 7, LED_AIR_WAKEUP = 8
+       // custom : only support for MISSED_NOTI and VOICE_RECORDING case
+       // output argument : "i" (int32:result)
+
+       return -1;
+}
+
+static void _noti_led_on(QP_LED_T *led_entry)
+{
+       int ret = 0;
+       retif(led_entry == NULL, , "Invalid data");
+
+       DBG("turn on LED with OP:%d ARGB:%x ON:%d OFF:%d",
+                       led_entry->op, led_entry->argb, led_entry->time_on, led_entry->time_off);
+
+       if (led_entry->op == NOTIFICATION_LED_OP_ON) {
+               if ((ret = _led_set_mode(LED_MISSED_NOTI, LED_ON, led_entry->time_on, led_entry->time_off, 0)) == -1)
+                       ERR("failed led_set_mode:%d", ret);
+               else
+                       s_led_info.is_turned_on = 1;
+
+       } else if (led_entry->op == NOTIFICATION_LED_OP_ON_CUSTOM_COLOR) {
+               if ((ret = _led_set_mode(LED_MISSED_NOTI, LED_ON, led_entry->time_on, led_entry->time_off, led_entry->argb)) == -1)
+                       ERR("failed led_set_mode:%d", ret);
+               else
+                       s_led_info.is_turned_on = 1;
+
+       } else {
+               ERR("NOTIFICATION_LED_OP_OFF");
+       }
+}
+
+static void _noti_led_off(int is_force)
+{
+       int ret = 0;
+
+       ERR("try to turn off LED");
+       retif(s_led_info.is_turned_on == 0 && is_force == 1, , "LED already turned off");
+
+       if ((ret = _led_set_mode(LED_MISSED_NOTI, LED_OFF, 0, 0, 0)) == -1)
+               ERR("failed led_set_mode:%d", ret);
+       else
+               s_led_info.is_turned_on = 0;
+
+}
+
+HAPI void quickpanel_noti_led_proc(notification_h noti, int op_type)
+{
+       int priv_id = 0;
+       int led_argb = 0;
+       int time_on = 0;
+       int time_off = 0;
+       QP_LED_T *led_entry = NULL;
+       notification_led_op_e led_op = -1;
+       retif(noti == NULL, , "Invalid parameter!");
+
+       notification_get_id(noti, NULL, &priv_id);
+       notification_get_led(noti, &led_op, &led_argb);
+       notification_get_led_time_period(noti, &time_on, &time_off);
+
+       DBG("on:%d off:%d", time_on, time_off);
+
+       if (op_type == NOTIFICATION_OP_INSERT || op_type == NOTIFICATION_OP_UPDATE) {
+               led_entry = _led_list_find_by_priv_id(priv_id);
+               if (led_entry != NULL) {
+                       if (led_op == NOTIFICATION_LED_OP_OFF) {
+                               _led_list_del(led_entry);
+                               _led_entry_del(led_entry);
+                       } else {
+                               led_entry->op = led_op;
+                               led_entry->argb = led_argb;
+                               led_entry->time_on = (time_on <= 0) ? -1 : time_on ;
+                               led_entry->time_off = (time_off <= 0) ? -1 : time_off;
+                               led_entry->timestamp = (int)time(NULL);
+                               _led_list_sort();
+                       }
+               } else {
+                       if (led_op >= NOTIFICATION_LED_OP_ON) {
+                               led_entry = _led_entry_new(priv_id, led_op, led_argb, time_on, time_off);
+                               _led_list_add(led_entry);
+                       }
+               }
+       } else if (op_type == NOTIFICATION_OP_DELETE) {
+               led_entry = _led_list_find_by_priv_id(priv_id);
+               if (led_entry != NULL) {
+                       _led_list_del(led_entry);
+                       _led_entry_del(led_entry);
+               }
+       }
+
+       //turn on or off LED
+       if (_is_led_enabled() == 1) {
+               led_entry = _led_list_get_first();
+               if (led_entry != NULL)
+                       _noti_led_on(led_entry);
+               else
+                       _noti_led_off(0);
+
+       } else {
+               _noti_led_off(0);
+       }
+}
+
+static void _led_option_vconf_cb(keynode_t *node, void *data)
+{
+       QP_LED_T *led_entry = NULL;
+
+       if (_is_led_enabled() == 1) {
+               DBG("led notification is enabled");
+               led_entry = _led_list_get_first();
+               if (led_entry != NULL) {
+                       DBG("try to turn on LED, op:%d argb:%x", led_entry->op, led_entry->argb);
+                       _noti_led_on(led_entry);
+               } else {
+                       _noti_led_off(1);
+               }
+       } else {
+               DBG("led notification is disabled");
+               _noti_led_off(1);
+       }
+}
+
+static void _led_init_data_cb(gpointer key, gpointer value, gpointer user_data)
+{
+       int priv_id = 0;
+       int led_argb = 0;
+       int time_on = 0;
+       int time_off = 0;
+       notification_led_op_e led_op = -1;
+       noti_node_item *node = (noti_node_item *)value;
+       retif(node == NULL, , "Invalid parameter!");
+       retif(node->noti == NULL, , "Invalid parameter!");
+
+       notification_get_id(node->noti, NULL, &priv_id);
+       notification_get_led(node->noti, &led_op, &led_argb);
+       notification_get_led_time_period(node->noti, &time_on, &time_off);
+       if (led_op >= NOTIFICATION_LED_OP_ON) {
+               QP_LED_T *new_entry = _led_entry_new(priv_id, led_op, led_argb, time_on, time_off);
+               _led_list_add(new_entry);
+       }
+}
+
+static void _led_init_data(noti_node *nodes)
+{
+       QP_LED_T *led_entry = NULL;
+       retif(nodes == NULL, , "Invalid parameter!");
+       retif(nodes->table == NULL, , "Invalid parameter!");
+
+       g_hash_table_foreach(nodes->table, _led_init_data_cb, NULL);
+
+       if (_is_led_enabled() == 1) {
+               led_entry = _led_list_get_first();
+               if (led_entry != NULL)
+                       _noti_led_on(led_entry);
+               else
+                       _noti_led_off(1);
+
+       } else {
+               _noti_led_off(1);
+       }
+}
+
+HAPI void quickpanel_noti_led_init(void *data, void *nodes)
+{
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_LED_INDICATOR_NOTIFICATIONS, _led_option_vconf_cb, ad);
+
+       if (ret != 0)
+               ERR("failed to notify key[%s] : %d", VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, ret);
+
+
+       if (nodes != NULL)
+               _led_init_data((noti_node *)nodes);
+
+}
+
+HAPI void quickpanel_noti_led_fini(void *data)
+{
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_LED_INDICATOR_NOTIFICATIONS, _led_option_vconf_cb);
+       if (ret != 0)
+               ERR("failed to ignore key[%s] : %d", VCONFKEY_SETAPPL_LED_INDICATOR_NOTIFICATIONS, ret);
+
+
+       _led_list_clean_up();
+}
diff --git a/src/service/reminder.c b/src/service/reminder.c
new file mode 100755 (executable)
index 0000000..51e6918
--- /dev/null
@@ -0,0 +1,310 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+
+#include <alarm.h>
+#include <time.h>
+#include <vconf.h>
+#include <system_settings.h>
+#include <notification.h>
+#include <notification_internal.h>
+#include <notification_setting_internal.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <feedback.h>
+#include <player.h>
+
+#include "quickpanel-ui.h"
+#include "common_uic.h"
+#include "common.h"
+#include "noti_node.h"
+#include "media.h"
+#include "noti.h"
+
+#define REMINDER_MIN_INTERVAL 2
+
+static struct info {
+       int alarm_id;
+} s_info = {
+       .alarm_id = -1,
+};
+
+static void _feedback_sound_play(void)
+{
+       int ret = 0;
+       noti_node_item *node = NULL;
+       notification_h noti;
+       int priv_id = 0;
+       const char *nsound_path = NULL;
+       notification_sound_type_e nsound_type = NOTIFICATION_SOUND_TYPE_NONE;
+       int is_play_default = 0;
+
+       // check first noti sound
+       node = quickpanel_noti_node_get_first_noti();
+       if (node) {
+               noti = node->noti;
+               if (noti) {
+                       notification_get_id(noti, NULL, &priv_id);
+                       notification_get_sound(noti, &nsound_type, &nsound_path);
+                       DBG("reminded notification sound type[%d] path[%s]", nsound_type, nsound_path);
+
+                       switch (nsound_type) {
+                       case NOTIFICATION_SOUND_TYPE_USER_DATA:
+                               /*
+                                *  if user data file isn't playable, play the default ringtone
+                                */
+                               if (nsound_path != NULL) {
+                                       if (quickpanel_media_playable_check(nsound_path) == EINA_TRUE) {
+                                               ret = quickpanel_media_player_play(SOUND_TYPE_NOTIFICATION, nsound_path);
+                                               if (ret == PLAYER_ERROR_NONE) {
+                                                       quickpanel_media_player_id_set(priv_id);
+                                               } else {
+                                                       ERR("failed to play notification sound[%d]", ret);
+                                                       is_play_default = 1;
+                                               }
+                                       }
+                               }
+                               break;
+                       case NOTIFICATION_SOUND_TYPE_DEFAULT:
+                               is_play_default = 1;
+                               break;
+                       case NOTIFICATION_SOUND_TYPE_NONE:
+                               break;
+                       }
+               }
+       }
+
+       if (is_play_default) {
+               char *default_msg_tone = NULL;
+
+               ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION, &default_msg_tone);
+               msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "ailed to set key(%s) : %d", "SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION", ret);
+               DBG("Reminded setting sound[%s]", default_msg_tone);
+
+               if (default_msg_tone != NULL) {
+                       ret = quickpanel_media_player_play(SOUND_TYPE_NOTIFICATION, default_msg_tone);
+                       free(default_msg_tone);
+                       quickpanel_media_player_id_set(0);
+                       if (ret != PLAYER_ERROR_NONE)
+                               ERR("failed to play feedback sound");
+
+               }
+
+               if (quickpanel_media_is_vib_enabled() == 1)
+                       feedback_play_type(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_MESSAGE);
+
+       }
+}
+
+static int _reminder_interval_get(void)
+{
+       int key = 0;
+       int min = 0;
+       int ret = -1;
+
+       ret = vconf_get_int(VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &key);
+       retif(ret != 0, 0, "failed to get vconf VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT");
+
+       switch (key) {
+       case 1:
+               min = 2;
+               break;
+       case 2:
+               min = 5;
+               break;
+       case 3:
+               min = 10;
+               break;
+       }
+
+       DBG("interval:%d", min);
+
+       return min;
+}
+
+static int _alarm_delete_cb(alarm_id_t id, void * user_param)
+{
+       int ret = ALARMMGR_RESULT_SUCCESS;
+
+       ret = alarmmgr_remove_alarm(id);
+       if (ret != ALARMMGR_RESULT_SUCCESS)
+               ERR("alarmmgr_enum_alarm_ids() failed");
+
+
+       return 0;
+}
+
+static void _alarm_unset(void)
+{
+       int ret = ALARMMGR_RESULT_SUCCESS;
+
+       if (s_info.alarm_id != -1) {
+               ERR("try to delete alarm_id(%d)", s_info.alarm_id);
+               ret = alarmmgr_remove_alarm(s_info.alarm_id);
+               if (ret != ALARMMGR_RESULT_SUCCESS) {
+                       ERR("alarmmgr_remove_alarm(%d) failed", s_info.alarm_id);
+                       ret = alarmmgr_enum_alarm_ids(_alarm_delete_cb, NULL);
+                       if (ret != ALARMMGR_RESULT_SUCCESS)
+                               ERR("alarmmgr_enum_alarm_ids() failed");
+
+               }
+               s_info.alarm_id = -1;
+       }
+}
+
+static Eina_Bool _alarm_set_from_now(int min, void *data)
+{
+       int ret = ALARMMGR_RESULT_SUCCESS;
+       time_t current_time;
+       struct tm current_tm;
+       alarm_entry_t *alarm_info = NULL;
+       alarm_id_t alarm_id;
+       alarm_date_t alarm_time;
+
+       /* delete before registering alarm ids */
+       _alarm_unset();
+
+       /* set alarm after sec */
+       time(&current_time);
+
+       DBG(" %s, after %d MIN alarm set", ctime(&current_time), min);
+       localtime_r(&current_time, &current_tm);
+
+       alarm_info = alarmmgr_create_alarm();
+       if (alarm_info == NULL) {
+               ERR("alarmmgr_create_alarm() is failed\n");
+               return EINA_FALSE;
+       }
+
+       alarm_time.year = 0;
+       alarm_time.month = 0;
+       alarm_time.day = 0;
+       alarm_time.hour = current_tm.tm_hour;
+       alarm_time.min = current_tm.tm_min + min;
+       alarm_time.sec = current_tm.tm_sec;
+
+       alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_ONCE, 0);
+       alarmmgr_set_time(alarm_info, alarm_time);
+       alarmmgr_set_type(alarm_info, ALARM_TYPE_VOLATILE);
+
+       ret = alarmmgr_add_alarm_with_localtime(alarm_info, NULL, &alarm_id);
+       if (ret != ALARMMGR_RESULT_SUCCESS) {
+               ERR("alarmmgr_add_alarm_with_localtime() failed:%d", ret);
+               alarmmgr_free_alarm(alarm_info) ;
+               return EINA_FALSE;
+       }
+
+       DBG("alarm id(%d) is set", alarm_id);
+       s_info.alarm_id = alarm_id;
+       alarmmgr_free_alarm(alarm_info) ;
+
+       return EINA_TRUE;
+}
+
+static int _alarm_cb(alarm_id_t alarm_id, void *data)
+{
+       DBG("");
+
+       int min = _reminder_interval_get();
+
+       if (min >= REMINDER_MIN_INTERVAL)
+               _alarm_set_from_now(min, data);
+       else
+               _alarm_unset();
+
+
+       if (!quickpanel_uic_is_opened())
+               _feedback_sound_play();
+       else
+               ERR("quickpanel is opened, skip remind sound");
+
+       return 1;
+}
+
+static void _alarm_setting_changed_cb(keynode_t *key, void* data)
+{
+       int min = _reminder_interval_get();
+
+       if (quickpanel_noti_get_count() <= 0) {
+               _alarm_unset();
+       } else {
+               if (min >= REMINDER_MIN_INTERVAL)
+                       _alarm_set_from_now(min, data);
+               else
+                       _alarm_unset();
+
+       }
+}
+
+HAPI void quickpanel_reminder_init(void *data)
+{
+       DBG("");
+
+       int ret = 0;
+
+       ret = alarmmgr_init("org.tizen.quickpanel");
+       retif(ret < 0, , "alarmmgr_init() failed (%d)", ret);
+
+       ret = alarmmgr_set_cb(_alarm_cb, NULL);
+       retif(ret < 0, , "alarmmgr_init() failed (%d)", ret);
+
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT,
+                       _alarm_setting_changed_cb, data);
+
+       if (ret != 0)
+               ERR("failed to register a cb key:%s err:%d",
+                               "VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT", ret);
+
+
+       s_info.alarm_id = -1;
+}
+
+HAPI void quickpanel_reminder_fini(void *data)
+{
+       DBG("");
+
+       int ret = 0;
+
+       _alarm_unset();
+
+       alarmmgr_fini();
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, _alarm_setting_changed_cb);
+       if (ret != 0)
+               ERR("failed to unregister a cb key:%s err:%d", "VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT", ret);
+
+}
+
+HAPI void quickpanel_reminder_start(void *data)
+{
+       DBG("");
+
+       int min = _reminder_interval_get();
+
+       if (min >= REMINDER_MIN_INTERVAL)
+               _alarm_set_from_now(min, data);
+
+}
+
+HAPI void quickpanel_reminder_stop(void *data)
+{
+       DBG("");
+
+       _alarm_unset();
+}
diff --git a/src/service/uninstall.c b/src/service/uninstall.c
new file mode 100755 (executable)
index 0000000..6996861
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <Eina.h>
+
+#include <vconf.h>
+#include <package_manager.h>
+#include <notification.h>
+#include <notification_internal.h>
+#include <badge.h>
+
+#include "common.h"
+#include "uninstall.h"
+
+typedef struct _pkg_event {
+       char *pkgname;
+       int is_done;
+} Pkg_Event;
+
+static struct _s_info {
+       package_manager_h client;
+       Eina_List *event_list;
+} s_info = {
+       .client = NULL,
+       .event_list = NULL,
+};
+
+static void _item_del(Pkg_Event *item_event)
+{
+       if (item_event != NULL)
+               free(item_event->pkgname);
+
+       free(item_event);
+}
+
+static int _is_item_exist(const char *pkgid, int remove_if_exist)
+{
+       int ret = 0;
+       Eina_List *l = NULL;
+       Pkg_Event *event_item = NULL;
+       retif(pkgid == NULL, 0, "invalid parameter");
+
+       EINA_LIST_FOREACH(s_info.event_list, l, event_item) {
+               if (event_item != NULL) {
+                       if (strcmp(event_item->pkgname, pkgid) == 0) {
+                               ret = 1;
+                               break;
+                       }
+               }
+       }
+
+       if (ret == 1 && remove_if_exist == 1) {
+               s_info.event_list = eina_list_remove(s_info.event_list, event_item);
+               _item_del(event_item);
+       }
+
+       return ret;
+}
+
+static void _pkgmgr_event_cb(const char *type, const char *package,
+       package_manager_event_type_e event_type,
+       package_manager_event_state_e event_state, int progress,
+       package_manager_error_e error, void *user_data)
+{
+       if (error != PACKAGE_MANAGER_ERROR_NONE) {
+               ERR("_pkgmgr_event_cb error in cb");
+               return;
+       }
+
+       if (event_type != PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL) {
+               ERR("event_type is PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL");
+               return;
+       }
+
+       DBG("type : %s event_type:%d event_state:%d [%s]", type, event_type, event_state, package);
+
+       if (event_state == PACKAGE_MANAGER_EVENT_STATE_STARTED) {
+
+               DBG("Pkg:%s is being uninstalled", package);
+
+               Pkg_Event *event = calloc(1, sizeof(Pkg_Event));
+               if (event != NULL) {
+                       event->pkgname = strdup(package);
+                       s_info.event_list = eina_list_append(s_info.event_list, event);
+               } else {
+                       ERR("failed to create event item");
+               }
+       } else if (event_state == PACKAGE_MANAGER_EVENT_STATE_COMPLETED) {
+
+               if (_is_item_exist(package, 1) == 1) {
+                       DBG("Pkg:%s is uninstalled, delete related resource", package);
+
+                       notification_delete_all_by_type(package, NOTIFICATION_TYPE_NOTI);
+                       notification_delete_all_by_type(package, NOTIFICATION_TYPE_ONGOING);
+                       badge_remove(package);
+               }
+       }
+}
+
+
+HAPI void quickpanel_uninstall_init(void *data)
+{
+       int ret = -1;
+
+       ret = package_manager_create(&s_info.client);
+       if (ret == PACKAGE_MANAGER_ERROR_NONE) {
+               if (package_manager_set_event_cb(s_info.client, (void*)_pkgmgr_event_cb, data) != PACKAGE_MANAGER_ERROR_NONE)
+                       ERR("Failed to set package manager event:%d", ret);
+
+       } else {
+               ERR("Failed to create package manager : %d ", ret);
+       }
+
+}
+
+HAPI void quickpanel_uninstall_fini(void *data)
+{
+       int ret = -1;
+
+       Pkg_Event *event_item = NULL;
+
+       ret = package_manager_destroy(s_info.client);
+       if (ret != PACKAGE_MANAGER_ERROR_NONE)
+               ERR("Failed to destory package manager:%d", ret);
+
+
+       EINA_LIST_FREE(s_info.event_list, event_item) {
+               _item_del(event_item);
+       }
+       s_info.event_list = NULL;
+}
diff --git a/src/settings/modules/bluetooth.c b/src/settings/modules/bluetooth.c
new file mode 100755 (executable)
index 0000000..ec55997
--- /dev/null
@@ -0,0 +1,284 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <bluetooth.h>
+#include <vconf.h>
+#include <bluetooth_internal.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "common_uic.h"
+#include "quickpanel-ui.h"
+#include "settings.h"
+#include "setting_utils.h"
+#include "setting_module_api.h"
+#include "settings_icon_common.h"
+
+#define BUTTON_LABEL _("IDS_ST_BUTTON2_BLUETOOTH_ABB")
+#define BUTTON_ICON_NORMAL "quick_icon_bluetooth.png"
+#define BUTTON_ICON_HIGHLIGHT NULL
+#define BUTTON_ICON_DIM NULL
+
+int bt_service = BT_ERROR_NONE;
+
+static void _mouse_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+
+static const char *_label_get(void)
+{
+       return BUTTON_LABEL;
+}
+
+static const char *_icon_get(qp_setting_icon_image_type type)
+{
+       if (type == QP_SETTING_ICON_NORMAL) {
+               return BUTTON_ICON_NORMAL;
+       } else if (type == QP_SETTING_ICON_HIGHLIGHT) {
+               return BUTTON_ICON_HIGHLIGHT;
+       } else if (type == QP_SETTING_ICON_DIM) {
+#ifdef BUTTON_ICON_DIM
+               return BUTTON_ICON_DIM;
+#endif
+       }
+
+       return NULL;
+}
+
+static void _long_press_cb(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       if (bt_service == BT_ERROR_NOT_SUPPORTED) {
+               quickpanel_setting_show_not_supported_message();
+               return;
+       }
+
+       if (quickpanel_setting_module_is_immediate_actionable(module, QP_SETTING_ICON_LONGPRESSED) == false)
+               return;
+
+       quickpanel_setting_icon_handler_longpress(module->setting_pkgname, NULL, NULL);
+}
+
+static void _view_update(Evas_Object *view, int state, int flag_extra_1, int flag_extra_2)
+{
+       Evas_Object *image = NULL;
+       const char *icon_path = NULL;
+
+       quickpanel_setting_icon_state_set(view, state);
+
+       if (state == ICON_VIEW_STATE_ON) {
+#ifdef BUTTON_ICON_HIGHLIGHT
+               icon_path = BUTTON_ICON_HIGHLIGHT;
+#endif
+       } else if (state == ICON_VIEW_STATE_DIM) {
+#ifdef BUTTON_ICON_DIM
+               icon_path = BUTTON_ICON_DIM;
+#endif
+       } else {
+               icon_path = BUTTON_ICON_NORMAL;
+       }
+
+       if (icon_path == NULL)
+               icon_path = BUTTON_ICON_NORMAL;
+
+       image = quickpanel_setting_icon_image_new(view, icon_path);
+       quickpanel_setting_icon_content_set(view, image);
+       quickpanel_setting_icon_text_set(view, BUTTON_LABEL, state);
+}
+
+static void _status_update(QP_Module_Setting *module, int flag_extra_1, int flag_extra_2)
+{
+       int ret = 0;
+       bt_adapter_state_e adapter_state = BT_ADAPTER_DISABLED;
+       retif(module == NULL, , "Invalid parameter!");
+
+       ret = bt_adapter_get_state(&adapter_state);
+       if (ret != BT_ERROR_NONE)
+               DBG("bt_adapter_get_state failed [%d]", ret);
+
+
+       if (adapter_state == BT_ADAPTER_ENABLED)
+               quickpanel_setting_module_icon_state_set(module, ICON_VIEW_STATE_ON);
+       else
+               quickpanel_setting_module_icon_state_set(module, ICON_VIEW_STATE_OFF);
+
+
+       quickpanel_setting_module_progress_mode_set(module, FLAG_DISABLE, FLAG_TURN_OFF);
+       quickpanel_setting_module_icon_timer_del(module);
+
+       quickpanel_setting_module_icon_view_update(module,
+                       quickpanel_setting_module_icon_state_get(module),
+                       FLAG_VALUE_VOID);
+}
+
+static void _state_change(QP_Module_Setting *module)
+{
+       int ret = 0;
+       bool is_on = 0;
+
+       if (quickpanel_setting_module_icon_state_get(module) == ICON_VIEW_STATE_ON) {
+               ret = bt_adapter_disable();
+               retif(ret != BT_ERROR_NONE, , "failed to disable BT adapter");
+               is_on = false;
+       } else {
+               ret = bt_adapter_enable();
+               retif(ret != BT_ERROR_NONE, , "failed to enable BT adapter");
+               is_on = true;
+       }
+
+       if (is_on == true)
+               quickpanel_setting_module_progress_mode_set(module, FLAG_ENABLE, FLAG_TURN_ON);
+       else
+               quickpanel_setting_module_progress_mode_set(module, FLAG_ENABLE, FLAG_TURN_OFF);
+
+       quickpanel_setting_module_icon_timer_add(module);
+}
+
+static void _mouse_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       int dpm_state = 0;
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+
+       retif(module == NULL, , "Invalid parameter!");
+
+       if (bt_service == BT_ERROR_NOT_SUPPORTED) {
+               quickpanel_setting_show_not_supported_message();
+               return;
+       }
+
+       if (quickpanel_setting_module_is_icon_clickable(module) == 0)
+               return;
+
+
+       if (quickpanel_setting_module_is_immediate_actionable(module, QP_SETTING_ICON_CLICKED) == 0)
+               return;
+
+
+       if (quickpanel_setting_module_dpm_state_get(module->name, &dpm_state) == 0)
+               return;
+
+
+       if (dpm_state == 0) {
+               quickpanel_setting_module_syspopup_launch(DPM_SYSPOPUP, "id", "bluetooth");
+               return;
+       }
+
+       _state_change(module);
+
+}
+
+static void _bluetooth_status_changed_cb(int result, bt_adapter_state_e adapter_state, void *user_data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)user_data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       INFO("bluetooth state : %d", adapter_state);
+       quickpanel_setting_module_icon_timer_del(module);
+
+       if (result != BT_ERROR_NONE) {
+               ERR("BT adapter operation is failed");
+               _status_update(module, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+               return;
+       }
+
+       _status_update(module, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+}
+
+static int _register_module_event_handler(void *data)
+{
+       int ret = 0;
+
+       ret = bt_initialize();
+       if (ret == BT_ERROR_NOT_SUPPORTED) {
+               bt_service = ret;
+               ERR("BT NOT SUPPORTED");
+               return QP_FAIL;
+       }
+       msgif(ret != BT_ERROR_NONE, "bt_initialize failed");
+
+       ret = bt_adapter_set_state_changed_cb(_bluetooth_status_changed_cb, data);
+       msgif(ret != BT_ERROR_NONE, "bt_adapter_set_state_changed_cb failed");
+
+       return QP_OK;
+}
+
+static int _unregister_module_event_handler(void *data)
+{
+       int ret = 0;
+
+       ret = bt_adapter_unset_state_changed_cb();
+       msgif(ret != BT_ERROR_NONE, "bt_adapter_unset_state_changed_cb failed");
+
+       ret = bt_deinitialize();
+       msgif(ret != BT_ERROR_NONE, "bt_deinitialize failed");
+
+       return QP_OK;
+}
+
+/****************************************************************************
+ *
+ * Quickpanel Item functions
+ *
+ ****************************************************************************/
+static int _init(void *data)
+{
+       int ret = QP_OK;
+
+       ret = _register_module_event_handler(data);
+
+       return ret;
+}
+
+static int _fini(void *data)
+{
+       int ret = QP_OK;
+
+       ret = _unregister_module_event_handler(data);
+
+       return ret;
+}
+
+static void _lang_changed(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_view_update_text(module);
+}
+
+static void _refresh(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_view_update_text(module);
+}
+
+QP_Module_Setting bluetooth = {
+       .name                           = "bluetooth",
+       .setting_pkgname        = "ug-bluetooth-efl",
+       .init                           = _init,
+       .fini                           = _fini,
+       .lang_changed           = _lang_changed,
+       .refresh                        = _refresh,
+       .icon_get                       = _icon_get,
+       .label_get                      = _label_get,
+       .view_update            = _view_update,
+       .status_update          = _status_update,
+       .state_change           = _state_change,
+       .handler_longpress      = _long_press_cb,
+       .handler_press          = _mouse_clicked_cb,
+};
diff --git a/src/settings/modules/gps.c b/src/settings/modules/gps.c
new file mode 100755 (executable)
index 0000000..25e8c8c
--- /dev/null
@@ -0,0 +1,387 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <vconf.h>
+#include <syspopup_caller.h>
+#include <app_control.h>
+#include <locations.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "common_uic.h"
+#include "quickpanel-ui.h"
+#include "settings.h"
+#include "setting_utils.h"
+#include "setting_module_api.h"
+#include "settings_icon_common.h"
+
+
+#define BUTTON_LABEL _("IDS_QP_BUTTON2_LOCATION_ABB")
+#define BUTTON_ICON_NORMAL "quick_icon_location.png"
+#define BUTTON_ICON_HIGHLIGHT NULL
+#define BUTTON_ICON_DIM NULL
+#define OPERATION_SETTING_MENU "http://tizen.org/appcontrol/operation/configure/location"
+#define PACKAGE_SYSPOPUP "gps-syspopup"
+
+static void _mouse_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+
+static const char *_label_get(void)
+{
+       return BUTTON_LABEL;
+}
+
+static const char *_icon_get(qp_setting_icon_image_type type)
+{
+       if (type == QP_SETTING_ICON_NORMAL) {
+               return BUTTON_ICON_NORMAL;
+       } else if (type == QP_SETTING_ICON_HIGHLIGHT) {
+               return BUTTON_ICON_HIGHLIGHT;
+       } else if (type == QP_SETTING_ICON_DIM) {
+#ifdef BUTTON_ICON_DIM
+               return BUTTON_ICON_DIM;
+#endif
+       }
+
+       return NULL;
+}
+
+static void _long_press_cb(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+
+       if (quickpanel_setting_module_is_immediate_actionable(module, QP_SETTING_ICON_LONGPRESSED) == false)
+               return;
+
+       quickpanel_setting_icon_handler_longpress(module->setting_pkgname, NULL, NULL);
+}
+
+static void _gps_syspopup_launch(int is_on)
+{
+       syspopup_launch(PACKAGE_SYSPOPUP, NULL);
+}
+
+static void _view_update(Evas_Object *view, int state, int flag_extra_1, int flag_extra_2)
+{
+       Evas_Object *image = NULL;
+       const char *icon_path = NULL;
+
+       quickpanel_setting_icon_state_set(view, state);
+
+       if (state == ICON_VIEW_STATE_ON) {
+#ifdef BUTTON_ICON_HIGHLIGHT
+               icon_path = BUTTON_ICON_HIGHLIGHT;
+#endif
+       } else if (state == ICON_VIEW_STATE_DIM) {
+#ifdef BUTTON_ICON_DIM
+               icon_path = BUTTON_ICON_DIM;
+#endif
+       } else {
+               icon_path = BUTTON_ICON_NORMAL;
+       }
+
+       if (icon_path == NULL)
+               icon_path = BUTTON_ICON_NORMAL;
+
+       image = quickpanel_setting_icon_image_new(view, icon_path);
+       quickpanel_setting_icon_content_set(view, image);
+       quickpanel_setting_icon_text_set(view, BUTTON_LABEL, state);
+}
+
+static void _status_update(QP_Module_Setting *module, int flag_extra_1, int flag_extra_2)
+{
+       int ret = 0;
+       bool status = 0;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_progress_mode_set(module, FLAG_DISABLE, FLAG_TURN_OFF);
+       quickpanel_setting_module_icon_timer_del(module);
+
+       ret = location_manager_is_enabled_method(LOCATIONS_METHOD_HYBRID, &status);
+       msgif(ret != 0, "fail to get LOCATIONS_METHOD_HYBRID:%d", ret);
+
+       if (status == true)
+               quickpanel_setting_module_icon_state_set(module, ICON_VIEW_STATE_ON);
+       else
+               quickpanel_setting_module_icon_state_set(module, ICON_VIEW_STATE_OFF);
+
+       quickpanel_setting_module_icon_view_update(module,
+                       quickpanel_setting_module_icon_state_get(module),
+                       FLAG_VALUE_VOID);
+}
+
+static void _state_change(QP_Module_Setting *module)
+{
+       int ret = 0;
+       bool enable = 0;
+
+       if (quickpanel_setting_module_icon_state_get(module) == ICON_VIEW_STATE_OFF) {
+               _gps_syspopup_launch(quickpanel_setting_module_icon_state_get(module));
+       } else {
+               // Use my location off
+               ret = location_manager_is_enabled_method(LOCATIONS_METHOD_HYBRID, &enable);
+               if (ret == false) {
+                       if (enable == true) {
+                               ret = location_manager_enable_method(LOCATIONS_METHOD_HYBRID, false);
+                               if (ret != 0)
+                                       ERR("Failed to set LOCATIONS_METHOD_HYBRID[%d]", ret);
+
+                       }
+               } else {
+                       ERR("Failed to get Use my location[%d]", ret);
+               }
+               // GPS off
+               ret = location_manager_is_enabled_method(LOCATIONS_METHOD_GPS, &enable);
+               if (ret == false) {
+                       if (enable == true) {
+                               ret = location_manager_enable_method(LOCATIONS_METHOD_GPS, false);
+                               if (ret != 0)
+                                       ERR("Failed to set LOCATIONS_METHOD_GPS [%d]", ret);
+
+                       }
+               } else {
+                       ERR("Failed to get GPS[%d]", ret);
+               }
+               // Wireless networks off
+               ret = location_manager_is_enabled_method(LOCATIONS_METHOD_WPS, &enable);
+               if (ret == false) {
+                       if (enable == true) {
+                               ret = location_manager_enable_method(LOCATIONS_METHOD_WPS, false);
+                               if (ret != 0)
+                                       ERR("Failed to set LOCATIONS_METHOD_WPS [%d]", ret);
+
+                       }
+               } else {
+                       ERR("Failed to get network[%d]", ret);
+               }
+       }
+}
+
+static void _mouse_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       int dpm_state = 0;
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+
+       retif(module == NULL, , "Invalid parameter!");
+
+       if (quickpanel_setting_module_is_icon_clickable(module) == 0)
+               return;
+
+
+       if (quickpanel_setting_module_dpm_state_get(module->name, &dpm_state) == 0)
+               return;
+
+
+       if (quickpanel_setting_module_is_immediate_actionable(module, QP_SETTING_ICON_CLICKED) == 0)
+               return;
+
+
+       if (dpm_state == 0) {
+               quickpanel_setting_module_syspopup_launch(DPM_SYSPOPUP, "id", "location");
+               return;
+       }
+
+       _state_change(module);
+
+}
+
+static void _gps_vconf_cb(keynode_t *node, void *data)
+{
+       _status_update(data, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+}
+
+static int _register_module_event_handler(void *data)
+{
+       int ret = 0;
+
+       ret = vconf_notify_key_changed(VCONFKEY_LOCATION_USE_MY_LOCATION,
+                       _gps_vconf_cb, data);
+       msgif(ret != 0, "failed to notify key(VCONFKEY_LOCATION_USE_MY_LOCATION) : %d", ret);
+
+       return QP_OK;
+}
+
+static int _unregister_module_event_handler(void *data)
+{
+       int ret = 0;
+
+       ret = vconf_ignore_key_changed(VCONFKEY_LOCATION_USE_MY_LOCATION,
+                       _gps_vconf_cb);
+       msgif(ret != 0, "failed to ignore key(VCONFKEY_LOCATION_USE_MY_LOCATION) : %d", ret);
+
+       return QP_OK;
+}
+
+/****************************************************************************
+ *
+ * Quickpanel Item functions
+ *
+ ****************************************************************************/
+static int _init(void *data)
+{
+       int ret = QP_OK;
+
+       ret = _register_module_event_handler(data);
+
+       return ret;
+}
+
+static int _fini(void *data)
+{
+       int ret = QP_OK;
+
+       ret = _unregister_module_event_handler(data);
+
+       return ret;
+}
+
+static void _lang_changed(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_view_update_text(module);
+}
+
+static void _refresh(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_view_update_text(module);
+}
+
+static void _reset_icon(QP_Module_Setting *module)
+{
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_progress_mode_set(module, FLAG_DISABLE, FLAG_VALUE_VOID);
+       _status_update(module, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+}
+
+static void _handler_on(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_progress_mode_set(module, FLAG_DISABLE, FLAG_TURN_OFF);
+       quickpanel_setting_module_icon_timer_del(module);
+
+       if (quickpanel_setting_module_icon_state_get(module) == ICON_VIEW_STATE_OFF) {
+               quickpanel_setting_module_progress_mode_set(module, FLAG_ENABLE, FLAG_TURN_ON);
+               quickpanel_setting_module_icon_timer_add(module);
+       } else {
+               ERR("the button is already turned on");
+               _reset_icon(module);
+       }
+}
+
+static void _handler_off(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_progress_mode_set(module, FLAG_DISABLE, FLAG_TURN_OFF);
+       quickpanel_setting_module_icon_timer_del(module);
+
+       if (quickpanel_setting_module_icon_state_get(module) == ICON_VIEW_STATE_ON) {
+               quickpanel_setting_module_progress_mode_set(module, FLAG_ENABLE, FLAG_TURN_OFF);
+               quickpanel_setting_module_icon_timer_add(module);
+       } else {
+               ERR("the button is already turned off");
+               _reset_icon(module);
+       }
+}
+
+static void _handler_progress_on(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_progress_mode_set(module, FLAG_ENABLE, FLAG_VALUE_VOID);
+}
+
+static void _handler_progress_off(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       _reset_icon(module);
+}
+
+static int _handler_ipc(const char *command, void *data)
+{
+       int i = 0;
+       retif(data == NULL, EINA_FALSE, "item data is NULL");
+       retif(command == NULL, EINA_FALSE, "command is NULL");
+
+       static Setting_Activity_Handler __table_handler[] = {
+               {
+                       .command = "on",
+                       .handler = _handler_on,
+               },
+               {
+                       .command = "off",
+                       .handler = _handler_off,
+               },
+               {
+                       .command = "progress_on",
+                       .handler = _handler_progress_on,
+               },
+               {
+                       .command = "progress_off",
+                       .handler = _handler_progress_off,
+               },
+               {
+                       .command = NULL,
+                       .handler = NULL,
+               },
+       };
+
+       for (i = 0; __table_handler[i].command; i++) {
+               if (strcasecmp(__table_handler[i].command, command))
+                       continue;
+
+
+               if (__table_handler[i].handler != NULL) {
+                       DBG("process:%s", command);
+                       __table_handler[i].handler(data);
+               }
+               break;
+       }
+
+       return EINA_TRUE;
+}
+
+QP_Module_Setting gps = {
+       .name                           = "gps",
+       .setting_pkgname        = "org.tizen.setting-location",
+       .init                           = _init,
+       .fini                           = _fini,
+       .lang_changed           = _lang_changed,
+       .refresh                        = _refresh,
+       .icon_get                       = _icon_get,
+       .label_get                      = _label_get,
+       .view_update        = _view_update,
+       .status_update          = _status_update,
+       .state_change           = _state_change,
+       .handler_longpress      = _long_press_cb,
+       .handler_ipc        = _handler_ipc,
+       .handler_press          = _mouse_clicked_cb,
+};
diff --git a/src/settings/modules/rotate-lock.c b/src/settings/modules/rotate-lock.c
new file mode 100755 (executable)
index 0000000..8f6faef
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <vconf.h>
+#include <system_settings.h>
+#include <bundle_internal.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "quickpanel-ui.h"
+#include "settings.h"
+#include "setting_utils.h"
+#include "setting_module_api.h"
+#include "settings_icon_common.h"
+
+#define BUTTON_LABEL _("IDS_ST_BUTTON2_AUTO_NROTATE")
+#define BUTTON_ICON_NORMAL "quick_icon_auto_rotate.png"
+#define BUTTON_ICON_HIGHLIGHT NULL
+#define BUTTON_ICON_DIM NULL
+
+static void _mouse_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+
+static const char *_label_get(void)
+{
+       return BUTTON_LABEL;
+}
+
+static const char *_icon_get(qp_setting_icon_image_type type)
+{
+       if (type == QP_SETTING_ICON_NORMAL) {
+               return BUTTON_ICON_NORMAL;
+       } else if (type == QP_SETTING_ICON_HIGHLIGHT) {
+               return BUTTON_ICON_HIGHLIGHT;
+       } else if (type == QP_SETTING_ICON_DIM) {
+#ifdef BUTTON_ICON_DIM
+               return BUTTON_ICON_DIM;
+#endif
+       }
+
+       return NULL;
+}
+
+static void _long_press_cb(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+
+       if (quickpanel_setting_module_is_immediate_actionable(module, QP_SETTING_ICON_LONGPRESSED) == false)
+               return;
+
+       quickpanel_setting_icon_handler_longpress(module->setting_pkgname, "viewtype", "main");
+}
+
+static void _view_update(Evas_Object *view, int state, int flag_extra_1, int flag_extra_2)
+{
+       Evas_Object *image = NULL;
+       const char *icon_path = NULL;
+
+       quickpanel_setting_icon_state_set(view, state);
+
+       if (state == ICON_VIEW_STATE_ON) {
+#ifdef BUTTON_ICON_HIGHLIGHT
+               icon_path = BUTTON_ICON_HIGHLIGHT;
+#endif
+       } else if (state == ICON_VIEW_STATE_DIM) {
+#ifdef BUTTON_ICON_DIM
+               icon_path = BUTTON_ICON_DIM;
+#endif
+       } else {
+               icon_path = BUTTON_ICON_NORMAL;
+       }
+
+       if (icon_path == NULL)
+               icon_path = BUTTON_ICON_NORMAL;
+
+       image = quickpanel_setting_icon_image_new(view, icon_path);
+       quickpanel_setting_icon_content_set(view, image);
+       quickpanel_setting_icon_text_set(view, BUTTON_LABEL, state);
+}
+
+static void _status_update(QP_Module_Setting *module, int flag_extra_1, int flag_extra_2)
+{
+       int ret = 0;
+       bool status = false;
+       retif(module == NULL, , "Invalid parameter!");
+
+       ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO, &status);
+       msgif(ret !=  SYSTEM_SETTINGS_ERROR_NONE , "failed to notify key SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO : %d", ret);
+
+       if (status == true)
+               quickpanel_setting_module_icon_state_set(module, ICON_VIEW_STATE_ON);
+       else
+               quickpanel_setting_module_icon_state_set(module, ICON_VIEW_STATE_OFF);
+
+
+       quickpanel_setting_module_icon_view_update(module, quickpanel_setting_module_icon_state_get(module), FLAG_VALUE_VOID);
+}
+
+static void _mouse_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       int ret = 0;
+       bool status = false;
+
+       ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO, &status);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to notify key SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO : %d", ret);
+
+       ret = system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO, !status);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to notify key SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO : %d", ret);
+}
+
+static void _autorotation_vconf_cb(system_settings_key_e key, void *data)
+{
+       _status_update(data, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+}
+
+static int _register_module_event_handler(void *data)
+{
+       int ret = 0;
+
+       ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO, _autorotation_vconf_cb, data);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to notify key(SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO) : %d", ret);
+
+       return QP_OK;
+}
+
+static int _unregister_module_event_handler(void *data)
+{
+       int ret = 0;
+
+       ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO);
+       msgif(ret != SYSTEM_SETTINGS_ERROR_NONE, "failed to ignore key(SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO) : %d", ret);
+
+       return QP_OK;
+}
+
+/****************************************************************************
+ *
+ * Quickpanel Item functions
+ *
+ ****************************************************************************/
+static int _init(void *data)
+{
+       int ret = QP_OK;
+
+       ret = _register_module_event_handler(data);
+
+       return ret;
+}
+
+static int _fini(void *data)
+{
+       int ret = QP_OK;
+
+       ret = _unregister_module_event_handler(data);
+
+       return ret;
+}
+
+static void _lang_changed(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_view_update_text(module);
+}
+
+static void _refresh(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_view_update_text(module);
+}
+
+QP_Module_Setting rotate = {
+       .name                           = "rotate",
+       .setting_pkgname        = "org.tizen.setting-display",
+       .init                           = _init,
+       .fini                           = _fini,
+       .lang_changed           = _lang_changed,
+       .refresh                        = _refresh,
+       .icon_get                       = _icon_get,
+       .label_get                      = _label_get,
+       .view_update        = _view_update,
+       .status_update          = _status_update,
+       .handler_longpress              = _long_press_cb,
+       .handler_press          = _mouse_clicked_cb,
+};
diff --git a/src/settings/modules/sound-profile.c b/src/settings/modules/sound-profile.c
new file mode 100755 (executable)
index 0000000..8447302
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <vconf.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <feedback.h>
+#include <sound_manager.h>
+
+#include "common_uic.h"
+#include "common.h"
+#include "quickpanel-ui.h"
+#include "settings.h"
+#include "setting_utils.h"
+#include "setting_module_api.h"
+#include "settings_icon_common.h"
+
+#define BUTTON_LABEL _("IDS_QP_BUTTON2_SOUND_ABB")
+#define BUTTON_ICON_SND_NORMAL "quick_icon_sn_vf.png"
+#define BUTTON_ICON_SND_HIGHLIGHT "quick_icon_sn_vf.png"
+#define BUTTON_ICON_MUTE_NORMAL "quick_icon_sf_vf.png"
+#define BUTTON_ICON_VIB_HIGHLIGHT "quick_icon_sf_vn.png"
+#define SAM_LOG_FEATURE_SOUND "ST0C"
+
+typedef enum {
+       SP_STATUS_SOUND,
+       SP_STATUS_VIBRATE,
+       SP_STATUS_MUTE
+} qp_sound_status;
+
+static int g_check_press = 0;
+
+static void _mouse_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+
+static const qp_sound_status _get_sound_status(void)
+{
+       int ret = -1;
+       int sound_status = 1;
+       int vibration_status = 1;
+
+       ret = vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound_status);
+       if (ret != 0)
+               ERR("failed to get sound status(%d), %s", ret, get_error_message(ret));
+
+       ret = vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vibration_status);
+       if (ret != 0)
+               ERR("failed to get vibration status(%d), %s", ret, get_error_message(ret));
+
+       INFO("sound : %d, vibration : %d", sound_status, vibration_status);
+
+       if (sound_status == 1)
+               return SP_STATUS_SOUND;
+       else if (vibration_status == 1)
+               return SP_STATUS_VIBRATE;
+
+
+       return SP_STATUS_MUTE;
+}
+
+static void _set_sound_status(qp_sound_status current_status)
+{
+       int ret = -1;
+       int sound_status = 0;
+       int vibration_status = 0;
+
+       switch (current_status) {
+       case SP_STATUS_SOUND:   // To be VIBRATE
+               INFO("status : SOUND -> VIBRATE ");
+               vibration_status = 1;
+       break;
+
+       case SP_STATUS_VIBRATE: // To be MUTE
+               INFO("status : VIBRATE-> MUTE");
+       break;
+
+       case SP_STATUS_MUTE:    // To be SOUND
+               INFO("status : MUTE-> SOUND");
+               sound_status = 1;
+       break;
+
+       default:
+               INFO("status : OOPS");
+               return;
+       }
+
+       ret = vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, sound_status);
+       msgif(ret != 0, "failed set VCONFKEY_SETAPPL_SOUND_STATUS_BOOL:%d", ret);
+       ret = vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, vibration_status);
+       msgif(ret != 0, "failed set VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL:%d", ret);
+}
+
+
+static const char *_label_get(void)
+{
+       return BUTTON_LABEL;
+}
+
+static const char *_icon_get(qp_setting_icon_image_type type)
+{
+       if (type == QP_SETTING_ICON_NORMAL) {
+               return BUTTON_ICON_SND_NORMAL;
+       } else if (type == QP_SETTING_ICON_HIGHLIGHT) {
+               return BUTTON_ICON_SND_HIGHLIGHT;
+       } else if (type == QP_SETTING_ICON_DIM) {
+#ifdef BUTTON_ICON_DIM
+               return BUTTON_ICON_DIM;
+#endif
+       }
+
+       return NULL;
+}
+
+static void _long_press_cb(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+
+       if (quickpanel_setting_module_is_immediate_actionable(module, QP_SETTING_ICON_LONGPRESSED) == false)
+               return;
+
+       quickpanel_setting_icon_handler_longpress(module->setting_pkgname, NULL, NULL);
+
+}
+
+static void _play_snd_job_cb(void *data)
+{
+       if (feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_SILENT_OFF) != FEEDBACK_ERROR_NONE)
+               ERR("failed to play a sound");
+
+}
+
+static void _play_vib_job_cb(void *data)
+{
+       if (feedback_play_type(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_VIBRATION_ON) != FEEDBACK_ERROR_NONE)
+               ERR("failed to play a vibration");
+
+}
+
+static void _view_update(Evas_Object *view, int state, int flag_extra_1, int flag_extra_2)
+{
+       int icon_state;
+       Evas_Object *image = NULL;
+       const char *text = NULL;
+       const char *img_path = NULL;
+
+       retif(view == NULL, , "Invalid parameter!");
+
+       qp_sound_status sound_status = _get_sound_status();
+
+       INFO("sound status : %d", sound_status);
+
+       switch (sound_status) {
+
+       case SP_STATUS_VIBRATE:
+               icon_state = ICON_VIEW_STATE_ON;
+               text = _("IDS_QP_BUTTON2_VIBRATE");
+               img_path = BUTTON_ICON_VIB_HIGHLIGHT;
+       break;
+
+       case SP_STATUS_MUTE:
+               icon_state = ICON_VIEW_STATE_OFF;
+               text = _("IDS_QP_BUTTON2_MUTE_ABB");
+               img_path = BUTTON_ICON_MUTE_NORMAL;
+       break;
+
+       case SP_STATUS_SOUND:
+       default:
+               icon_state = ICON_VIEW_STATE_ON;
+               text = _("IDS_QP_BUTTON2_SOUND_ABB");
+               img_path = BUTTON_ICON_SND_HIGHLIGHT;
+       break;
+       }
+
+       quickpanel_setting_icon_state_set(view, icon_state);
+       quickpanel_setting_icon_text_set(view, text, icon_state);
+       image = quickpanel_setting_icon_image_new(view, img_path);
+       quickpanel_setting_icon_content_set(view, image);
+
+       if (quickpanel_uic_is_opened() && g_check_press) {
+
+               g_check_press = 0;
+
+               switch (sound_status) {
+               case SP_STATUS_SOUND:
+                       ecore_job_add(_play_snd_job_cb, NULL);
+               break;
+
+               case SP_STATUS_VIBRATE:
+                       ecore_job_add(_play_vib_job_cb, NULL);
+               break;
+
+               case SP_STATUS_MUTE:
+               break;
+               }
+       }
+}
+
+static void _status_update(QP_Module_Setting *module, int flag_extra_1, int flag_extra_2)
+{
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_view_update(module,
+                       quickpanel_setting_module_icon_state_get(module),
+                       FLAG_VALUE_VOID);
+}
+
+static void _mouse_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       g_check_press = 1;
+       _set_sound_status(_get_sound_status());
+}
+
+static void _soundprofile_vconf_cb(keynode_t *node, void *data)
+{
+       _status_update(data, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+}
+
+static int _register_module_event_handler(void *data)
+{
+       int ret = 0;
+
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL,
+                       _soundprofile_vconf_cb, data);
+       msgif(ret != 0,
+                       "failed to vconf_notify_key_changed [%s] -[%d]",
+                       VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, ret);
+
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL,
+                       _soundprofile_vconf_cb, data);
+       msgif(ret != 0,
+                       "failed to vconf_notify_key_changed [%s] -[%d]",
+                       VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, ret);
+
+       return QP_OK;
+}
+
+static int _unregister_module_event_handler(void *data)
+{
+       int ret = 0;
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL,
+                       _soundprofile_vconf_cb);
+       msgif(ret != 0,
+                       "failed to vconf_ignore_key_changed [%s] -[%d]",
+                       VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, ret);
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL,
+                       _soundprofile_vconf_cb);
+       msgif(ret != 0,
+                       "failed to vconf_ignore_key_changed [%s] -[%d]",
+                       VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, ret);
+
+       return QP_OK;
+}
+
+/****************************************************************************
+ *
+ * Quickpanel Item functions
+ *
+ ****************************************************************************/
+static int _init(void *data)
+{
+       int ret = QP_OK;
+
+       ret = _register_module_event_handler(data);
+
+       return ret;
+}
+
+static int _fini(void *data)
+{
+       int ret = QP_OK;
+
+       ret = _unregister_module_event_handler(data);
+
+       return ret;
+}
+
+static void _lang_changed(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_view_update_text(module);
+       _status_update(module, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+}
+
+static void _refresh(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_view_update_text(module);
+       _status_update(module, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+}
+
+
+QP_Module_Setting sound = {
+       .name                           = "sound",
+       .setting_pkgname        = "org.tizen.setting-profile",
+       .init                                   = _init,
+       .fini                                   = _fini,
+       .lang_changed                   = _lang_changed,
+       .refresh                                = _refresh,
+       .icon_get                               = _icon_get,
+       .label_get                      = _label_get,
+       .view_update                    = _view_update,
+       .status_update          = _status_update,
+       .handler_longpress              = _long_press_cb,
+       .handler_press          = _mouse_clicked_cb,
+       .is_disable_feedback = 1,
+};
diff --git a/src/settings/modules/wifi.c b/src/settings/modules/wifi.c
new file mode 100755 (executable)
index 0000000..da158d4
--- /dev/null
@@ -0,0 +1,600 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <app.h>
+#include <tethering.h>
+#include <vconf.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <wifi-manager.h>
+
+#include "common.h"
+#include "common_uic.h"
+#include "quickpanel-ui.h"
+#include "settings.h"
+#include "setting_utils.h"
+#include "setting_module_api.h"
+#include "settings_icon_common.h"
+
+#define E_DATA_POPUP_MODULE_ITEM "mobule_item"
+#define BUTTON_LABEL _("IDS_ST_BUTTON2_WI_FI_ABB")
+#define BUTTON_ICON_NORMAL "quick_icon_wifi.png"
+#define BUTTON_ICON_HIGHLIGHT NULL
+#define BUTTON_ICON_DIM NULL
+
+static int _wifi_on(void *data, const char *popup_txt);
+static int _wifi_off(void);
+static int _wifi_is_on(bool *is_on);
+static void _wifi_state_changed_cb(wifi_manager_device_state_e state, void *user_data);
+static void _mouse_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+static void _reset_icon(QP_Module_Setting *module);
+
+wifi_manager_h wifi_manager = NULL;
+int wifi_error_type = WIFI_MANAGER_ERROR_NONE;
+
+static const char *_label_get(void)
+{
+       return BUTTON_LABEL;
+}
+
+static const char *_icon_get(qp_setting_icon_image_type type)
+{
+       if (type == QP_SETTING_ICON_NORMAL) {
+               return BUTTON_ICON_NORMAL;
+       } else if (type == QP_SETTING_ICON_HIGHLIGHT) {
+               return BUTTON_ICON_HIGHLIGHT;
+       } else if (type == QP_SETTING_ICON_DIM) {
+#ifdef BUTTON_ICON_DIM
+               return BUTTON_ICON_DIM;
+#endif
+       }
+
+       return NULL;
+}
+
+static void _long_press_cb(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       if (wifi_manager == NULL && wifi_error_type == WIFI_MANAGER_ERROR_NOT_SUPPORTED) {
+               quickpanel_setting_show_not_supported_message();
+               return;
+       }
+
+       if (quickpanel_setting_module_is_immediate_actionable(module, QP_SETTING_ICON_LONGPRESSED) == false)
+               return;
+
+
+       quickpanel_setting_icon_handler_longpress(module->setting_pkgname, NULL, NULL);
+}
+
+static void _view_update(Evas_Object *view, int state, int flag_extra_1, int flag_extra_2)
+{
+       Evas_Object *image = NULL;
+       const char *icon_path = NULL;
+
+       quickpanel_setting_icon_state_set(view, state);
+
+       if (state == ICON_VIEW_STATE_ON) {
+#ifdef BUTTON_ICON_HIGHLIGHT
+               icon_path = BUTTON_ICON_HIGHLIGHT;
+#endif
+       } else if (state == ICON_VIEW_STATE_DIM) {
+#ifdef BUTTON_ICON_DIM
+               icon_path = BUTTON_ICON_DIM;
+#endif
+       } else {
+               icon_path = BUTTON_ICON_NORMAL;
+       }
+
+       if (icon_path == NULL)
+               icon_path = BUTTON_ICON_NORMAL;
+
+       image = quickpanel_setting_icon_image_new(view, icon_path);
+       quickpanel_setting_icon_content_set(view, image);
+       quickpanel_setting_icon_text_set(view, BUTTON_LABEL, state);
+}
+
+static void _status_update(QP_Module_Setting *module, int wifi_status, int flag_extra_2)
+{
+       DBG("");
+       int ret = -1;
+       bool is_on = 0;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_timer_del(module);
+
+       if (wifi_status == FLAG_VALUE_VOID) {
+               ret = _wifi_is_on(&is_on);
+       } else {
+               ret = 0;
+               if (wifi_status == WIFI_MANAGER_DEVICE_STATE_ACTIVATED)
+                       is_on = true;
+               else
+                       is_on = false;
+
+       }
+
+       if (ret == 0 && is_on == true)
+               quickpanel_setting_module_icon_state_set(module, ICON_VIEW_STATE_ON);
+       else
+               quickpanel_setting_module_icon_state_set(module, ICON_VIEW_STATE_OFF);
+
+
+       quickpanel_setting_module_progress_mode_set(module, FLAG_DISABLE, FLAG_TURN_OFF);
+       quickpanel_setting_module_icon_timer_del(module);
+
+       quickpanel_setting_module_icon_view_update(module,
+                       quickpanel_setting_module_icon_state_get(module),
+                       FLAG_VALUE_VOID);
+}
+
+static void _state_change(QP_Module_Setting *module)
+{
+       int ret = 0;
+       int is_on = 0;
+
+       if (quickpanel_setting_module_icon_state_get(module) == ICON_VIEW_STATE_ON) {
+               is_on = FLAG_TURN_OFF;
+               ret = _wifi_off();
+       } else {
+               is_on = FLAG_TURN_ON;
+               ret = _wifi_on(module,
+                               _("IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"));
+       }
+
+       if (ret != 0) {
+               ERR("wifi op failed:%d", ret);
+               return;
+       }
+
+       if (is_on == 1)
+               quickpanel_setting_module_progress_mode_set(module, FLAG_ENABLE, FLAG_TURN_ON);
+       else
+               quickpanel_setting_module_progress_mode_set(module, FLAG_ENABLE, FLAG_TURN_OFF);
+
+       quickpanel_setting_module_icon_timer_add(module);
+
+}
+
+static void _mouse_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       int dpm_state = 0;
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+
+       if (wifi_manager == NULL && wifi_error_type == WIFI_MANAGER_ERROR_NOT_SUPPORTED) {
+               quickpanel_setting_show_not_supported_message();
+               return;
+       }
+
+       retif(module == NULL, , "Invalid parameter!");
+
+       if (quickpanel_setting_module_is_icon_clickable(module) == 0)
+               return;
+
+
+       if (quickpanel_setting_module_is_immediate_actionable(module, QP_SETTING_ICON_CLICKED) == 0)
+               return;
+
+
+       if (quickpanel_setting_module_dpm_state_get(module->name, &dpm_state) == 0)
+               return;
+
+
+       if (dpm_state == 0) {
+               quickpanel_setting_module_syspopup_launch(DPM_SYSPOPUP, "id", "wifi");
+               return;
+       }
+
+       _state_change(module);
+}
+
+static int _register_module_event_handler(void *data)
+{
+       int ret = 0;
+
+       ret = wifi_manager_initialize(&wifi_manager);
+       if (wifi_manager == NULL && ret == WIFI_MANAGER_ERROR_NOT_SUPPORTED) {
+               wifi_error_type = ret;
+               ERR("Wi-Fi NOT SUPPORTED");
+               return QP_FAIL;
+       }
+
+       msgif(ret < 0, "[ERR] wifi_initialize()");
+
+       ret = wifi_manager_set_device_state_changed_cb(wifi_manager, (void*)_wifi_state_changed_cb, data);
+       if (ret != WIFI_MANAGER_ERROR_NONE)
+               ERR("Failed to set changed callback of wifi (%d)", ret);
+
+
+       return QP_OK;
+}
+
+static int _unregister_module_event_handler(void *data)
+{
+       int ret = 0;
+
+       ret = wifi_manager_unset_device_state_changed_cb(wifi_manager);
+       if (ret != 0)
+               ERR("wifi cb unregister failed:%d", ret);
+
+
+       ret = wifi_manager_deinitialize(wifi_manager);
+       msgif(ret != WIFI_MANAGER_ERROR_NONE, "Fail to deactivate Wi-Fi device");
+
+       return QP_OK;
+}
+
+/****************************************************************************
+ *
+ * Quickpanel Item functions
+ *
+ ****************************************************************************/
+
+static int _init(void *data)
+{
+       int ret = QP_OK;
+
+       ret = _register_module_event_handler(data);
+
+       return ret;
+}
+
+static int _fini(void *data)
+{
+       int ret = QP_OK;
+
+       ret = _unregister_module_event_handler(data);
+
+       return ret;
+}
+
+static void _lang_changed(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_view_update_text(module);
+}
+
+static void _refresh(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_icon_view_update_text(module);
+}
+
+static void _wifi_activated_cb(wifi_manager_error_e result, void *user_data)
+{
+       DBG("");
+}
+
+static void _wifi_deactivated_cb(wifi_manager_error_e result, void* user_data)
+{
+       DBG("");
+}
+
+static void _tethering_disabled_cb(tethering_error_e error, tethering_type_e type, tethering_disabled_cause_e code, void *data)
+{
+       int ret;
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       tethering_h th = (tethering_h)(module->loader->extra_handler_1);
+       retif(th == NULL, , "th is NULL");
+       tethering_destroy(th);
+       module->loader->extra_handler_1 = NULL;
+
+       if (error != TETHERING_ERROR_NONE) {
+               /* failed to disable wifi tethering */
+               return;
+       }
+
+       ret = wifi_manager_activate_with_wifi_picker_tested(wifi_manager, (void*)_wifi_activated_cb, NULL);
+       if (ret != WIFI_MANAGER_ERROR_NONE) {
+               ERR("Fail to activate Wi-Fi device [%d]\n", ret);
+               return;
+       }
+}
+
+static bool _tethering_disable(tethering_type_e type, void *data)
+{
+       tethering_h th = NULL;
+       tethering_error_e ret = TETHERING_ERROR_NONE;
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+
+       retif(module == NULL, false, "Invalid parameter!");
+
+       /* disable wifi tethering */
+       ret = tethering_create(&th);
+       if (ret != TETHERING_ERROR_NONE) {
+               /* failed to create tethering handle */
+               return false;
+       }
+
+       ret = tethering_set_disabled_cb(th, type,
+                       _tethering_disabled_cb, module);
+       if (ret != TETHERING_ERROR_NONE) {
+               /* failed to set disabled callback */
+               tethering_destroy(th);
+               return false;
+       }
+
+       module->loader->extra_handler_1 = th;
+       quickpanel_setting_module_progress_mode_set(module, FLAG_ENABLE, FLAG_TURN_ON);
+       quickpanel_setting_module_icon_timer_add(module);
+
+       ret = tethering_disable(th, type);
+       if (ret != TETHERING_ERROR_NONE) {
+               ERR("fail to tethering_disable()");
+               return false;
+       }
+
+       return true;
+}
+
+static void _tethering_wifi_reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *) user_data;
+       char *resp_type = NULL;
+
+       DBG("Result[%d]", result);
+       if (result == APP_CONTROL_RESULT_SUCCEEDED && reply) {
+               app_control_get_extra_data(reply, "_SYSPOPUP_RESP_", &resp_type);
+               if (resp_type) {
+                       DBG("Response[%s]", resp_type);
+                       if (!strcmp("RESP_TETHERING_TYPE_WIFI_OFF", resp_type))
+                               _tethering_disable(TETHERING_TYPE_WIFI, user_data);
+
+
+                       free(resp_type);
+               }
+       }
+
+       _reset_icon(module);
+}
+
+static void _tethering_off_popup(Evas_Object *win, void *data, int type, const char *popup_txt)
+{
+       app_control_h service = NULL;
+       int ret = APP_CONTROL_ERROR_NONE;
+
+       ret = app_control_create(&service);
+       if (ret != APP_CONTROL_ERROR_NONE || service == NULL) {
+               ERR("Failed to create app_control[%d]", ret);
+               return;
+       }
+
+       app_control_add_extra_data(service, "_SYSPOPUP_TITLE_", "mobileap");
+       if (type == TETHERING_TYPE_WIFI)
+               app_control_add_extra_data(service, "_SYSPOPUP_CONTENT_", "TETHERING_TYPE_WIFI");
+       else
+               app_control_add_extra_data(service, "_SYSPOPUP_CONTENT_", "TETHERING_TYPE_WIFI_AP");
+
+       app_control_add_extra_data(service, "_SYSPOPUP_TYPE_", "popup_user_resp");
+       app_control_add_extra_data(service, "_AP_NAME_", "none");
+
+       app_control_set_app_id(service, "net.netpopup");
+
+       ret = app_control_send_launch_request(service, _tethering_wifi_reply_cb, data);
+       if (ret != APP_CONTROL_ERROR_NONE)
+               ERR("Failed to send launch request[%d]", ret);
+
+
+       app_control_destroy(service);
+}
+
+static int _wifi_on(void *data, const char *popup_txt)
+{
+       int ret = -1;
+       struct appdata *ad = quickpanel_get_app_data();
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(ad == NULL, ret, "Invalid parameter!");
+       retif(module == NULL, ret, "Invalid parameter!");
+
+       /* Check wifi tethering status */
+       if (tethering_is_enabled(NULL, TETHERING_TYPE_WIFI)) {
+               _tethering_off_popup(ad->win, data, TETHERING_TYPE_WIFI, popup_txt);
+               return -1;
+       }
+
+       ret = wifi_manager_activate_with_wifi_picker_tested(wifi_manager, (void*)_wifi_activated_cb, NULL);
+       if (ret != WIFI_MANAGER_ERROR_NONE) {
+               ERR("Fail to activate Wi-Fi device [%d]\n", ret);
+               return -1;
+       }
+
+       return 0;
+}
+
+static int _wifi_off(void)
+{
+       int ret;
+
+       ret = wifi_manager_deactivate(wifi_manager, (void*)_wifi_deactivated_cb, NULL);
+       if (ret != WIFI_MANAGER_ERROR_NONE) {
+               ERR("Fail to activate Wi-Fi device [%d]\n", ret);
+               return -1;
+       }
+
+       return 0;
+}
+
+static int _wifi_is_on(bool *is_on)
+{
+       int ret;
+
+       ret = wifi_manager_is_activated(wifi_manager, is_on);
+       if (ret != WIFI_MANAGER_ERROR_NONE) {
+               ERR("Fail to get Wi-Fi device status [%d]\n", ret);
+               return -1;
+       }
+
+       return 0;
+}
+
+/*
+   Set Wi-Fi status changed callback
+   - needs to update your Wi-Fi status.
+ */
+static void _wifi_state_changed_cb(wifi_manager_device_state_e state, void *user_data)
+{
+       ERR("state:%d", state);
+
+       if (state == WIFI_MANAGER_DEVICE_STATE_ACTIVATED) {
+               /* Wi-Fi is activated(On) - change your Wi-Fi status */
+               _status_update(user_data, state, FLAG_VALUE_VOID);
+       } else if (state == WIFI_MANAGER_DEVICE_STATE_DEACTIVATED) {
+               /* Wi-Fi is deactivated(Off) - change your Wi-Fi status */
+               _status_update(user_data, state, FLAG_VALUE_VOID);
+       } else {
+               /* Ignore */
+       }
+}
+
+static void _reset_icon(QP_Module_Setting *module)
+{
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_progress_mode_set(module, FLAG_DISABLE, FLAG_VALUE_VOID);
+       _status_update(module, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+}
+
+static void _handler_on(void *data)
+{
+       int ret = 0;
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_progress_mode_set(module, FLAG_DISABLE, FLAG_TURN_OFF);
+       quickpanel_setting_module_icon_timer_del(module);
+
+       if (quickpanel_setting_module_icon_state_get(module) == ICON_VIEW_STATE_OFF) {
+               ret = _wifi_on(module, _("IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"));
+
+               if (ret == 0) {
+                       quickpanel_setting_module_progress_mode_set(module, FLAG_ENABLE, FLAG_TURN_ON);
+                       quickpanel_setting_module_icon_timer_add(module);
+               } else {
+                       ERR("op failed:%d", ret);
+               }
+       } else {
+               ERR("the button is already turned on");
+               _reset_icon(module);
+       }
+}
+
+static void _handler_off(void *data)
+{
+       int ret = 0;
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_progress_mode_set(module, FLAG_DISABLE, FLAG_TURN_OFF);
+       quickpanel_setting_module_icon_timer_del(module);
+
+       if (quickpanel_setting_module_icon_state_get(module) == ICON_VIEW_STATE_ON) {
+               ret = _wifi_off();
+
+               if (ret == 0) {
+                       quickpanel_setting_module_progress_mode_set(module, FLAG_ENABLE, FLAG_TURN_OFF);
+                       quickpanel_setting_module_icon_timer_add(module);
+               } else {
+                       ERR("op failed:%d", ret);
+               }
+       } else {
+               ERR("the button is already turned off");
+               _reset_icon(module);
+       }
+}
+
+static void _handler_progress_on(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_module_progress_mode_set(module, FLAG_ENABLE, FLAG_VALUE_VOID);
+}
+
+static void _handler_progress_off(void *data)
+{
+       QP_Module_Setting *module = (QP_Module_Setting *)data;
+       retif(module == NULL, , "Invalid parameter!");
+
+       _reset_icon(module);
+}
+
+static int _handler_ipc(const char *command, void *data)
+{
+       int i = 0;
+       retif(data == NULL, EINA_FALSE, "item data is NULL");
+       retif(command == NULL, EINA_FALSE, "command is NULL");
+
+       static Setting_Activity_Handler __table_handler[] = {
+               {
+                       .command = "on",
+                       .handler = _handler_on,
+               },
+               {
+                       .command = "off",
+                       .handler = _handler_off,
+               },
+               {
+                       .command = "progress_on",
+                       .handler = _handler_progress_on,
+               },
+               {
+                       .command = "progress_off",
+                       .handler = _handler_progress_off,
+               },
+               {
+                       .command = NULL,
+                       .handler = NULL,
+               },
+       };
+
+       for (i = 0; __table_handler[i].command; i++) {
+               if (strcasecmp(__table_handler[i].command, command))
+                       continue;
+
+               if (__table_handler[i].handler != NULL) {
+                       DBG("process:%s", command);
+                       __table_handler[i].handler(data);
+               }
+               break;
+       }
+
+       return EINA_TRUE;
+}
+
+QP_Module_Setting wifi = {
+       .name                           = "wifi",
+       .setting_pkgname        = "wifi-efl-ug",
+       .init                           = _init,
+       .fini                           = _fini,
+       .lang_changed           = _lang_changed,
+       .refresh                        = _refresh,
+       .icon_get                       = _icon_get,
+       .label_get                      = _label_get,
+       .view_update        = _view_update,
+       .status_update          = _status_update,
+       .state_change           = _state_change,
+       .handler_longpress      = _long_press_cb,
+       .handler_ipc        = _handler_ipc,
+       .handler_press          = _mouse_clicked_cb,
+};
diff --git a/src/settings/setting_module_api.c b/src/settings/setting_module_api.c
new file mode 100755 (executable)
index 0000000..d4cd99c
--- /dev/null
@@ -0,0 +1,422 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <dpm/restriction.h>
+#include <app_control.h>
+
+#include "common.h"
+#include "quickpanel_def.h"
+#include "quickpanel-ui.h"
+#include "settings.h"
+#include "setting_utils.h"
+#include "setting_module_api.h"
+#include "settings_icon_common.h"
+#include "common_uic.h"
+
+#ifdef QP_SCREENREADER_ENABLE
+#include "accessibility.h"
+#endif
+
+#define E_DATA_CONTAINER_TYPE "container_type"
+
+static qp_setting_icon_container_type _icon_container_type_get(Evas_Object *view)
+{
+       retif(view == NULL, QP_SETTING_ICON_CONTAINER_NONE, "invalid parameter");
+
+       return (qp_setting_icon_container_type)evas_object_data_get(view, E_DATA_CONTAINER_TYPE);
+}
+
+static void _icon_view_add(QP_Module_Setting *module, Evas_Object *view , qp_setting_icon_container_type container_type)
+{
+       retif(module == NULL, , "invalid parameter");
+       retif(view == NULL, , "invalid parameter");
+
+       if (eina_list_data_find(module->view_list, view) == NULL) {
+               evas_object_data_set(view, E_DATA_CONTAINER_TYPE, (void *)container_type);
+               module->view_list = eina_list_append(module->view_list, view);
+       }
+}
+
+static void _icon_view_del(QP_Module_Setting *module, Evas_Object *view)
+{
+       retif(module == NULL, , "invalid parameter");
+       retif(view == NULL, , "invalid parameter");
+
+       module->view_list = eina_list_remove(module->view_list, view);
+}
+
+HAPI Evas_Object *quickpanel_setting_module_icon_create(QP_Module_Setting *module, Evas_Object *parent)
+{
+       Evas_Object *view = NULL;
+       retif(module == NULL, NULL, "invalid parameter");
+       retif(parent == NULL, NULL, "invalid parameter");
+
+       view = quickpanel_setting_icon_new(parent);
+       retif(view == NULL, NULL, "failed to create icon");
+
+       if (module->label_get != NULL)
+               quickpanel_setting_icon_text_set(view, module->label_get(), ICON_VIEW_STATE_OFF);
+
+       if (module->handler_press != NULL) {
+               if (module->is_disable_feedback)
+                       quickpanel_setting_icon_click_cb_without_feedback_add(view, module->handler_press, module);
+               else
+                       quickpanel_setting_icon_click_cb_add(view, module->handler_press, module);
+
+       }
+       evas_object_data_set(view, E_DATA_MODULE_INFO, module);
+       evas_object_show(view);
+
+       return view;
+}
+
+HAPI QP_Module_Setting *quickpanel_setting_module_get_from_icon(Evas_Object *icon)
+{
+       return evas_object_data_get(icon, E_DATA_MODULE_INFO);
+}
+
+HAPI void quickpanel_setting_module_icon_add(QP_Module_Setting *module, Evas_Object *icon, qp_setting_icon_container_type container_type)
+{
+       _icon_view_add(module, icon, container_type);
+}
+
+HAPI Evas_Object *quickpanel_setting_module_icon_get(QP_Module_Setting *module, qp_setting_icon_container_type container_type)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *view = NULL;
+       retif(module == NULL, NULL, "invalid parameter");
+
+       if (module->view_update != NULL) {
+               EINA_LIST_FOREACH_SAFE(module->view_list, l, l_next, view) {
+                       if (_icon_container_type_get(view) == container_type)
+                               return view;
+
+               }
+       }
+
+       return NULL;
+}
+
+HAPI void quickpanel_setting_module_icon_remove(QP_Module_Setting *module, Evas_Object *icon)
+{
+       _icon_view_del(module, icon);
+}
+
+HAPI void quickpanel_setting_module_icon_state_set(QP_Module_Setting *module, int state)
+{
+       retif(module == NULL, , "invalid parameter");
+       retif(module->loader == NULL, , "invalid parameter");
+
+       module->loader->state = state;
+}
+
+HAPI int quickpanel_setting_module_icon_state_get(QP_Module_Setting *module)
+{
+       retif(module == NULL, FLAG_TURN_OFF, "invalid parameter");
+       retif(module->loader == NULL, FLAG_TURN_OFF, "invalid parameter");
+
+       return module->loader->state;
+}
+
+HAPI void quickpanel_setting_module_icon_view_update(QP_Module_Setting *module, int flag_extra_1, int flag_extra_2)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *view = NULL;
+       retif(module == NULL, , "invalid parameter");
+
+       int status = quickpanel_setting_module_icon_state_get(module);
+
+       if (module->view_update != NULL) {
+               EINA_LIST_FOREACH_SAFE(module->view_list, l, l_next, view) {
+                       module->view_update(view, status, flag_extra_1, flag_extra_2);
+               }
+       }
+}
+
+HAPI void quickpanel_setting_module_icon_view_update_text(QP_Module_Setting *module)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *view = NULL;
+       retif(module == NULL, , "invalid parameter");
+
+       if (module->view_update != NULL && module->label_get != NULL) {
+               EINA_LIST_FOREACH_SAFE(module->view_list, l, l_next, view) {
+                       quickpanel_setting_icon_text_set(view, module->label_get(), quickpanel_setting_module_icon_state_get(module));
+               }
+       }
+}
+
+HAPI void quickpanel_setting_module_icon_status_update(QP_Module_Setting *module, int flag_extra_1, int flag_extra_2)
+{
+       retif(module == NULL, , "invalid parameter");
+
+       if (module->status_update != NULL)
+               module->status_update(module, flag_extra_1, flag_extra_2);
+
+}
+
+HAPI int quickpanel_setting_module_is_icon_clickable(QP_Module_Setting *module)
+{
+       retif(module == NULL, 0, "invalid parameter");
+       retif(module->loader == NULL, 0, "invalid parameter");
+
+       if (module->loader->timer != NULL)
+               return 0;
+
+       if (module->loader->state_icon == STATE_ICON_BUSY)
+               return 0;
+
+
+       return 1;
+}
+
+
+HAPI int quickpanel_setting_module_is_immediate_actionable(QP_Module_Setting *module, qp_setting_icon_event_type event_type)
+{
+       Eina_Bool secured_lock = EINA_FALSE;
+       char buf[MAX_NAM_LEN];
+       retif(module == NULL || module->loader == NULL, 0, "invalid parameter");
+
+       secured_lock = quickpanel_setting_get_secured_lock_state();
+       if (secured_lock == EINA_TRUE) {
+               strncpy(buf, module->name, strlen(module->name));
+               buf[strlen(module->name)] = '\0';
+
+               switch (event_type) {
+               case QP_SETTING_ICON_CLICKED:
+                       strncat(buf, QP_QUICK_SETTINGS_EVENT_CLICKED, strlen(QP_QUICK_SETTINGS_EVENT_CLICKED));
+                       break;
+               case QP_SETTING_ICON_LONGPRESSED:
+                       strncat(buf, QP_QUICK_SETTINGS_EVENT_LONGPRESSED, strlen(QP_QUICK_SETTINGS_EVENT_LONGPRESSED));
+                       break;
+               default:
+                       break;
+               }
+
+               quickpanel_common_send_message_to_app("org.tizen.lockscreen", APP_CONTROL_OPERATION_SECURED_LOCK, QP_QUICK_SETTINGS, buf);
+               quickpanel_uic_close_quickpanel(false, 0);
+               return 0;
+       }
+
+       return 1;
+}
+
+
+static Eina_Bool _timer_expire_cb(void *data)
+{
+       retif(data == NULL, ECORE_CALLBACK_CANCEL, "invalid parameter");
+
+       quickpanel_setting_module_icon_timer_del(data);
+       quickpanel_setting_module_icon_status_update(data, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+HAPI void quickpanel_setting_module_icon_timer_add(QP_Module_Setting *module)
+{
+       retif(module == NULL, , "invalid parameter");
+       retif(module->loader == NULL, , "invalid parameter");
+
+       quickpanel_setting_module_icon_timer_del(module);
+       module->loader->timer = ecore_timer_add(TIMER_COUNT, _timer_expire_cb, module);
+}
+
+HAPI void quickpanel_setting_module_icon_timer_del(QP_Module_Setting *module)
+{
+       retif(module == NULL, , "invalid parameter");
+       retif(module->loader == NULL, , "invalid parameter");
+
+       if (module->loader->timer != NULL) {
+               ecore_timer_del(module->loader->timer);
+               module->loader->timer = NULL;
+       }
+}
+
+#ifdef PROGRESSBAR_ENABLED
+static Evas_Object *_progressbar_get(Evas_Object *parent)
+{
+       Evas_Object *content = NULL;
+
+       content = elm_progressbar_add(parent);
+       elm_progressbar_unit_format_set(content, "%0.0f%%");
+       retif(!content, NULL, "fail to elm_progressbar_add");
+
+       elm_object_style_set(content, "quickpanel_style");
+       evas_object_size_hint_weight_set(content,
+                       EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_pulse(content, EINA_TRUE);
+       evas_object_show(content);
+
+       return content;
+}
+
+static void _progressbar_set(Evas_Object *view, int is_enable, int is_request_on)
+{
+       Evas_Object *content = NULL;
+       Evas_Object *content_old = NULL;
+       retif(view == NULL, , "invalid parameter");
+
+       if (is_enable == FLAG_ENABLE) {
+               content_old = quickpanel_setting_icon_content_get(view);
+               if (content_old != NULL) {
+                       evas_object_del(content_old);
+                       content_old = NULL;
+               }
+               content = _progressbar_get(view);
+               quickpanel_setting_icon_content_set(view, content);
+
+               quickpanel_setting_icon_state_progress_set(view);
+               quickpanel_setting_icon_state_set(view, ICON_VIEW_STATE_DIM);
+       }
+}
+#endif
+
+HAPI void quickpanel_setting_module_progress_mode_set(QP_Module_Setting *module, int is_enable, int is_request_on)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *view = NULL;
+       retif(module == NULL, , "invalid parameter");
+       retif(module->loader == NULL, , "invalid parameter");
+
+       EINA_LIST_FOREACH_SAFE(module->view_list, l, l_next, view) {
+#ifdef PROGRESSBAR_ENABLED
+               _progressbar_set(view, is_enable, is_request_on);
+#else
+               if (is_enable)
+                       quickpanel_setting_icon_state_progress_set(view);
+
+#endif
+       }
+
+       if (is_enable == FLAG_ENABLE)
+               module->loader->state_icon = STATE_ICON_BUSY;
+       else
+               module->loader->state_icon = STATE_ICON_IDLE;
+
+}
+
+HAPI void quickpanel_setting_module_icon_destroy(QP_Module_Setting *module, Evas_Object *icon)
+{
+       retif(module == NULL, , "invalid parameter");
+       retif(icon == NULL, , "invalid parameter");
+
+       _icon_view_del(module, icon);
+       quickpanel_setting_icon_click_cb_del(icon, module->handler_press);
+       evas_object_del(icon);
+       icon = NULL;
+}
+
+
+HAPI void quickpanel_setting_module_syspopup_launch(char *appid, char *key, char *value)
+{
+       app_control_h service = NULL;
+       int ret = APP_CONTROL_ERROR_NONE;
+
+       retif(appid == NULL, , "Invalid parameter!");
+
+       ret = app_control_create(&service);
+       if (ret != APP_CONTROL_ERROR_NONE || service == NULL) {
+               ERR("Failed to create app_control[%d]", ret);
+               return;
+       }
+
+
+       if (key != NULL && value != NULL)
+               app_control_add_extra_data(service, key, value);
+
+
+       app_control_set_app_id(service, appid);
+
+       ret = app_control_send_launch_request(service, NULL, NULL);
+       if (ret != APP_CONTROL_ERROR_NONE)
+               ERR("Failed to send launch request[%d]", ret);
+
+
+       app_control_destroy(service);
+}
+
+
+HAPI int quickpanel_setting_module_dpm_state_get(char *module_name, int *state)
+{
+       int dpm_state = 0;
+       int ret = 0;
+
+       device_policy_manager_h handle = NULL;
+
+       retif(module_name == NULL, 0, "Invalid parameter!");
+
+       handle = dpm_manager_create();
+       if (handle == NULL) {
+               ERR("dpm_manager_create() is failed");
+               return 0;
+       }
+
+       if (strncmp(module_name, "gps", strlen(module_name)) == 0)
+               ret = dpm_restriction_get_location_state(handle, &dpm_state);
+       else if (strncmp(module_name, "bluetooth", strlen(module_name)) == 0)
+               ret = dpm_restriction_get_bluetooth_mode_change_state(handle, &dpm_state);
+       else if (strncmp(module_name, "wifi", strlen(module_name)) == 0)
+               ret = dpm_restriction_get_wifi_state(handle, &dpm_state);
+
+
+       dpm_manager_destroy(handle);
+
+       if (ret != DPM_ERROR_NONE) {
+               ERR("dpm_restriction_get_[%s]_state() is failed", module_name);
+               return 0;
+       }
+
+       *state = dpm_state;
+
+       return 1;
+}
+
+
+HAPI void quickpanel_setting_module_operate(const char *module_name)
+{
+       QP_Module_Setting *module = NULL;
+
+       module = quickpanel_settings_module_get_by_name(module_name);
+
+       if (module != NULL && module->state_change)
+               module->state_change(module);
+       else
+               DBG("Faild to get module [%s]", module_name);
+
+}
+
+
+HAPI void quickpanel_setting_module_longpress_operate(const char *module_name)
+{
+       QP_Module_Setting *module = NULL;
+
+       module = quickpanel_settings_module_get_by_name(module_name);
+       if (module != NULL && module->setting_pkgname)
+               quickpanel_setting_icon_handler_longpress(module->setting_pkgname, NULL, NULL);
+       else
+               DBG("Faild to get module [%s]", module_name);
+
+}
+
diff --git a/src/settings/setting_utils.c b/src/settings/setting_utils.c
new file mode 100755 (executable)
index 0000000..118e757
--- /dev/null
@@ -0,0 +1,651 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+
+#include <notification.h>
+#include <system_settings.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <notification.h>
+#include "common_uic.h"
+#include "settings.h"
+#include "common.h"
+#include "quickpanel_def.h"
+#include "quickpanel-ui.h"
+#include "setting_utils.h"
+#ifdef QP_SCREENREADER_ENABLE
+#include "accessibility.h"
+#endif
+
+#define TEXT_LEN 128
+#define QP_SETTING_INITIAL_PAGE_NUM 0
+#define DIVIDER_MAGIC 0xCAFECAFE
+#define E_DATA_DIVIDER_MAGIC "divider_magic"
+
+static inline void __escaped_text_set(Evas_Object *obj, const char *part, const char *text)
+{
+       char buf[256] = {0,};
+       char *ecaped = NULL;
+
+       if (!obj)
+               return;
+
+
+       if (!part)
+               return;
+
+
+       strncpy(buf, text, sizeof(buf) - 1);
+       quickpanel_common_util_char_trim(buf);
+       ecaped = evas_textblock_text_utf8_to_markup(NULL, buf);
+
+       elm_object_part_text_set(obj, part, ecaped);
+
+       if (ecaped)
+               free(ecaped);
+
+}
+
+HAPI int quickpanel_setting_icon_text_set(Evas_Object *icon, const char *text, int state)
+{
+       retif(icon == NULL, QP_FAIL, "invalid parameter");
+       retif(text == NULL, QP_FAIL, "invalid parameter");
+
+       __escaped_text_set(icon, "icon.text", text);
+
+#ifdef QP_SCREENREADER_ENABLE
+       char buf[256] = {0,};
+       Evas_Object *ao = NULL;
+
+       ao = quickpanel_accessibility_screen_reader_object_get(icon,
+                       SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
+       if (ao != NULL) {
+               elm_access_info_set(ao, ELM_ACCESS_TYPE, _NOT_LOCALIZED("Button"));
+               strncpy(buf, text, sizeof(buf) - 1);
+               quickpanel_common_util_char_replace(buf, '\n', ' ');
+               elm_access_info_set(ao, ELM_ACCESS_INFO, buf);
+       }
+
+       ao = quickpanel_accessibility_screen_reader_object_get(icon,
+                       SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
+       if (ao != NULL) {
+               if (state == ICON_VIEW_STATE_ON)
+                       elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("On"));
+               else if (state == ICON_VIEW_STATE_DIM)
+                       elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Turned off"));
+               else if (state == ICON_VIEW_STATE_OFF)
+                       elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Off"));
+       }
+#endif
+
+       return QP_OK;
+}
+
+HAPI void quickpanel_setting_icon_access_text_set(Evas_Object *icon, const char *text)
+{
+#ifdef QP_SCREENREADER_ENABLE
+       char buf[256] = {0,};
+       Evas_Object *ao = NULL;
+#endif
+
+       retif(icon == NULL, , "invalid parameter");
+       retif(text == NULL, , "invalid parameter");
+
+#ifdef QP_SCREENREADER_ENABLE
+       ao = quickpanel_accessibility_screen_reader_object_get(icon,
+                       SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
+       if (ao != NULL) {
+               elm_access_info_set(ao, ELM_ACCESS_TYPE, _NOT_LOCALIZED("Button"));
+               strncpy(buf, text, sizeof(buf) - 1);
+               quickpanel_common_util_char_replace(buf, '\n', ' ');
+               elm_access_info_set(ao, ELM_ACCESS_INFO, buf);
+       }
+#endif
+}
+
+HAPI Evas_Object *quickpanel_setting_icon_content_get(Evas_Object *icon)
+{
+       retif(icon == NULL, NULL, "invalid parameter");
+
+       struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
+       retif(ad == NULL, NULL, "application data is NULL");
+
+       return elm_object_part_content_get(icon, "icon.swallow.wvga");
+}
+
+HAPI int quickpanel_setting_icon_content_set(Evas_Object *icon, Evas_Object *content)
+{
+       retif(icon == NULL, QP_FAIL, "invalid parameter");
+       retif(content == NULL, QP_FAIL, "invalid parameter");
+
+       struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
+       retif(ad == NULL, QP_FAIL, "application data is NULL");
+
+       elm_object_part_content_set(icon, "icon.swallow.wvga", content);
+
+       return QP_OK;
+}
+
+HAPI int quickpanel_setting_icon_state_set(Evas_Object *icon, int state)
+{
+#ifdef QP_SCREENREADER_ENABLE
+       Evas_Object *ao = NULL;
+#endif
+       retif(icon == NULL, -1, "invalid parameter");
+       ERR("icon:%p state:%d", icon, state);
+
+#ifdef QP_SCREENREADER_ENABLE
+       ao = quickpanel_accessibility_screen_reader_object_get(icon,
+                       SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
+       if (ao != NULL) {
+               if (state == ICON_VIEW_STATE_ON)
+                       elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("On"));
+               else if (state == ICON_VIEW_STATE_DIM)
+                       elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Turned off"));
+               else if (state == ICON_VIEW_STATE_OFF)
+                       elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Off"));
+
+       }
+#endif
+
+       if (state == ICON_VIEW_STATE_ON)
+               elm_object_signal_emit(icon, "icon.on", "quickpanl.prog");
+       else if (state == ICON_VIEW_STATE_DIM)
+               elm_object_signal_emit(icon, "icon.dim", "quickpanl.prog");
+       else
+               elm_object_signal_emit(icon, "icon.off", "quickpanl.prog");
+
+
+       edje_object_message_signal_process(_EDJ(icon));
+
+       return 0;
+}
+
+HAPI int quickpanel_setting_icon_state_progress_set(Evas_Object *icon)
+{
+       retif(icon == NULL, -1, "invalid parameter");
+
+       elm_object_signal_emit(icon, "icon.progress", "quickpanl.prog");
+       edje_object_message_signal_process(_EDJ(icon));
+
+       return 0;
+}
+
+HAPI Evas_Object *quickpanel_setting_icon_new(Evas_Object *parent)
+{
+       const char *signal = NULL;
+       Evas_Object *icon = NULL;
+       retif(parent == NULL, NULL, "invalid parameter");
+
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, NULL, "invalid data.");
+
+       icon = elm_layout_add(parent);
+       retif(!icon, NULL, "fail to add layout");
+
+       elm_layout_file_set(icon, util_get_res_file_path(DEFAULT_EDJ), "quickpanel/setting_icon_wvga");
+
+       evas_object_size_hint_weight_set(icon,
+                       EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_signal_emit(icon, "icon.off", "quickpanl.prog");
+
+#ifdef QP_SCREENREADER_ENABLE
+       Evas_Object *focus = quickpanel_accessibility_ui_get_focus_object(icon);
+       elm_object_part_content_set(icon, "focus", focus);
+#endif
+       if (ad->angle == 0 || ad->angle == 180)
+               signal = "icon.portrait";
+       else
+               signal = "icon.landscape";
+
+
+       elm_object_signal_emit(icon, signal, "quickpanl.prog");
+       edje_object_message_signal_process(_EDJ(icon));
+
+       return icon;
+}
+
+HAPI Evas_Object *quickpanel_setting_icon_image_new(Evas_Object *parent, const char *img_path)
+{
+       Evas_Object *content = NULL;
+       retif(parent == NULL, NULL, "invalid parameter");
+       retif(img_path == NULL, NULL, "invalid parameter");
+
+       content = elm_image_add(parent);
+       retif(content == NULL, NULL, "failed to create image");
+
+       if (!elm_image_file_set(content, util_get_res_file_path(DEFAULT_EDJ), img_path)) {
+               ERR("fail to set file[%s]", img_path);
+               evas_object_del(content);
+               content = NULL;
+               return NULL;
+       }
+
+       return content;
+}
+
+static Evas_Object *quickpanel_setting_container_get(Evas_Object *base)
+{
+       Evas_Object *container = NULL;
+       retif(base == NULL, NULL, "invalid parameter");
+
+       container = elm_object_part_content_get(base, QP_SETTING_BASE_PART);
+
+       return container;
+}
+
+HAPI Evas_Object *quickpanel_setting_scroller_get(Evas_Object *base)
+{
+       Evas_Object *container = NULL;
+       Evas_Object *scroller = NULL;
+       retif(base == NULL, NULL, "invalid parameter");
+
+       struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
+       retif(ad == NULL, NULL, "application data is NULL");
+
+       container = quickpanel_setting_container_get(base);
+
+       scroller = elm_object_part_content_get(container, QP_SETTING_SCROLLER_PART_WVGA);
+
+       retif(scroller == NULL, NULL, "invalid parameter");
+
+       return scroller;
+}
+
+HAPI Evas_Object *quickpanel_setting_box_get_from_scroller(Evas_Object *base)
+{
+       Evas_Object *scroller = NULL;
+       Evas_Object *box = NULL;
+       retif(base == NULL, NULL, "invalid parameter");
+
+       scroller = quickpanel_setting_scroller_get(base);
+       retif(scroller == NULL, NULL, "invalid parameter");
+
+       box = elm_object_content_get(scroller);
+
+       return box;
+}
+
+HAPI Evas_Object *quickpanel_setting_box_get(Evas_Object *base)
+{
+       Evas_Object *container = NULL;
+       Evas_Object *box = NULL;
+       retif(base == NULL, NULL, "invalid parameter");
+
+       container = quickpanel_setting_container_get(base);
+       retif(container == NULL, NULL, "invalid parameter");
+       box = elm_object_part_content_get(container, QP_SETTING_SCROLLER_PART_WVGA);
+
+       return box;
+}
+
+HAPI int quickpanel_setting_container_rotation_set(Evas_Object *base, int angle)
+{
+       Evas_Object *container = NULL;
+       const char *signal = NULL;
+
+       retif(!base, -1, "base is NULL");
+       retif(angle < 0, -1, "angle is %d", angle);
+
+       container = quickpanel_setting_container_get(base);
+       retif(!container, -1, "box is NULL");
+
+       if (angle % 180 == 0)
+               signal = "portrait";
+       else
+               signal = "landscape";
+
+
+       elm_object_signal_emit(container, signal, "background");
+       edje_object_message_signal_process(_EDJ(container));
+
+       return 0;
+}
+
+HAPI int quickpanel_setting_icons_rotation_set(Evas_Object *base, int angle)
+{
+       Evas_Object *box = NULL;
+       Evas_Object *icon = NULL;
+       Eina_List *icons = NULL;
+       Eina_List *l = NULL;
+       const char *signal = NULL;
+
+       retif(!base, -1, "base is NULL");
+       retif(angle < 0, -1, "angle is %d", angle);
+
+       box = quickpanel_setting_box_get(base);
+       retif(!box, -1, "box is NULL");
+
+       icons = elm_box_children_get(box);
+       retif(!icons, -1, "icons list is NULL");
+
+       if (angle % 180 == 0)
+               signal = "icon.portrait";
+       else
+               signal = "icon.landscape";
+
+
+       EINA_LIST_FOREACH(icons, l, icon) {
+               elm_object_signal_emit(icon, signal, "quickpanl.prog");
+               edje_object_message_signal_process(_EDJ(icon));
+       }
+
+       eina_list_free(icons);
+
+       return 0;
+}
+
+HAPI void quickpanel_setting_icons_emit_sig(Evas_Object *icon, const char *signal)
+{
+       retif(!icon, , "icon is NULL");
+       retif(!signal, , "icon is NULL");
+
+       elm_object_signal_emit(icon, signal, "quickpanl.prog");
+       edje_object_message_signal_process(_EDJ(icon));
+}
+
+HAPI int quickpanel_setting_icons_dragging_set(Evas_Object *icon, int is_on)
+{
+       const char *signal = NULL;
+       retif(!icon, QP_FAIL, "icon is NULL");
+
+       if (is_on == 1)
+               signal = "dragging.on";
+       else
+               signal = "dragging.off";
+
+
+       elm_object_signal_emit(icon, signal, "quickpanl.prog");
+       edje_object_message_signal_process(_EDJ(icon));
+
+       return QP_OK;
+}
+
+HAPI int quickpanel_setting_icons_screen_mode_set(Evas_Object *icon, int screen_mode)
+{
+       const char *signal = NULL;
+       retif(!icon, QP_FAIL, "icon is NULL");
+
+       if (screen_mode == 0)
+               signal = "icon.portrait";
+       else
+               signal = "icon.landscape";
+
+
+       elm_object_signal_emit(icon, signal, "quickpanl.prog");
+       edje_object_message_signal_process(_EDJ(icon));
+
+       return QP_OK;
+}
+
+HAPI int quickpanel_setting_icon_pack(Evas_Object *box, Evas_Object *icon, int is_attach_divider)
+{
+       retif(box == NULL, QP_FAIL, "box is NULL");
+
+       elm_box_pack_end(box, icon);
+
+       return QP_OK;
+}
+
+HAPI void quickpanel_setting_icon_unpack_all(Evas_Object *box)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *node = NULL;
+       Eina_List *list = NULL;
+       retif(box == NULL, , "invalid parameter");
+
+       list = elm_box_children_get(box);
+       retif(list == NULL, , "empty list");
+
+       elm_box_unpack_all(box);
+
+       EINA_LIST_FOREACH_SAFE(list, l, l_next, node) {
+               if (node != NULL) {
+                       if (evas_object_data_get(node, E_DATA_DIVIDER_MAGIC) == (void *)DIVIDER_MAGIC) {
+                               evas_object_del(node);
+                               node = NULL;
+                       }
+               }
+       }
+
+       eina_list_free(list);
+}
+
+HAPI int quickpanel_setting_scroll_page_get(void *data)
+{
+       int page_h = 0x99;
+       struct appdata *ad = NULL;
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       ad = data;
+       retif(!ad->ly, QP_FAIL, "layout is NULL!");
+
+       Evas_Object *scroller = quickpanel_setting_scroller_get(ad->ly);
+       elm_scroller_current_page_get(scroller, &page_h, NULL);
+
+       return page_h;
+}
+
+HAPI int quickpanel_setting_set_scroll_page_width(void *data)
+{
+       struct appdata *ad = NULL;
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       ad = data;
+       retif(!ad->ly, QP_FAIL, "layout is NULL!");
+
+       Evas_Object *scroller = quickpanel_setting_scroller_get(ad->ly);
+
+       int w, h;
+       elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
+       elm_scroller_page_size_set(scroller, w / QP_SETTING_NUM_PORTRAIT_ICONS, 0);
+
+       return 0;
+}
+
+HAPI int quickpanel_setting_start(Evas_Object *base)
+{
+       Evas_Object *scroller = NULL;
+       retif(base == NULL, QP_FAIL, "Invalid parameter!");
+
+       scroller = quickpanel_setting_scroller_get(base);
+       retif(scroller == NULL, QP_FAIL, "Invalid parameter!");
+
+       elm_scroller_page_bring_in(scroller, 0, 0);
+
+       return QP_OK;
+}
+
+HAPI int quickpanel_setting_stop(Evas_Object *base, int is_bring_in)
+{
+       int page = QP_SETTING_INITIAL_PAGE_NUM;
+       Evas_Object *scroller = NULL;
+       retif(base == NULL, QP_FAIL, "Invalid parameter!");
+
+       scroller = quickpanel_setting_scroller_get(base);
+       retif(scroller == NULL, QP_FAIL, "Invalid parameter!");
+
+       if (is_bring_in == 1)
+               elm_scroller_page_bring_in(scroller, page, 0);
+       else
+               elm_scroller_page_show(scroller, page, 0);
+
+
+       return QP_OK;
+}
+
+HAPI int quickpanel_setting_layout_set(Evas_Object *base, Evas_Object *setting)
+{
+       retif(base == NULL, QP_FAIL, "Invalid parameter!");
+       retif(setting == NULL, QP_FAIL, "Invalid parameter!");
+
+       elm_object_part_content_set(base, QP_SETTING_BASE_PART, setting);
+
+       return 0;
+}
+
+HAPI Evas_Object *quickpanel_setting_layout_get(Evas_Object *base, const char *setting_part)
+{
+       retif(base == NULL, NULL, "Invalid parameter!");
+       retif(setting_part == NULL, NULL, "Invalid parameter!");
+
+       return elm_object_part_content_get(base, setting_part);
+}
+
+HAPI int quickpanel_setting_layout_remove(Evas_Object *base)
+{
+       Evas_Object *container = NULL;
+       Evas_Object *scroller = NULL;
+       Evas_Object *box = NULL;
+       retif(base == NULL, QP_FAIL, "Invalid parameter!");
+
+       container = quickpanel_setting_container_get(base);
+       scroller = quickpanel_setting_scroller_get(base);
+       box = quickpanel_setting_box_get(base);
+
+       if (box) {
+               elm_box_clear(box);
+               evas_object_del(box);
+               box = NULL;
+       }
+       if (scroller) {
+               evas_object_del(scroller);
+               scroller = NULL;
+       }
+       if (container) {
+               evas_object_del(container);
+               container = NULL;
+       }
+
+       return QP_OK;
+}
+
+HAPI void quickpanel_setting_create_confirm_popup(
+               Evas_Object *parent,
+               char *title,
+               char *text,
+               Evas_Smart_Cb func)
+{
+       Evas_Object *popup = elm_popup_add(parent);
+       Evas_Object *btn = NULL;
+
+       if (popup == NULL)
+               return;
+
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+
+       if (title)
+               elm_object_part_text_set(popup, "title,text", title);
+
+
+       if (text)
+               elm_object_text_set(popup, text);
+
+
+       btn = elm_button_add(popup);
+       elm_object_style_set(btn, "popup");
+       elm_object_text_set(btn, _("IDS_ST_SK_OK"));
+       elm_object_part_content_set(popup, "button1", btn);
+       evas_object_smart_callback_add(btn, "clicked", func, popup);
+
+       evas_object_show(popup);
+       quickpanel_common_ui_set_current_popup(popup, func);
+}
+
+HAPI void quickpanel_setting_create_2button_confirm_popup(
+               Evas_Object *parent,
+               char *title,
+               char *text,
+               char *btn1_text,
+               Evas_Smart_Cb btn1_func,
+               char *btn2_text,
+               Evas_Smart_Cb btn2_func)
+{
+       Evas_Object *popup = elm_popup_add(parent);
+       Evas_Object *btn = NULL;
+
+       if (popup == NULL)
+               return;
+
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+
+       if (title)
+               elm_object_part_text_set(popup, "title,text", title);
+
+
+       if (text)
+               elm_object_text_set(popup, text);
+
+
+       if (btn1_func != NULL && btn1_text != NULL) {
+               btn = elm_button_add(popup);
+               elm_object_style_set(btn, "popup");
+               elm_object_text_set(btn, btn1_text);
+               elm_object_part_content_set(popup, "button1", btn);
+               evas_object_smart_callback_add(btn, "clicked", btn1_func, popup);
+       }
+
+       if (btn2_func != NULL && btn2_text != NULL) {
+               btn = elm_button_add(popup);
+               elm_object_style_set(btn, "popup");
+               elm_object_text_set(btn, btn2_text);
+               elm_object_part_content_set(popup, "button2", btn);
+               evas_object_smart_callback_add(btn, "clicked", btn2_func, popup);
+       }
+
+       evas_object_show(popup);
+       quickpanel_common_ui_set_current_popup(popup, btn1_func);
+}
+
+HAPI void quickpanel_setting_create_timeout_popup(Evas_Object *parent, char *msg)
+{
+       retif(msg == NULL, , "invalid parameter");
+
+       notification_status_message_post(msg);
+}
+
+HAPI Eina_Bool quickpanel_setting_get_secured_lock_state(void)
+{
+       qp_secured_lock_state_e secured_lock = QP_SECURED_LOCK_OFF;
+       int ret = 0;
+       int val = 0;
+
+       secured_lock = quickpanel_get_secured_lock_state();
+
+       ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_LOCK_STATE, &val);
+       if (ret != SYSTEM_SETTINGS_ERROR_NONE)
+               ERR("Failed get value of %s : %d", "SYSTEM_SETTINGS_KEY_LOCK_STATE", ret);
+
+       if (secured_lock == QP_SECURED_LOCK_ON && val == SYSTEM_SETTINGS_LOCK_STATE_LOCK)
+               return EINA_TRUE;
+
+
+       return EINA_FALSE;
+}
+
+HAPI void quickpanel_setting_show_not_supported_message(void)
+{
+       notification_status_message_post(QS_NOT_SUPPORT_MSG);
+       quickpanel_uic_close_quickpanel(false, 0);
+}
diff --git a/src/settings/settings.c b/src/settings/settings.c
new file mode 100755 (executable)
index 0000000..401bc34
--- /dev/null
@@ -0,0 +1,446 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <stdlib.h>
+#include <glib.h>
+#include <Elementary.h>
+
+#include <vconf.h>
+#include <notification.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "quickpanel-ui.h"
+#include "quickpanel_def.h"
+#include "modules.h"
+#include "settings.h"
+#include "setting_utils.h"
+#include "preference.h"
+
+#ifdef QP_SCREENREADER_ENABLE
+#include "accessibility.h"
+#endif
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+#include "emergency_mode.h"
+#endif
+
+static int quickpanel_settings_init(void *data);
+static int quickpanel_settings_fini(void *data);
+static int quickpanel_settings_suspend(void *data);
+static int quickpanel_settings_resume(void *data);
+static void quickpanel_settings_lang_changed(void *data);
+static void quickpanel_settings_reflesh(void *data);
+static Eina_Bool _module_is_enabled(QP_Module_Setting *module);
+
+extern QP_Module_Setting wifi;
+extern QP_Module_Setting gps;
+extern QP_Module_Setting bluetooth;
+extern QP_Module_Setting sound;
+extern QP_Module_Setting rotate;
+
+QP_Module settings = {
+       .name = "settings",
+       .init = quickpanel_settings_init,
+       .fini = quickpanel_settings_fini,
+       .suspend = quickpanel_settings_suspend,
+       .resume = quickpanel_settings_resume,
+       .lang_changed = quickpanel_settings_lang_changed,
+       .refresh = quickpanel_settings_reflesh,
+};
+
+static struct _info {
+       GHashTable *module_table;
+       QP_Module_Setting *modules[];
+} s_info = {
+       .module_table = NULL,
+       .modules = {
+               &wifi,
+               &gps,
+               &sound,
+               &rotate,
+               &bluetooth,
+               NULL,
+       },
+};
+
+static void _module_init(QP_Module_Setting *module)
+{
+       if (module->init != NULL) {
+               module->loader = (QP_Setting_Loaded_Item *)calloc(1, sizeof(QP_Setting_Loaded_Item));
+               module->init(module);
+               module->is_loaded = EINA_TRUE;
+       }
+}
+
+static void _module_fini(QP_Module_Setting *module)
+{
+       if (module->fini != NULL) {
+               module->fini(module);
+               if (module->loader != NULL) {
+                       free(module->loader);
+                       module->loader = NULL;
+                       module->is_loaded = EINA_FALSE;
+               }
+       }
+}
+
+static int _module_count_get(void)
+{
+       int i, cnt = 0;
+
+       for (i = 0; s_info.modules[i] != NULL; i++)
+               cnt++;
+
+
+       return cnt;
+}
+
+static QP_Module_Setting *_module_get_by_name(const char *name)
+{
+       retif(name == NULL, NULL, "invalid parameter");
+       retif(s_info.module_table == NULL, NULL, "invalid parameter");
+
+       return g_hash_table_lookup(s_info.module_table, name);
+}
+
+static Eina_Bool _module_is_enabled(QP_Module_Setting *module)
+{
+       retif(module == NULL, EINA_FALSE, "invalid parameter");
+       retif(module->name == NULL, EINA_FALSE, "invalid parameter");
+
+       if (strcmp(module->name, MODULE_BLANK) == 0)
+               return EINA_FALSE;
+
+
+       if (module->supported_get) {
+               if (module->supported_get() == 0)
+                       return EINA_FALSE;
+       }
+
+       return EINA_TRUE;
+}
+
+static int quickpanel_settings_init(void *data)
+{
+       int i;
+       int mod_count = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       mod_count = _module_count_get();
+       if (s_info.module_table != NULL) {
+               g_hash_table_remove_all(s_info.module_table);
+               g_hash_table_destroy(s_info.module_table);
+               s_info.module_table = NULL;
+       }
+       s_info.module_table = g_hash_table_new_full(g_str_hash, g_str_equal,
+                       (GDestroyNotify)g_free,
+                       NULL);
+       if (s_info.module_table != NULL) {
+               for (i = 0; i < mod_count; i++) {
+                       if (s_info.modules[i]->supported_get != NULL) {
+                               if (s_info.modules[i]->supported_get() == 0)
+                                       continue;
+
+                       }
+
+                       if (s_info.modules[i]->init != NULL && s_info.modules[i]->name != NULL) {
+                               DBG("quickbutton %s is initialized", s_info.modules[i]->name);
+                               g_hash_table_insert(s_info.module_table,
+                                               g_strdup(s_info.modules[i]->name),
+                                               s_info.modules[i]);
+                               _module_init(s_info.modules[i]);
+                       }
+               }
+       } else {
+               ERR("failed to create module has table");
+               return QP_FAIL;
+       }
+
+       return QP_OK;
+}
+
+static int quickpanel_settings_fini(void *data)
+{
+       int i;
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; s_info.modules[i] != NULL; i++) {
+               if (_module_is_enabled(s_info.modules[i]) == EINA_TRUE)
+                       _module_fini(s_info.modules[i]);
+
+       }
+
+       if (s_info.module_table) {
+               g_hash_table_remove_all(s_info.module_table);
+               g_hash_table_destroy(s_info.module_table);
+               s_info.module_table = NULL;
+       }
+
+       return ret;
+}
+
+static int quickpanel_settings_suspend(void *data)
+{
+       int i;
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; s_info.modules[i] != NULL; i++) {
+               if (_module_is_enabled(s_info.modules[i]) == EINA_TRUE) {
+                       if ((s_info.modules[i])->suspend != NULL)
+                               (s_info.modules[i])->suspend(s_info.modules[i]);
+
+               }
+       }
+
+       return ret;
+}
+
+static int quickpanel_settings_resume(void *data)
+{
+       int i;
+       int ret = 0;
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; s_info.modules[i] != NULL; i++) {
+               if (_module_is_enabled(s_info.modules[i]) == EINA_TRUE) {
+                       if ((s_info.modules[i])->resume != NULL)
+                               (s_info.modules[i])->resume(s_info.modules[i]);
+
+               }
+       }
+
+       return ret;
+}
+
+static void quickpanel_settings_lang_changed(void *data)
+{
+       int i;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       for (i = 0; s_info.modules[i] != NULL; i++) {
+               if (_module_is_enabled(s_info.modules[i]) == EINA_TRUE) {
+                       if ((s_info.modules[i])->lang_changed != NULL)
+                               (s_info.modules[i])->lang_changed(s_info.modules[i]);
+
+               }
+       }
+}
+
+static void quickpanel_settings_reflesh(void *data)
+{
+       int i;
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       for (i = 0; s_info.modules[i] != NULL; i++) {
+               if (_module_is_enabled(s_info.modules[i]) == EINA_TRUE) {
+                       if ((s_info.modules[i])->refresh != NULL)
+                               (s_info.modules[i])->refresh(s_info.modules[i]);
+
+               }
+       }
+}
+
+HAPI int quickpanel_settings_featured_list_validation_check(char *order)
+{
+       int i = 0, is_valid = 0;
+       int order_count = 0;
+       gchar **order_split = NULL;
+       QP_Module_Setting *mod = NULL;
+       retif(order == NULL, is_valid, "Invalid parameter!");
+
+       if (s_info.module_table == NULL)
+               return is_valid;
+
+
+       order_split = g_strsplit(order, ",", 0);
+
+       if (order_split != NULL) {
+               order_count = g_strv_length(order_split);
+
+               if (order_count >= QP_SETTING_NUM_MINIMUM_ICON) {
+                       for (i = 0; i < order_count; i++) {
+                               mod = _module_get_by_name(order_split[i]);
+                               if (mod != NULL) {
+                                       is_valid = 1;
+                               } else {
+                                       is_valid = 0;
+                                       break;
+                               }
+                       }
+               }
+
+               g_strfreev(order_split);
+       }
+
+       return is_valid;
+}
+
+HAPI void quickpanel_settings_featured_list_get(Eina_List **list)
+{
+       int i = 0, seq_count = 0;
+       int num_featured = 0;
+       int seq_added_count = 0;
+       gchar **params = NULL;
+       QP_Module_Setting *module = NULL;
+       char *sequence = NULL;
+       char *num_featured_str = NULL;
+       const char *default_sequence = quickpanel_preference_default_get(PREF_QUICKSETTING_ORDER);
+       const char *default_num_featured_str = quickpanel_preference_default_get(PREF_QUICKSETTING_FEATURED_NUM);
+
+       retif(list == NULL, , "invalid data.");
+
+       if (quickpanel_preference_get(PREF_QUICKSETTING_ORDER, &sequence) == QP_OK && sequence != NULL) {
+               DBG("preference_get key(%s) value(%s)", PREF_QUICKSETTING_ORDER, sequence);
+               params = g_strsplit(sequence, ",", 0);
+               free(sequence);
+       } else {
+               params = g_strsplit(default_sequence, ",", 0);
+       }
+
+       if (quickpanel_preference_get(PREF_QUICKSETTING_FEATURED_NUM, &num_featured_str) == QP_OK && num_featured_str != NULL) {
+               DBG("preference_get key(%s) value(%s)", PREF_QUICKSETTING_FEATURED_NUM, num_featured_str);
+               num_featured = atoi(num_featured_str);
+               free(num_featured_str);
+       } else {
+               num_featured = atoi(default_num_featured_str);
+       }
+
+       *list = NULL;
+
+       if (params != NULL) {
+               seq_count = g_strv_length(params);
+
+               for (i = 0; i < seq_count; i++) {
+                       if (seq_added_count >= num_featured)
+                               break;
+
+
+                       module = _module_get_by_name(params[i]);
+                       if (module != NULL) {
+                               if (_module_is_enabled(module) == EINA_TRUE) {
+                                       *list = eina_list_append(*list, module);
+                                       seq_added_count++;
+                               }
+                       }
+               }
+
+               g_strfreev(params);
+       }
+}
+
+HAPI void quickpanel_settings_all_list_get(Eina_List **list)
+{
+       int i = 0, seq_count = 0;
+       gchar **params = NULL;
+       QP_Module_Setting *module = NULL;
+       retif(list == NULL, , "invalid data.");
+       char *sequence = NULL;
+       const char *default_sequence = quickpanel_preference_default_get(PREF_QUICKSETTING_ORDER);
+
+       if (quickpanel_preference_get(PREF_QUICKSETTING_ORDER, &sequence) == QP_OK && sequence != NULL) {
+               DBG("preference_get key(%s) value(%s)", PREF_QUICKSETTING_ORDER, sequence);
+               params = g_strsplit(sequence, ",", 0);
+               free(sequence);
+       } else {
+               params = g_strsplit(default_sequence, ",", 0);
+       }
+
+       *list = NULL;
+
+       if (params != NULL) {
+               seq_count = g_strv_length(params);
+
+               for (i = 0; i < seq_count; i++) {
+                       module = _module_get_by_name(params[i]);
+                       if (module != NULL) {
+                               if (_module_is_enabled(module) == EINA_TRUE)
+                                       *list = eina_list_append(*list, module);
+
+                       }
+               }
+
+               g_strfreev(params);
+       }
+}
+
+HAPI void quickpanel_setting_save_list_to_file(Eina_List *list, int num_featured)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       QP_Module_Setting *module = NULL;
+       char buf[32] = {0,};
+       retif(list == NULL, , "invalid parameter");
+
+       int is_first = 1;
+
+       char *base = NULL;
+       char *temp = NULL;
+
+       EINA_LIST_FOREACH_SAFE(list, l, l_next, module) {
+               if (module == NULL)
+                       continue;
+
+               if (module->name == NULL)
+                       continue;
+
+               if (_module_is_enabled(module) == EINA_FALSE)
+                       continue;
+
+
+               if (is_first == 1) {
+                       base = g_strdup(module->name);
+                       is_first = 0;
+               } else {
+                       temp = g_strconcat(base, ",", module->name, NULL);
+                       if (base != NULL) g_free(base);
+                       base = temp;
+                       temp = NULL;
+               }
+       }
+
+       if (base != NULL) {
+               if (quickpanel_preference_set(PREF_QUICKSETTING_ORDER, base) == QP_FAIL)
+                       ERR("failed to write quicksetting order");
+
+               g_free(base);
+               snprintf(buf, sizeof(buf) - 1, "%d", num_featured);
+
+               if (quickpanel_preference_set(PREF_QUICKSETTING_FEATURED_NUM, buf) == QP_FAIL)
+                       ERR("failed to write quicksetting featured num");
+
+       }
+}
+
+HAPI QP_Module_Setting *quickpanel_settings_module_get_by_name(const char *name)
+{
+       return _module_get_by_name(name);
+}
+
+HAPI int quickpanel_settings_module_count_get(void)
+{
+       return _module_count_get();
+}
diff --git a/src/settings/settings_gridbox.c b/src/settings/settings_gridbox.c
new file mode 100755 (executable)
index 0000000..2d26736
--- /dev/null
@@ -0,0 +1,496 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "list_util.h"
+#include "quickpanel_def.h"
+#include "settings_gridbox.h"
+
+#define E_DATA_LAYOUT_PORTRAIT "layout_portrait"
+#define E_DATA_LAYOUT_LANDSCAPE "layout_landscape"
+#define E_DATA_ITEM_TYPE "item_type"
+#define E_DATA_POS_INFO "pos_info"
+#define DIVIDER_TOUCH_W 20
+
+typedef struct _info_layout {
+       int n_per_rows;
+       int padding_top;
+       int padding_left;
+       int padding_right;
+       int padding_bottom;
+       int padding_between_h;
+       int padding_between_v;
+       int child_w;
+       int child_h;
+       double scale;
+       int limit_w;
+} info_layout;
+
+typedef struct _info_position {
+       int index;
+       int offset_x;
+       int offset_y;
+       int width;
+       int height;
+} info_position;
+
+static Eina_List *_position_info_add(Eina_List *list, int is_icon, int index, int offset_x, int offset_y, int width, int height)
+{
+       info_position *pos_info = (info_position *) calloc(1, sizeof(info_position));
+       retif(pos_info == NULL, NULL, "failed to allocate memory");
+
+       pos_info->index = index;
+
+       if (is_icon == 1) {
+               if (offset_x <= 0) {
+                       pos_info->offset_x = offset_x;
+                       pos_info->width = width - DIVIDER_TOUCH_W;
+               } else {
+                       pos_info->offset_x = offset_x + DIVIDER_TOUCH_W;
+                       pos_info->width = width - DIVIDER_TOUCH_W - DIVIDER_TOUCH_W;
+               }
+       } else {
+               if (offset_x <= 0) {
+                       pos_info->offset_x = offset_x;
+                       pos_info->width = width - DIVIDER_TOUCH_W;
+               } else {
+                       pos_info->offset_x = offset_x - DIVIDER_TOUCH_W;
+                       pos_info->width = width + DIVIDER_TOUCH_W + DIVIDER_TOUCH_W;
+               }
+       }
+
+       pos_info->offset_y = offset_y;
+       pos_info->height = height;
+
+       return eina_list_append(list, pos_info);
+}
+
+static void _position_info_clear(Eina_List *list)
+{
+       info_position *pos_info = NULL;
+
+       EINA_LIST_FREE(list, pos_info) {
+               if (pos_info != NULL) {
+                       free(pos_info);
+                       pos_info = NULL;
+               }
+       }
+}
+
+static Eina_List *_position_info_get(Evas_Object *gridbox)
+{
+       return evas_object_data_get(gridbox, E_DATA_POS_INFO);
+}
+
+static void _position_info_set(Evas_Object *gridbox, Eina_List *list)
+{
+       evas_object_data_set(gridbox, E_DATA_POS_INFO, list);
+}
+
+static info_layout *_get_layout(Evas_Object *gridbox)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       info_layout *info_layout = NULL;
+
+       retif(ad == NULL, NULL, "invalid data.");
+       retif(gridbox == NULL, NULL, "invalid parameter");
+
+       if (ad->angle == 270 || ad->angle == 90)
+               info_layout = evas_object_data_get(gridbox, E_DATA_LAYOUT_LANDSCAPE);
+       else
+               info_layout = evas_object_data_get(gridbox, E_DATA_LAYOUT_PORTRAIT);
+
+
+       return info_layout;
+}
+
+static int _item_is_icon(Evas_Object *icon)
+{
+       const char *item_type = NULL;
+       retif(icon == NULL, 1, "invalid parameter");
+
+       item_type = evas_object_data_get(icon, E_DATA_ITEM_TYPE);
+       retif(item_type == NULL, 1, "invalid parameter");
+
+       if (strcmp(item_type, SETTINGS_GRIDBOX_ITEM_ICON) == 0)
+               return 1;
+
+
+       return 0;
+}
+
+static void _item_pos_get(int order, int *x, int *y, void *data)
+{
+       info_layout *info_layout = data;
+       retif(info_layout == NULL, , "invalid parameter");
+
+       int n_per_row = info_layout->n_per_rows;
+
+       int row = (order - 1) / n_per_row;
+       int column = (order - 1) - (row * n_per_row);
+
+       int row_x = info_layout->padding_left
+               + ((info_layout->child_w + info_layout->padding_between_h) * column);
+
+       int row_y = info_layout->padding_top
+               + ((info_layout->child_h + info_layout->padding_between_v) * row);
+
+       if (x != NULL)
+               *x = row_x;
+
+
+       if (y != NULL)
+               *y = row_y;
+
+}
+
+static inline void _item_move_and_resize(Evas_Object *item, int x, int y, int w, int h)
+{
+       evas_object_move(item, x, y);
+       evas_object_size_hint_min_set(item, w, h);
+       evas_object_resize(item, w, h);
+}
+
+static void _layout_cb(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
+{
+       int n_children;
+       int x, y;
+       int off_x = 0, off_y = 0;
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object_Box_Option *opt;
+       int child_w;
+       int space_w = 0;
+       int num_padding_between = 0;
+
+       retif(o == NULL, , "invalid parameter");
+       retif(priv == NULL, , "invalid parameter");
+       retif(data == NULL, , "invalid parameter");
+
+       info_layout *info_layout = _get_layout(data);
+       Eina_List *list_pos_info = _position_info_get(data);
+
+       n_children = eina_list_count(priv->children);
+       DBG("layout function:%d", n_children);
+       if (!n_children) {
+               evas_object_size_hint_min_set(o, ELM_SCALE_SIZE(-1), ELM_SCALE_SIZE(0));
+               return;
+       }
+
+       //box geometry
+       evas_object_geometry_get(o, &x, &y, NULL, NULL);
+
+       num_padding_between = info_layout->n_per_rows >> 1;
+       num_padding_between += (info_layout->n_per_rows > 1 && (info_layout->n_per_rows % 2) > 0) ? 1 : 0;
+
+       space_w = (info_layout->padding_left * 2) + (info_layout->padding_between_h * num_padding_between);
+       child_w = (info_layout->limit_w - space_w) / info_layout->n_per_rows;
+
+       info_layout->child_w = child_w;
+
+       if (list_pos_info != NULL) {
+               _position_info_clear(list_pos_info);
+               _position_info_set(data, NULL);
+               list_pos_info = NULL;
+       }
+
+       int order_obj = 0;
+       int order_children = 1;
+       int order_divider = 1;
+       Evas_Object *btn_previous = NULL;
+
+       EINA_LIST_FOREACH_SAFE(priv->children, l, l_next, opt) {
+               if (_item_is_icon(opt->obj)) {
+                       _item_pos_get(order_children, &off_x, &off_y, info_layout);
+                       _item_move_and_resize(opt->obj, x + off_x, y + off_y,
+                                       info_layout->child_w, info_layout->child_h);
+                       order_children++;
+                       list_pos_info =
+                               _position_info_add(list_pos_info, 1, order_obj, off_x, off_y, info_layout->child_w, info_layout->child_h);
+                       if (btn_previous != NULL && opt->obj != NULL) {
+                               elm_object_focus_next_object_set(opt->obj, btn_previous, ELM_FOCUS_LEFT);
+                               elm_object_focus_next_object_set(btn_previous, opt->obj, ELM_FOCUS_RIGHT);
+                       }
+                       btn_previous = opt->obj;
+               } else {
+                       _item_pos_get(order_children - 1, &off_x, &off_y, info_layout);
+                       _item_move_and_resize(opt->obj, x + off_x + info_layout->child_w, y + off_y,
+                                       info_layout->padding_between_h, info_layout->child_h);
+
+                       if ((order_divider % info_layout->n_per_rows) == 0)
+                               evas_object_hide(opt->obj);
+                       else
+                               evas_object_show(opt->obj);
+
+
+                       order_divider++;
+                       list_pos_info =
+                               _position_info_add(list_pos_info, 0, order_obj, off_x + info_layout->child_w, off_y,
+                                               info_layout->padding_between_h, info_layout->child_h);
+               }
+               order_obj++;
+       }
+
+       _position_info_set(data, list_pos_info);
+}
+
+static void _deleted_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       DBG("deleted_cb");
+       Eina_List *list = NULL;
+       Evas_Object *gridbox = obj;
+       retif(gridbox == NULL, , "invalid parameter");
+
+       info_layout *info_layout_portrait = evas_object_data_get(gridbox,
+                       E_DATA_LAYOUT_PORTRAIT);
+       info_layout *info_layout_landscape = evas_object_data_get(gridbox,
+                       E_DATA_LAYOUT_LANDSCAPE);
+
+       list = _position_info_get(gridbox);
+       _position_info_clear(list);
+       _position_info_set(gridbox, NULL);
+
+       quickpanel_settings_gridbox_item_remove_all(gridbox);
+       evas_object_data_del(gridbox, E_DATA_LAYOUT_PORTRAIT);
+       evas_object_data_del(gridbox, E_DATA_LAYOUT_LANDSCAPE);
+
+       if (info_layout_portrait != NULL)
+               free(info_layout_portrait);
+
+
+       if (info_layout_landscape != NULL)
+               free(info_layout_landscape);
+
+}
+
+HAPI Evas_Object *quickpanel_settings_gridbox_create(Evas_Object *parent, void *data)
+{
+       retif(parent == NULL, NULL, "invalid parameter");
+       retif(data == NULL, NULL, "invalid parameter");
+       struct appdata *ad = data;
+       Evas_Object *gridbox = NULL;
+
+       info_layout *info_layout_portrait = NULL;
+       info_layout *info_layout_landscape = NULL;
+
+       info_layout_portrait = (info_layout *) calloc(1,
+                       sizeof(info_layout));
+       retif(info_layout_portrait == NULL, NULL, "memory allocation failed");
+       info_layout_portrait->padding_between_h = 2 * ad->scale;
+       info_layout_portrait->padding_between_v = 1 * ad->scale;
+       info_layout_portrait->padding_top = 0;
+       info_layout_portrait->padding_left = 1;
+       info_layout_portrait->padding_bottom = 0;
+       info_layout_portrait->n_per_rows = 8;
+       info_layout_portrait->child_w = 0;
+
+       info_layout_portrait->child_h = QP_SETTING_ICON_MIN_WH_WVGA * ad->scale;
+
+       info_layout_portrait->limit_w = ad->win_width;
+       info_layout_portrait->scale = ad->scale;
+
+       info_layout_landscape = (info_layout *) calloc(1, sizeof(info_layout));
+       if (info_layout_landscape == NULL) {
+               free(info_layout_portrait);
+               ERR("memory allocation failed");
+               return NULL;
+       }
+       info_layout_landscape->padding_between_h = 2 * ad->scale;
+       info_layout_landscape->padding_between_v = 1 * ad->scale;
+       info_layout_landscape->padding_top = 0;
+       info_layout_landscape->padding_left = 1;
+       info_layout_landscape->padding_bottom = 0;
+       info_layout_landscape->n_per_rows = 10;
+       info_layout_landscape->child_w = 0;
+
+       info_layout_landscape->child_h = QP_SETTING_ICON_MIN_WH_WVGA * ad->scale;
+
+       info_layout_landscape->limit_w = ad->win_height;
+       info_layout_landscape->scale = ad->scale;
+
+       gridbox = elm_box_add(parent);
+       evas_object_size_hint_weight_set(gridbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_fill_set(gridbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_box_horizontal_set(gridbox, EINA_TRUE);
+
+       elm_box_layout_set(gridbox, _layout_cb, gridbox, NULL);
+
+       evas_object_data_set(gridbox, E_DATA_LAYOUT_PORTRAIT, info_layout_portrait);
+       evas_object_data_set(gridbox, E_DATA_LAYOUT_LANDSCAPE, info_layout_landscape);
+       evas_object_event_callback_add(gridbox, EVAS_CALLBACK_DEL, _deleted_cb, NULL);
+
+       evas_object_show(gridbox);
+
+       return gridbox;
+}
+
+HAPI void quickpanel_settings_gridbox_remove(Evas_Object *gridbox)
+{
+       retif(gridbox == NULL, , "invalid parameter");
+
+       quickpanel_settings_gridbox_item_remove_all(gridbox);
+       evas_object_del(gridbox);
+       gridbox = NULL;
+}
+
+HAPI void quickpanel_settings_gridbox_item_add(Evas_Object *gridbox, Evas_Object *item, const char *item_type, int is_prepend)
+{
+       evas_object_data_set(item, E_DATA_ITEM_TYPE, item_type);
+
+       if (is_prepend == SETTINGS_GRIDBOX_PREPEND)
+               elm_box_pack_start(gridbox, item);
+       else
+               elm_box_pack_end(gridbox, item);
+
+}
+
+HAPI void quickpanel_settings_gridbox_item_remove(Evas_Object *gridbox, Evas_Object *item)
+{
+       retif(gridbox == NULL, , "invalid parameter");
+       retif(item == NULL, , "invalid parameter");
+
+       elm_box_unpack(gridbox, item);
+       evas_object_del(item);
+       item = NULL;
+}
+
+HAPI void quickpanel_settings_gridbox_item_remove_all(Evas_Object *gridbox)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj = NULL;
+       Eina_List *item_list = NULL;
+
+       retif(gridbox == NULL, , "invalid parameter");
+
+       item_list = elm_box_children_get(gridbox);
+       retif(item_list == NULL, , "invalid parameter");
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+               if (obj != NULL)
+                       quickpanel_settings_gridbox_item_remove(gridbox, obj);
+
+       }
+
+       eina_list_free(item_list);
+}
+
+HAPI void quickpanel_settings_gridbox_rotation(Evas_Object *gridbox, int angle)
+{
+       const char *signal = NULL;
+
+       retif(gridbox == NULL, , "invalid parameter");
+
+       info_layout *info_layout_portrait = evas_object_data_get(gridbox,
+                       E_DATA_LAYOUT_PORTRAIT);
+       info_layout *info_layout_landscape = evas_object_data_get(gridbox,
+                       E_DATA_LAYOUT_LANDSCAPE);
+
+       retif(info_layout_portrait == NULL || info_layout_landscape == NULL, ,
+                       "gridbox is crashed");
+
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj;
+       Eina_List *item_list = elm_box_children_get(gridbox);
+       retif(item_list == NULL, , "invalid parameter");
+
+       if (angle == 270 || angle == 90)
+               signal = "icon.landscape";
+       else
+               signal = "icon.portrait";
+
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj) {
+               if (obj != NULL) {
+                       elm_object_signal_emit(obj, signal, "quickpanl.prog");
+                       edje_object_message_signal_process(_EDJ(obj));
+               }
+       }
+}
+
+HAPI int quickpanel_settings_gridbox_item_count_get(Evas_Object *gridbox)
+{
+       int item_count = 0;
+       Eina_List *items = NULL;
+       retif(gridbox == NULL, 0, "invalid parameter");
+
+       if ((items = elm_box_children_get(gridbox)) != NULL) {
+               item_count = eina_list_count(items);
+               eina_list_free(items);
+               return item_count;
+       } else {
+               return 0;
+       }
+}
+
+HAPI int quickpanel_settings_gridbox_item_index_get(Evas_Object *gridbox, int touch_x, int touch_y)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       Eina_List *list_pos_info = NULL;
+       info_position *pos_info = NULL;
+       int x = 0, y = 0, w = 0, h = 0;
+
+       evas_object_geometry_get(gridbox, &x, &y, &w, &h);
+       list_pos_info = _position_info_get(gridbox);
+
+       if (touch_x >= x && touch_x <= x + w && touch_y >= y && touch_y <= y + h) {
+               touch_x = touch_x - x;
+               touch_y = touch_y - y;
+               EINA_LIST_FOREACH_SAFE(list_pos_info, l, l_next, pos_info) {
+                       if (pos_info != NULL) {
+                               if (touch_x >= pos_info->offset_x && touch_x <= pos_info->offset_x + pos_info->width
+                                               && touch_y >= pos_info->offset_y && touch_y <= pos_info->offset_y + pos_info->height) {
+                                       return pos_info->index;
+                               }
+                       }
+               }
+       }
+       return -1;
+}
+
+HAPI void quickpanel_settings_gridbox_unpack_all(Evas_Object *gridbox)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *node = NULL;
+       Eina_List *list = NULL;
+       retif(gridbox == NULL, , "invalid parameter");
+
+       list = elm_box_children_get(gridbox);
+       retif(list == NULL, , "empty list");
+
+       elm_box_unpack_all(gridbox);
+
+       EINA_LIST_FOREACH_SAFE(list, l, l_next, node) {
+               if (node != NULL) {
+                       if (_item_is_icon(node) == 0) {
+                               evas_object_del(node);
+                               node = NULL;
+                       }
+               }
+       }
+
+       eina_list_free(list);
+}
diff --git a/src/settings/settings_icon_common.c b/src/settings/settings_icon_common.c
new file mode 100755 (executable)
index 0000000..84a4e8e
--- /dev/null
@@ -0,0 +1,233 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <sound_manager.h>
+
+#include "media.h"
+#include "quickpanel-ui.h"
+#include "quickpanel_def.h"
+#include "common_uic.h"
+#include "common.h"
+#include "modules.h"
+#include "settings.h"
+#include "setting_utils.h"
+#include "setting_module_api.h"
+#include "accessibility.h"
+
+#define E_DATA_ICON_CLICKED_CB "clicked_cb"
+#define E_DATA_ICON_ORIGINAL_OBJ "original_obj"
+
+#define TAP_AND_DELAY_LONG 1.000
+
+static struct _info {
+       int down_x;
+       Eina_Bool is_longpressed;
+       Ecore_Timer *timer_longpress;
+} s_info = {
+       .down_x = 0,
+       .is_longpressed = EINA_FALSE,
+       .timer_longpress = NULL,
+};
+
+static Eina_Bool _icon_handler_longpress(void *data)
+{
+       DBG("");
+       Evas_Object *obj = data;
+       QP_Module_Setting *module = NULL;
+       retif(obj == NULL, ECORE_CALLBACK_CANCEL, "invalid argument");
+
+       struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
+       retif(ad == NULL, ECORE_CALLBACK_CANCEL, "application data is NULL");
+
+       quickpanel_media_play_feedback();
+
+       ecore_timer_del(s_info.timer_longpress);
+       s_info.timer_longpress = NULL;
+       s_info.is_longpressed = EINA_TRUE;
+
+       module = evas_object_data_get(obj, E_DATA_MODULE_INFO);
+       if (module != NULL) {
+               if (module->handler_longpress != NULL) {
+                       if (module->name)
+                               DBG("launch setting menu of %s", module->name);
+
+                       module->handler_longpress(module);
+
+                       elm_object_signal_emit(obj, "mouse,up,1", "background.super");
+               }
+       }
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void _icon_mouse_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       retif(obj == NULL, , "invalid argument");
+
+       if (s_info.timer_longpress != NULL) {
+               ecore_timer_del(s_info.timer_longpress);
+               s_info.timer_longpress = NULL;
+               s_info.is_longpressed = EINA_FALSE;
+       }
+}
+
+static void _icon_mouse_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       retif(obj == NULL, , "invalid argument");
+
+       if (s_info.timer_longpress != NULL) {
+               ecore_timer_del(s_info.timer_longpress);
+               s_info.timer_longpress = NULL;
+       }
+
+       s_info.is_longpressed = EINA_FALSE;
+       s_info.timer_longpress = ecore_timer_add(TAP_AND_DELAY_LONG, _icon_handler_longpress, obj);
+}
+
+#ifdef QP_SCREENREADER_ENABLE
+static void _icon_focus_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *icon = NULL;
+       Edje_Signal_Cb func = NULL;
+       retif(obj == NULL, , "invalid argument");
+
+       struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
+       retif(ad == NULL, , "application data is NULL");
+
+       if (s_info.timer_longpress != NULL) {
+               ecore_timer_del(s_info.timer_longpress);
+               s_info.timer_longpress = NULL;
+       }
+
+       if (s_info.is_longpressed != EINA_TRUE)
+               quickpanel_media_play_feedback();
+
+
+       icon = evas_object_data_get(obj, E_DATA_ICON_ORIGINAL_OBJ);
+       if (icon != NULL) {
+               func = evas_object_data_get(icon, E_DATA_ICON_CLICKED_CB);
+
+               if (func != NULL && s_info.is_longpressed != EINA_TRUE)
+                       func(data, icon,  "mouse,clicked,1", "background.super");
+
+       }
+}
+
+static void _icon_focus_clicked_cb_without_feedback(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *icon = NULL;
+       Edje_Signal_Cb func = NULL;
+       retif(obj == NULL, , "invalid argument");
+
+       struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
+       retif(ad == NULL, , "application data is NULL");
+
+       if (s_info.timer_longpress != NULL) {
+               ecore_timer_del(s_info.timer_longpress);
+               s_info.timer_longpress = NULL;
+       }
+
+       icon = evas_object_data_get(obj, E_DATA_ICON_ORIGINAL_OBJ);
+       if (icon != NULL) {
+               func = evas_object_data_get(icon, E_DATA_ICON_CLICKED_CB);
+
+               if (func != NULL && s_info.is_longpressed != EINA_TRUE)
+                       func(data, icon,  "mouse,clicked,1", "background.super");
+
+       }
+}
+
+HAPI int quickpanel_setting_icon_click_cb_add(Evas_Object *icon, Edje_Signal_Cb func, void *data)
+{
+       retif(icon == NULL, QP_FAIL, "invalid parameter");
+       retif(func == NULL, QP_FAIL, "invalid parameter");
+
+       struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
+       retif(ad == NULL, QP_FAIL, "application data is NULL");
+
+       elm_object_signal_callback_add(icon, "mouse,up,1", "background.super", _icon_mouse_up_cb, data);
+       elm_object_signal_callback_add(icon, "mouse,down,1", "background.super", _icon_mouse_down_cb, data);
+
+       evas_object_data_set(icon, E_DATA_ICON_CLICKED_CB, func);
+
+#ifdef QP_SCREENREADER_ENABLE
+       Evas_Object *ao = NULL;
+       ao = quickpanel_accessibility_screen_reader_object_get(icon,
+                       SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
+       if (ao != NULL) {
+               evas_object_smart_callback_add(ao, "clicked",
+                               _icon_focus_clicked_cb, data);
+               evas_object_data_set(ao, E_DATA_ICON_ORIGINAL_OBJ, icon);
+       }
+#endif
+
+       return 0;
+}
+
+HAPI int quickpanel_setting_icon_click_cb_without_feedback_add(Evas_Object *icon, Edje_Signal_Cb func, void *data)
+{
+       retif(icon == NULL, QP_FAIL, "invalid parameter");
+       retif(func == NULL, QP_FAIL, "invalid parameter");
+
+       struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
+       retif(ad == NULL, QP_FAIL, "application data is NULL");
+
+       elm_object_signal_callback_add(icon, "mouse,up,1", "background.super", _icon_mouse_up_cb, data);
+       elm_object_signal_callback_add(icon, "mouse,down,1", "background.super", _icon_mouse_down_cb, data);
+
+       evas_object_data_set(icon, E_DATA_ICON_CLICKED_CB, func);
+
+#ifdef QP_SCREENREADER_ENABLE
+       Evas_Object *ao = NULL;
+       ao = quickpanel_accessibility_screen_reader_object_get(icon,
+                       SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
+       if (ao != NULL) {
+               evas_object_smart_callback_add(ao, "clicked",
+                               _icon_focus_clicked_cb_without_feedback, data);
+               evas_object_data_set(ao, E_DATA_ICON_ORIGINAL_OBJ, icon);
+       }
+#endif
+
+       return 0;
+}
+
+HAPI int quickpanel_setting_icon_click_cb_del(Evas_Object *icon, Edje_Signal_Cb func)
+{
+       retif(icon == NULL, QP_FAIL, "invalid parameter");
+       retif(func == NULL, QP_FAIL, "invalid parameter");
+
+       struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
+       retif(ad == NULL, QP_FAIL, "application data is NULL");
+
+       elm_object_signal_callback_del(icon, "mouse,clicked,1", "background.super", func);
+
+       return QP_OK;
+}
+
+HAPI void quickpanel_setting_icon_handler_longpress(const char *pkgname, const char *key, const char *value)
+{
+       int ret;
+
+       ret = quickpanel_common_send_message_to_app(pkgname, NULL, key, value);
+       quickpanel_common_inform_launch_app_result(pkgname, ret);
+       quickpanel_uic_close_quickpanel(false, 0);
+}
+#endif
+
diff --git a/src/settings/settings_view_featured.c b/src/settings/settings_view_featured.c
new file mode 100755 (executable)
index 0000000..c0e4a16
--- /dev/null
@@ -0,0 +1,346 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <glib.h>
+
+#include <notification.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "common_uic.h"
+#include "quickpanel-ui.h"
+#include "quickpanel_def.h"
+#include "modules.h"
+#include "preference.h"
+#include "settings.h"
+#include "setting_utils.h"
+#include "settings_gridbox.h"
+#include "setting_module_api.h"
+#include "settings_view_featured.h"
+#include "accessibility.h"
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+#include "emergency_mode.h"
+#endif
+
+static int _init(void *data);
+static void _init_job_cb(void *data);
+static int _fini(void *data);
+static int _resume(void *data);
+static void _opened(void *data);
+static void _closed(void *data);
+static void _refresh(void *data);
+static void _lang_changed(void *data);
+
+QP_Module settings_view_featured = {
+       .name = "settings_view_featured",
+       .init = _init,
+       .init_job_cb = _init_job_cb,
+       .fini = _fini,
+       .resume = _resume,
+       .qp_opened = _opened,
+       .qp_closed = _closed,
+       .refresh = _refresh,
+       .lang_changed = _lang_changed,
+};
+
+static void _view_layout_create(void *data)
+{
+       Evas_Object *box = NULL;
+       Evas_Object *container = NULL;
+       struct appdata *ad = data;
+       retif(!ad->ly, , "layout is NULL!");
+
+       container = quickpanel_uic_load_edj(ad->ly, util_get_res_file_path(DEFAULT_EDJ), "quickpanel/setting_container_wvga", 0);
+
+       retif(container == NULL, , "failed to load container");
+
+       box = elm_box_add(container);
+       if (!box) {
+               if (container != NULL) {
+                       evas_object_del(container);
+                       container = NULL;
+               }
+               return;
+       }
+
+       elm_object_style_set(box, "effect");
+
+       evas_object_size_hint_weight_set(box, 0.0 , EVAS_HINT_EXPAND);
+       evas_object_size_hint_fill_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_box_horizontal_set(box, EINA_TRUE);
+       evas_object_show(box);
+
+       elm_object_part_content_set(container, QP_SETTING_SCROLLER_PART_WVGA, box);
+
+       quickpanel_setting_layout_set(ad->ly, container);
+}
+
+static void _view_icons_add(void *data)
+{
+       int index = 0, total = 0;
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *icon = NULL;
+       QP_Module_Setting *module = NULL;
+       Eina_List *list_featured_icon = NULL;
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *box = quickpanel_setting_box_get(ad->ly);
+       retif(box == NULL, , "Invalid parameter!");
+
+       quickpanel_settings_featured_list_get(&list_featured_icon);
+       retif(list_featured_icon == NULL, , "Invalid parameter!");
+
+       total = eina_list_count(list_featured_icon);
+       EINA_LIST_FOREACH_SAFE(list_featured_icon, l, l_next, module) {
+               icon = quickpanel_setting_module_icon_create(module, box);
+               quickpanel_setting_module_icon_add(module, icon, QP_SETTING_ICON_CONTAINER_FEATURED);
+               quickpanel_setting_icon_pack(box, icon, (index == total - 1) ? 0 : 1);
+               quickpanel_setting_module_icon_status_update(module, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+               index++;
+       }
+
+       eina_list_free(list_featured_icon);
+}
+
+static void _view_icons_del(void *data)
+{
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *icon = NULL;
+       QP_Module_Setting *module = NULL;
+       Eina_List *list_featured_icon = NULL;
+       struct appdata *ad = (struct appdata *)data;
+       retif(ad == NULL, , "Invalid parameter!");
+       Evas_Object *box = quickpanel_setting_box_get(ad->ly);
+       retif(box == NULL, , "Invalid parameter!");
+       list_featured_icon = elm_box_children_get(box);
+
+       EINA_LIST_FOREACH_SAFE(list_featured_icon, l, l_next, icon) {
+               module = quickpanel_setting_module_get_from_icon(icon);
+               quickpanel_setting_module_icon_remove(module, icon);
+               elm_box_unpack(box, icon);
+               if (icon != NULL) {
+                       evas_object_del(icon);
+                       icon = NULL;
+               }
+       }
+
+       eina_list_free(list_featured_icon);
+}
+
+/*****************************************************************************
+ *
+ * Util functions
+ *
+ *****************************************************************************/
+static int _init(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+       if (quickpanel_emergency_mode_is_on()) {
+               elm_object_signal_emit(ad->ly, "quickpanel.setting.hide", "quickpanel.prog");
+               return QP_OK;
+       }
+#endif
+
+       _view_layout_create(data);
+       _view_icons_add(data);
+
+       elm_object_signal_emit(ad->ly, "quickpanel.setting.show", "quickpanel.prog");
+
+       return QP_OK;
+}
+
+static void _init_job_cb(void *data)
+{
+       struct appdata *ad = data;
+       Evas_Object *scroller = NULL;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_set_scroll_page_width(ad);
+       quickpanel_setting_stop(ad->ly, 0);
+       scroller = quickpanel_setting_scroller_get(ad->ly);
+       evas_object_show(scroller);
+}
+
+static int _fini(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       _view_icons_del(ad);
+       quickpanel_setting_layout_remove(ad->ly);
+       elm_object_signal_emit(ad->ly, "quickpanel.setting.hide", "quickpanel.prog");
+
+       return QP_OK;
+}
+
+static int _resume(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       return QP_OK;
+}
+
+static void _opened(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_view_featured_initial_focus_set();
+}
+
+static void _closed(void *data)
+{
+       struct appdata *ad = data;
+       Evas_Object *focused_obj = NULL;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_stop(ad->ly, 0);
+
+       if (ad->win != NULL) {
+               focused_obj = elm_object_focused_object_get(ad->win);
+               if (focused_obj != NULL)
+                       elm_object_focus_set(focused_obj, EINA_FALSE);
+
+       }
+}
+
+static void _refresh(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       quickpanel_setting_container_rotation_set(ad->ly, ad->angle);
+       quickpanel_setting_icons_rotation_set(ad->ly, ad->angle);
+
+       if (ad->is_opened == 0)
+               quickpanel_setting_stop(ad->ly, 1);
+
+}
+
+static void _lang_changed(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (ad->is_opened == 0)
+               quickpanel_setting_stop(ad->ly, 0);
+
+}
+
+HAPI Eina_Bool quickpanel_settings_is_in_left_edge(void)
+{
+       if (quickpanel_setting_scroll_page_get(quickpanel_get_app_data()) == 0)
+               return EINA_TRUE;
+
+
+       return EINA_FALSE;
+}
+
+HAPI void quickpanel_setting_view_featured_reload(Eina_List *list_all_module, int num_featured)
+{
+       int index = 0, total = 0;
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *box = NULL;
+       Evas_Object *icon = NULL;
+       QP_Module_Setting *module = NULL;
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(list_all_module == NULL, , "Invalid parameter!");
+
+       box = quickpanel_setting_box_get(ad->ly);
+       retif(box == NULL, , "invalid parameter");
+
+       quickpanel_setting_icon_unpack_all(box);
+
+       total = eina_list_count(list_all_module);
+       DBG("total:%d", total);
+       EINA_LIST_FOREACH_SAFE(list_all_module, l, l_next, module) {
+               if (index < num_featured) {
+                       if ((icon = quickpanel_setting_module_icon_get(module,
+                                                       QP_SETTING_ICON_CONTAINER_FEATURED)) == NULL) {
+                               icon = quickpanel_setting_module_icon_create(module, box);
+                       }
+                       if (icon != NULL) {
+                               quickpanel_setting_module_icon_add(module, icon, QP_SETTING_ICON_CONTAINER_FEATURED);
+                               quickpanel_setting_icon_pack(box, icon, (index == num_featured - 1) ? 0 : 1);
+                               quickpanel_setting_module_icon_status_update(module, FLAG_VALUE_VOID, FLAG_VALUE_VOID);
+                       }
+                       DBG("all list:%s", module->name);
+               } else {
+                       if ((icon = quickpanel_setting_module_icon_get(module,
+                                                       QP_SETTING_ICON_CONTAINER_FEATURED)) != NULL) {
+                               quickpanel_setting_module_icon_remove(module, icon);
+                               evas_object_del(icon);
+                               icon = NULL;
+                       }
+               }
+
+               index++;
+       }
+}
+
+HAPI void quickpanel_setting_view_featured_initial_focus_set(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "Invalid parameter!");
+
+       Evas_Object *obj_first = NULL;
+       Eina_List *list_featured_icon = NULL;
+       Evas_Object *box = quickpanel_setting_box_get(ad->ly);
+       retif(box == NULL, , "Invalid parameter!");
+
+#ifdef QP_EMERGENCY_MODE_ENABLE
+       if (quickpanel_emergency_mode_is_on())
+               return;
+
+#endif
+
+       if (quickpanel_uic_opened_reason_get() == OPENED_BY_CMD_SHOW_SETTINGS)
+               return;
+
+
+       list_featured_icon = elm_box_children_get(box);
+       if (list_featured_icon != NULL) {
+               obj_first = eina_list_nth(list_featured_icon, 0);
+               if (obj_first != NULL) {
+                       elm_object_focus_set(obj_first, EINA_FALSE);
+                       elm_object_focus_set(obj_first, EINA_TRUE);
+               }
+               eina_list_free(list_featured_icon);
+       }
+}
+
+HAPI void quickpanel_setting_view_featured_brightness_init(Evas_Object *brightness_view)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "Invalid parameter!");
+
+       Evas_Object *container = NULL;
+
+       container = quickpanel_setting_layout_get(ad->ly, QP_SETTING_BASE_PART);
+
+       retif(container == NULL, , "Failed to get container");
+
+       elm_object_part_content_set(container, QP_SETTING_BRIGHTNESS_PART_WVGA, brightness_view);
+}
diff --git a/src/sim_controller.c b/src/sim_controller.c
new file mode 100755 (executable)
index 0000000..50d9b35
--- /dev/null
@@ -0,0 +1,357 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+#include <stdlib.h>
+#include <dlog.h>
+#include <vconf.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <telephony/telephony.h>
+#include <system_settings.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "handler_controller.h"
+#include "sim_controller.h"
+
+#define SIZE(x) sizeof(x)/sizeof(x[0])
+
+static const telephony_noti_e notis[] = {
+       TELEPHONY_NOTI_SIM_STATUS,
+       TELEPHONY_NOTI_NETWORK_NETWORK_NAME,
+       TELEPHONY_NOTI_NETWORK_SERVICE_STATE,
+};
+
+static Ecore_Event_Handler *handler;
+static char *sim_plmn[QUICKPANEL_SIM_MAX];
+static telephony_handle_list_s handle_list;
+int QUICKPANEL_EVENT_SIM_STATUS_CHANGED;
+
+static int _sim_init(void);
+
+static char *_sim_plmn_get(telephony_h handle)
+{
+       char *network_name;
+
+       int ret = telephony_network_get_network_name(handle, &network_name);
+       if (ret != TELEPHONY_ERROR_NONE) {
+               ERR("telephony_network_get_network_name failed: %s", get_error_message(ret));
+               return NULL;
+       }
+
+       return network_name;
+}
+
+static char *_sim_spn_get(telephony_h handle)
+{
+       char *spn_name;
+
+       int ret = telephony_sim_get_spn(handle, &spn_name);
+       if (ret != TELEPHONY_ERROR_NONE) {
+               ERR("telephony_sim_get_spn failed: %s", get_error_message(ret));
+               return NULL;
+       }
+       return spn_name;
+}
+
+static char *_sim_state_text_for_sim_unavailable(telephony_h handle)
+{
+       int ret;
+       bool status;
+       telephony_network_service_state_e service_state;
+       char buf[1024] = { 0, };
+
+       /* get flight mode */
+       ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE, &status);
+       if (ret != SYSTEM_SETTINGS_ERROR_NONE) {
+               ERR("system_settings_get_value_bool failed: %s", get_error_message(ret));
+               return NULL;
+       }
+
+       if (status) {
+               DBG("Flight mode in");
+               snprintf(buf, sizeof(buf), "%s", _("IDS_COM_BODY_NO_SERVICE"));
+               return strdup(buf);
+       }
+
+       /* get service state */
+       ret = telephony_network_get_service_state(handle, &service_state);
+       if (ret != TELEPHONY_ERROR_NONE) {
+               ERR("telephony_network_get_service_state failed: %s", get_error_message(ret));
+               return NULL;
+       }
+
+       switch (service_state) {
+       case TELEPHONY_NETWORK_SERVICE_STATE_EMERGENCY_ONLY:
+               /* network connected */
+               DBG("No SIM & Network connected");
+               snprintf(buf, sizeof(buf), "%s", _("IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"));
+               break;
+       case TELEPHONY_NETWORK_SERVICE_STATE_OUT_OF_SERVICE:
+               /* no connection */
+               DBG("No SIM & No connection");
+               snprintf(buf, sizeof(buf), "%s", _("IDS_COM_BODY_NO_SERVICE"));
+               break;
+       default:
+               snprintf(buf, sizeof(buf), "%s", _("IDS_COM_BODY_NO_SERVICE"));
+               break;
+       }
+
+       return strdup(buf);
+}
+
+static char *_sim_state_text_for_sim_available(telephony_h handle)
+{
+       int ret;
+       telephony_network_service_state_e service_state;
+       telephony_network_name_option_e name_option;
+
+       char *plmn = NULL;
+       char *spn = NULL;
+       char buf[1024] = { 0, };
+
+       /* get service state */
+       ret = telephony_network_get_service_state(handle, &service_state);
+       if (ret != TELEPHONY_ERROR_NONE) {
+               ERR("telephony_network_get_service_state failed: %s", get_error_message(ret));
+               return NULL;
+       }
+
+       switch (service_state) {
+       case TELEPHONY_NETWORK_SERVICE_STATE_IN_SERVICE:
+               /* get network name option */
+               ret = telephony_network_get_network_name_option(handle, &name_option);
+               if (ret != TELEPHONY_ERROR_NONE) {
+                       ERR("telephony_network_get_network_name_option failed: %s", get_error_message(ret));
+                       return NULL;
+               }
+
+               switch (name_option) {
+               case TELEPHONY_NETWORK_NAME_OPTION_SPN:
+                       spn = _sim_spn_get(handle);
+                       if (spn != NULL && spn[0] != 0) {
+                               INFO("PLMN/SPN - Sim %p using SPN: %s", handle, spn);
+                               snprintf(buf, sizeof(buf), "%s", spn);
+                       }
+                       break;
+               case TELEPHONY_NETWORK_NAME_OPTION_NETWORK:
+                       plmn = _sim_plmn_get(handle);
+                       if (plmn != NULL && plmn[0] != 0) {
+                               INFO("PLMN/SPN - Sim %p using PLMN: %s", handle, plmn);
+                               snprintf(buf, sizeof(buf), "%s", plmn);
+                       }
+                       break;
+               case TELEPHONY_NETWORK_NAME_OPTION_ANY:
+                       spn = _sim_spn_get(handle);
+                       plmn = _sim_plmn_get(handle);
+                       if (spn != NULL && spn[0] != 0 && plmn != NULL && plmn[0] != 0) {
+                               INFO("PLMN/SPN - Sim %p using SPN: %s, PLMN: %s", handle, spn, plmn);
+                               snprintf(buf, sizeof(buf), "%s - %s", plmn, spn);
+                       } else if (spn != NULL && spn[0] != 0) {
+                               INFO("PLMN/SPN - Sim %p using SPN: %s", handle, spn);
+                               snprintf(buf, sizeof(buf), "%s", spn);
+                       } else if (plmn != NULL && plmn[0] != 0) {
+                               INFO("PLMN/SPN - Sim %p using PLMN: %s", handle, plmn);
+                               snprintf(buf, sizeof(buf), "%s", plmn);
+                       }
+                       break;
+               default:
+                       ERR("Invalid name option[%d]", name_option);
+                       plmn = _sim_plmn_get(handle);
+                       if (plmn != NULL && plmn[0] != 0) {
+                               INFO("PLMN/SPN - Sim %p using PLMN: %s", handle, plmn);
+                               snprintf(buf, sizeof(buf), "%s", plmn);
+                       }
+                       break;
+               }
+               break;
+       case TELEPHONY_NETWORK_SERVICE_STATE_OUT_OF_SERVICE:
+               snprintf(buf, sizeof(buf), "%s", _("IDS_COM_BODY_NO_SERVICE"));
+               break;
+       case TELEPHONY_NETWORK_SERVICE_STATE_EMERGENCY_ONLY:
+               snprintf(buf, sizeof(buf), "%s", _("IDS_IDLE_MBODY_EMERGENCY_CALLS_ONLY"));
+               break;
+       default:
+               snprintf(buf, sizeof(buf), "%s", _("IDS_COM_BODY_NO_SERVICE"));
+               break;
+       }
+
+       return strdup(buf);
+}
+
+static void _update_sim_info(bool emit)
+{
+       int ret;
+       int i;
+       char *out = NULL;
+       telephony_sim_state_e state;
+
+       /*
+        * Tizen Platform doesn't support dual SIM. We only use a primary SIM(handle[0]).
+        * If you want to use dual SIM, change the 'for' loop into below.
+        * for (i = 0; (i < handle_list.count) && (i < QUICKPANEL_SIM_MAX); i++)
+        */
+       for (i = 0; (i < handle_list.count) && (i < QUICKPANEL_SECONDARY_SIM); i++) {
+
+               ret = telephony_sim_get_state(handle_list.handle[i], &state);
+               if (ret != TELEPHONY_ERROR_NONE) {
+                       ERR("SIM[%d] failed to get state: %s", i, get_error_message(ret));
+                       continue;
+               }
+
+               if (state == TELEPHONY_SIM_STATE_UNAVAILABLE)
+                       out = _sim_state_text_for_sim_unavailable(handle_list.handle[i]);
+               else
+                       out = _sim_state_text_for_sim_available(handle_list.handle[i]);
+
+               if (sim_plmn[i]) free(sim_plmn[i]);
+               sim_plmn[i] = out;
+       }
+
+       if (emit) ecore_event_add(QUICKPANEL_EVENT_SIM_STATUS_CHANGED, NULL, NULL, NULL);
+}
+
+static void _sim_state_view_update()
+{
+       const char *sim1, *sim2;
+       char buf[128] = {0,};
+
+       sim1 = sim_plmn[QUICKPANEL_PRIMARY_SIM];
+       sim2 = sim_plmn[QUICKPANEL_SECONDARY_SIM];
+
+       if (sim1 && sim2)
+               snprintf(buf, sizeof(buf), "%s / %s", sim1, sim2);
+       else if (sim1)
+               snprintf(buf, sizeof(buf), "%s", sim1);
+       else if (sim2)
+               snprintf(buf, sizeof(buf), "%s", sim2);
+
+       quickpanel_handler_text_set(buf);
+}
+
+static Eina_Bool _sim_status_changed(void *data, int type, void *event_info)
+{
+       _sim_state_view_update();
+
+       return EINA_TRUE;
+}
+
+static void _on_telephony_state_changed_cb(telephony_state_e state, void *user_data)
+{
+       if (state == TELEPHONY_STATE_READY) {
+               if (_sim_init()) {
+                       ERR("_sim_init failed");
+                       return;
+               }
+               handler = ecore_event_handler_add(QUICKPANEL_EVENT_SIM_STATUS_CHANGED, _sim_status_changed, NULL);
+               _sim_state_view_update();
+       } else {
+               sim_controller_deinit();
+       }
+}
+
+static void _on_sim_info_changed_cb(telephony_h handle, telephony_noti_e noti_id, void *data, void *user_data)
+{
+       _update_sim_info(true);
+}
+
+static int _sim_init(void)
+{
+       int ret;
+       int i, j;
+
+       ret = telephony_init(&handle_list);
+       if (ret != TELEPHONY_ERROR_NONE) {
+               ERR("telephony_init failed: %s", get_error_message(ret));
+               return -1;
+       }
+
+       ret = telephony_set_state_changed_cb(_on_telephony_state_changed_cb, NULL);
+       if (ret != TELEPHONY_ERROR_NONE) {
+               telephony_deinit(&handle_list);
+               ERR("telephony_set_state_changed_cb failed: %s", get_error_message(ret));
+               return -1;
+       }
+
+       for (i = 0; (i < handle_list.count) && (i < QUICKPANEL_SIM_MAX); i++) {
+               for (j = 0; j < SIZE(notis); j++) {
+                       ret = telephony_set_noti_cb(handle_list.handle[i], notis[j], _on_sim_info_changed_cb, NULL);
+                       if (ret != TELEPHONY_ERROR_NONE)
+                               ERR("telephony_set_noti_cb failed: %s", get_error_message(ret));
+               }
+       }
+
+       _update_sim_info(false);
+       return 0;
+}
+
+void sim_controller_init(Evas_Object *master_layout)
+{
+       QUICKPANEL_EVENT_SIM_STATUS_CHANGED = ecore_event_type_new();
+       if (_sim_init()) {
+               ERR("_sim_init failed");
+               return;
+       }
+
+       handler = ecore_event_handler_add(QUICKPANEL_EVENT_SIM_STATUS_CHANGED, _sim_status_changed, NULL);
+       _sim_state_view_update();
+       return;
+}
+
+static void _sim_deinit(void)
+{
+       int i, j;
+       int ret;
+
+       for (i = 0; i < QUICKPANEL_SIM_MAX; i++) {
+               if (sim_plmn[i]) free(sim_plmn[i]);
+               sim_plmn[i] = NULL;
+       }
+
+       for (i = 0; (i < handle_list.count) && (i < QUICKPANEL_SIM_MAX); i++) {
+               for (j = 0; j < SIZE(notis); j++) {
+                       ret = telephony_unset_noti_cb(handle_list.handle[i], notis[j]);
+                       if (ret != TELEPHONY_ERROR_NONE)
+                               ERR("telephony_unset_noti_cb failed: %s", get_error_message(ret));
+               }
+       }
+
+       ret = telephony_unset_state_changed_cb(_on_telephony_state_changed_cb);
+       if (ret != TELEPHONY_ERROR_NONE)
+               ERR("telephony_unset_state_changed_cb failed: %s", get_error_message(ret));
+
+
+       telephony_deinit(&handle_list);
+       if (ret != TELEPHONY_ERROR_NONE)
+               ERR("telephony_deinit failed: %s", get_error_message(ret));
+}
+
+
+void sim_controller_deinit(void)
+{
+       if (ecore_event_handler_del(handler) == NULL)
+               ERR("ecore_event_handler_del failed");
+
+       _sim_deinit();
+}
+
+void sim_controller_on_language_change(void)
+{
+       _update_sim_info(true);
+}
+/* End of the file */
diff --git a/src/vi/vi_manager.c b/src/vi/vi_manager.c
new file mode 100755 (executable)
index 0000000..2447936
--- /dev/null
@@ -0,0 +1,467 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+#include <dlog.h>
+#include "quickpanel-ui.h"
+#include "common_uic.h"
+#include "common.h"
+#include "list_util.h"
+#include "vi_manager.h"
+
+static int _init(void *data);
+static int _fini(void *data);
+static int _resume(void *data);
+static void _qp_opened(void *data);
+
+QP_Module vi_manager = {
+       .name = "vi_manager",
+       .init = _init,
+       .fini = _fini,
+       .resume = _resume,
+       .qp_opened = _qp_opened,
+       .lang_changed = NULL,
+       .refresh = NULL
+};
+
+static struct info {
+       Eina_List *vi_list;
+       Eina_List *vi_user_event_list;
+       QP_VI *current;
+       qp_vim_state_type state;
+} s_info = {
+       .vi_list = NULL,
+       .vi_user_event_list = NULL,
+       .current = NULL,
+       .state = VIM_STATE_NOT_READY,
+};
+
+static QP_VI *_vi_list_get_first(void);
+static QP_VI *_vi_user_event_list_get_first(void);
+static void _vi_list_del(QP_VI *vi);
+
+static inline void _vim_set_state(qp_vim_state_type state)
+{
+       s_info.state = state;
+}
+
+static inline qp_vim_state_type _vim_get_state(void)
+{
+       return s_info.state;
+}
+
+static void _vi_freeze_start(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid parameter");
+       retif(ad->list == NULL, , "invalid parameter");
+
+       if (!evas_object_freeze_events_get(ad->scroller)) {
+               INFO("VIM freezing");
+               evas_object_freeze_events_set(ad->scroller, EINA_TRUE);
+       }
+}
+
+static void _vi_freeze_stop(void)
+{
+       struct appdata *ad = quickpanel_get_app_data();
+       retif(ad == NULL, , "invalid parameter");
+       retif(ad->list == NULL, , "invalid parameter");
+
+       if (evas_object_freeze_events_get(ad->scroller)) {
+               INFO("VIM unfreezing");
+               evas_object_freeze_events_set(ad->scroller, EINA_FALSE);
+       }
+}
+
+static void _vi_restart_job_cb(void *data)
+{
+       QP_VI *next_vi = NULL;
+       QP_VI *user_vi = NULL;
+
+       next_vi = _vi_list_get_first();
+
+       if (next_vi != NULL && next_vi->disable_interrupt_userevent == 0) {
+               while ((user_vi = _vi_user_event_list_get_first()) != NULL) {
+                       if (user_vi->interrupt_cb != NULL) {
+                               user_vi->interrupt_cb(user_vi);
+                               user_vi->state = VI_STATE_INTERRUPTED;
+                       }
+                       quickpanel_vi_user_event_del(user_vi);
+               }
+       }
+
+       if (_vim_get_state() == VIM_STATE_READY) {
+               next_vi = _vi_list_get_first();
+
+               if (next_vi) {
+                       if (next_vi->job_cb != NULL) {
+                               _vim_set_state(VIM_STATE_WORKING);
+                               next_vi->state = VI_STATE_RUNNING;
+                               next_vi->job_cb(next_vi);
+                       }
+               }
+       } else if (_vim_get_state() == VIM_STATE_SUSPENDED
+                       || _vim_get_state() == VIM_STATE_NOT_READY) {
+
+               while ((next_vi = _vi_list_get_first()) != NULL)
+                       quickpanel_vi_done(next_vi);
+
+       }
+}
+
+static void _vi_list_add(QP_VI *new_vi)
+{
+       retif(new_vi == NULL, , "Invalid parameter");
+
+       s_info.vi_list = eina_list_append(s_info.vi_list, new_vi);
+}
+
+static int _vi_list_count(void)
+{
+       retif(s_info.vi_list == NULL, 0, "list null");
+
+       return eina_list_count(s_info.vi_list);
+}
+
+static void _vi_list_del(QP_VI *vi)
+{
+       retif(vi == NULL, , "Invalid parameter");
+
+       s_info.vi_list = eina_list_remove(s_info.vi_list, vi);
+}
+
+static int _vi_list_is_data_valid(void *node)
+{
+       if (eina_list_data_find(s_info.vi_list, node) != NULL)
+               return 1;
+
+
+       return 0;
+}
+
+static QP_VI *_vi_list_get_first(void)
+{
+       QP_VI *vi = eina_list_nth(s_info.vi_list, 0);
+
+       return vi;
+}
+
+static QP_VI *_vi_user_event_list_get_first(void)
+{
+       QP_VI *vi = eina_list_nth(s_info.vi_user_event_list, 0);
+
+       return vi;
+}
+
+HAPI QP_VI *quickpanel_vi_new(void)
+{
+       QP_VI *vi = (QP_VI *)calloc(1, sizeof(QP_VI));
+
+       retif(vi == NULL, NULL, "failed to memory allocation");
+
+       return vi;
+}
+
+HAPI QP_VI *quickpanel_vi_new_with_data(qp_vi_op_type op_type, qp_item_type_e item_type, void *container, void *target, vi_cb init_cb, vi_cb job_cb, vi_cb done_cb, vi_cb interrupt_cb, void *extra_data_1, void *extra_data_2, int extra_flag_1, int extra_flag_2)
+{
+       QP_VI *vi = (QP_VI *)calloc(1, sizeof(QP_VI));
+
+       retif(vi == NULL, NULL, "failed to memory allocation");
+
+       DBG("");
+
+       vi->state = VI_STATE_NOT_READY;
+       vi->op_type = op_type;
+       vi->item_type = item_type;
+       vi->container = container;
+       vi->target = target;
+       vi->init_cb = init_cb;
+       vi->job_cb = job_cb;
+       vi->done_cb = done_cb;
+       vi->interrupt_cb = interrupt_cb;
+       vi->extra_data_1 = extra_data_1;
+       vi->extra_data_2 = extra_data_2;
+       vi->extra_flag_1 = extra_flag_1;
+       vi->extra_flag_2 = extra_flag_2;
+
+       return vi;
+}
+
+HAPI void quickpanel_vi_start(QP_VI *vi)
+{
+       retif(vi == NULL, , "vi is NULL");
+
+       /*
+        * workaround - turn off mapbuf
+        * if mapbuf is enabled, geometry information from object become invalid
+        */
+
+       if (vi->init_cb != NULL)
+               vi->init_cb(vi);
+
+
+       vi->state = VI_STATE_READY;
+
+       if (vi->disable_freezing == 0)
+               _vi_freeze_start();
+
+
+       _vi_list_add(vi);
+       if (vi->target != NULL) {
+               evas_object_ref(vi->target);
+               if (vi->op_type == VI_OP_DELETE)
+                       evas_object_freeze_events_set(vi->target, EINA_TRUE);
+
+
+       }
+       if (_vim_get_state() == VIM_STATE_NOT_READY)
+               _vi_restart_job_cb(NULL);
+       else
+               ecore_job_add(_vi_restart_job_cb, NULL);
+
+}
+
+HAPI void quickpanel_vi_interrupt(QP_VI *vi)
+{
+       retif(vi == NULL, , "vi is NULL");
+
+       if (!_vi_list_is_data_valid(vi))
+               return;
+
+
+       _vi_list_del(vi);
+
+       if (vi->interrupt_cb != NULL) {
+               vi->interrupt_cb(vi);
+               vi->state = VI_STATE_INTERRUPTED;
+       }
+
+       if (s_info.current == vi)
+               s_info.current = NULL;
+
+
+       if (_vim_get_state() == VIM_STATE_WORKING) {
+               if (!quickpanel_uic_is_opened())
+                       _vim_set_state(VIM_STATE_SUSPENDED);
+               else
+                       _vim_set_state(VIM_STATE_READY);
+
+       }
+
+       evas_object_unref(vi->target);
+       free(vi);
+
+       if (_vi_list_count() <= 0)
+               _vi_freeze_stop();
+
+
+       ecore_job_add(_vi_restart_job_cb, NULL);
+}
+
+HAPI void quickpanel_vi_done(QP_VI *vi)
+{
+       retif(vi == NULL, , "vi is NULL");
+
+       if (!_vi_list_is_data_valid(vi))
+               return;
+
+
+       _vi_list_del(vi);
+
+       if (vi->done_cb != NULL) {
+               vi->done_cb(vi);
+               vi->state = VI_STATE_DONE;
+       }
+
+       if (s_info.current == vi)
+               s_info.current = NULL;
+
+
+       if (_vim_get_state() == VIM_STATE_WORKING) {
+               if (!quickpanel_uic_is_opened())
+                       _vim_set_state(VIM_STATE_SUSPENDED);
+               else
+                       _vim_set_state(VIM_STATE_READY);
+
+       }
+
+       evas_object_unref(vi->target);
+       free(vi);
+
+       if (_vi_list_count() <= 0)
+               _vi_freeze_stop();
+
+
+       ecore_job_add(_vi_restart_job_cb, NULL);
+}
+
+HAPI void quickpanel_vi_done_cb_for_transit(void *data, Elm_Transit *transit)
+{
+       retif(data == NULL, , "data is NULL");
+
+       quickpanel_vi_done(data);
+}
+
+HAPI void quickpanel_vim_set_state_ready(void)
+{
+       if (!quickpanel_uic_is_opened())
+               _vim_set_state(VIM_STATE_SUSPENDED);
+       else
+               _vim_set_state(VIM_STATE_READY);
+
+}
+
+HAPI void quickpanel_vim_set_state_suspend(void)
+{
+       _vim_set_state(VIM_STATE_SUSPENDED);
+}
+
+#define VIM_DURATION_INSERT 0.17
+#define VIM_DURATION_UPDATE 0.17
+#define VIM_DURATION_DELETE 0.17
+#define VIM_DURATION_REORDER 0.25
+#define VIM_THROTTLE_THRESHOLD 5
+
+HAPI double quickpanel_vim_get_duration(qp_vi_op_type op_type)
+{
+       int count = 0;
+       double duration = 0.0;
+
+       switch (op_type) {
+       case VI_OP_INSERT:
+               duration =  VIM_DURATION_INSERT;
+               break;
+       case VI_OP_UPDATE:
+               duration =  VIM_DURATION_UPDATE;
+               break;
+       case VI_OP_DELETE:
+               duration =  VIM_DURATION_DELETE;
+               break;
+       case VI_OP_REORDER:
+               duration =  VIM_DURATION_REORDER;
+               break;
+       default:
+               duration = VIM_DURATION_INSERT;
+               break;
+       }
+
+       if ((count = _vi_list_count()) > VIM_THROTTLE_THRESHOLD)
+               duration = duration * (1.0 / (double)count);
+
+
+       return duration;
+}
+
+HAPI Elm_Transit_Tween_Mode quickpanel_vim_get_tweenmode(qp_vi_op_type op_type)
+{
+       Elm_Transit_Tween_Mode mode = ELM_TRANSIT_TWEEN_MODE_LINEAR;
+
+       switch (op_type) {
+       case VI_OP_INSERT:
+               mode =  ELM_TRANSIT_TWEEN_MODE_DECELERATE;
+               break;
+       case VI_OP_UPDATE:
+               mode =  ELM_TRANSIT_TWEEN_MODE_DECELERATE;
+               break;
+       case VI_OP_DELETE:
+               mode =  ELM_TRANSIT_TWEEN_MODE_ACCELERATE;
+               break;
+       case VI_OP_REORDER:
+               mode =  ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL;
+               break;
+       default:
+               mode = ELM_TRANSIT_TWEEN_MODE_LINEAR;
+               break;
+       }
+
+       return mode;
+}
+
+/*****************************************************************************
+ *
+ * Util functions
+ *
+ *****************************************************************************/
+static int _init(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       _vim_set_state(VIM_STATE_NOT_READY);
+
+       return QP_OK;
+}
+
+static int _fini(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       _vim_set_state(VIM_STATE_NOT_READY);
+
+       return QP_OK;
+}
+
+static int _resume(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       if (_vim_get_state() == VIM_STATE_SUSPENDED)
+               _vim_set_state(VIM_STATE_READY);
+
+
+       return QP_OK;
+}
+
+static void _qp_opened(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, , "Invalid parameter!");
+
+       if (_vim_get_state() == VIM_STATE_SUSPENDED)
+               _vim_set_state(VIM_STATE_READY);
+
+}
+
+HAPI void quickpanel_vi_user_event_add(QP_VI *new_vi)
+{
+       retif(new_vi == NULL, , "Invalid parameter");
+
+       s_info.vi_user_event_list = eina_list_append(s_info.vi_user_event_list, new_vi);
+}
+
+HAPI void quickpanel_vi_user_event_del(QP_VI *vi)
+{
+       retif(vi == NULL, , "Invalid parameter");
+
+       if (eina_list_data_find(s_info.vi_user_event_list, vi) != NULL) {
+               s_info.vi_user_event_list = eina_list_remove(s_info.vi_user_event_list, vi);
+               free(vi);
+       }
+}
+
+HAPI void quickpanel_vi_object_event_freeze_set(Evas_Object *obj, Eina_Bool freeze)
+{
+       retif(obj == NULL, , "Invalid parameter");
+
+       evas_object_freeze_events_set(obj, freeze);
+}
diff --git a/src/voice_control.c b/src/voice_control.c
new file mode 100755 (executable)
index 0000000..5f7ee9e
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Elementary.h>
+
+#include <voice_control_setting.h>
+#include <app_control_internal.h>
+#include <tzsh.h>
+#include <tzsh_quickpanel_service.h>
+
+#include "common.h"
+#include "common_uic.h"
+#include "voice_control.h"
+#include "quickpanel-ui.h"
+#include "list_util.h"
+
+
+static int _init(void *data);
+static int _fini(void *data);
+Evas_Object* _voice_control_view_create(void *data);
+static void _voice_control_register_event(void *data);
+static bool _check_voice_control_enabled(void);
+
+QP_Module voice_control = {
+       .name = "voice_control",
+       .init = _init,
+       .fini = _fini,
+       .suspend = NULL,
+       .resume = NULL,
+       .hib_enter = NULL,
+       .hib_leave = NULL,
+       .lang_changed = NULL,
+       .refresh = NULL,
+       .get_height = NULL,
+       .qp_opened = NULL,
+       .qp_closed = NULL,
+};
+
+static Evas_Object *g_layout = NULL;
+
+static void _voice_control_view_destroy(void *data)
+{
+       DBG("_voice_control_view_destroy");
+       struct appdata *ad = data;
+
+       if (ad == NULL) {
+               ERR("invalid data");
+               return;
+       }
+
+       if (g_layout == NULL) {
+               ERR("g_layout is not exist");
+               return;
+       }
+
+       quickpanel_list_util_item_unpack_by_object(ad->list, g_layout, 0, 0);
+       quickpanel_list_util_del_item_type(g_layout);
+       elm_object_signal_emit(ad->ly, "voice_icon.hide", "quickpanel.prog");
+
+       if (g_layout != NULL) {
+               evas_object_del(g_layout);
+               g_layout = NULL;
+       }
+}
+
+static int _init(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+
+       if (0 != vc_setting_initialize()) {
+               ERR("Fail to init");
+               return QP_FAIL;
+       }
+
+       _voice_control_register_event(data);
+
+       if (_check_voice_control_enabled()) //when module restart
+               _voice_control_view_create(ad);
+
+
+       return QP_OK;
+}
+
+static int _fini(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+
+       if (0 != vc_setting_deinitialize())
+               ERR("Fail to vc_setting_deinitialize");
+
+
+       _voice_control_view_destroy(ad);
+
+       return QP_OK;
+}
+
+static void _vc_enabled_changed_cb(bool enabled, void* user_data)
+{
+       DBG("_vc_enabled_changed_cb");
+       struct appdata *ad = user_data;
+
+       if (!enabled)//deactivated voice controller
+               _voice_control_view_destroy(ad);
+       else
+               _voice_control_view_create(ad);
+
+}
+
+static void _voice_control_register_event(void *data)
+{
+       DBG("_voice_control_register_event");
+       if (0 != vc_setting_set_enabled_changed_cb(_vc_enabled_changed_cb, data)) {
+               ERR("Fail to set enabled cb");
+               return;
+       }
+}
+
+static bool _check_voice_control_enabled(void)
+{
+       bool enabled = false;
+
+       if (0 != vc_setting_get_enabled(&enabled))
+               ERR("Fail to get enabled");
+
+       DBG("_check_voice_control_enabled [%d]", enabled);
+
+       return enabled;
+}
+
+static void _button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       DBG("_button_clicked_cb");
+       int ret = 0;
+       ret = quickpanel_common_send_message_to_app(VOICE_CONTOL_REF_APP, NULL, NULL, NULL);
+       quickpanel_common_inform_launch_app_result(VOICE_CONTOL_REF_APP, ret);
+       quickpanel_uic_close_quickpanel(true, 1);
+
+}
+
+Evas_Object* _voice_control_view_create(void *data)
+{
+       DBG("_voice_control_view_create");
+       struct appdata *ad = data;
+       Evas_Object *layout = NULL;
+       Eina_Bool ret = EINA_FALSE;
+
+       if (!_check_voice_control_enabled()) {
+               ERR("voice control is not enabled.");
+               return layout;
+       }
+       if (ad->win == NULL) {
+               ERR("invalid parent");
+               return layout;
+       }
+
+       if (g_layout) {
+               ERR("voice control view is already created.");
+               return g_layout;
+       }
+
+       layout = elm_layout_add(ad->win);
+       if (layout == NULL) {
+               ERR("Failed to create voice control layout");
+               return layout;
+       }
+
+       g_layout = layout;
+
+       ret = elm_layout_file_set(layout, util_get_res_file_path(VOICE_CONTOL_EDJ), "quickpanel/voice_control/default");
+       if (ret == EINA_FALSE) {
+               ERR("Failed to set layout file[%d]", ret);
+               evas_object_del(layout);
+               return NULL;
+       }
+
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(layout);
+
+       elm_object_signal_callback_add(layout, "button_clicked" , "", _button_clicked_cb, ad);
+       elm_object_signal_emit(ad->ly, "voice_icon.show", "quickpanel.prog");
+
+       // attach to list
+       quickpanel_list_util_set_item_type(layout, QP_ITEM_TYPE_VOICE_CONTOL);
+       quickpanel_list_util_sort_insert(ad->list, layout);
+       quickpanel_uic_initial_resize(layout, QP_VOICE_CONTOL_HEIGHT);
+
+       return layout;
+}
+
diff --git a/tizen-manifest.xml b/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..24b759e
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="4.0" install-location="internal-only" package="org.tizen.quickpanel" version="1.0.0">
+    <author email="jin0.kim@samsung.com" href="www.samsung.com">Jinyoung Kim</author>
+    <profile name="mobile"/>
+    <ui-application appid="org.tizen.quickpanel" exec="quickpanel" hw-acceleration="on" launch_mode="single" multiple="false" nodisplay="true" process-pool="true" taskmanage="false" type="capp">
+        <label>quickpanel</label>
+        <icon>quickpanel.png</icon>
+        <background-category value="system"/>
+    </ui-application>
+    <privileges>
+        <privilege>http://tizen.org/privilege/telephony</privilege>
+        <privilege>http://tizen.org/privilege/keygrab</privilege>
+        <privilege>http://tizen.org/privilege/appdir.shareddata</privilege>
+        <privilege>http://tizen.org/privilege/call</privilege>
+        <privilege>http://tizen.org/privilege/systemsettings.admin</privilege>
+        <privilege>http://tizen.org/privilege/window.priority.set</privilege>
+        <privilege>http://tizen.org/privilege/location</privilege>
+        <privilege>http://tizen.org/privilege/network.set</privilege>
+        <privilege>http://tizen.org/privilege/bluetooth</privilege>
+        <privilege>http://tizen.org/privilege/bluetooth.admin</privilege>
+        <privilege>http://tizen.org/privilege/haptic</privilege>
+        <privilege>http://tizen.org/privilege/tethering.admin</privilege>
+        <privilege>http://tizen.org/privilege/display</privilege>
+        <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
+        <privilege>http://tizen.org/privilege/wifidirect</privilege>
+        <privilege>http://tizen.org/privilege/mediastorage</privilege>
+        <privilege>http://tizen.org/privilege/location.enable</privilege>
+        <privilege>http://tizen.org/privilege/telephony.admin</privilege>
+        <privilege>http://tizen.org/privilege/network.get</privilege>
+        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+        <privilege>http://tizen.org/privilege/led</privilege>
+        <privilege>http://tizen.org/privilege/notification</privilege>
+    </privileges>
+</manifest>