From 35ed522aa7f62193898e6be2d4ff8f1f5c62a41f Mon Sep 17 00:00:00 2001 From: Sehong Na Date: Sat, 31 May 2014 12:55:41 +0900 Subject: [PATCH] Initialize Tizen 2.3 --- AUTHORS | 2 + CMakeLists.txt | 99 ++ LICENSE.Flora | 206 +++ NOTICE | 4 + daemon/common.h | 65 + daemon/indicator.c | 15 + daemon/indicator.h | 164 ++ daemon/indicator_box_util.c | 868 +++++++++++ daemon/indicator_box_util.h | 62 + daemon/indicator_icon_list.c | 353 +++++ daemon/indicator_icon_list.h | 33 + daemon/indicator_icon_util.c | 643 ++++++++ daemon/indicator_icon_util.h | 55 + daemon/indicator_ui.c | 1461 ++++++++++++++++++ daemon/indicator_ui.h | 106 ++ daemon/indicator_util.c | 316 ++++ daemon/indicator_util.h | 46 + daemon/message.c | 381 +++++ daemon/message.h | 25 + data/CMakeLists.txt | 7 + data/indicator.conf | 2 + data/indicator.desktop.in | 13 + data/indicator.sh.in | 2 + data/indicator.xml.in | 12 + data/resource/CMakeLists.txt | 50 + data/resource/icons/Alarm/B03_Alarm.png | Bin 0 -> 1960 bytes .../B03_Backgroundplaying_MP3playing.png | Bin 0 -> 1415 bytes .../B03_Backgroundplaying_Music_paused.png | Bin 0 -> 1148 bytes .../B03_Backgroundplaying_Voicerecording.png | Bin 0 -> 1499 bytes ...3_Backgroundplaying_voicerecorder_Recording.png | Bin 0 -> 1627 bytes .../B03_Backgroundplaying_voicerecorder_paused.png | Bin 0 -> 1586 bytes .../Bluetooth, NFC, GPS/B03-4_BT_activated_on.png | Bin 0 -> 1751 bytes .../B03_BT_On&Connected&headset.png | Bin 0 -> 2022 bytes .../Bluetooth, NFC, GPS/B03_BT_On&Connected.png | Bin 0 -> 1708 bytes .../icons/Bluetooth, NFC, GPS/B03_GPS_On.png | Bin 0 -> 1692 bytes .../Bluetooth, NFC, GPS/B03_GPS_Searching.png | Bin 0 -> 1791 bytes .../B03_Wi-fi_direct On_connected.png | Bin 0 -> 2179 bytes data/resource/icons/Call/B03_Call_Duringcall.png | Bin 0 -> 1573 bytes .../icons/Call/B03_Call_SOSmessge_active.png | Bin 0 -> 1497 bytes .../icons/Connection/B03_MobileAP_connected.png | Bin 0 -> 1972 bytes .../icons/Connection/B03_MobileAP_connected_01.png | Bin 0 -> 2040 bytes .../icons/Connection/B03_MobileAP_connected_02.png | Bin 0 -> 1909 bytes .../icons/Connection/B03_MobileAP_connected_03.png | Bin 0 -> 1895 bytes .../icons/Connection/B03_MobileAP_connected_04.png | Bin 0 -> 2142 bytes .../icons/Connection/B03_MobileAP_connected_05.png | Bin 0 -> 1905 bytes .../icons/Connection/B03_MobileAP_connected_06.png | Bin 0 -> 1934 bytes .../icons/Connection/B03_MobileAP_connected_07.png | Bin 0 -> 1945 bytes .../icons/Connection/B03_MobileAP_connected_08.png | Bin 0 -> 1908 bytes .../icons/Connection/B03_MobileAP_connected_09.png | Bin 0 -> 1918 bytes .../icons/Connection/B03_MobileAP_connected_10.png | Bin 0 -> 2033 bytes .../icons/Connection/B03_MobileAP_connected_11.png | Bin 0 -> 2067 bytes .../icons/Connection/B03_MobileAP_connected_12.png | Bin 0 -> 2029 bytes .../icons/Connection/B03_MobileAP_connected_13.png | Bin 0 -> 2036 bytes .../icons/Connection/B03_MobileAP_connected_14.png | Bin 0 -> 2107 bytes .../icons/Connection/B03_MobileAP_connected_15.png | Bin 0 -> 2060 bytes .../icons/Connection/B03_MobileAP_connected_16.png | Bin 0 -> 2056 bytes .../icons/Connection/B03_MobileAP_connected_17.png | Bin 0 -> 2020 bytes .../icons/Connection/B03_MobileAP_connected_18.png | Bin 0 -> 2054 bytes .../Connection/B03_MobileAP_on¬ connected.png | Bin 0 -> 2092 bytes .../icons/Connection/B03_conection_UPdownload.png | Bin 0 -> 1380 bytes .../icons/Connection/B03_connection_3G+.png | Bin 0 -> 1420 bytes .../icons/Connection/B03_connection_3G.png | Bin 0 -> 1402 bytes .../icons/Connection/B03_connection_4G.png | Bin 0 -> 1442 bytes .../resource/icons/Connection/B03_connection_E.png | Bin 0 -> 1197 bytes .../resource/icons/Connection/B03_connection_G.png | Bin 0 -> 1294 bytes .../icons/Connection/B03_connection_H+.png | Bin 0 -> 2960 bytes .../resource/icons/Connection/B03_connection_H.png | Bin 0 -> 1142 bytes .../icons/Connection/B03_connection_LTE.png | Bin 0 -> 1260 bytes .../icons/Connection/B03_connection_UPload.png | Bin 0 -> 1391 bytes .../icons/Connection/B03_connection_download.png | Bin 0 -> 1390 bytes .../Connection/B03_data_downloading_Wifi_01.png | Bin 0 -> 1638 bytes .../Connection/B03_data_downloading_Wifi_02.png | Bin 0 -> 1659 bytes .../Connection/B03_data_downloading_Wifi_03.png | Bin 0 -> 1658 bytes .../Connection/B03_data_downloading_Wifi_04.png | Bin 0 -> 1621 bytes .../Connection/B03_not_conection_UPdownload.png | Bin 0 -> 1365 bytes data/resource/icons/Earphone/B03_BT_Headset.png | Bin 0 -> 1680 bytes .../icons/Power/B03_stat_sys_battery_0.png | Bin 0 -> 3045 bytes .../icons/Power/B03_stat_sys_battery_100.png | Bin 0 -> 2934 bytes .../icons/Power/B03_stat_sys_battery_15.png | Bin 0 -> 2938 bytes .../icons/Power/B03_stat_sys_battery_28.png | Bin 0 -> 2939 bytes .../icons/Power/B03_stat_sys_battery_43.png | Bin 0 -> 2937 bytes .../icons/Power/B03_stat_sys_battery_57.png | Bin 0 -> 2939 bytes .../icons/Power/B03_stat_sys_battery_71.png | Bin 0 -> 2937 bytes .../icons/Power/B03_stat_sys_battery_85.png | Bin 0 -> 2940 bytes .../Power/B03_stat_sys_battery_charge_anim0.png | Bin 0 -> 3324 bytes .../Power/B03_stat_sys_battery_charge_anim100.png | Bin 0 -> 3344 bytes .../Power/B03_stat_sys_battery_charge_anim15.png | Bin 0 -> 3328 bytes .../Power/B03_stat_sys_battery_charge_anim28.png | Bin 0 -> 3341 bytes .../Power/B03_stat_sys_battery_charge_anim43.png | Bin 0 -> 3345 bytes .../Power/B03_stat_sys_battery_charge_anim57.png | Bin 0 -> 3355 bytes .../Power/B03_stat_sys_battery_charge_anim71.png | Bin 0 -> 3357 bytes .../Power/B03_stat_sys_battery_charge_anim85.png | Bin 0 -> 3355 bytes .../icons/Power/B03_stat_sys_battery_full.png | Bin 0 -> 3847 bytes .../icons/Processing/B03_Processing_Syncing_01.png | Bin 0 -> 1775 bytes .../icons/Processing/B03_Processing_Syncing_02.png | Bin 0 -> 1799 bytes .../icons/Processing/B03_Processing_Syncing_03.png | Bin 0 -> 1857 bytes .../icons/Processing/B03_Processing_Syncing_04.png | Bin 0 -> 1807 bytes .../icons/Processing/B03_Processing_calldivert.png | Bin 0 -> 1556 bytes data/resource/icons/Profile/B03_Profile_Mute.png | Bin 0 -> 1594 bytes .../icons/Profile/B03_Profile_Vibration.png | Bin 0 -> 1837 bytes .../icons/RSSI/B03_Network_LimitedService.png | Bin 0 -> 1753 bytes data/resource/icons/RSSI/B03_RSSI_Flightmode.png | Bin 0 -> 1636 bytes data/resource/icons/RSSI/B03_RSSI_NoService.png | Bin 0 -> 1755 bytes data/resource/icons/RSSI/B03_RSSI_NoSim.png | Bin 0 -> 1803 bytes data/resource/icons/RSSI/B03_RSSI_Searching.png | Bin 0 -> 1628 bytes data/resource/icons/RSSI/B03_RSSI_Sim_00.png | Bin 0 -> 1179 bytes data/resource/icons/RSSI/B03_RSSI_Sim_01.png | Bin 0 -> 1188 bytes data/resource/icons/RSSI/B03_RSSI_Sim_02.png | Bin 0 -> 1186 bytes data/resource/icons/RSSI/B03_RSSI_Sim_03.png | Bin 0 -> 1185 bytes data/resource/icons/RSSI/B03_RSSI_Sim_04.png | Bin 0 -> 1173 bytes data/resource/icons/RSSI/B03_RSSI_roaming_00.png | Bin 0 -> 1305 bytes data/resource/icons/RSSI/B03_RSSI_roaming_01.png | Bin 0 -> 1315 bytes data/resource/icons/RSSI/B03_RSSI_roaming_02.png | Bin 0 -> 1313 bytes data/resource/icons/RSSI/B03_RSSI_roaming_03.png | Bin 0 -> 1312 bytes data/resource/icons/RSSI/B03_RSSI_roaming_04.png | Bin 0 -> 1303 bytes data/resource/icons/RSSI/B03_Roaming.png | Bin 0 -> 1444 bytes data/resource/icons/USB tethering/B03_USB.png | Bin 0 -> 1594 bytes .../icons_edc/B03_Processing_download_ani_00.png | Bin 0 -> 1373 bytes .../icons_edc/B03_Processing_download_ani_01.png | Bin 0 -> 1387 bytes .../icons_edc/B03_Processing_download_ani_02.png | Bin 0 -> 1382 bytes .../icons_edc/B03_Processing_download_ani_03.png | Bin 0 -> 1387 bytes .../icons_edc/B03_Processing_download_ani_04.png | Bin 0 -> 1403 bytes .../icons_edc/B03_Processing_download_ani_05.png | Bin 0 -> 1416 bytes .../icons_edc/B03_Processing_download_ani_06.png | Bin 0 -> 1406 bytes .../icons_edc/B03_Processing_upload_ani_00.png | Bin 0 -> 1343 bytes .../icons_edc/B03_Processing_upload_ani_01.png | Bin 0 -> 1362 bytes .../icons_edc/B03_Processing_upload_ani_02.png | Bin 0 -> 1357 bytes .../icons_edc/B03_Processing_upload_ani_03.png | Bin 0 -> 1360 bytes .../icons_edc/B03_Processing_upload_ani_04.png | Bin 0 -> 1359 bytes .../icons_edc/B03_Processing_upload_ani_05.png | Bin 0 -> 1383 bytes .../icons_edc/B03_Processing_upload_ani_06.png | Bin 0 -> 1396 bytes data/resource/icons_edc/B03_indicator_bg.png | Bin 0 -> 1052 bytes data/resource/indicator_common.edc | 427 ++++++ data/resource/indicator_gui.h | 79 + data/resource/indicator_icon_animation.edc | 339 +++++ data/resource/indicator_icon_nonfixed_theme.edc | 72 + data/resource/indicator_icon_theme.edc | 72 + data/resource/indicator_land.edc | 715 +++++++++ data/resource/indicator_port.edc | 802 ++++++++++ debian/changelog | 1571 ++++++++++++++++++++ debian/compat | 1 + debian/control | 20 + debian/dirs | 2 + debian/org.tizen.indicator.install.in | 7 + debian/org.tizen.indicator.postinst.in | 16 + debian/rules | 123 ++ modules/clock/clock.c | 637 ++++++++ modules/connection/connection.c | 352 +++++ modules/connection/mobile_hotspot.c | 257 ++++ modules/connection/usb.c | 181 +++ modules/connection/wifi.c | 290 ++++ modules/information/alarm.c | 159 ++ modules/information/earphone.c | 184 +++ modules/information/lowmem.c | 280 ++++ modules/information/mmc.c | 217 +++ modules/information/mp3_playing.c | 243 +++ modules/information/noti.c | 709 +++++++++ modules/information/voice_recorder.c | 240 +++ modules/modules.c | 188 +++ modules/modules.h | 34 + modules/network/roaming.c | 167 +++ modules/network/rssi.c | 340 +++++ modules/power/battery.c | 676 +++++++++ modules/processing/active_sync.c | 199 +++ modules/processing/call.c | 269 ++++ modules/processing/call_divert.c | 154 ++ modules/processing/sos.c | 232 +++ modules/processing/transfer.c | 156 ++ modules/setting/bluetooth.c | 248 +++ modules/setting/gps.c | 275 ++++ modules/setting/silent.c | 183 +++ modules/setting/wifi-direct.c | 195 +++ org.tizen.indicator.manifest | 13 + org.tizen.indicator.rule | 43 + packaging/indicator.service | 11 + packaging/org.tizen.indicator.spec | 96 ++ po/CMakeLists.txt | 28 + po/POTFILES.in | 3 + po/ar.po | 6 + po/az.po | 6 + po/bg.po | 6 + po/ca.po | 6 + po/cs.po | 6 + po/da.po | 6 + po/de_DE.po | 6 + po/el_GR.po | 6 + po/en.po | 6 + po/en_PH.po | 6 + po/en_US.po | 6 + po/es_ES.po | 6 + po/es_MX.po | 6 + po/et.po | 6 + po/eu.po | 6 + po/fi.po | 6 + po/fr_CA.po | 6 + po/fr_FR.po | 6 + po/ga.po | 6 + po/gl.po | 6 + po/hi.po | 6 + po/hr.po | 6 + po/hu.po | 6 + po/hy.po | 6 + po/is.po | 6 + po/it_IT.po | 6 + po/ja_JP.po | 6 + po/ka.po | 6 + po/kk.po | 6 + po/ko_KR.po | 6 + po/lt.po | 6 + po/lv.po | 6 + po/mk.po | 6 + po/nb.po | 6 + po/nl_NL.po | 6 + po/pl.po | 6 + po/pt_BR.po | 6 + po/pt_PT.po | 6 + po/ro.po | 6 + po/ru_RU.po | 6 + po/sk.po | 6 + po/sl.po | 6 + po/sr.po | 6 + po/sv.po | 6 + po/tr_TR.po | 6 + po/uk.po | 6 + po/update-po.sh | 57 + po/uz.po | 6 + po/zh_CN.po | 6 + po/zh_HK.po | 6 + po/zh_SG.po | 6 + po/zh_TW.po | 6 + test/indicator_debug_util.c | 83 ++ test/indicator_debug_util.h | 22 + test/indicator_test_util.c | 53 + test/indicator_test_util.h | 23 + 234 files changed, 17039 insertions(+) create mode 100755 AUTHORS create mode 100755 CMakeLists.txt create mode 100755 LICENSE.Flora create mode 100755 NOTICE create mode 100755 daemon/common.h create mode 100755 daemon/indicator.c create mode 100755 daemon/indicator.h create mode 100755 daemon/indicator_box_util.c create mode 100755 daemon/indicator_box_util.h create mode 100755 daemon/indicator_icon_list.c create mode 100755 daemon/indicator_icon_list.h create mode 100755 daemon/indicator_icon_util.c create mode 100755 daemon/indicator_icon_util.h create mode 100755 daemon/indicator_ui.c create mode 100755 daemon/indicator_ui.h create mode 100755 daemon/indicator_util.c create mode 100755 daemon/indicator_util.h create mode 100755 daemon/message.c create mode 100755 daemon/message.h create mode 100755 data/CMakeLists.txt create mode 100755 data/indicator.conf create mode 100755 data/indicator.desktop.in create mode 100755 data/indicator.sh.in create mode 100755 data/indicator.xml.in create mode 100755 data/resource/CMakeLists.txt create mode 100755 data/resource/icons/Alarm/B03_Alarm.png create mode 100755 data/resource/icons/Background playing/B03_Backgroundplaying_MP3playing.png create mode 100755 data/resource/icons/Background playing/B03_Backgroundplaying_Music_paused.png create mode 100755 data/resource/icons/Background playing/B03_Backgroundplaying_Voicerecording.png create mode 100755 data/resource/icons/Background playing/B03_Backgroundplaying_voicerecorder_Recording.png create mode 100755 data/resource/icons/Background playing/B03_Backgroundplaying_voicerecorder_paused.png create mode 100755 data/resource/icons/Bluetooth, NFC, GPS/B03-4_BT_activated_on.png create mode 100755 data/resource/icons/Bluetooth, NFC, GPS/B03_BT_On&Connected&headset.png create mode 100755 data/resource/icons/Bluetooth, NFC, GPS/B03_BT_On&Connected.png create mode 100755 data/resource/icons/Bluetooth, NFC, GPS/B03_GPS_On.png create mode 100755 data/resource/icons/Bluetooth, NFC, GPS/B03_GPS_Searching.png create mode 100755 data/resource/icons/Bluetooth, NFC, GPS/B03_Wi-fi_direct On_connected.png create mode 100755 data/resource/icons/Call/B03_Call_Duringcall.png create mode 100755 data/resource/icons/Call/B03_Call_SOSmessge_active.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_01.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_02.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_03.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_04.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_05.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_06.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_07.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_08.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_09.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_10.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_11.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_12.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_13.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_14.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_15.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_16.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_17.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_connected_18.png create mode 100755 data/resource/icons/Connection/B03_MobileAP_on¬ connected.png create mode 100755 data/resource/icons/Connection/B03_conection_UPdownload.png create mode 100755 data/resource/icons/Connection/B03_connection_3G+.png create mode 100755 data/resource/icons/Connection/B03_connection_3G.png create mode 100755 data/resource/icons/Connection/B03_connection_4G.png create mode 100755 data/resource/icons/Connection/B03_connection_E.png create mode 100755 data/resource/icons/Connection/B03_connection_G.png create mode 100755 data/resource/icons/Connection/B03_connection_H+.png create mode 100755 data/resource/icons/Connection/B03_connection_H.png create mode 100755 data/resource/icons/Connection/B03_connection_LTE.png create mode 100755 data/resource/icons/Connection/B03_connection_UPload.png create mode 100755 data/resource/icons/Connection/B03_connection_download.png create mode 100755 data/resource/icons/Connection/B03_data_downloading_Wifi_01.png create mode 100755 data/resource/icons/Connection/B03_data_downloading_Wifi_02.png create mode 100755 data/resource/icons/Connection/B03_data_downloading_Wifi_03.png create mode 100755 data/resource/icons/Connection/B03_data_downloading_Wifi_04.png create mode 100755 data/resource/icons/Connection/B03_not_conection_UPdownload.png create mode 100755 data/resource/icons/Earphone/B03_BT_Headset.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_0.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_100.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_15.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_28.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_43.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_57.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_71.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_85.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_charge_anim0.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_charge_anim100.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_charge_anim15.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_charge_anim28.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_charge_anim43.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_charge_anim57.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_charge_anim71.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_charge_anim85.png create mode 100755 data/resource/icons/Power/B03_stat_sys_battery_full.png create mode 100755 data/resource/icons/Processing/B03_Processing_Syncing_01.png create mode 100755 data/resource/icons/Processing/B03_Processing_Syncing_02.png create mode 100755 data/resource/icons/Processing/B03_Processing_Syncing_03.png create mode 100755 data/resource/icons/Processing/B03_Processing_Syncing_04.png create mode 100755 data/resource/icons/Processing/B03_Processing_calldivert.png create mode 100755 data/resource/icons/Profile/B03_Profile_Mute.png create mode 100755 data/resource/icons/Profile/B03_Profile_Vibration.png create mode 100755 data/resource/icons/RSSI/B03_Network_LimitedService.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_Flightmode.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_NoService.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_NoSim.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_Searching.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_Sim_00.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_Sim_01.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_Sim_02.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_Sim_03.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_Sim_04.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_roaming_00.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_roaming_01.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_roaming_02.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_roaming_03.png create mode 100755 data/resource/icons/RSSI/B03_RSSI_roaming_04.png create mode 100755 data/resource/icons/RSSI/B03_Roaming.png create mode 100755 data/resource/icons/USB tethering/B03_USB.png create mode 100755 data/resource/icons_edc/B03_Processing_download_ani_00.png create mode 100755 data/resource/icons_edc/B03_Processing_download_ani_01.png create mode 100755 data/resource/icons_edc/B03_Processing_download_ani_02.png create mode 100755 data/resource/icons_edc/B03_Processing_download_ani_03.png create mode 100755 data/resource/icons_edc/B03_Processing_download_ani_04.png create mode 100755 data/resource/icons_edc/B03_Processing_download_ani_05.png create mode 100755 data/resource/icons_edc/B03_Processing_download_ani_06.png create mode 100755 data/resource/icons_edc/B03_Processing_upload_ani_00.png create mode 100755 data/resource/icons_edc/B03_Processing_upload_ani_01.png create mode 100755 data/resource/icons_edc/B03_Processing_upload_ani_02.png create mode 100755 data/resource/icons_edc/B03_Processing_upload_ani_03.png create mode 100755 data/resource/icons_edc/B03_Processing_upload_ani_04.png create mode 100755 data/resource/icons_edc/B03_Processing_upload_ani_05.png create mode 100755 data/resource/icons_edc/B03_Processing_upload_ani_06.png create mode 100755 data/resource/icons_edc/B03_indicator_bg.png create mode 100755 data/resource/indicator_common.edc create mode 100755 data/resource/indicator_gui.h create mode 100755 data/resource/indicator_icon_animation.edc create mode 100755 data/resource/indicator_icon_nonfixed_theme.edc create mode 100755 data/resource/indicator_icon_theme.edc create mode 100755 data/resource/indicator_land.edc create mode 100755 data/resource/indicator_port.edc create mode 100755 debian/changelog create mode 100755 debian/compat create mode 100755 debian/control create mode 100755 debian/dirs create mode 100755 debian/org.tizen.indicator.install.in create mode 100755 debian/org.tizen.indicator.postinst.in create mode 100755 debian/rules create mode 100755 modules/clock/clock.c create mode 100755 modules/connection/connection.c create mode 100755 modules/connection/mobile_hotspot.c create mode 100755 modules/connection/usb.c create mode 100755 modules/connection/wifi.c create mode 100755 modules/information/alarm.c create mode 100755 modules/information/earphone.c create mode 100755 modules/information/lowmem.c create mode 100755 modules/information/mmc.c create mode 100755 modules/information/mp3_playing.c create mode 100755 modules/information/noti.c create mode 100755 modules/information/voice_recorder.c create mode 100755 modules/modules.c create mode 100755 modules/modules.h create mode 100755 modules/network/roaming.c create mode 100755 modules/network/rssi.c create mode 100755 modules/power/battery.c create mode 100755 modules/processing/active_sync.c create mode 100755 modules/processing/call.c create mode 100755 modules/processing/call_divert.c create mode 100755 modules/processing/sos.c create mode 100755 modules/processing/transfer.c create mode 100755 modules/setting/bluetooth.c create mode 100755 modules/setting/gps.c create mode 100755 modules/setting/silent.c create mode 100755 modules/setting/wifi-direct.c create mode 100755 org.tizen.indicator.manifest create mode 100755 org.tizen.indicator.rule create mode 100644 packaging/indicator.service create mode 100755 packaging/org.tizen.indicator.spec create mode 100755 po/CMakeLists.txt create mode 100755 po/POTFILES.in create mode 100755 po/ar.po create mode 100755 po/az.po create mode 100755 po/bg.po create mode 100755 po/ca.po create mode 100755 po/cs.po create mode 100755 po/da.po create mode 100755 po/de_DE.po create mode 100755 po/el_GR.po create mode 100755 po/en.po create mode 100755 po/en_PH.po create mode 100755 po/en_US.po create mode 100755 po/es_ES.po create mode 100755 po/es_MX.po create mode 100755 po/et.po create mode 100755 po/eu.po create mode 100755 po/fi.po create mode 100755 po/fr_CA.po create mode 100755 po/fr_FR.po create mode 100755 po/ga.po create mode 100755 po/gl.po create mode 100755 po/hi.po create mode 100755 po/hr.po create mode 100755 po/hu.po create mode 100755 po/hy.po create mode 100755 po/is.po create mode 100755 po/it_IT.po create mode 100755 po/ja_JP.po create mode 100755 po/ka.po create mode 100755 po/kk.po create mode 100755 po/ko_KR.po create mode 100755 po/lt.po create mode 100755 po/lv.po create mode 100755 po/mk.po create mode 100755 po/nb.po create mode 100755 po/nl_NL.po create mode 100755 po/pl.po create mode 100755 po/pt_BR.po create mode 100755 po/pt_PT.po create mode 100755 po/ro.po create mode 100755 po/ru_RU.po create mode 100755 po/sk.po create mode 100755 po/sl.po create mode 100755 po/sr.po create mode 100755 po/sv.po create mode 100755 po/tr_TR.po create mode 100755 po/uk.po create mode 100755 po/update-po.sh create mode 100755 po/uz.po create mode 100755 po/zh_CN.po create mode 100755 po/zh_HK.po create mode 100755 po/zh_SG.po create mode 100755 po/zh_TW.po create mode 100755 test/indicator_debug_util.c create mode 100755 test/indicator_debug_util.h create mode 100755 test/indicator_test_util.c create mode 100755 test/indicator_test_util.h diff --git a/AUTHORS b/AUTHORS new file mode 100755 index 0000000..26f5d8c --- /dev/null +++ b/AUTHORS @@ -0,0 +1,2 @@ +sung park +seung taek jung \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..76e3598 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,99 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(indicator C) + +IF("${CMAKE_BUILD_TYPE}" STREQUAL "") + SET(CMAKE_BUILD_TYPE "Release") +ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "") + +SET(VENDOR "tizen") +SET(PACKAGE ${PROJECT_NAME}) +SET(PKGNAME "org.${VENDOR}.${PACKAGE}") +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +SET(PREFIXRW ${CMAKE_INSTALL_PREFIXRW}) +SET(BINDIR "${PREFIX}/bin") +SET(RESDIR "${PREFIX}/res") +SET(DATADIR "${PREFIXRW}/data") +SET(LOCALEDIR "${RESDIR}/locale") +SET(ICONDIR "${RESDIR}/icons") +SET(EDJDIR "${RESDIR}/edje") +SET(DESKTOPDIR "/usr/share/applications") +SET(MANIFESTXMLDIR "/usr/share/packages") + +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/daemon DAEMON_SRCS) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/test TEST_SRCS) +FILE(GLOB_RECURSE MODULE_SRCS modules/*.c) + +SET(SRCS ${DAEMON_SRCS} ${MODULE_SRCS} ${TEST_SRCS}) + +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_SOURCE_DIR}/daemon + ${CMAKE_CURRENT_SOURCE_DIR}/modules + ${CMAKE_CURRENT_SOURCE_DIR}/data/resource + ${CMAKE_CURRENT_SOURCE_DIR}/test + ) + +SET(CMAKE_SKIP_BUILD_RPATH TRUE) + +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED + capi-appfw-application + capi-appfw-app-manager + capi-system-runtime-info + dlog + ecore + ecore-x + ecore-evas + ecore-file + edbus + edje + elementary + evas + eina + edbus + libprivilege-control + notification + vconf + minicontrol-monitor + feedback + alarm-engine + pkgmgr-info +) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) +#SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -finstrument-functions -g") + +#SET(CMAKE_C_COMPILER "/scratchbox/devkits/sbwrap") +#SET(CMAKE_C_COMPILER_ARG1 "/home/serena/working/indicator.trace /scratchbox/compilers/bin/gcc gcc") + + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -g -O2") + +ADD_DEFINITIONS("-DVENDOR=\"${VENDOR}\"") +ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE}\"") +ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"") +ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") +ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"") +ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"") +ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"") +ADD_DEFINITIONS("-DICONDIR=\"${ICONDIR}\"") +ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"") +ADD_DEFINITIONS("-DHOME_KEY_EMULATION") +ADD_DEFINITIONS("-DINDICATOR_SUPPORT_OPACITY_MODE") +#ADD_DEFINITIONS("-DFILE_DEBUG") +ADD_DEFINITIONS("-D_DLOG_USED") + +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") + +ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} -licui18n -licuuc) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS}) + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR}) +INSTALL(DIRECTORY DESTINATION ${DATADIR}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PKGNAME}.rule DESTINATION /etc/smack/accesses.d) + +ADD_SUBDIRECTORY(po) +ADD_SUBDIRECTORY(data) + diff --git a/LICENSE.Flora b/LICENSE.Flora new file mode 100755 index 0000000..571fe79 --- /dev/null +++ b/LICENSE.Flora @@ -0,0 +1,206 @@ +Flora License + +Version 1.1, April, 2013 + +http://floralicense.org/license/ + +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. + +"Tizen Certified Platform" shall mean a software platform that complies +with the standards set forth in the Tizen Compliance Specification +and passes the Tizen Compliance Tests as defined from time to time +by the Tizen Technical Steering Group and certified by the Tizen +Association or its designated agent. + +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 +solely as incorporated into a Tizen Certified Platform, 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 solely +as incorporated into a Tizen Certified Platform 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 pursuant to the copyright license +above, in any medium, with or without modifications, and in Source or +Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works + a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating + that You changed the files; and + 3. 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 + 4. 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 + and your own copyright statement or terms and conditions do not conflict + the conditions stated in the License including section 3. + +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 Flora License to your work + +To apply the Flora 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 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. + diff --git a/NOTICE b/NOTICE new file mode 100755 index 0000000..10ae78c --- /dev/null +++ b/NOTICE @@ -0,0 +1,4 @@ +Copyright (c) Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Flora License, Version 1.1. +Please, see the LICENSE.flora file for Flora License, Version 1.1 terms and conditions. + diff --git a/daemon/common.h b/daemon/common.h new file mode 100755 index 0000000..79ab49c --- /dev/null +++ b/daemon/common.h @@ -0,0 +1,65 @@ +/* + * Copyright 2012 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. + */ + +#ifndef __DEF_common_H_ +#define __DEF_common_H_ + +#include +#include +#include + +#define OK (0) +#define FAIL (-1) + +#ifdef _DLOG_USED +#define LOG_TAG "indicator" +#include + +#define ERR(str, args...) LOGE("%s[%d]\t " #str "\n", \ + __func__, __LINE__, ##args) +#define DBG(str, args...) LOGD("%s[%d]\t " #str "\n", \ + __func__, __LINE__, ##args) +#define INFO(str, args...) LOGI(#str"\n", ##args) +#elif FILE_DEBUG /*_DLOG_USED*/ +#include "indicator_debug_util.h" +#define ERR(str, args...) debug_printf("%s[%d]\t " #str "\n", \ + __func__, __LINE__, ##args) +#define DBG(str, args...) debug_printf("%s[%d]\t " #str "\n", \ + __func__, __LINE__, ##args) +#define INFO(str, args...) debug_printf(#str"\n", ##args) +#else /*_DLOG_USED*/ +#define ERR(str, args...) fprintf(stderr, "%s[%d]\t " #str "\n",\ + __func__, __LINE__, ##args) +#define DBG(str, args...) fprintf(stderr, "%s[%d]\t " #str "\n",\ + __func__, __LINE__, ##args) +#define INFO(str, args...) fprintf(stderr, #str"\n", ##args) +#endif /*_DLOG_USED*/ + +#define retif(cond, ret, str, args...) do {\ + if (cond) { \ + ERR(str, ##args);\ + return ret;\ + } \ +} while (0); + +#define gotoif(cond, target, str, args...) do {\ + if (cond) { \ + DBG(str, ##args);\ + goto target;\ + } \ +} while (0); + +#endif diff --git a/daemon/indicator.c b/daemon/indicator.c new file mode 100755 index 0000000..f6ded43 --- /dev/null +++ b/daemon/indicator.c @@ -0,0 +1,15 @@ +/* + * Copyright 2012 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. + */ diff --git a/daemon/indicator.h b/daemon/indicator.h new file mode 100755 index 0000000..8cf8a2a --- /dev/null +++ b/daemon/indicator.h @@ -0,0 +1,164 @@ +/* + * Copyright 2012 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. + */ + + +#ifndef __INDICATOR_H__ +#define __INDICATOR_H__ + +#include +#include +#include + +#ifndef VCONFKEY_INDICATOR_STARTED +#define VCONFKEY_INDICATOR_STARTED "memory/private/"PACKAGE_NAME"/started" +#endif +#define VCONFKEY_APPTRAY_STATE "file/private/com.samsung.app-tray/is_top" + +#define VCONFKEY_BATTERY_DISP_STATE "memory/private/"PACKAGE_NAME"/battery_disp" + +#define _FIXED_COUNT 6 + +enum indicator_win_mode{ + INDICATOR_WIN_PORT = 0, + INDICATOR_WIN_LAND, + INDICATOR_WIN_MAX +}; + + +enum { + INDICATOR_PRIORITY_FIXED_MIN = 0, + INDICATOR_PRIORITY_FIXED1 = INDICATOR_PRIORITY_FIXED_MIN, + INDICATOR_PRIORITY_FIXED2, + INDICATOR_PRIORITY_FIXED3, + INDICATOR_PRIORITY_FIXED4, + INDICATOR_PRIORITY_FIXED5, + INDICATOR_PRIORITY_FIXED6, + INDICATOR_PRIORITY_FIXED_MAX = INDICATOR_PRIORITY_FIXED6, + INDICATOR_PRIORITY_SYSTEM_MIN, + + INDICATOR_PRIORITY_SYSTEM_7 = INDICATOR_PRIORITY_SYSTEM_MIN, + INDICATOR_PRIORITY_SYSTEM_6, + INDICATOR_PRIORITY_SYSTEM_5, + INDICATOR_PRIORITY_SYSTEM_4, + INDICATOR_PRIORITY_SYSTEM_3, + INDICATOR_PRIORITY_SYSTEM_2, + INDICATOR_PRIORITY_SYSTEM_1, + INDICATOR_PRIORITY_SYSTEM_MAX = INDICATOR_PRIORITY_SYSTEM_1, + INDICATOR_PRIORITY_NOTI_MIN, + INDICATOR_PRIORITY_NOTI_2 = INDICATOR_PRIORITY_NOTI_MIN, + INDICATOR_PRIORITY_NOTI_1, + INDICATOR_PRIORITY_NOTI_MAX = INDICATOR_PRIORITY_NOTI_2 +}; + +enum indicator_icon_type { + INDICATOR_IMG_ICON = 0, + INDICATOR_TXT_ICON, + INDICATOR_TXT_WITH_IMG_ICON +}; + +enum indicator_icon_area_type { + INDICATOR_ICON_AREA_FIXED = 0, + INDICATOR_ICON_AREA_SYSTEM, + INDICATOR_ICON_AREA_NOTI +}; + +enum indicator_icon_ani { + ICON_ANI_NONE = 0, + ICON_ANI_BLINK, + ICON_ANI_ROTATE, + ICON_ANI_METRONOME, + ICON_ANI_DOWNLOADING, + ICON_ANI_UPLOADING, + ICON_ANI_MAX +}; + +enum { + TRANSFER_MIN = 0, + TRANSFER_NONE = TRANSFER_MIN, + TRANSFER_UP, + TRANSFER_DOWN, + TRANSFER_UPDOWN, + TRANSFER_MAX +}; + + +typedef struct _Text_Icon_Info { + char *data; + Evas_Object *obj; + int width; +} Text_Icon_Info; + +typedef struct _Img_Icon_Info { + const char *data; + Evas_Object *obj; + int width; + int height; +} Img_Icon_Info; + +typedef struct _ind_win_info +{ + Evas *evas; + Evas_Object* win_main; + Evas_Object* layout_main; + int w; + int h; + int angle; + int type; + Evas_Object *_fixed_box[_FIXED_COUNT]; + Evas_Object *_non_fixed_box; + Evas_Object *_noti_box; + + struct { + Eina_Bool trigger; + int x; + int y; + } mouse_event; + +#ifdef HOME_KEY_EMULATION + Ecore_X_Atom atom_hwkey; + Ecore_X_Window win_hwkey; +#endif /* HOME_KEY_EMULATION */ + void* data; +}win_info; + + +typedef struct Indicator_Icon { + char *name; + enum indicator_icon_type type; + enum indicator_icon_area_type area; + int priority; + Eina_Bool always_top; + + + int (*init) (void *); + int (*fini) (void); + int (*lang_changed) (void *); + int (*region_changed) (void *); + int (*minictrl_control) (int, const char *, void *); + int (*wake_up) (void *); + void *ad; + Eina_Bool obj_exist; + Text_Icon_Info txt_obj; + Img_Icon_Info img_obj; + Eina_Bool wish_to_show; + Eina_Bool exist_in_view; + Evas_Object *ao; + + int win_type; + enum indicator_icon_ani ani; +} Indicator_Icon_Object; + +#endif /*__INDICATOR_H__*/ diff --git a/daemon/indicator_box_util.c b/daemon/indicator_box_util.c new file mode 100755 index 0000000..9ac75d5 --- /dev/null +++ b/daemon/indicator_box_util.c @@ -0,0 +1,868 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include +#include +#include "common.h" +#include "indicator_box_util.h" +#include "indicator_icon_util.h" +#include "indicator_icon_list.h" +#include "indicator_ui.h" +#include "indicator_gui.h" +#include "indicator_util.h" +#include + +#define DEFAULT_SIZE (CLOCK_WIDTH + (PADDING_WIDTH * 2)) +#define _FIXED_BOX_PART_NAME "elm.swallow.fixed" +#define _NON_FIXED_BOX_PART_NAME "elm.swallow.nonfixed" +#define _NOTI_BOX_PART_NAME "elm.swallow.noti" + +#define CORRECTION 10 + +Eina_List *_view_fixed_list[INDICATOR_WIN_MAX]; +Eina_List *_view_system_list[INDICATOR_WIN_MAX]; +Eina_List *_view_noti_list[INDICATOR_WIN_MAX]; + +extern int indicator_icon_show_state[INDICATOR_WIN_MAX]; + +static Evas_Object *indicator_box_add(Evas_Object * parent) +{ + Evas_Object *obj; + + retif(parent == NULL, NULL, "Invalid parameter!"); + + obj = elm_box_add(parent); + evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL); + + elm_box_horizontal_set(obj, EINA_TRUE); + evas_object_show(obj); + + return obj; +} + +static void _update_window(win_info *win) +{ + + int root_w, root_h; + Ecore_X_Window xwin, root; + + retif(win == NULL, , "Invalid parameter!"); + + xwin = elm_win_xwindow_get(win->win_main); + if (!xwin) + return; + root = ecore_x_window_root_get(xwin); + if (!root) + return; + ecore_x_window_size_get(root, &root_w, &root_h); + + if (win->angle == 0 || win->angle == 180) + win->w = root_w; + else + win->w = root_h; + + switch (win->angle) { + case 0: + ecore_x_window_shape_input_rectangle_set(xwin, root_w - win->w, + 0, win->w, win->h); + break; + case 90: + ecore_x_window_shape_input_rectangle_set(xwin, 0, 0, win->h, + win->w); + break; + case 180: + ecore_x_window_shape_input_rectangle_set(xwin, 0, 0, win->w, + win->h); + break; + case 270: + ecore_x_window_shape_input_rectangle_set(xwin, + 0, root_h - win->w, + win->h, win->w); + break; + default: + break; + } + +} + +static void _update_display(win_info *win) +{ + Indicator_Icon_Object *icon; + Eina_List *l; + int i = 0; + + retif(win == NULL, , "Invalid parameter!"); + + for (i = 0; i < _FIXED_COUNT; ++i) + elm_box_unpack_all(win->_fixed_box[i]); + + elm_box_unpack_all(win->_non_fixed_box); + elm_box_unpack_all(win->_noti_box); + + EINA_LIST_FOREACH(_view_fixed_list[win->type], l, icon) { + if (icon->obj_exist == EINA_FALSE) { + if (indicator_util_icon_add(win,icon) == EINA_TRUE) + icon->obj_exist = EINA_TRUE; + } + + if (icon->obj_exist == EINA_TRUE) { + if (icon->area == INDICATOR_ICON_AREA_FIXED + && icon->priority <= INDICATOR_PRIORITY_FIXED_MAX) { + + Evas_Coord x, y, h, w; + + Evas_Object *img_eo = + evas_object_data_get(icon->img_obj.obj, + "imgicon"); + evas_object_size_hint_min_set(img_eo, + icon->img_obj.width * elm_config_scale_get(), + icon->img_obj.height * elm_config_scale_get()); + + indicator_util_handle_animated_gif(icon); + + switch (icon->type) { + case INDICATOR_IMG_ICON: + evas_object_show(icon->img_obj.obj); + elm_box_pack_start(win->_fixed_box + [icon->priority], + icon->img_obj.obj); + break; + case INDICATOR_TXT_ICON: + evas_object_show(icon->txt_obj.obj); + elm_box_pack_start(win->_fixed_box + [icon->priority], + icon->txt_obj.obj); + break; + case INDICATOR_TXT_WITH_IMG_ICON: + evas_object_show(icon->txt_obj.obj); + evas_object_show(icon->img_obj.obj); + elm_box_pack_start(win->_fixed_box + [icon->priority], + icon->img_obj.obj); + elm_box_pack_start(win->_fixed_box + [icon->priority], + icon->txt_obj.obj); + break; + } + + evas_object_geometry_get( + win->_fixed_box[icon->priority], + &x, &y, &h, &w); + } + } + } + + EINA_LIST_FOREACH(_view_system_list[win->type], l, icon) { + if (icon->obj_exist == EINA_FALSE) { + if (indicator_util_icon_add(win,icon) == EINA_TRUE) + icon->obj_exist = EINA_TRUE; + } + if (icon->obj_exist == EINA_TRUE) { + if (icon->area == INDICATOR_ICON_AREA_SYSTEM + && icon->priority >= INDICATOR_PRIORITY_SYSTEM_MIN + && icon->priority <= INDICATOR_PRIORITY_SYSTEM_MAX) { + + Evas_Coord x, y, h, w; + + Evas_Object *img_eo = + evas_object_data_get(icon->img_obj.obj, + "imgicon"); + evas_object_size_hint_min_set(img_eo, + icon->img_obj.width * elm_config_scale_get(), + icon->img_obj.height * elm_config_scale_get()); + + indicator_util_handle_animated_gif(icon); + + switch (icon->type) { + case INDICATOR_IMG_ICON: + evas_object_show(icon->img_obj.obj); + elm_box_pack_end(win->_non_fixed_box, + icon->img_obj.obj); + break; + case INDICATOR_TXT_ICON: + evas_object_show(icon->txt_obj.obj); + elm_box_pack_end(win->_non_fixed_box, + icon->txt_obj.obj); + break; + case INDICATOR_TXT_WITH_IMG_ICON: + evas_object_show(icon->txt_obj.obj); + evas_object_show(icon->img_obj.obj); + elm_box_pack_end(win->_non_fixed_box, + icon->txt_obj.obj); + elm_box_pack_end(win->_non_fixed_box, + icon->img_obj.obj); + break; + } + evas_object_geometry_get(win->_non_fixed_box, + &x, &y, &h, &w); + } + + + } + } + + EINA_LIST_FOREACH(_view_noti_list[win->type], l, icon) { + if (icon->obj_exist == EINA_FALSE) { + if (indicator_util_icon_add(win,icon) == EINA_TRUE) + icon->obj_exist = EINA_TRUE; + } + if (icon->obj_exist == EINA_TRUE) { + if (icon->area == INDICATOR_ICON_AREA_NOTI) { + Evas_Coord x, y, h, w; + + Evas_Object *img_eo = + evas_object_data_get(icon->img_obj.obj, + "imgicon"); + evas_object_size_hint_min_set(img_eo, + icon->img_obj.width * elm_config_scale_get(), + icon->img_obj.height * elm_config_scale_get()); + + indicator_util_handle_animated_gif(icon); + + switch (icon->type) { + case INDICATOR_IMG_ICON: + evas_object_show(icon->img_obj.obj); + elm_box_pack_end(win->_noti_box, + icon->img_obj.obj); + break; + case INDICATOR_TXT_ICON: + evas_object_show(icon->txt_obj.obj); + elm_box_pack_end(win->_noti_box, + icon->txt_obj.obj); + break; + case INDICATOR_TXT_WITH_IMG_ICON: + evas_object_show(icon->txt_obj.obj); + evas_object_show(icon->img_obj.obj); + elm_box_pack_end(win->_noti_box, + icon->txt_obj.obj); + elm_box_pack_end(win->_noti_box, + icon->img_obj.obj); + break; + } + evas_object_geometry_get(win->_noti_box, + &x, &y, &h, &w); + + indicator_util_start_noti_ani(icon); + } + + + } + } + + if (win) + _update_window(win); +} + +void indicator_util_update_display(win_info *win) +{ + retif(win == NULL, , "Invalid parameter!"); + + _update_window(win); + + _update_display(win); +} + +int icon_box_pack(Indicator_Icon_Object *icon) +{ + retif(icon == NULL, FAIL, "Invalid parameter!"); + + if (indicator_util_is_show_icon(icon)) + return OK; + + INFO("[icon_box_pack] %s %d!",icon->name, icon->win_type); + + if (INDICATOR_ICON_AREA_FIXED == icon->area) + { + icon->exist_in_view = EINA_TRUE; + _view_fixed_list[icon->win_type] = eina_list_append(_view_fixed_list[icon->win_type], icon); + } + else if(INDICATOR_ICON_AREA_SYSTEM == icon->area) + { + Indicator_Icon_Object *data; + Eina_List *l; + + EINA_LIST_FOREACH(_view_system_list[icon->win_type], l, data) { + if (data->priority <= icon->priority) { + icon->exist_in_view = EINA_TRUE; + _view_system_list[icon->win_type] = + eina_list_prepend_relative_list( + _view_system_list[icon->win_type], icon, l); + DBG("System prepend %s",icon->name); + return OK; + } + } + + icon->exist_in_view = EINA_TRUE; + _view_system_list[icon->win_type] = + eina_list_append(_view_system_list[icon->win_type], icon); + DBG("System append %s",icon->name); + } + else + { + Indicator_Icon_Object *data; + Eina_List *l; + + EINA_LIST_FOREACH(_view_noti_list[icon->win_type], l, data) { + if (data->priority <= icon->priority) + { + icon->exist_in_view = EINA_TRUE; + _view_noti_list[icon->win_type] = + eina_list_prepend_relative_list( + _view_noti_list[icon->win_type], icon, l); + DBG("Noti prepend %s",icon->name); + return OK; + } + } + + icon->exist_in_view = EINA_TRUE; + _view_noti_list[icon->win_type] = + eina_list_append(_view_noti_list[icon->win_type], icon); + DBG("Noti append %s",icon->name); + } + + return OK; +} + +int icon_box_pack_append(Indicator_Icon_Object *icon) +{ + retif(icon == NULL, FAIL, "Invalid parameter!"); + + if (indicator_util_is_show_icon(icon)) + return OK; + + INFO("[icon_box_pack_append] %s!",icon->name); + + if (INDICATOR_ICON_AREA_FIXED == icon->area) + { + icon->exist_in_view = EINA_TRUE; + _view_fixed_list[icon->win_type] = eina_list_append(_view_fixed_list[icon->win_type], icon); + } + else if(INDICATOR_ICON_AREA_SYSTEM == icon->area) + { + icon->exist_in_view = EINA_TRUE; + _view_system_list[icon->win_type] = + eina_list_append(_view_system_list[icon->win_type], icon); + } + else + { + icon->exist_in_view = EINA_TRUE; + _view_noti_list[icon->win_type] = + eina_list_append(_view_noti_list[icon->win_type], icon); + DBG("Noti append %s",icon->name); + } + + return OK; +} + + +int icon_box_unpack(Indicator_Icon_Object *icon) +{ + retif(icon == NULL, FAIL, "Invalid parameter!"); + + INFO("[icon_box_unpack] %s!",icon->name); + + if (INDICATOR_ICON_AREA_FIXED == icon->area) + { + icon->exist_in_view = EINA_FALSE; + _view_fixed_list[icon->win_type] = eina_list_remove(_view_fixed_list[icon->win_type], icon); + } + else if(INDICATOR_ICON_AREA_SYSTEM == icon->area) + { + icon->exist_in_view = EINA_FALSE; + _view_system_list[icon->win_type] = + eina_list_remove(_view_system_list[icon->win_type], icon); + } + else + { + icon->exist_in_view = EINA_FALSE; + _view_noti_list[icon->win_type] = + eina_list_remove(_view_noti_list[icon->win_type], icon); + } + + if (icon->obj_exist == EINA_TRUE) { + if (indicator_util_icon_del(icon) == EINA_TRUE) { + icon->obj_exist = EINA_FALSE; + INFO("%s icon object is freed!", icon->name); + } + } + + return OK; +} + +int icon_box_init(win_info *win) +{ + char *str_text = NULL; + int i = 0; + retif(win == NULL, FAIL, "Invalid parameter!"); + + for (i = 0; i < _FIXED_COUNT; ++i) { + if (win->_fixed_box[i] == NULL) { + Eina_Bool ret; + + win->_fixed_box[i] = indicator_box_add(win->layout_main); + retif(win->_fixed_box[i] == NULL, FAIL, + "Failed to add _fixed_box object!"); + + Eina_Strbuf *temp_str = eina_strbuf_new(); + eina_strbuf_append_printf(temp_str, "%s%d", + _FIXED_BOX_PART_NAME, i); + str_text = eina_strbuf_string_steal(temp_str); + + ret = edje_object_part_swallow(elm_layout_edje_get + (win->layout_main), str_text, + win->_fixed_box[i]); + INFO("[ICON INIT] : %d %s %d " , i, str_text, ret); + eina_strbuf_free(temp_str); + free(str_text); + } + } + + win->_non_fixed_box = indicator_box_add(win->layout_main); + retif(win->_non_fixed_box == NULL, FAIL, + "Failed to create _non_fixed_box object!"); + evas_object_size_hint_align_set(win->_non_fixed_box, + EVAS_HINT_FILL, EVAS_HINT_FILL); + + edje_object_part_swallow(elm_layout_edje_get + (win->layout_main), _NON_FIXED_BOX_PART_NAME, + win->_non_fixed_box); + + win->_noti_box = indicator_box_add(win->layout_main); + retif(win->_noti_box == NULL, FAIL, + "Failed to create _non_fixed_box object!"); + evas_object_size_hint_align_set(win->_noti_box, + EVAS_HINT_FILL, EVAS_HINT_FILL); + + edje_object_part_swallow(elm_layout_edje_get + (win->layout_main), _NOTI_BOX_PART_NAME, + win->_noti_box); + + indicator_util_update_display(win); + + return 0; +} + +int icon_box_fini(win_info *win) +{ + int i = 0; + + retif(win == NULL || win->layout_main == NULL, + FAIL, "Invalid parameter!"); + + if (win->_non_fixed_box != NULL) { + edje_object_part_unswallow(elm_layout_edje_get(win->layout_main), + win->_non_fixed_box); + elm_box_unpack_all(win->_non_fixed_box); + evas_object_del(win->_non_fixed_box); + win->_non_fixed_box = NULL; + } + + if (win->_noti_box != NULL) { + edje_object_part_unswallow(elm_layout_edje_get(win->layout_main), + win->_noti_box); + elm_box_unpack_all(win->_noti_box); + evas_object_del(win->_noti_box); + win->_noti_box = NULL; + } + + for (i = 0; i < _FIXED_COUNT; ++i) { + if (win->_fixed_box[i] != NULL) { + edje_object_part_unswallow(elm_layout_edje_get + (win->layout_main), + win->_fixed_box[i]); + elm_box_unpack_all(win->_fixed_box[i]); + evas_object_del(win->_fixed_box[i]); + win->_fixed_box[i] = NULL; + } + } + return 0; +} + +unsigned int indicator_get_count_in_fixed_list(int type) +{ + int r = eina_list_count(_view_fixed_list[type]); + DBG("Fixed Count : %d",r); + return r; +} +unsigned int indicator_get_count_in_system_list(int type) +{ + int r = eina_list_count(_view_system_list[type]); + DBG("System Count : %d",r); + return r; +} +unsigned int indicator_get_count_in_noti_list(int type) +{ + int r = eina_list_count(_view_noti_list[type]); + DBG("Notification Count : %d",r); + return r; +} + +void indicator_set_count_in_non_fixed_list(int angle, int status) +{ + +} + +int indicator_get_noti_list_index_count(int type) +{ + int added_count = 0; + int ret = 0; + int status = 0; + + ret = vconf_get_bool(VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL, &status); + + if (ret != OK) + { + ERR("Fail to get vconfkey "); + } + + if (status == EINA_TRUE) + added_count = BATTERY_TEXT_ON_COUNT; + else + added_count = BATTERY_TEXT_OFF_COUNT; + + if(type == INDICATOR_WIN_PORT) + { + ret = PORT_NOTI_ICON_COUNT + added_count; + } + else + { + ret = LAND_NOTI_ICON_COUNT + added_count; + } + + return ret; +} + +int indicator_get_system_list_index_count(int type) +{ + int ret = 0; + + if(type == INDICATOR_WIN_PORT) + { + ret = PORT_SYSTEM_ICON_COUNT; + } + else + { + ret = LAND_SYSTEM_ICON_COUNT; + } + + return ret; +} + +int indicator_get_max_count_in_non_fixed_list(int type) +{ + int added_count = 0; + int ret = 0; + int status = 0; + + ret = vconf_get_bool(VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL, &status); + + if (ret != OK) + { + ERR("Fail to get vconfkey"); + } + + if (status == EINA_TRUE) + added_count = BATTERY_TEXT_ON_COUNT; + else + added_count = BATTERY_TEXT_OFF_COUNT; + + if(type == INDICATOR_WIN_PORT) + { + ret = PORT_NONFIXED_ICON_COUNT + added_count; + } + else + { + ret = LAND_NONFIXED_ICON_COUNT + added_count; + } + + return ret; +} + +Icon_AddType indicator_is_enable_to_insert_in_non_fixed_list(Indicator_Icon_Object *obj) +{ + Indicator_Icon_Object *icon; + Eina_List *l; + + int higher_cnt = 0; + int same_cnt = 0; + int same_top_cnt = 0; + int lower_cnt = 0; + int system_cnt = indicator_get_count_in_system_list(obj->win_type); + int noti_cnt = indicator_get_count_in_noti_list(obj->win_type); + + Eina_List * tmpList = NULL; + + if(obj->area == INDICATOR_ICON_AREA_SYSTEM ) + { + tmpList = _view_system_list[obj->win_type]; + } + else if(obj->area == INDICATOR_ICON_AREA_NOTI) + { + tmpList = _view_noti_list[obj->win_type]; + } + + EINA_LIST_FOREACH(tmpList, l, icon) { + if (!strcmp(icon->name, obj->name)) + return CANNOT_ADD; + + if (icon->priority > obj->priority) + ++higher_cnt; + + else if (icon->priority == obj->priority) { + ++same_cnt; + if (icon->always_top == EINA_TRUE) + ++same_top_cnt; + } else + lower_cnt++; + } + + + if(obj->area == INDICATOR_ICON_AREA_SYSTEM ) + { + if (higher_cnt + same_cnt + lower_cnt >= indicator_get_system_list_index_count(obj->win_type)) + { + if (obj->always_top == EINA_TRUE) + { + if(same_top_cnt>=indicator_get_system_list_index_count(obj->win_type)) + { + DBG("[CANNOT_ADD] %d",same_top_cnt); + return CANNOT_ADD; + } + else + { + DBG("[CAN_ADD_WITH_DEL_SYSTEM]"); + return CAN_ADD_WITH_DEL_SYSTEM; + } + } + else + { + if(higher_cnt >= indicator_get_system_list_index_count(obj->win_type)) + { + DBG("[CANNOT_ADD]"); + return CANNOT_ADD; + } + else if(higher_cnt+same_cnt >= indicator_get_system_list_index_count(obj->win_type)) + { + DBG("[CAN_ADD_WITH_DEL_SYSTEM]"); + return CAN_ADD_WITH_DEL_SYSTEM; + } + else + { + DBG("[CAN_ADD_WITH_DEL_SYSTEM]"); + return CAN_ADD_WITH_DEL_SYSTEM; + } + } + } + else + { + return CAN_ADD_WITHOUT_DEL; + } + } + else + { + if(noti_cnt>=indicator_get_noti_list_index_count(obj->win_type)) + { + + DBG("[CAN_ADD_WITH_DEL_NOTI]"); + return CAN_ADD_WITH_DEL_NOTI; + } + else + { + INFO("[CAN_ADD_WITHOUT_DEL]"); + return CAN_ADD_WITHOUT_DEL; + } + } + + return CANNOT_ADD; +} + +int indicator_util_get_priority_in_move_area(win_info *win, Evas_Coord curr_x, + Evas_Coord curr_y) +{ + Evas_Coord x, y, h, w; + + evas_object_geometry_get(win->_fixed_box[INDICATOR_PRIORITY_FIXED1], + &x, &y, &h, &w); + INFO("[Current Location] %d %d %d %d %d %d", + x, y, h, w, curr_x, curr_y); + + if (curr_x >= x - CORRECTION && curr_x <= x+h + CORRECTION) { + if (curr_y == -1) + return INDICATOR_PRIORITY_FIXED1; + else if (curr_y >= y - CORRECTION && curr_y <= y+h + CORRECTION) + return INDICATOR_PRIORITY_FIXED1; + } + + + return -1; +} + +int indicator_util_check_indicator_area(win_info *win, Evas_Coord curr_x, Evas_Coord curr_y) +{ + Evas_Coord x, y, w, h; + + evas_object_geometry_get(win->layout_main, + &x, &y, &w, &h); + + INFO("[indicator area] [%d, %d] [wxh][%dx%d], cur[%d, %d]", + x, y, w, h, curr_x, curr_y); + + if (curr_x >= x && curr_x < x + w && curr_y >= y && curr_y < y + h) + return 1; + + return 0; +} + +int indicator_util_check_home_icon_area(win_info *win, Evas_Coord curr_x, Evas_Coord curr_y) +{ + Evas_Coord x, y, w, h; + + evas_object_geometry_get(win->_fixed_box[INDICATOR_PRIORITY_FIXED5], + &x, &y, &w, &h); + + INFO("[Home icon area] [%d, %d] [wxh][%dx%d], cur[%d, %d]", + x, y, w, h, curr_x, curr_y); + + if (curr_x >= x && curr_x < x + w && curr_y >= y && curr_y < y + h) + return 1; + + return 0; +} + +static void indicator_util_icon_state(int win_type, int bShow) +{ + DBG("win_type(%d) Show(%d)",win_type,bShow); + indicator_icon_show_state[win_type] = bShow; +} + +void indicator_util_show_hide_icons(void* data,int bShow, int bEffect) +{ + win_info *win = (win_info *)data; + retif(data == NULL, , "Invalid parameter!"); + + extern int is_transparent; + + DBG("win_type(%d) Show(%d)(%d)(%d)",win->type,bShow,bEffect,is_transparent); + +} + +Eina_Bool indicator_util_is_show_icon(Indicator_Icon_Object *obj) +{ + retif(obj == NULL, FAIL, "Invalid parameter!"); + + if (obj->area == INDICATOR_ICON_AREA_FIXED) + { + if (eina_list_data_find(_view_fixed_list[obj->win_type], obj)) + return 1; + else + return 0; + } + else if(obj->area == INDICATOR_ICON_AREA_SYSTEM) + { + if (eina_list_data_find(_view_system_list[obj->win_type], obj)) + return 1; + else + return 0; + } + + else { + if (eina_list_data_find(_view_noti_list[obj->win_type], obj)) + return 1; + else + return 0; + } +} +int indicator_util_handle_animated_gif(Indicator_Icon_Object *icon) +{ + int bPlay = TRUE; + int val = 0; + + retif(icon == NULL, FAIL, "Invalid parameter!"); + Evas_Object *icon_eo = evas_object_data_get(icon->img_obj.obj, "imgicon"); + + if(elm_image_animated_available_get(icon_eo)== EINA_FALSE) + { + return FALSE; + } + + if (vconf_get_int(VCONFKEY_PM_STATE, &val) < 0) { + ERR("Cannot get VCONFKEY_PM_STATE"); + return FALSE; + } + + switch(val) + { + case VCONFKEY_PM_STATE_LCDOFF : + bPlay = FALSE; + break; + case VCONFKEY_PM_STATE_NORMAL : + bPlay = TRUE; + break; + default: + bPlay = TRUE; + break; + } + + if(bPlay == TRUE) + { + if(elm_image_animated_get(icon_eo)==EINA_FALSE) + { + elm_image_animated_set(icon_eo,EINA_TRUE); + } + + if(elm_image_animated_play_get(icon_eo) == EINA_FALSE) + { + elm_image_animated_play_set(icon_eo, EINA_TRUE); + INFO("PLAY ANIMATED GIF ICON(%s)",icon->name); + } + } + else + { + if(elm_image_animated_play_get(icon_eo) == EINA_TRUE) + { + elm_image_animated_play_set(icon_eo, EINA_FALSE); + INFO("STOP ANIMATED GIF ICON(%s)",icon->name); + } + } + + return TRUE; +} + +void indicator_util_noti_ani_handle(int bStart) +{ + Indicator_Icon_Object *icon; + Eina_List *l; + int i = 0; + + for(i=0;iobj_exist == EINA_TRUE) + { + if(bStart==1) + indicator_util_start_noti_ani(icon); + else + indicator_util_stop_noti_ani(icon); + } + } + } + +} + diff --git a/daemon/indicator_box_util.h b/daemon/indicator_box_util.h new file mode 100755 index 0000000..0204927 --- /dev/null +++ b/daemon/indicator_box_util.h @@ -0,0 +1,62 @@ +/* + * Copyright 2012 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. + */ + + +#ifndef __INDICATOR_BOX_UTIL_H__ +#define __INDICATOR_BOX_UTIL_H__ + +#include +#include "indicator.h" + +typedef enum _Icon_AddType { + CANNOT_ADD = -1, + CAN_ADD_WITH_DEL_SYSTEM, + CAN_ADD_WITH_DEL_NOTI, + CAN_ADD_WITHOUT_DEL, +} Icon_AddType; + +typedef enum _Icon_Display_Count { + BATTERY_TEXT_ON_COUNT = -1, + BATTERY_TEXT_OFF_COUNT = 0, + PORT_NONFIXED_ICON_COUNT = 7, + LAND_NONFIXED_ICON_COUNT = 15, + PORT_NOTI_ICON_COUNT = 5, + LAND_NOTI_ICON_COUNT = 10, + PORT_SYSTEM_ICON_COUNT = 2, + LAND_SYSTEM_ICON_COUNT = 5, +} Icon_Display_Count; + +extern int icon_box_pack(Indicator_Icon_Object *icon); +extern int icon_box_pack_append(Indicator_Icon_Object *icon); +extern int icon_box_unpack(Indicator_Icon_Object *icon); +extern int icon_box_init(win_info *win); +extern int icon_box_fini(win_info *win); +extern void indicator_util_update_display(win_info *win); +extern unsigned int indicator_get_count_in_fixed_list(int type); +extern unsigned int indicator_get_count_in_system_list(int type); +extern unsigned int indicator_get_count_in_noti_list(int type); +extern void indicator_set_count_in_non_fixed_list(int angle, int status); +extern int indicator_get_max_count_in_non_fixed_list(int type); +extern Icon_AddType indicator_is_enable_to_insert_in_non_fixed_list(Indicator_Icon_Object *obj); +extern int indicator_util_get_priority_in_move_area(win_info *win, Evas_Coord, Evas_Coord); +int indicator_util_check_indicator_area(win_info *win,Evas_Coord curr_x, Evas_Coord curr_y); +int indicator_util_check_home_icon_area(win_info *win,Evas_Coord curr_x, Evas_Coord curr_y); +void indicator_util_show_hide_icons(void* data, int bShow, int bEffect); +extern Eina_Bool indicator_util_is_show_icon(Indicator_Icon_Object *obj); +int indicator_util_handle_animated_gif(Indicator_Icon_Object *icon); +void indicator_util_noti_ani_handle(int bStart); + +#endif /*__INDICATOR_BOX_UTIL_H__*/ diff --git a/daemon/indicator_icon_list.c b/daemon/indicator_icon_list.c new file mode 100755 index 0000000..21c9295 --- /dev/null +++ b/daemon/indicator_icon_list.c @@ -0,0 +1,353 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "common.h" +#include "indicator.h" +#include "indicator_icon_list.h" +#include "indicator_icon_util.h" + +static Eina_List *fixed_icon_list[INDICATOR_WIN_MAX] = {NULL,}; +static Eina_List *system_icon_list[INDICATOR_WIN_MAX] = {NULL,}; +static Eina_List *noti_icon_list[INDICATOR_WIN_MAX] = {NULL,}; + + +void indicator_icon_object_free(Indicator_Icon_Object *icon) +{ + if (icon) { + DBG("%s!",icon->name); + if (icon->obj_exist == EINA_TRUE) { + if (indicator_util_icon_del(icon) == EINA_TRUE) { + icon->obj_exist = EINA_FALSE; + icon->txt_obj.obj = NULL; + icon->img_obj.obj = NULL; + } + } + } +} + +static int indicator_icon_list_free(Eina_List *list) +{ + Eina_List *l; + Eina_List *l_next; + Indicator_Icon_Object *data; + + retif(list == NULL, OK, "Empty List!"); + + EINA_LIST_FOREACH_SAFE(list, l, l_next, data) { + indicator_icon_object_free(data); + list = eina_list_remove_list(list, l); + if (eina_error_get()) + return FAIL; + } + eina_list_free(list); + list = NULL; + return eina_error_get(); +} + +int indicator_icon_all_list_free(void) +{ + int i = 0; + for(i=0;iname); + + if (obj->area == INDICATOR_ICON_AREA_FIXED) + { + fixed_icon_list[obj->win_type] = eina_list_remove(fixed_icon_list[obj->win_type], obj); + + EINA_LIST_REVERSE_FOREACH(fixed_icon_list[obj->win_type], l, data) { + if (data->priority == obj->priority + &&data->always_top == EINA_TRUE) + continue; + + if (data->priority <= obj->priority) { + fixed_icon_list[obj->win_type] = eina_list_append_relative_list( + fixed_icon_list[obj->win_type], obj, l); + return eina_error_get(); + } + } + + fixed_icon_list[obj->win_type] = eina_list_prepend(fixed_icon_list[obj->win_type], obj); + } + else if(obj->area == INDICATOR_ICON_AREA_SYSTEM) + { + system_icon_list[obj->win_type] = eina_list_remove(system_icon_list[obj->win_type], obj); + + EINA_LIST_REVERSE_FOREACH(system_icon_list[obj->win_type], l, data) { + if (data->priority == obj->priority + &&data->always_top == EINA_TRUE) { + continue; + } + if (data->priority <= obj->priority) { + system_icon_list[obj->win_type] = + eina_list_append_relative_list( + system_icon_list[obj->win_type], obj, l); + return eina_error_get(); + } + } + + system_icon_list[obj->win_type] = eina_list_prepend(system_icon_list[obj->win_type], obj); + } + else + { + noti_icon_list[obj->win_type] = eina_list_remove(noti_icon_list[obj->win_type], obj); + + EINA_LIST_REVERSE_FOREACH(noti_icon_list[obj->win_type], l, data) { + if (data->priority == obj->priority + &&data->always_top == EINA_TRUE) { + continue; + } + if (data->priority >= obj->priority) { + noti_icon_list[obj->win_type] = + eina_list_append_relative_list( + noti_icon_list[obj->win_type], obj, l); + return eina_error_get(); + } + } + + noti_icon_list[obj->win_type] = eina_list_prepend(noti_icon_list[obj->win_type], obj); + } + + return eina_error_get(); +} + +int indicator_icon_list_insert(Indicator_Icon_Object *obj) +{ + Eina_List *l; + Indicator_Icon_Object *data; + + retif(obj == NULL || obj->name == NULL, FAIL, "Invalid parameter!"); + + DBG("%s!",obj->name); + + if (obj->area == INDICATOR_ICON_AREA_FIXED) + { + EINA_LIST_REVERSE_FOREACH(fixed_icon_list[obj->win_type], l, data) { + retif(data->name == obj->name, FAIL, + "%s is already exist in the list!", obj->name); + } + + obj->wish_to_show = EINA_FALSE; + + EINA_LIST_REVERSE_FOREACH(fixed_icon_list[obj->win_type], l, data) { + if (data->priority == obj->priority + && data->always_top == EINA_TRUE) + continue; + + if (data->priority <= obj->priority) { + fixed_icon_list[obj->win_type] = eina_list_append_relative_list( + fixed_icon_list[obj->win_type], obj, l); + return eina_error_get(); + } + } + fixed_icon_list[obj->win_type] = eina_list_prepend(fixed_icon_list[obj->win_type], obj); + } + else if(obj->area == INDICATOR_ICON_AREA_SYSTEM) + { + EINA_LIST_REVERSE_FOREACH(system_icon_list[obj->win_type], l, data) { + retif(data->name == obj->name, FAIL, + "%s is already exist in the list!", obj->name); + } + + obj->wish_to_show = EINA_FALSE; + + EINA_LIST_REVERSE_FOREACH(system_icon_list[obj->win_type], l, data) { + if (data->priority == obj->priority && + data->always_top == EINA_TRUE) + continue; + + if (data->priority <= obj->priority) { + system_icon_list[obj->win_type] = + eina_list_append_relative_list( + system_icon_list[obj->win_type], obj, l); + return eina_error_get(); + } + } + + system_icon_list[obj->win_type] = eina_list_prepend(system_icon_list[obj->win_type], obj); + } + else + { + EINA_LIST_REVERSE_FOREACH(noti_icon_list[obj->win_type], l, data) { + retif(data->name == obj->name, FAIL, + "%s is already exist in the list!", obj->name); + } + + obj->wish_to_show = EINA_FALSE; + + EINA_LIST_REVERSE_FOREACH(noti_icon_list[obj->win_type], l, data) { + if (data->priority == obj->priority && + data->always_top == EINA_TRUE) + continue; + + if (data->priority >= obj->priority) { + noti_icon_list[obj->win_type] = + eina_list_append_relative_list( + noti_icon_list[obj->win_type], obj, l); + DBG("Append"); + return eina_error_get(); + } + } + noti_icon_list[obj->win_type] = eina_list_prepend(noti_icon_list[obj->win_type], obj); + DBG("Prepend"); + } + + return eina_error_get(); +} + +int indicator_icon_list_remove(Indicator_Icon_Object *obj) +{ + DBG("%s!",obj->name); + + if (obj->area == INDICATOR_ICON_AREA_FIXED) + { + retif(fixed_icon_list[obj->win_type] == NULL + || obj == NULL, FAIL, "Invalid parameter!"); + fixed_icon_list[obj->win_type] = eina_list_remove(fixed_icon_list[obj->win_type], obj); + } + else if(obj->area == INDICATOR_ICON_AREA_SYSTEM) + { + retif(system_icon_list[obj->win_type] == NULL + || obj == NULL, FAIL, "Invalid parameter!"); + system_icon_list[obj->win_type] = eina_list_remove(system_icon_list[obj->win_type], obj); + } + else + { + retif(noti_icon_list[obj->win_type] == NULL + || obj == NULL, FAIL, "Invalid parameter!"); + noti_icon_list[obj->win_type] = eina_list_remove(noti_icon_list[obj->win_type], obj); + } + + return eina_error_get(); +} + +Indicator_Icon_Object +*indicator_get_wish_to_show_icon(int win_type, int area, int priority) +{ + Eina_List *l; + Indicator_Icon_Object *data = NULL; + Indicator_Icon_Object *ret = NULL; + + if (area == INDICATOR_ICON_AREA_FIXED) + { + EINA_LIST_REVERSE_FOREACH(fixed_icon_list[win_type], l, data) { + if (data->priority == priority + && data->wish_to_show == EINA_TRUE + && data->exist_in_view == EINA_FALSE) + { + ret = data; + break; + } + } + + } + else if(area == INDICATOR_ICON_AREA_SYSTEM) + { + EINA_LIST_REVERSE_FOREACH(system_icon_list[win_type], l, data) { + if (data->wish_to_show == EINA_TRUE + && data->exist_in_view == EINA_FALSE) + { + ret = data; + break; + } + } + + } + else + { + EINA_LIST_REVERSE_FOREACH(noti_icon_list[win_type], l, data) { + if (data->wish_to_show == EINA_TRUE + && data->exist_in_view == EINA_FALSE) + { + ret = data; + break; + } + } + + } + + if(ret != NULL) + DBG("%d,%s",area, ret->name); + else + ret = NULL; + + return ret; +} + +Indicator_Icon_Object +*indicator_get_wish_to_remove_icon(int win_type, int area, int priority) +{ + Eina_List *l; + Indicator_Icon_Object *data = NULL; + Indicator_Icon_Object *ret = NULL; + + if (area == INDICATOR_ICON_AREA_FIXED) + { + EINA_LIST_REVERSE_FOREACH(fixed_icon_list[win_type], l, data) { + if (data->priority == priority + && data->wish_to_show == EINA_TRUE) + { + ret = data; + break; + } + } + } + else if (area == INDICATOR_ICON_AREA_SYSTEM) + { + EINA_LIST_FOREACH(system_icon_list[win_type], l, data) { + if (data->wish_to_show == EINA_TRUE + && data->always_top == EINA_FALSE + && data->exist_in_view == EINA_TRUE) + { + ret = data; + break; + } + } + } + else + { + EINA_LIST_FOREACH(noti_icon_list[win_type], l, data) { + if (data->wish_to_show == EINA_TRUE + && data->always_top == EINA_FALSE + && data->exist_in_view == EINA_TRUE) + { + ret = data; + break; + } + } + } + + + return ret; +} + diff --git a/daemon/indicator_icon_list.h b/daemon/indicator_icon_list.h new file mode 100755 index 0000000..8179098 --- /dev/null +++ b/daemon/indicator_icon_list.h @@ -0,0 +1,33 @@ +/* + * Copyright 2012 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. + */ + + +#ifndef __INDICATOR_ICON_LIST_H__ +#define __INDICATOR_ICON_LIST_H__ + +#include "indicator.h" +extern void indicator_icon_object_free(Indicator_Icon_Object *icon); +extern int indicator_icon_all_list_free(void); +extern int indicator_icon_list_insert(Indicator_Icon_Object *obj); +extern int indicator_icon_list_remove(Indicator_Icon_Object *obj); +extern int indicator_icon_list_update(Indicator_Icon_Object *obj); +extern Indicator_Icon_Object +*indicator_get_wish_to_show_icon(int win_type, int area, int priority); +extern Indicator_Icon_Object +*indicator_get_wish_to_remove_icon(int win_type, int area, int priority); +extern Indicator_Icon_Object +*indicator_get_lowest_priority_icon_in_non_fixed_list(int area); +#endif /*__INDICATOR_ICON_LIST_H__*/ diff --git a/daemon/indicator_icon_util.c b/daemon/indicator_icon_util.c new file mode 100755 index 0000000..f9fa7a4 --- /dev/null +++ b/daemon/indicator_icon_util.c @@ -0,0 +1,643 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include +#include "common.h" +#include "indicator_box_util.h" +#include "indicator_icon_util.h" +#include "indicator_icon_list.h" +#include "indicator_ui.h" +#include "indicator_gui.h" +#include "indicator_util.h" + +static unsigned int update_icon_flag = 1; + +static void _animation_set(Indicator_Icon_Object *icon, int type) +{ + Evas_Object *img_edje, *txt_edje; + + retif(icon == NULL, , "Invalid parameter!"); + + const char *BLINK_SIGNAL = "icon,state,blink"; + const char *ROATATE_SIGNAL = "icon,state,roate"; + const char *METRONOME_SIGNAL = "icon,state,metronome"; + const char *DEFAULT = "icon,state,default"; + + const char *send_signal = DEFAULT; + + switch (type) { + case ICON_ANI_BLINK: + send_signal = BLINK_SIGNAL; + break; + case ICON_ANI_ROTATE: + send_signal = ROATATE_SIGNAL; + break; + case ICON_ANI_METRONOME: + send_signal = METRONOME_SIGNAL; + break; + case ICON_ANI_DOWNLOADING: + send_signal = "indicator.ani.downloading.start"; + img_edje = elm_layout_edje_get(icon->img_obj.obj); + edje_object_signal_emit(img_edje, "indicator.ani.downloading.stop","elm.swallow.icon"); + break; + case ICON_ANI_UPLOADING: + send_signal = "indicator.ani.uploading.start"; + img_edje = elm_layout_edje_get(icon->img_obj.obj); + edje_object_signal_emit(img_edje, "indicator.ani.uploading.stop","elm.swallow.icon"); + break; + default: + break; + } + + switch (icon->type) { + case INDICATOR_IMG_ICON: + img_edje = elm_layout_edje_get(icon->img_obj.obj); + edje_object_signal_emit(img_edje, send_signal,"elm.swallow.icon"); + DBG("%x,%s,%s",img_edje,send_signal,icon->name); + break; + case INDICATOR_TXT_ICON: + txt_edje = elm_layout_edje_get(icon->txt_obj.obj); + edje_object_signal_emit(txt_edje, send_signal, + "elm.swallow.icon"); + break; + case INDICATOR_TXT_WITH_IMG_ICON: + txt_edje = elm_layout_edje_get(icon->txt_obj.obj); + img_edje = elm_layout_edje_get(icon->img_obj.obj); + edje_object_signal_emit(txt_edje, send_signal, + "elm.swallow.lefticon"); + edje_object_signal_emit(img_edje, send_signal, + "elm.swallow.righticon"); + break; + default: + break; + } +} + +void indicator_util_icon_animation_set(Indicator_Icon_Object *icon, + enum indicator_icon_ani type) +{ + retif(icon == NULL, , "Invalid parameter!"); + + icon->ani = type; + if (icon->obj_exist) + { + _animation_set(icon, type); + } +} + +static Evas_Object *_img_icon_add(win_info *win, Indicator_Icon_Object *icon) +{ + struct appdata *ad = NULL; + char path[PATH_MAX]; + Evas_Object *evas_icon; + Evas_Object *ly; + int area = 0; + char *imgpath = NULL; + int width = 0; + int height = 0; + int bAni = 0; + + retif(icon == NULL , NULL, "Invalid parameter!"); + retif(icon->ad == NULL || icon->img_obj.data == NULL, NULL, "Invalid parameter!"); + retif(win == NULL || win->layout_main == NULL, NULL, "Invalid parameter!"); + + ad = icon->ad; + area = icon->area; + imgpath = icon->img_obj.data; + + if (icon->img_obj.width <= 0) + width = icon->img_obj.width = DEFAULT_ICON_WIDTH; + if (icon->img_obj.height<= 0) + height = icon->img_obj.height = DEFAULT_ICON_HEIGHT; + + memset(path, 0x00, sizeof(path)); + + ly = elm_layout_add(win->layout_main); + retif(ly == NULL, NULL, "Cannot create layout object!"); + + if (area == INDICATOR_ICON_AREA_FIXED) + { + elm_layout_file_set(ly, ICON_THEME_FILE,"elm/indicator/icon/base"); + DBG("fixed %s %s",icon->name,imgpath); + } + else + { + if(indicator_util_check_noti_ani(imgpath)) + { + bAni = 1; + DBG("ani %s %s",icon->name,imgpath); + elm_layout_file_set(ly, ICON_NONFIXED_THEME_ANI_FILE,"elm/indicator/icon/base"); + } + else + { + DBG("non fixed %s %s",icon->name,imgpath); + elm_layout_file_set(ly, ICON_NONFIXED_THEME_FILE,"elm/indicator/icon/base"); + } + } + + evas_icon = elm_image_add(ly); + retif(evas_icon == NULL, NULL, "Cannot create elm icon object!"); + + if(!bAni) + { + if (strncmp(imgpath, "/", 1) != 0) { + snprintf(path, sizeof(path), "%s/%s", get_icon_dir(), imgpath); + } else { + strncpy(path,imgpath,sizeof(path)-1); + } + + if (!ecore_file_exists(path)) + { + ERR("icon file does not exist!!: %s",path); + } + elm_image_file_set(evas_icon, path, NULL); + } + + evas_object_size_hint_min_set(evas_icon, width * elm_config_scale_get(), + height * elm_config_scale_get()); + + elm_object_part_content_set(ly, "elm.swallow.icon", evas_icon); + + evas_object_data_set(ly, "imgicon", evas_icon); + evas_object_size_hint_min_set(ly, width * elm_config_scale_get(), + height * elm_config_scale_get()); + evas_object_hide(ly); + + return ly; +} + +static Evas_Object *_txt_icon_add(win_info *win, Indicator_Icon_Object *icon) +{ + struct appdata *ad = NULL; + char *color_added_str = NULL; + Evas_Object *evas_icon; + Evas_Object *ly; + char *txt = NULL; + + retif(icon == NULL , NULL, "Invalid parameter!"); + retif(icon->ad == NULL || icon->txt_obj.data == NULL, NULL, "Invalid parameter!"); + retif(win == NULL || win->layout_main == NULL, NULL, "Invalid parameter!"); + + ad = icon->ad; + txt = icon->txt_obj.data; + + ly = elm_layout_add(win->layout_main); + elm_layout_file_set(ly, ICON_THEME_FILE, "elm/indicator/icon/base"); + + evas_icon = elm_label_add(ly); + color_added_str = (char *)set_label_text_color(txt); + + elm_object_text_set(evas_icon, color_added_str); + evas_object_size_hint_align_set(evas_icon, 0.5, 0.5); + + elm_object_part_content_set(ly, "elm.swallow.icon", evas_icon); + + evas_object_data_set(ly, "txticon", evas_icon); + evas_object_hide(ly); + + return ly; +} + +char *indicator_util_icon_label_set(const char *buf, char *font_name, + char *font_style, int font_size, void *data) +{ + Eina_Strbuf *temp_buf = NULL; + char *ret_str = NULL; + char *label_font = ICON_FONT_NAME; + char *label_font_style = ICON_FONT_STYLE; + int label_font_size = ICON_FONT_SIZE; + Eina_Bool buf_result = EINA_FALSE; + + retif(data == NULL || buf == NULL, NULL, "Invalid parameter!"); + + temp_buf = eina_strbuf_new(); + if (font_name != NULL) + label_font = font_name; + if (font_style != NULL) + label_font_style = font_style; + if (font_size > 0) + label_font_size = font_size; + + buf_result = eina_strbuf_append_printf(temp_buf, CUSTOM_LABEL_STRING, + label_font, label_font_style, + label_font_size, buf); + + if (buf_result != EINA_FALSE) + ret_str = eina_strbuf_string_steal(temp_buf); + + eina_strbuf_free(temp_buf); + + return ret_str; +} + +Eina_Bool indicator_util_icon_add(win_info *win, Indicator_Icon_Object *icon) +{ + retif(icon == NULL, EINA_FALSE, "Invalid parameter!"); + + switch (icon->type) { + case INDICATOR_TXT_ICON: + icon->txt_obj.obj = _txt_icon_add(win, icon); + break; + case INDICATOR_IMG_ICON: + icon->img_obj.obj = _img_icon_add(win, icon); + break; + case INDICATOR_TXT_WITH_IMG_ICON: + icon->txt_obj.obj = _txt_icon_add(win, icon); + icon->img_obj.obj = _img_icon_add(win, icon); + break; + + default: + ERR("Icon type check error!"); + return EINA_FALSE; + } + return EINA_TRUE; +} + +Eina_Bool indicator_util_icon_del(Indicator_Icon_Object *icon) +{ + Evas_Object *icon_obj; + retif(icon == NULL, EINA_FALSE, "Invalid parameter!"); + + if (icon->obj_exist != EINA_FALSE) { + if (icon->txt_obj.obj) { + icon_obj = + evas_object_data_get(icon->txt_obj.obj, "txticon"); + evas_object_del(icon_obj); + evas_object_del(icon->txt_obj.obj); + icon->txt_obj.obj = NULL; + } + if (icon->img_obj.obj) { + icon_obj = + evas_object_data_get(icon->img_obj.obj, "imgicon"); + evas_object_del(icon_obj); + evas_object_del(icon->img_obj.obj); + icon->img_obj.obj = NULL; + } + } + return EINA_TRUE; +} + + +static int show_other_icon_in_same_priority(Indicator_Icon_Object *icon) +{ + Indicator_Icon_Object *wish_add_icon; + int area = icon->area; + retif(icon == NULL, FAIL, "Invalid parameter!"); + + wish_add_icon = indicator_get_wish_to_show_icon(icon->win_type, icon->area,icon->priority); + if (wish_add_icon == NULL) + { + DBG("wish_add_icon NULL!"); + return OK; + } + + if (indicator_util_is_show_icon(wish_add_icon)) + { + DBG("Wish Icon is alreay shown!"); + return OK; + } + + if(wish_add_icon!=NULL) + { + DBG("%s icon is shown!", wish_add_icon->name); + } + + if(area ==INDICATOR_ICON_AREA_NOTI) + { + icon_box_pack_append(wish_add_icon); + } + else + { + icon_box_pack(wish_add_icon); + } + + return OK; +} + +static int hide_other_icons_in_view_list(Indicator_Icon_Object *icon) +{ + Indicator_Icon_Object *wish_remove_icon = NULL; + retif(icon == NULL, FAIL, "Invalid parameter!"); + + if (INDICATOR_ICON_AREA_SYSTEM == icon->area || INDICATOR_ICON_AREA_NOTI == icon->area) + { + Icon_AddType ret; + Eina_Error err; + + ret = indicator_is_enable_to_insert_in_non_fixed_list(icon); + icon->wish_to_show = EINA_TRUE; + err = indicator_icon_list_update(icon); + + switch (ret) { + case CAN_ADD_WITH_DEL_NOTI: + wish_remove_icon = indicator_get_wish_to_remove_icon(icon->win_type, INDICATOR_ICON_AREA_NOTI,0); + + icon_box_unpack(wish_remove_icon); + + retif(wish_remove_icon == NULL, FAIL, "Unexpected Error : CAN_ADD_WITH_DEL_NOTI"); + break; + case CAN_ADD_WITH_DEL_SYSTEM: + wish_remove_icon = indicator_get_wish_to_remove_icon(icon->win_type, INDICATOR_ICON_AREA_SYSTEM,0); + + icon_box_unpack(wish_remove_icon); + retif(wish_remove_icon == NULL, FAIL, "Unexpected Error : CAN_ADD_WITH_DEL_SYSTEM"); + break; + case CAN_ADD_WITHOUT_DEL: + break; + case CANNOT_ADD: + DBG("[ICON UTIL SYSTEM] %s icon CANNOT_ADD!",icon->name); + return FAIL; + break; + } + + return OK; + } + else if (INDICATOR_ICON_AREA_FIXED == icon->area) + { + wish_remove_icon = indicator_get_wish_to_remove_icon(icon->win_type, INDICATOR_ICON_AREA_FIXED,icon->priority); + + if (wish_remove_icon == NULL) + { + DBG("[ICON UTIL FIXED] NULL!"); + return OK; + } + + if (wish_remove_icon == icon) + { + return FAIL; + } + + icon->wish_to_show = EINA_TRUE; + indicator_icon_list_update(icon); + + if (wish_remove_icon->always_top) + { + DBG("[ICON UTIL FIXED] %s!", wish_remove_icon->name); + return FAIL; + } + + DBG("[ICON UTIL FIXED] %s icon is hidden!", + wish_remove_icon->name); + icon_box_unpack(wish_remove_icon); + } + return OK; +} + +int indicator_util_layout_del(win_info *win) +{ + return icon_box_fini(win); +} + +int indicator_util_layout_add(win_info *win) +{ + retif(win == NULL + || win->layout_main == NULL, FAIL, "Invalid parameter!"); + indicator_util_layout_del(win); + return icon_box_init(win); +} + + +int indicator_util_icon_width_set(Indicator_Icon_Object *icon) +{ + return 0; +} + +static int _icon_update(Indicator_Icon_Object *icon) +{ + struct appdata *ad = NULL; + Evas_Object *txt_eo, *img_eo; + char buf[PATH_MAX]; + + retif(icon == NULL || icon->ad == NULL, FAIL, "Invalid parameter!"); + ad = icon->ad; + + memset(buf, 0x00, sizeof(buf)); + + if (icon->type == INDICATOR_IMG_ICON + || icon->type == INDICATOR_TXT_WITH_IMG_ICON) + { + if (icon->priority== INDICATOR_ICON_AREA_FIXED) + { + elm_layout_file_set(icon->img_obj.obj, ICON_THEME_FILE,"elm/indicator/icon/base"); + } + else + { + if(indicator_util_check_noti_ani(icon->img_obj.data)) + { + elm_layout_file_set(icon->img_obj.obj, ICON_NONFIXED_THEME_ANI_FILE,"elm/indicator/icon/base"); + } + else + { + elm_layout_file_set(icon->img_obj.obj, ICON_NONFIXED_THEME_FILE,"elm/indicator/icon/base"); + } + } + + img_eo = evas_object_data_get(icon->img_obj.obj, "imgicon"); + + indicator_util_start_noti_ani(icon); + + if (strncmp(icon->img_obj.data, "/", 1) != 0) + { + snprintf(buf, sizeof(buf), "%s/%s", get_icon_dir(),icon->img_obj.data); + elm_image_file_set(img_eo, buf, NULL); + } + else + { + retif(icon->img_obj.data[0] == '\0', FAIL,"Invalid parameter!"); + elm_image_file_set(img_eo, icon->img_obj.data, NULL); + } + + if (icon->img_obj.width >= 0 && icon->img_obj.height>=0) + { + evas_object_size_hint_min_set(img_eo, + icon->img_obj.width * elm_config_scale_get(), + icon->img_obj.height * elm_config_scale_get()); + } + else + { + evas_object_size_hint_min_set(img_eo, + DEFAULT_ICON_WIDTH * elm_config_scale_get(), + DEFAULT_ICON_HEIGHT * elm_config_scale_get()); + } + } + + if (icon->type == INDICATOR_TXT_ICON + || icon->type == INDICATOR_TXT_WITH_IMG_ICON) { + char *color_added_str = NULL; + txt_eo = evas_object_data_get(icon->txt_obj.obj, "txticon"); + color_added_str = + (char *)set_label_text_color(icon->txt_obj.data); + elm_object_text_set(txt_eo, color_added_str); + free(color_added_str); + } + return OK; +} + +void indicator_util_icon_show(Indicator_Icon_Object *icon) +{ + struct appdata *ad = (struct appdata *)icon->ad; + + retif(icon == NULL, , "Invalid parameter!"); + + if (icon->obj_exist != EINA_FALSE) + { + if(icon->priority==INDICATOR_PRIORITY_NOTI_2) + { + icon_box_unpack(icon); + icon_box_pack(icon); + indicator_util_update_display(&(ad->win[icon->win_type])); + } + else + _icon_update(icon); + } + + if (hide_other_icons_in_view_list(icon) == FAIL) + { + return; + } + + icon->wish_to_show = EINA_TRUE; + DBG("[ICON UTIL] %s %d icon is shown!", icon->name, icon->win_type); + + icon_box_pack(icon); + + indicator_util_update_display(&(ad->win[icon->win_type])); +} + +void indicator_util_icon_hide(Indicator_Icon_Object *icon) +{ + int ret; + + retif(icon == NULL, , "Invalid parameter!"); + + icon->wish_to_show = EINA_FALSE; + + DBG("%s icon is hidden!", icon->name); + + if (icon->exist_in_view == EINA_TRUE) { + ret = icon_box_unpack(icon); + + if (ret == FAIL) + ERR("Failed to unpack %s!", icon->name); + + show_other_icon_in_same_priority(icon); + + struct appdata *ad = (struct appdata *)icon->ad; + + indicator_util_update_display(&(ad->win[icon->win_type])); + + } + +} + +void indicator_util_event_count_set(int count, void *data) +{ + static int _cnt = -1; + char buf[1024]; + + retif(data == NULL, , "Cannot get layout!"); + + if (_cnt != count) { + memset(buf, 0x00, sizeof(buf)); + if (count) { + snprintf(buf, sizeof(buf), "%d", count); + indicator_signal_emit(data,"badge,show,1","elm.image.badge"); + } else { + indicator_signal_emit(data,"badge,hide,1","elm.image.badge"); + } + + indicator_part_text_emit(data,"elm.text.badge", buf); + _cnt = count; + } +} + +unsigned int indicator_util_max_visible_event_count(int type) +{ + return indicator_get_max_count_in_non_fixed_list(type); +} + +unsigned int indicator_util_get_update_flag(void) +{ + return update_icon_flag; +} + +void indicator_util_set_update_flag(unsigned int val) +{ + INFO("SET UPDATE FLAG %d",val); + update_icon_flag = val; +} + +void indicator_util_reset_icon_list(int type) +{ + win_info* win = NULL; + struct appdata *ad = NULL; + + int noti_cnt = indicator_get_count_in_noti_list(type); + + DBG("%d %d",noti_cnt,indicator_get_noti_list_index_count(type)); + + if (noti_cnt>indicator_get_noti_list_index_count(type)) + { + while(noti_cnt>indicator_get_noti_list_index_count(type)) + { + Indicator_Icon_Object *wish_remove_icon = NULL; + wish_remove_icon = indicator_get_wish_to_remove_icon(type, INDICATOR_ICON_AREA_NOTI,0); + + if (wish_remove_icon == NULL) + { + // DBG("indicator_util_reset_icon_list NULL!"); + goto __CATCH; + } + + icon_box_unpack(wish_remove_icon); + ad = (struct appdata *)wish_remove_icon->ad; + noti_cnt = indicator_get_count_in_noti_list(type); + DBG("remove %s %d",wish_remove_icon->name,noti_cnt); + } + } + else + { + while(noti_cnt<=indicator_get_noti_list_index_count(type)) + { + Indicator_Icon_Object *wish_add_icon = NULL; + wish_add_icon = indicator_get_wish_to_show_icon(type, INDICATOR_ICON_AREA_NOTI,0); + if (wish_add_icon == NULL) + { + DBG("wish_add_icon NULL!"); + goto __CATCH; + } + + if (indicator_util_is_show_icon(wish_add_icon)) + { + DBG("Wish Icon is alreay shown!"); + goto __CATCH; + } + + icon_box_pack_append(wish_add_icon); + ad = (struct appdata *)wish_add_icon->ad; + noti_cnt = indicator_get_count_in_noti_list(type); + DBG("insert %s %d",wish_add_icon->name,noti_cnt); + } + } + +__CATCH: + if(ad!=NULL) + win = &(ad->win[type]); + + if(win!=NULL) + indicator_util_update_display(win); +} diff --git a/daemon/indicator_icon_util.h b/daemon/indicator_icon_util.h new file mode 100755 index 0000000..6e9878f --- /dev/null +++ b/daemon/indicator_icon_util.h @@ -0,0 +1,55 @@ +/* + * Copyright 2012 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. + */ + +#ifndef __INDICATOR_ICON_UTIL_H__ +#define __INDICATOR_ICON_UTIL_H__ + +#include +#include "indicator.h" +#include "indicator_ui.h" + +enum { + ICON_STATE_HIDDEN = 0, + ICON_STATE_SHOWN +}; + +enum indicator_view_mode { + INDICATOR_KEEP_VIEW = -1, + INDICATOR_FULL_VIEW, + INDICATOR_CLOCK_VIEW +}; + +extern int indicator_util_layout_add(win_info *win); +extern int indicator_util_layout_del(win_info *win); + +extern void indicator_util_icon_show(Indicator_Icon_Object *obj); +extern void indicator_util_icon_hide(Indicator_Icon_Object *obj); +extern void indicator_util_icon_animation_set(Indicator_Icon_Object *icon, + enum indicator_icon_ani type); +extern int indicator_util_icon_width_set(Indicator_Icon_Object *icon); +extern char *indicator_util_icon_label_set(const char *buf, char *font_name, + char *font_style, int font_size, + void *data); +extern Eina_Bool indicator_util_icon_add(win_info *win,Indicator_Icon_Object *icon); +extern Eina_Bool indicator_util_icon_del(Indicator_Icon_Object *icon); + +extern void indicator_util_event_count_set(int count, void *data); +extern unsigned int indicator_util_max_visible_event_count(int type); +extern unsigned int indicator_util_get_update_flag(void); +void indicator_util_set_update_flag(unsigned int val); +void indicator_util_reset_icon_list(int type); + +#endif /*__INDICATOR_ICON_UTIL_H__*/ diff --git a/daemon/indicator_ui.c b/daemon/indicator_ui.c new file mode 100755 index 0000000..0d5d7b0 --- /dev/null +++ b/daemon/indicator_ui.c @@ -0,0 +1,1461 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common.h" +#include "indicator_box_util.h" +#include "indicator_icon_util.h" +#include "indicator_ui.h" +#include "indicator_gui.h" +#include "modules.h" +#include "indicator_util.h" +#include "message.h" + +#define GRP_MAIN "indicator" + +#define WIN_TITLE "Illume Indicator" + +#define VCONF_PHONE_STATUS "memory/startapps/sequence" + +#define UNLOCK_ENABLED 0 +#define TIMEOUT 5 + +#ifdef HOME_KEY_EMULATION + +#define PROP_HWKEY_EMULATION "_HWKEY_EMULATION" +#define KEY_MSG_PREFIX_PRESS "P:" +#define KEY_MSG_PREFIX_RELEASE "R:" +#define KEY_MSG_PREFIX_PRESS_C "PC" +#define KEY_MSG_PREFIX_RELEASE_C "RC" + +#ifndef KEY_HOME +#define KEY_HOME "XF86Phone" +#endif +#endif + + +static Eina_Bool home_button_pressed = EINA_FALSE; +static Eina_Bool show_hide_pressed[INDICATOR_WIN_MAX] = {EINA_FALSE,EINA_FALSE}; +static Ecore_Timer *hide_timer = NULL; + +int indicator_icon_show_state[INDICATOR_WIN_MAX] = {0,}; +int indicator_icon_backup_state[INDICATOR_WIN_MAX] = {0,}; + +static int is_quickpanel_opened = 0; +int is_transparent = 0; +int current_angle = 0; +int current_state = 0; +static int bFirst_state = 1; +static int bFirst_opacity = 1; +static int bFirst_rotate = 1; +static int need_to_hide = 0; +Evas_Coord_Point indicator_press_coord = {0,0}; + +#define STR_ATOM_MV_INDICATOR_GEOMETRY "_E_MOVE_INDICATOR_GEOMETRY" + +static void _change_home_padding(void *data, int angle); +static void _change_nonfixed_icon_padding(void *data, Eina_Bool status); +static void _change_max_nonfixed_icon_count(void *data, + Eina_Bool status, int angle); +static Eina_Bool _change_view(Ecore_X_Window win, void *data); + +static int indicator_window_new(void *data); +static int indicator_window_del(void *data); + +static void _indicator_check_battery_percent_on_cb(keynode_t *node, void *data); +static void _indicator_low_bat_cb(void *data); +static void _indicator_lang_changed_cb(void *data); +static void _indicator_region_changed_cb(void *data); +static void _indicator_window_delete_cb(void *data, Evas_Object * obj, + void *event); +static Eina_Bool _indicator_client_message_cb(void *data, int type, + void *event); +static void _indicator_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, + void *event); +static void _indicator_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, + void *event); +static void _indicator_mouse_up_cb(void *data, Evas * e, Evas_Object * obj, + void *event); + + + +static void _change_nonfixed_icon_padding(void *data, Eina_Bool status) +{ + retif(data == NULL, , "Invalid parameter!"); + + if (status == EINA_TRUE) + indicator_signal_emit(data, "change,padding,1", "elm.rect.*"); + else + indicator_signal_emit(data, "change,padding,2", "elm.rect.*"); +} + + +static void _change_max_nonfixed_icon_count(void *data, + Eina_Bool status, int angle) +{ + struct appdata *ad = (struct appdata *)data; + + retif(data == NULL, , "Invalid parameter!"); + + DBG("Current angle : %d", ad->angle); + + indicator_set_count_in_non_fixed_list(ad->angle, status); +} + +static void _change_top_win(enum _win_type type, void *data) +{ + struct appdata *ad = data; + int i = 0; + retif(data == NULL, , "Invalid parameter!"); + + DBG("Current Top Window : %d", type); + ad->top_win = type; + for(i=0;iwin[i])); + } +} + +static char *_get_top_window_name(void *data) +{ + Ecore_X_Window topwin = ecore_x_window_root_first_get(); + Ecore_X_Window active; + static Eina_Strbuf *temp_buf = NULL; + + char *pkgname = NULL; + char *win_name = NULL; + char *ret_name = NULL; + + int pid; + + retif(data == NULL, NULL, "Invalid parameter!"); + + if (ecore_x_window_prop_xid_get(topwin, ECORE_X_ATOM_NET_ACTIVE_WINDOW, + ECORE_X_ATOM_WINDOW, &active, + 1) == FAIL) + return NULL; + + if (ecore_x_netwm_pid_get(active, &pid) == EINA_FALSE) { + Ecore_X_Atom atom; + unsigned char *in_pid; + int num; + + atom = ecore_x_atom_get("X_CLIENT_PID"); + if (ecore_x_window_prop_property_get(topwin, + atom, ECORE_X_ATOM_CARDINAL, + sizeof(int), &in_pid, &num) == EINA_FALSE) { + DBG("Failed to get PID from a window 0x%X", topwin); + + if(in_pid != NULL) + free(in_pid); + + return NULL; + } + pid = *(int *)in_pid; + free(in_pid); + } + + DBG("Window (0x%X) PID is %d", topwin, pid); + + if (app_manager_get_package(pid,&pkgname) != APP_MANAGER_ERROR_NONE) + { + if (ecore_x_netwm_name_get(active, &win_name) == EINA_FALSE) + return NULL; + else + return win_name; + } + + DBG("Pkgname : %s", pkgname); + + temp_buf = eina_strbuf_new(); + eina_strbuf_append_printf(temp_buf, "%s", pkgname); + ret_name = eina_strbuf_string_steal(temp_buf); + eina_strbuf_free(temp_buf); + + if(pkgname != NULL) + free(pkgname); + + return ret_name; +} + +static Eina_Bool _change_view(Ecore_X_Window win, void *data) +{ + char *top_win_name = NULL; + enum _win_type type; + + if (data == NULL) + return EINA_FALSE; + + top_win_name = _get_top_window_name(data); + + if (top_win_name != NULL) { + Eina_Bool ret = EINA_TRUE; + + INFO("TOP WINDOW NAME = %s", top_win_name); + + if (!strncmp(top_win_name, QUICKPANEL_NAME, + strlen(top_win_name))) { + type = TOP_WIN_QUICKPANEL; + ret = EINA_FALSE; + } else if (!strncmp(top_win_name, HOME_SCREEN_NAME, + strlen(top_win_name))) + type = TOP_WIN_HOME_SCREEN; + else if (!strncmp(top_win_name, LOCK_SCREEN_NAME, + strlen(top_win_name))) + type = TOP_WIN_LOCK_SCREEN; + else if (!strncmp(top_win_name, MENU_SCREEN_NAME, + strlen(top_win_name))) + type = TOP_WIN_MENU_SCREEN; + else if (!strncmp(top_win_name, CALL_NAME, + strlen(top_win_name))) + type = TOP_WIN_CALL; + else if (!strncmp(top_win_name, VTCALL_NAME, + strlen(top_win_name))) + type = TOP_WIN_CALL; + else + type = TOP_WIN_NORMAL; + + free(top_win_name); + _change_top_win(type, data); + + return ret; + } else { + type = TOP_WIN_NORMAL; + } + _change_top_win(type, data); + return EINA_TRUE; +} + +static void _indicator_check_battery_percent_on_cb(keynode_t *node, void *data) +{ + struct appdata *ad = (struct appdata *)data; + int ret = FAIL; + int status = 0; + retif(data == NULL, , "Invalid parameter!"); + + ret = vconf_get_bool(VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL, &status); + + if (ret == OK) { + _change_nonfixed_icon_padding(data, status); + _change_max_nonfixed_icon_count(data, status, ad->angle); + } else + ERR("Fail to get vconfkey : %s", + VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL); +} + +static void _indicator_low_bat_cb(void *data) +{ + INFO("LOW_BATTERY!"); +} + +static void _indicator_lang_changed_cb(void *data) +{ + INFO("CHANGE LANGUAGE!"); + indicator_lang_changed_modules(data); +} + +static void _indicator_region_changed_cb(void *data) +{ + INFO("CHANGE REGION!"); + indicator_region_changed_modules(data); +} + +static void _indicator_window_delete_cb(void *data, Evas_Object * obj, + void *event) +{ + struct appdata *ad = (struct appdata *)data; + retif(data == NULL, , "Invalid parameter!"); + + indicator_window_del(ad); +} + +static void _indicator_notify_pm_state_cb(keynode_t * node, void *data) +{ + + int val = -1; + + if (data == NULL) { + ERR("lockd is NULL"); + return; + } + + if (vconf_get_int(VCONFKEY_PM_STATE, &val) < 0) { + ERR("Cannot get VCONFKEY_PM_STATE"); + return; + } + + DBG("PM state Notification!!(%d)",val); + + switch(val) + { + case VCONFKEY_PM_STATE_LCDOFF: + case VCONFKEY_PM_STATE_SLEEP: + indicator_util_set_update_flag(0); + indicator_util_noti_ani_handle(0); + break; + case VCONFKEY_PM_STATE_NORMAL: + indicator_util_set_update_flag(1); + indicator_util_noti_ani_handle(1); + indicator_wake_up_modules(data); + break; + case VCONFKEY_PM_STATE_LCDDIM: + default: + break; + } + +} + +static void _indicator_power_off_status_cb(keynode_t * node, void *data) +{ + + struct appdata *ad = (struct appdata *)data; + int val = -1; + + if (data == NULL) { + ERR("data is NULL"); + return; + } + + if (vconf_get_int(VCONFKEY_SYSMAN_POWER_OFF_STATUS, &val) < 0) { + ERR("Cannot get VCONFKEY_SYSMAN_POWER_OFF_STATUS"); + return; + } + + DBG("_indicator_power_off_status_cb!!(%d)",val); + + switch(val) + { + case VCONFKEY_SYSMAN_POWER_OFF_DIRECT: + case VCONFKEY_SYSMAN_POWER_OFF_RESTART: + DBG("_indicator_power_off_status_cb : Terminated..."); + app_efl_exit(); + break; + default: + break; + } + +} + +static void _indicator_lock_status_cb(keynode_t * node, void *data) +{ + static int lockstate = 0; + struct appdata *ad = (struct appdata *)data; + int val = -1; + + if (data == NULL) { + ERR("data is NULL"); + return; + } + + if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) { + return; + } + if(val == lockstate) + { + DBG("same state %d",val); + return; + } + lockstate = val; + + DBG("_indicator_lock_status_cb!!(%d)",val); + + switch(val) + { + case VCONFKEY_IDLE_UNLOCK: + indicator_signal_emit_by_win(&(ad->win[INDICATOR_WIN_PORT]),"indicator.lock.off", "indicator.prog"); + break; + case VCONFKEY_IDLE_LOCK: + indicator_signal_emit_by_win(&(ad->win[INDICATOR_WIN_PORT]),"indicator.lock.on", "indicator.prog"); + indicator_util_show_hide_icons(&(ad->win[INDICATOR_WIN_PORT]),1,0); + break; + default: + break; + } + +} + +static void _rotate_window(void *data, int new_angle) +{ + retif(data == NULL, , "Invalid parameter!"); + + struct appdata *ad = (struct appdata *)data; + + DBG("_rotate_window = %d",new_angle); + +} + +#ifdef INDICATOR_SUPPORT_OPACITY_MODE +static void _change_opacity(void *data, enum indicator_opacity_mode mode) +{ + struct appdata *ad = NULL; + const char *signal = NULL; + retif(data == NULL, , "Invalid parameter!"); + + ad = data; + + if(bFirst_opacity==1) + { + bFirst_opacity = 0; + } + + switch (mode) { + case INDICATOR_OPACITY_OPAQUE: + signal = "bg.opaque"; + ad->opacity_mode = mode; + break; + case INDICATOR_OPACITY_TRANSLUCENT: + signal = "bg.translucent"; + ad->opacity_mode = mode; + break; + case INDICATOR_OPACITY_TRANSPARENT: + signal = "bg.transparent"; + ad->opacity_mode = mode; + break; + default: + ERR("unknown mode : %d", mode); + signal = "bg.opaque"; + ad->opacity_mode = INDICATOR_OPACITY_OPAQUE; + break; + + } + + indicator_signal_emit_by_win(&(ad->win[INDICATOR_WIN_PORT]),signal, "indicator.prog"); + + DBG("send signal [%s] to indicator layout", signal); +} + +static void _indicator_quickpanel_changed(void *data, int is_open) +{ + struct appdata *ad = NULL; + int val = 0; + + retif(data == NULL, , "Invalid parameter!"); + + DBG("_indicator_quickpanel_changed %d %d\n", is_open, current_angle); + + ad = data; + +} +#endif + +static Eina_Bool _indicator_client_message_cb(void *data, int type, void *event) +{ + Ecore_X_Event_Client_Message *ev = + (Ecore_X_Event_Client_Message *) event; + struct appdata *ad = NULL; + ad = data; + + retif(data == NULL + || event == NULL, ECORE_CALLBACK_RENEW, "Invalid parameter!"); + + + if (ev->message_type == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE) { + if (ev->data.l[0] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON) + _indicator_quickpanel_changed(data, 1); + else if (ev->data.l[0] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF) + _indicator_quickpanel_changed(data, 0); + + } + + if (ev->message_type == ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE) + { + int new_angle = 0; + if(ev->win != ad->active_indi_win) + { + ERR("different window rotate"); + goto __CATCH; + } + new_angle = ev->data.l[0]; + DBG("rotate angle : %d",new_angle); + _rotate_window(data, new_angle); + } +__CATCH: + return ECORE_CALLBACK_RENEW; +} + +static Eina_Bool _active_indicator_handle(void* data,int type) +{ + int ret = 0; + int trans_mode = 0; + int angle = 0; + Ecore_X_Illume_Indicator_Opacity_Mode illume_opacity = 0; + Ecore_X_Illume_Indicator_State state = 0; + + retif(!data,EINA_FALSE , "data is NULL"); + + struct appdata *ad = (struct appdata *)data; + + state = ecore_x_e_illume_indicator_state_get(ad->active_indi_win); + + switch(type) + { + case 1://opacity + illume_opacity = ecore_x_e_illume_indicator_opacity_get(ad->active_indi_win); + + switch(illume_opacity) + { + case ECORE_X_ILLUME_INDICATOR_OPAQUE: + trans_mode = INDICATOR_OPACITY_OPAQUE; + break; + case ECORE_X_ILLUME_INDICATOR_TRANSLUCENT: + trans_mode = INDICATOR_OPACITY_TRANSLUCENT; + break; + case ECORE_X_ILLUME_INDICATOR_TRANSPARENT: + trans_mode = INDICATOR_OPACITY_TRANSPARENT; + break; + default: + trans_mode = INDICATOR_OPACITY_OPAQUE; + break; + } + DBG("Type : %d, opacity %d, active_win %x illume_opacity %d",type,trans_mode,ad->active_indi_win, illume_opacity); + _change_opacity(ad, trans_mode); + break; + + case 2://rotate + indicator_util_win_prop_angle_get(ad->active_indi_win,&angle); + DBG("Type : %d, angle %d, active_win %x",type,angle,ad->active_indi_win); + _rotate_window(data, angle); + break; + default : //donothing + break; + } + + return EINA_TRUE; + +} +static Eina_Bool _property_changed_cb(void *data, int type, void *event) +{ + Ecore_X_Event_Window_Property *ev = event; + struct appdata *ad = NULL; + int ret = 0; + + ad = data; + retif(!data,EINA_FALSE , "data is NULL"); + retif(!ev,EINA_FALSE, "EV is NULL"); + + if(ev->atom==ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE) + { + + } + else if(ev->atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE) + { + if(ev->win==ad->active_indi_win) + { + DBG("opacity : ev->atom %d, ad->active_indi_win %x",ev->atom,ad->active_indi_win); + _active_indicator_handle(data,1); + } + } + else if(ev->atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE) + { + + } + else if(ev->atom == ad->atom_active) + { + int ret = 0; + DBG("ev->atom %d, ad->atom_active %d",ev->atom,ad->atom_active); + + Ecore_X_Window active_win; + + ret = ecore_x_window_prop_window_get(elm_win_xwindow_get(ad->win_overlay), ad->atom_active, &(active_win), 1); + + if (ret == -1) + { + ERR("property get failed %d",ad->atom_active); + return EINA_FALSE; + } + + if(active_win!=ad->active_indi_win) + { + if(ad->active_indi_win!=-1) + { + ecore_x_window_unsniff(ad->active_indi_win); + DBG("UNSNIFF API %x",ad->active_indi_win); + } + ad->active_indi_win = active_win; + + ecore_x_window_sniff(ad->active_indi_win); + DBG("SNIFF API %x",ad->active_indi_win); + } + + _active_indicator_handle(data,1); + } + + return EINA_TRUE; +} + +static void _mctrl_monitor_cb(minicontrol_action_e action, + const char *name, unsigned int width, + unsigned int height, + minicontrol_priority_e priority, + void *data) +{ + retif(!data, , "data is NULL"); + retif(!name, , "name is NULL"); + + indicator_minictrl_control_modules(action,name,data); +} + +static void +_indicator_ecore_evas_msg_parent_handle(Ecore_Evas *ee, int msg_domain, int msg_id, void *data, int size) +{ + retif(!data, , "data is NULL"); + +} + +static void +_indicator_port_ecore_evas_msg_parent_handle(Ecore_Evas *ee, int msg_domain, int msg_id, void *data, int size) +{ + retif(!data, , "data is NULL"); + + _indicator_ecore_evas_msg_parent_handle(ee,msg_domain,msg_id,data,size); +} + +static void +_indicator_land_ecore_evas_msg_parent_handle(Ecore_Evas *ee, int msg_domain, int msg_id, void *data, int size) +{ + retif(!data, , "data is NULL"); + + _indicator_ecore_evas_msg_parent_handle(ee,msg_domain,msg_id,data,size); +} + +static void _register_event_handler_both(win_info *win, void *data) +{ + Ecore_Evas *ee; + + retif(win == NULL, , "Invalid parameter!"); + + ee = ecore_evas_ecore_evas_get(evas_object_evas_get(win->win_main)); + + evas_object_smart_callback_add(win->win_main, + "delete,request", + _indicator_window_delete_cb, data); + evas_object_event_callback_add(win->layout_main, + EVAS_CALLBACK_MOUSE_DOWN, + _indicator_mouse_down_cb, win); + + evas_object_event_callback_add(win->layout_main, + EVAS_CALLBACK_MOUSE_MOVE, + _indicator_mouse_move_cb, win); + + evas_object_event_callback_add(win->layout_main, + EVAS_CALLBACK_MOUSE_UP, + _indicator_mouse_up_cb, win); + if(win->type == INDICATOR_WIN_PORT) + { + ecore_evas_callback_msg_parent_handle_set(ee, _indicator_port_ecore_evas_msg_parent_handle); + } + else + { + ecore_evas_callback_msg_parent_handle_set(ee, _indicator_land_ecore_evas_msg_parent_handle); + } + ecore_evas_data_set(ee,"indicator_app_data",data); + +} + +static void register_event_handler(void *data) +{ + int ret = 0; + int i = 0; + struct appdata *ad = data; + Ecore_Event_Handler *hdl = NULL; + retif(data == NULL, , "Invalid parameter!"); + + for(i=0;iwin[i]),data); + } + hdl = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, + _indicator_client_message_cb, (void *)ad); + retif(hdl == NULL, , "Failed to register ecore_event_handler!"); + ad->evt_handlers = eina_list_append(ad->evt_handlers, hdl); + + hdl = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, + _property_changed_cb, data); + retif(hdl == NULL, , "Failed to register ecore_event_handler!"); + ad->evt_handlers = eina_list_append(ad->evt_handlers, hdl); + + if (vconf_notify_key_changed + (VCONFKEY_PM_STATE, _indicator_notify_pm_state_cb, (void *)ad) != 0) { + ERR("Fail vconf_notify_key_changed"); + } + + ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS, + _indicator_power_off_status_cb, (void *)ad); + + if (ret == -1) { + return; + } + + ret = vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE, + _indicator_lock_status_cb, (void *)ad); + + if (ret == -1) { + return; + } + + ret = minicontrol_monitor_start(_mctrl_monitor_cb, data); + if (ret != MINICONTROL_ERROR_NONE) { + ERR("fail to minicontrol_monitor_start()- %d", ret); + return; + } + +} + +static void _unregister_event_handler_both(win_info *win) +{ + retif(win == NULL, , "Invalid parameter!"); + + evas_object_smart_callback_del(win->win_main, + "delete-request", + _indicator_window_delete_cb); + + evas_object_event_callback_del(win->layout_main, + EVAS_CALLBACK_MOUSE_DOWN, + _indicator_mouse_down_cb); + + evas_object_event_callback_del(win->layout_main, + EVAS_CALLBACK_MOUSE_MOVE, + _indicator_mouse_move_cb); + + evas_object_event_callback_del(win->layout_main, + EVAS_CALLBACK_MOUSE_UP, + _indicator_mouse_up_cb); + +} + +static int unregister_event_handler(void *data) +{ + struct appdata *ad = (struct appdata *)data; + int i = 0; + + retif(data == NULL, FAIL, "Invalid parameter!"); + + for(i=0;iwin[i])); + } + + vconf_ignore_key_changed(VCONFKEY_PM_STATE, + _indicator_notify_pm_state_cb); + + vconf_ignore_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS, + _indicator_power_off_status_cb); + + vconf_ignore_key_changed(VCONFKEY_IDLE_LOCK_STATE, + _indicator_lock_status_cb); + + Ecore_Event_Handler *hdl = NULL; + EINA_LIST_FREE(ad->evt_handlers, hdl) { + if (hdl) + ecore_event_handler_del(hdl); + } + + minicontrol_monitor_stop(); + + return OK; +} + +static Evas_Object *load_edj(Evas_Object * parent, const char *file, + const char *group) +{ + Evas_Object *eo; + int r; + + eo = elm_layout_add(parent); + if (eo) { + r = elm_layout_file_set(eo, file, group); + if (!r) { + evas_object_del(eo); + return NULL; + } + + evas_object_size_hint_weight_set(eo, + EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, eo); + } + + return eo; +} + +static void create_win(void* data,int type) +{ + char *indi_name = NULL; + + struct appdata *ad = data; + Ecore_X_Window xwin; + Ecore_X_Window zone; + Ecore_X_Window_State states[2]; + int root_w; + int root_h; + Ecore_X_Window root; + + root = ecore_x_window_root_first_get(); + ecore_x_window_size_get(root, &root_w, &root_h); + + ad->scale = elm_config_scale_get(); + + + switch(type) + { + case INDICATOR_WIN_PORT: + ad->win[type].win_main = elm_win_add(NULL, "portrait_indicator", ELM_WIN_SOCKET_IMAGE); + indi_name = "elm_indicator_portrait"; + elm_win_title_set(ad->win[type].win_main, "win sock test:port"); + ad->win[type].w = root_w; + break; + case INDICATOR_WIN_LAND: + ad->win[type].win_main = elm_win_add(NULL, "win_socket_test:land", ELM_WIN_SOCKET_IMAGE); + indi_name = "elm_indicator_landscape"; + elm_win_title_set(ad->win[type].win_main, "win sock test:land"); + ad->win[type].w = root_h; + break; + default : + break; + } + + retif(ad->win[type].win_main == NULL, , "elm_win_add failed!"); + + if (!elm_win_socket_listen(ad->win[type].win_main , indi_name, 0, EINA_FALSE)) + { + evas_object_del(ad->win[type].win_main); + return; + } + elm_win_alpha_set(ad->win[type].win_main , EINA_TRUE); + + elm_win_borderless_set(ad->win[type].win_main , EINA_TRUE); + + evas_object_size_hint_fill_set(ad->win[type].win_main , EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ad->win[type].win_main , 1.0, 0.5); + + xwin = elm_win_xwindow_get(ad->win[type].win_main ); + ecore_x_icccm_hints_set(xwin, 0, 0, 0, 0, 0, 0, 0); + states[0] = ECORE_X_WINDOW_STATE_SKIP_TASKBAR; + states[1] = ECORE_X_WINDOW_STATE_SKIP_PAGER; + ecore_x_netwm_window_state_set(xwin, states, 2); + + zone = ecore_x_e_illume_zone_get(xwin); + ecore_x_event_mask_set(zone, ECORE_X_EVENT_MASK_WINDOW_CONFIGURE); + + ad->win[type].evas = evas_object_evas_get(ad->win[type].win_main ); + + switch(type) + { + case INDICATOR_WIN_PORT: + ad->win[type].layout_main = load_edj(ad->win[type].win_main , EDJ_FILE0, GRP_MAIN); + break; + case INDICATOR_WIN_LAND: + ad->win[type].layout_main = load_edj(ad->win[type].win_main , EDJ_FILE1, GRP_MAIN); + break; + default : + break; + } + + retif(ad->win[type].layout_main == NULL, , "Failed to get layout main!"); + + ad->win[type].h = (int)(INDICATOR_HEIGHT * ad->scale); + evas_object_resize(ad->win[type].win_main , ad->win[type].w, ad->win[type].h); + evas_object_move(ad->win[type].win_main , 0, 0); + + ad->win[type].type = type; + +#ifdef HOME_KEY_EMULATION + int ret = 0; + ad->win[type].atom_hwkey = ecore_x_atom_get(PROP_HWKEY_EMULATION); + ret = ecore_x_window_prop_window_get(root, ad->win[type].atom_hwkey, + &ad->win[type].win_hwkey, 1); +#endif + + indicator_util_layout_add(&(ad->win[type])); + + ad->win[type].data = data; + + evas_object_show(ad->win[type].layout_main); + evas_object_show(ad->win[type].win_main); + return ; +} + +static void create_overlay_win(void* data) +{ + + struct appdata *ad = data; + Evas_Object *conform = NULL; + + Evas_Object *eo; + int w, h; + int indi_h; + Ecore_X_Window xwin; + Ecore_X_Window zone; + Ecore_X_Window_State states[2]; + Ecore_X_Atom ATOM_MV_INDICATOR_GEOMETRY = 0; + + indi_h = (int)(INDICATOR_HEIGHT * ad->scale); + + ad ->active_indi_win = -1; + + eo = elm_win_add(NULL, "INDICATOR", ELM_WIN_BASIC); + elm_win_title_set(eo, "INDICATOR"); + elm_win_borderless_set(eo, EINA_TRUE); + ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); + evas_object_resize(eo, 2, 2); + evas_object_move(eo , 0, 0); + elm_win_alpha_set(eo, EINA_TRUE); + + + xwin = elm_win_xwindow_get(eo); + ecore_x_icccm_hints_set(xwin, 0, 0, 0, 0, 0, 0, 0); + states[0] = ECORE_X_WINDOW_STATE_SKIP_TASKBAR; + states[1] = ECORE_X_WINDOW_STATE_SKIP_PAGER; + ecore_x_netwm_window_state_set(xwin, states, 2); + + ecore_x_icccm_name_class_set(xwin, "INDICATOR", "INDICATOR"); + + ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_DOCK); + + unsigned int ind_gio_val[16] = { 0, 0, w, indi_h, + 0, 0, indi_h, h, + 0, h-indi_h, w, indi_h, + w-indi_h, 0, indi_h, h }; + + ATOM_MV_INDICATOR_GEOMETRY = ecore_x_atom_get(STR_ATOM_MV_INDICATOR_GEOMETRY); + + ecore_x_window_prop_card32_set(xwin, + ATOM_MV_INDICATOR_GEOMETRY, + ind_gio_val, + 16); + + zone = ecore_x_e_illume_zone_get(xwin); + ecore_x_event_mask_set(zone, ECORE_X_EVENT_MASK_WINDOW_CONFIGURE); + evas_object_show(eo); + + ad->win_overlay = eo; + ad->atom_active = ecore_x_atom_get("_E_ACTIVE_INDICATOR_WIN"); + + return ; +} + +static void _indicator_init_wininfo(void * data) +{ + int i = 0; + struct appdata *ad = data; + retif(data == NULL, , "Invalid parameter!"); + + for(i=0;iwin[i]),0x00,sizeof(win_info)); + } + + ad->win_overlay = NULL; +} + +static int indicator_window_new(void *data) +{ + int i = 0; + struct appdata *ad = data; + + retif(data == NULL, FAIL, "Invalid parameter!"); + + _indicator_init_wininfo(data); + + for(i=0;iwin[i]),0,0); + } + + create_overlay_win(data); + register_event_handler(ad); + + return OK; +} + +static int indicator_window_del(void *data) +{ + int i = 0; + struct appdata *ad = (struct appdata *)data; + + retif(data == NULL, FAIL, "Invalid parameter!"); + + indicator_fini_modules(data); + unregister_event_handler(ad); + + for(i=0;iwin[i])); + evas_image_cache_flush(ad->win[i].evas); + evas_object_del(ad->win[i].layout_main); + ad->win[i].layout_main = NULL; + evas_object_del(ad->win[i].win_main); + ad->win[i].win_main = NULL; + } + + evas_object_del(ad->win_overlay); + ad->win_overlay = NULL; + + if (ad) + free(ad); + + elm_exit(); + return OK; +} + +static inline int _indicator_home_icon_action(void *data, int press) +{ + return OK; +} + +#ifdef HOME_KEY_EMULATION +static Eina_Bool _indicator_hw_home_key_press(void *data) +{ + win_info *win = NULL; + char message[20] = {'\0', }; + + retif(!data, EINA_FALSE, "data is NULL"); + + win = (win_info *)data; + + retif(!win->win_hwkey, EINA_FALSE, "window for hw emulation is NULL"); + + snprintf(message, sizeof(message), "%s%s", + KEY_MSG_PREFIX_PRESS, KEY_HOME); + + return ecore_x_client_message8_send(win->win_hwkey, win->atom_hwkey, + message, strlen(message)); +} + +static Eina_Bool _indicator_hw_home_key_release(void *data) +{ + char message[20] = {'\0', }; + win_info *win = (win_info*)data; + + retif(!data, EINA_FALSE, "data is NULL"); + + retif(!win->win_hwkey, EINA_FALSE, "window for hw emulation is NULL"); + + + snprintf(message, sizeof(message), "%s%s", + KEY_MSG_PREFIX_RELEASE, KEY_HOME); + + return ecore_x_client_message8_send(win->win_hwkey, win->atom_hwkey, + message, strlen(message)); +} +static Eina_Bool _indicator_hw_home_key_press_cancel(void *data) +{ + win_info *win = (win_info*)data; + char message[20] = {'\0', }; + + retif(!data, EINA_FALSE, "data is NULL"); + + retif(!win->win_hwkey, EINA_FALSE, "window for hw emulation is NULL"); + + snprintf(message, sizeof(message), "%s%s", + KEY_MSG_PREFIX_PRESS_C, KEY_HOME); + + return ecore_x_client_message8_send(win->win_hwkey, win->atom_hwkey, + message, strlen(message)); +} + +static Eina_Bool _indicator_hw_home_key_release_cancel(void *data) +{ + win_info *win = (win_info*)data; + char message[20] = {'\0', }; + + retif(!data, EINA_FALSE, "data is NULL"); + + retif(!win->win_hwkey, EINA_FALSE, "window for hw emulation is NULL"); + + + snprintf(message, sizeof(message), "%s%s", + KEY_MSG_PREFIX_RELEASE_C, KEY_HOME); + + return ecore_x_client_message8_send(win->win_hwkey, win->atom_hwkey, + message, strlen(message)); +} + +#endif +static void __indicator_set_showhide(int type,int value,int line) +{ + show_hide_pressed[type] = value; +} +static void __indicator_hide_icon_timer_cb(void* data) +{ + win_info* win = (win_info*)data; + + if (hide_timer != NULL) { + ecore_timer_del(hide_timer); + hide_timer = NULL; + } + + if(is_quickpanel_opened==1) + { + DBG("quickpanel open"); + return; + } + + if(show_hide_pressed[win->type] == EINA_TRUE) + { + DBG("is not released"); + need_to_hide=1; + return; + } + + indicator_util_show_hide_icons(data,0,1); + indicator_send_evas_ecore_message(data,1,2); + +} + +static void _indicator_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, + void *event) +{ + win_info *win = (win_info*)data; + Evas_Event_Mouse_Down *ev = NULL; + + retif(data == NULL || event == NULL, , "Invalid parameter!"); + ev = event; + + win->mouse_event.x = ev->canvas.x; + win->mouse_event.y = ev->canvas.y; + + if(ev->button!=1) + { + DBG("not left button"); + return; + } +#ifdef HOME_KEY_EMULATION + if(indicator_util_check_indicator_area(win, ev->canvas.x, ev->canvas.y)) + { + if(indicator_message_disp_check(win->type)==1) + { + goto __CATCH; + } + + + indicator_press_coord.x = ev->canvas.x; + indicator_press_coord.y = ev->canvas.y; + } + +__CATCH : + return; +#else + int mouse_down_prio = -1; + mouse_down_prio = + indicator_util_get_priority_in_move_area(win, win->mouse_event.x, + win->mouse_event.y); + + if (mouse_down_prio > -1) { + switch (mouse_down_prio) { + case INDICATOR_PRIORITY_FIXED1: + { + int lock_state = VCONFKEY_IDLE_UNLOCK; + int lock_ret = -1; + + lock_ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, + &lock_state); + DBG("Check Lock State : %d %d", lock_ret, lock_state); + + if (lock_ret == 0 + && lock_state == VCONFKEY_IDLE_UNLOCK) { + if (!_indicator_home_icon_action(win, 1)) + home_button_pressed = EINA_TRUE; + } + } + break; + } + } +#endif +} + +static void _indicator_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, + void *event) +{ + Evas_Event_Mouse_Move *ev = NULL; + win_info* win = (win_info*)data; + + retif(data == NULL || event == NULL, , "Invalid parameter!"); + + ev = event; + +} + +static void _indicator_mouse_up_cb(void *data, Evas * e, Evas_Object * obj, + void *event) +{ + + Evas_Event_Mouse_Up *ev = NULL; + win_info *win = (win_info *)data; + + retif(data == NULL || event == NULL, , "Invalid parameter!"); + + ev = event; + + DBG("_indicator_mouse_up_cb : %d %d", ev->canvas.x, ev->canvas.y); + +#ifdef HOME_KEY_EMULATION + if(show_hide_pressed[win->type] == EINA_TRUE) + { + if(need_to_hide==1) + { + if (hide_timer != NULL) + { + ecore_timer_del(hide_timer); + hide_timer = NULL; + } + + hide_timer = ecore_timer_add(0.4, (void *)__indicator_hide_icon_timer_cb,data); + } + } + home_button_pressed = EINA_FALSE; + __indicator_set_showhide(win->type,EINA_FALSE,__LINE__); +#else + int mouse_up_prio = -1; + int mouse_down_prio = -1; + + if (home_button_pressed == EINA_TRUE) { + _indicator_home_icon_action(data, 0); + home_button_pressed = EINA_FALSE; + } + + mouse_down_prio = + indicator_util_get_priority_in_move_area(win,win->mouse_event.x, + win->mouse_event.y); + mouse_up_prio = indicator_util_get_priority_in_move_area(win,ev->canvas.x, + ev->canvas.y); + + if (mouse_down_prio > -1 && mouse_up_prio > -1 + && mouse_down_prio == mouse_up_prio) { + switch (mouse_down_prio) { + case INDICATOR_PRIORITY_FIXED1: + { + int lock_state = VCONFKEY_IDLE_UNLOCK; + int lock_ret = -1; + + lock_ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, + &lock_state); + DBG("Check Lock State : %d %d", lock_ret, lock_state); + + if (lock_ret == 0 && lock_state == VCONFKEY_IDLE_LOCK) + break; + + char *package = NULL; + char *top_win_name = NULL; + + INFO("[Home Button Released]"); + + if (check_system_status() == FAIL) + break; + + package = vconf_get_str("db/menuscreen/pkgname"); + if (package) { + service_h service; + int ret = SERVICE_ERROR_NONE; + + service_create(&service); + + service_set_operation(service, SERVICE_OPERATION_DEFAULT); + + service_set_package(service, package); + + top_win_name = _get_top_window_name(data); + + if (top_win_name != NULL + && !strncmp(top_win_name, package, + strlen(package))) + { + + DBG("service_send_launch_request : %s", + top_win_name); + + ret = service_send_launch_request(service, NULL, NULL); + + if(ret != SERVICE_ERROR_NONE) + { + ERR("Cannot launch app"); + } + + } + else + { + DBG("app_manager_resume_app : %s", + top_win_name); + + ret = app_manager_resume_app(service); + if(ret != APP_MANAGER_ERROR_NONE) + { + ERR("Cannot resume app"); + } + } + + if (top_win_name) + free(top_win_name); + + free(package); + + service_destroy(service); + + } else + ERR("Cannot get vconf"); + } + break; + } + } +#endif + win->mouse_event.x = 0; + win->mouse_event.y = 0; +} + +static int register_indicator_modules(void *data) +{ + indicator_init_modules(data); + return OK; +} + +static void _signal_handler(int signum, siginfo_t *info, void *unused) +{ + DBG("_signal_handler : Terminated..."); + app_efl_exit(); +} + +static bool app_create(void *data) +{ + pid_t pid; + int ret; + + struct sigaction act; + memset(&act,0x00,sizeof(struct sigaction)); + act.sa_sigaction = _signal_handler; + act.sa_flags = SA_SIGINFO; + + ret = sigemptyset(&act.sa_mask); + if (ret < 0) { + ERR("Failed to sigemptyset[%s]", strerror(errno)); + } + ret = sigaddset(&act.sa_mask, SIGTERM); + if (ret < 0) { + ERR("Failed to sigaddset[%s]", strerror(errno)); + } + ret = sigaction(SIGTERM, &act, NULL); + if (ret < 0) { + ERR("Failed to sigaction[%s]", strerror(errno)); + } + + pid = setsid(); + + ret = nice(2); + if (ret == -1) + ERR("Failed to set nice value!"); + return true; +} + +static void app_terminate(void *data) +{ + int i = 0; + struct appdata *ad = data; + indicator_fini_modules(data); + indicator_message_fini(); + unregister_event_handler(ad); + + feedback_deinitialize(); + + for(i=0;iwin[i])); + evas_image_cache_flush(ad->win[i].evas); + evas_object_del(ad->win[i].layout_main); + evas_object_del(ad->win[i].win_main); + } + + INFO(" >>>>>>>>>>>>> INDICATOR IS TERMINATED!! <<<<<<<<<<<<<< "); + +} + +static void app_pause(void *data) +{ + +} + +static void app_resume(void *data) +{ + +} + +static void app_service(service_h service, void *data) +{ + struct appdata *ad = data; + int ret; + int i = 0; + + INFO("[INDICATOR IS STARTED]"); + ret = indicator_window_new(data); + retif(ret != OK, , "Failed to create a new window!"); + + _change_view(ecore_x_window_root_first_get(), data); + + register_indicator_modules(data); + + feedback_initialize(); + + indicator_message_init(data); + for(i=0;iwin[i].win_main) + elm_win_activate(ad->win[i].win_main); + } + +} + +int main(int argc, char *argv[]) +{ + + struct appdata ad; + + app_event_callback_s event_callback; + + int ret = 0; + + DBG("Start indicator"); + + ret = control_privilege(); + if (ret != 0) { + ERR("[INDICATOR] Failed to control privilege!"); + } + + event_callback.create = app_create; + event_callback.terminate = app_terminate; + event_callback.pause = app_pause; + event_callback.resume = app_resume; + event_callback.service = app_service; + event_callback.low_memory = NULL; + event_callback.low_battery = _indicator_low_bat_cb; + event_callback.device_orientation = NULL; + event_callback.language_changed = _indicator_lang_changed_cb; + event_callback.region_format_changed = _indicator_region_changed_cb; + + memset(&ad, 0x0, sizeof(struct appdata)); + + return app_efl_main(&argc, &argv, &event_callback, &ad); + +} diff --git a/daemon/indicator_ui.h b/daemon/indicator_ui.h new file mode 100755 index 0000000..14b6b60 --- /dev/null +++ b/daemon/indicator_ui.h @@ -0,0 +1,106 @@ +/* + * Copyright 2012 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. + */ + + +#ifndef __DEF_indicator_H_ +#define __DEF_indicator_H_ + +#include +#include +#include "indicator.h" + +#if !defined(PACKAGE) +# define PACKAGE "indicator" +#endif + +#if !defined(LOCALEDIR) +# define LOCALEDIR "/usr/apps/com.samsung.indicator/res/locale" +#endif + +#if !defined(EDJDIR) +# define EDJDIR "/usr/apps/com.samsung.indicator/res/edje" +#endif + +#if !defined(ICONDIR) +# define ICONDIR "/usr/apps/com.samsung.indicator/res/icons" +#endif + +#define EDJ_FILE0 EDJDIR"/"PACKAGE"_port.edj" +#define EDJ_FILE1 EDJDIR"/"PACKAGE"_land.edj" +#define ICON_THEME_FILE EDJDIR"/"PACKAGE"_icon_theme.edj" +#define ICON_NONFIXED_THEME_FILE EDJDIR"/"PACKAGE"_icon_nonfixed_theme.edj" +#define ICON_NONFIXED_THEME_ANI_FILE EDJDIR"/"PACKAGE"_icon_animation.edj" + + +#define _S(str) dgettext("sys_string", str) +#define _(str) gettext(str) + +#define HOME_SCREEN_NAME "com.samsung.live-magazine" +#define MENU_SCREEN_NAME "com.samsung.menu-screen" +#define LOCK_SCREEN_NAME "com.samsung.idle-lock" +#define QUICKPANEL_NAME "E Popup" +#define CALL_NAME "com.samsung.call" +#define VTCALL_NAME "com.samsung.vtmain" + +#define MSG_DOMAIN_CONTROL_INDICATOR 0x10001 +#define MSG_ID_INDICATOR_REPEAT_EVENT 0x10002 +#define MSG_ID_INDICATOR_ROTATION 0x10003 +#define MSG_ID_INDICATOR_OPACITY 0X1004 +#define MSG_ID_INDICATOR_TYPE 0X1005 +#define MSG_ID_INDICATOR_ANI_START 0x10006 + +enum _win_type { + TOP_WIN_NORMAL = 0, + TOP_WIN_LOCK_SCREEN, + TOP_WIN_CALL, + TOP_WIN_MENU_SCREEN, + TOP_WIN_HOME_SCREEN, + TOP_WIN_QUICKPANEL +}; + +enum indicator_opacity_mode{ + INDICATOR_OPACITY_OPAQUE = 0, + INDICATOR_OPACITY_TRANSLUCENT, + INDICATOR_OPACITY_TRANSPARENT, +}; + +struct appdata { + + win_info win[INDICATOR_WIN_MAX]; + Evas_Object* win_overlay; + + double xscale; + double yscale; + double scale; + int angle; + + Eina_Bool lock; + Eina_Bool menu; + Eina_Bool quickpanel; + + Eina_List *evt_handlers; + + enum indicator_opacity_mode opacity_mode; + + enum _win_type top_win; + + Ecore_X_Atom atom_active; + Ecore_X_Window active_indi_win; + + void (*update_display) (int); +}; + +#endif diff --git a/daemon/indicator_util.c b/daemon/indicator_util.c new file mode 100755 index 0000000..1e01963 --- /dev/null +++ b/daemon/indicator_util.c @@ -0,0 +1,316 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "indicator_gui.h" +#include "indicator_util.h" +#include "indicator_icon_util.h" +#include "indicator_box_util.h" +#include + +#define DEFAULT_DIR ICONDIR +#define DIR_PREFIX "Theme_%02d_" +#define LABEL_STRING "%s" + +static char *_icondir; + +char *set_label_text_color(const char *txt) +{ + Eina_Strbuf *temp_buf = NULL; + Eina_Bool buf_result = EINA_FALSE; + char *ret_str = NULL; + + retif(txt == NULL, NULL, "Invalid parameter!"); + + temp_buf = eina_strbuf_new(); + buf_result = eina_strbuf_append_printf(temp_buf, + LABEL_STRING, FONT_COLOR, txt); + + if (buf_result == EINA_FALSE) + INFO("Failed to make label string!"); + else + ret_str = eina_strbuf_string_steal(temp_buf); + + eina_strbuf_free(temp_buf); + return ret_str; +} + +const char *get_icon_dir(void) +{ + if (_icondir == NULL) + _icondir = DEFAULT_DIR; + + return (const char *)_icondir; +} + +static int _set_icon_dir(char *newdir) +{ + char *new_icon_dir = NULL; + + char dirname[PATH_MAX]; + int r; + + retif(!newdir, FAIL, "Invalid parameter!"); + memset(dirname, 0x00, sizeof(dirname)); + r = snprintf(dirname, sizeof(dirname), ICONDIR "/%s", newdir); + if (r < 0) { + ERR("Failed to set new dir name!"); + return FAIL; + } + + new_icon_dir = strdup(dirname); + _icondir = new_icon_dir; + + return 0; +} + +void indicator_signal_emit(void* data, const char *emission, const char *source) +{ + struct appdata *ad = (struct appdata *)data; + retif(data == NULL, , "Invalid parameter!"); + Evas_Object *edje; + int i = 0; + + for(i=0;iwin[i].layout_main == NULL, , "Invalid parameter!"); + edje = elm_layout_edje_get(ad->win[i].layout_main); + edje_object_signal_emit(edje, emission, source); + } +} + +void indicator_part_text_emit(void* data, const char *part, const char *text) +{ + struct appdata *ad = (struct appdata *)data; + retif(data == NULL, , "Invalid parameter!"); + Evas_Object *edje; + int i = 0; + + for(i=0;iwin[i].layout_main == NULL, , "Invalid parameter!"); + edje = elm_layout_edje_get(ad->win[i].layout_main); + edje_object_part_text_set(edje, part, text); + } +} + +void indicator_signal_emit_by_win(void* data, const char *emission, const char *source) +{ + win_info *win = (win_info*)data; + retif(data == NULL, , "Invalid parameter!"); + Evas_Object *edje; + + retif(win->layout_main == NULL, , "Invalid parameter!"); + edje = elm_layout_edje_get(win->layout_main); + edje_object_signal_emit(edje, emission, source); +} + +void indicator_part_text_emit_by_win(void* data, const char *part, const char *text) +{ + win_info *win = (win_info*)data; + retif(data == NULL, , "Invalid parameter!"); + Evas_Object *edje; + + retif(win->layout_main == NULL, , "Invalid parameter!"); + edje = elm_layout_edje_get(win->layout_main); + edje_object_part_text_set(edje, part, text); +} + +void indicator_send_evas_ecore_message(void* data, int bRepeat, int bType) +{ + +} + +void indicator_send_status_message_start(void* data,double duration) +{ + Ecore_Evas *ee_port; + win_info* win = (win_info*)data; + retif(data == NULL, , "Invalid parameter!"); + struct appdata *ad = win->data; + Indicator_Data_Animation msg = {0,}; + + msg.xwin = ad->active_indi_win; + msg.duration = duration; + + DBG("status start %x",ad->active_indi_win); + ee_port = ecore_evas_ecore_evas_get(evas_object_evas_get(win->win_main)); + ecore_evas_msg_send(ee_port, MSG_DOMAIN_CONTROL_INDICATOR, MSG_ID_INDICATOR_ANI_START, &(msg), sizeof(Indicator_Data_Animation)); + +} + +int check_system_status(void) +{ + int ret, value = -1; + + ret = vconf_get_int(VCONFKEY_PWLOCK_STATE, &value); + if (ret == OK && + (value == VCONFKEY_PWLOCK_BOOTING_LOCK || + value == VCONFKEY_PWLOCK_RUNNING_LOCK)) + return FAIL; + + return OK; +} + +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; +} + +char* indicator_util_get_timezone_str(void) +{ + enum { BUFFERSIZE = 1024 }; + char buf[BUFFERSIZE]; + ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1); + + if (len != -1) + { + buf[len] = '\0'; + } + else + { + ERR("NO TIMEZONEINFO"); + return _get_timezone_from_vconf(); + } + return g_strdup(buf+20); +} + +Eina_Bool +indicator_util_win_prop_angle_get(Ecore_X_Window win, int *req) +{ + Eina_Bool res = EINA_FALSE; + int ret, count; + int angle[2] = {-1, -1}; + unsigned char* prop_data = NULL; + + ret = ecore_x_window_prop_property_get(win, + ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE, + ECORE_X_ATOM_CARDINAL, + 32,&prop_data,&count); + if (ret <= 0) + { + if (prop_data) free(prop_data); + return res; + } + if (ret && prop_data) + { + memcpy (&angle, prop_data, sizeof (int)*count); + if (count == 2) + res = EINA_TRUE; + } + + if (prop_data) free(prop_data); + + *req = angle[0]; + + if (angle[0] == -1 && angle[1] == -1) res = EINA_FALSE; + + return res; +} +int indicator_util_get_block_width(void* data, const char* part) +{ + Evas_Object * eo = NULL; + int geo_dx = 0; + int geo_dy = 0; + retif(data == NULL,-1, "Invalid parameter!"); + retif(part == NULL,-1, "Invalid parameter!"); + + win_info* win = (win_info*)data; + + eo = (Evas_Object *) edje_object_part_object_get(elm_layout_edje_get(win->layout_main), part); + + evas_object_geometry_get(eo, NULL, NULL, &geo_dx, &geo_dy); + + return geo_dx; +} + +int indicator_util_get_string_width(void* data, const char* part) +{ + Evas_Object * eo = NULL; + int text_dx = 0; + int text_dy = 0; + retif(data == NULL,-1, "Invalid parameter!"); + retif(part == NULL,-1, "Invalid parameter!"); + + win_info* win = (win_info*)data; + + eo = (Evas_Object *) edje_object_part_object_get(elm_layout_edje_get(win->layout_main), part); + + evas_object_textblock_size_formatted_get(eo, &text_dx, &text_dy); + + return text_dx; +} + +int indicator_util_check_noti_ani(const char* path) +{ + retif(path == NULL, 0, "Invalid parameter!"); + if(!strcmp(path,"reserved://indicator/ani/downloading") || + !strcmp(path,"reserved://indicator/ani/uploading")) + { + return 1; + } + return 0; +} + +void indicator_util_start_noti_ani(void* data) +{ + Indicator_Icon_Object *icon = (Indicator_Icon_Object *)data; + retif(data == NULL, , "Invalid parameter!"); + + if(indicator_util_check_noti_ani(icon->img_obj.data)) + { + DBG("%s",icon->name); + if(!strcmp(icon->img_obj.data,"reserved://indicator/ani/downloading")) + { + indicator_util_icon_animation_set(icon,ICON_ANI_DOWNLOADING); + } + else + { + indicator_util_icon_animation_set(icon,ICON_ANI_UPLOADING); + } + } +} + +void indicator_util_stop_noti_ani(void* data) +{ + Indicator_Icon_Object *icon = (Indicator_Icon_Object *)data; + retif(data == NULL, , "Invalid parameter!"); + + if(indicator_util_check_noti_ani(icon->img_obj.data)) + { + Evas_Object *img_edje; + img_edje = elm_layout_edje_get(icon->img_obj.obj); + DBG("%s",icon->name); + if(!strcmp(icon->img_obj.data,"reserved://indicator/ani/downloading")) + { + edje_object_signal_emit(img_edje, "indicator.ani.downloading.stop","elm.swallow.icon"); + } + else + { + edje_object_signal_emit(img_edje, "indicator.ani.uploading.stop","elm.swallow.icon"); + } + } +} diff --git a/daemon/indicator_util.h b/daemon/indicator_util.h new file mode 100755 index 0000000..662be87 --- /dev/null +++ b/daemon/indicator_util.h @@ -0,0 +1,46 @@ +/* + * Copyright 2012 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. + */ + +#ifndef __INDICATOR_UTIL_H__ +#define __INDICATOR_UTIL_H__ +#include +#include + +typedef struct _Indicator_Data_Animation Indicator_Data_Animation; + +struct _Indicator_Data_Animation +{ + Ecore_X_Window xwin; + double duration; +}; + +extern char *set_label_text_color(const char *txt); +extern const char *get_icon_dir(void); +void indicator_signal_emit(void* data, const char *emission, const char *source); +void indicator_part_text_emit(void* data, const char *part, const char *text); +void indicator_signal_emit_by_win(void* data, const char *emission, const char *source); +void indicator_part_text_emit_by_win(void* data, const char *part, const char *text); +void indicator_send_evas_ecore_message(void* data, int bRepeat, int bType); +int check_system_status(void); +char* indicator_util_get_timezone_str(void); +Eina_Bool indicator_util_win_prop_angle_get(Ecore_X_Window win, int *curr); +int indicator_util_get_block_width(void* data, const char* part); +int indicator_util_get_string_width(void* data, const char* part); +int indicator_util_check_noti_ani(const char* path); +void indicator_util_start_noti_ani(void* data); +void indicator_util_stop_noti_ani(void* data); +void indicator_send_status_message_start(void* data,double duration); +#endif diff --git a/daemon/message.c b/daemon/message.c new file mode 100755 index 0000000..a77486e --- /dev/null +++ b/daemon/message.c @@ -0,0 +1,381 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + + +#include "indicator_ui.h" +#include "common.h" +#include "indicator_util.h" + +#define MSG_TIMEOUT 3 +#define STR_BUF_SIZE 256 + +#define MESSAGE_LINE1 "message.text" +#define MESSAGE_LINE2 "message.text2" + +static int msg_type[INDICATOR_WIN_MAX] = {0,}; +static Ecore_Timer *msg_timer[INDICATOR_WIN_MAX] = {NULL,}; +extern int current_angle; +static int block_width[INDICATOR_WIN_MAX] = {0,}; +static int string_width[INDICATOR_WIN_MAX] = {0,}; + + +static void _hide_message(void* data) +{ + retif(data == NULL, , "Invalid parameter!"); + win_info* win = NULL; + Evas_Object* layout = NULL; + win = (win_info*)data; + + indicator_signal_emit_by_win(win,"message.hide", "indicator.prog"); +} + + +static void _hide_message_all(void* data) +{ + struct appdata *ad = (struct appdata *)data; + int i = 0; + retif(data == NULL, , "Invalid parameter!"); + + indicator_signal_emit(data,"message.line2.hide.noeffect","indicator.prog"); + indicator_signal_emit(data,"message.hide","indicator.prog"); + +} + +static void _show_message(void* data) +{ + retif(data == NULL, , "Invalid parameter!"); + win_info* win = NULL; + Evas_Object* layout = NULL; + win = (win_info*)data; + + indicator_signal_emit_by_win(win,"message.show", "indicator.prog"); +} + +static void _hide_message_line2(void* data,int bEffect) +{ + retif(data == NULL, , "Invalid parameter!"); + win_info* win = NULL; + win = (win_info*)data; + + if (win) + { + if(bEffect) + indicator_signal_emit_by_win(win,"message.line2.hide", "indicator.prog"); + else + indicator_signal_emit_by_win(win,"message.line2.hide.noeffect", "indicator.prog"); + } +} + +static void _show_message_line2(void* data) +{ + retif(data == NULL, , "Invalid parameter!"); + win_info* win = NULL; + win = (win_info*)data; + + if (win) + { + indicator_signal_emit_by_win(win,"message.line2.show", "indicator.prog"); + } +} + +static Eina_Bool _msg_timeout_cb(void *data) +{ + retif(data == NULL, ECORE_CALLBACK_CANCEL, "Invalid parameter!"); + int i = 0; + + win_info* win = (win_info*)data; + + if(msg_type[win->type]==1) + { + _hide_message(win); + msg_timer[win->type] = NULL; + return ECORE_CALLBACK_CANCEL; + } + else if(msg_type[win->type]==2) + { + _show_message_line2(win); + msg_type[win->type] = 0; + if (msg_timer[win->type]) + { + ecore_timer_del(msg_timer[win->type]); + } + msg_timer[win->type] = ecore_timer_add(3, _msg_timeout_cb, win); + return ECORE_CALLBACK_CANCEL; + } + else + { + _hide_message(win); + msg_type[win->type] = 0; + msg_timer[win->type] = NULL; + return ECORE_CALLBACK_CANCEL; + } +} + +static int __calculate_width(void* data, const char* part, char* text) +{ + Evas_Object * eo = NULL; + int geo_dx = 0; + int geo_dy = 0; + int text_dx = 0; + int text_dy = 0; + retif(data == NULL,-1, "Invalid parameter!"); + retif(part == NULL,-1, "Invalid parameter!"); + retif(text == NULL,-1, "Invalid parameter!"); + + win_info* win = (win_info*)data; + + eo = (Evas_Object *) edje_object_part_object_get(elm_layout_edje_get(win->layout_main), part); + + evas_object_geometry_get(eo, NULL, NULL, &geo_dx, &geo_dy); + evas_object_textblock_size_formatted_get(eo, &text_dx, &text_dy); + +} + +static int __get_block_width(void* data, const char* part, char* text) +{ + Evas_Object * eo = NULL; + int geo_dx = 0; + int geo_dy = 0; + retif(data == NULL,-1, "Invalid parameter!"); + retif(part == NULL,-1, "Invalid parameter!"); + retif(text == NULL,-1, "Invalid parameter!"); + + win_info* win = (win_info*)data; + + eo = (Evas_Object *) edje_object_part_object_get(elm_layout_edje_get(win->layout_main), part); + + evas_object_geometry_get(eo, NULL, NULL, &geo_dx, &geo_dy); + + + return geo_dx; +} + +static int __get_string_width(void* data, const char* part) +{ + Evas_Object * eo = NULL; + int text_dx = 0; + int text_dy = 0; + retif(data == NULL,-1, "Invalid parameter!"); + retif(part == NULL,-1, "Invalid parameter!"); + + win_info* win = (win_info*)data; + + eo = (Evas_Object *) edje_object_part_object_get(elm_layout_edje_get(win->layout_main), part); + + evas_object_textblock_size_formatted_get(eo, &text_dx, &text_dy); + + return text_dx; +} +static void __handle_2line(int win_type,char* origin, char* part1, char* part2) +{ + retif(origin == NULL, , "Invalid parameter!"); + retif(part1 == NULL, , "Invalid parameter!"); + retif(part2 == NULL, , "Invalid parameter!"); + + int index = 0; + Eina_Unicode *uni_out = NULL; + Eina_Unicode buf[STR_BUF_SIZE] = {0,}; + int len = 0; + int len2 = 0; + Eina_Unicode *temp1[STR_BUF_SIZE] = {0,}; + Eina_Unicode *temp2[STR_BUF_SIZE] = {0,}; + char* out1 = NULL; + char* out2 = NULL; + int char_len1 = 0; + int char_len2 = 0; + + uni_out = eina_unicode_utf8_to_unicode(origin, &len); + + if(len >= STR_BUF_SIZE) + { + len2 = STR_BUF_SIZE-1; + } + else + { + len2 = len; + } + + eina_unicode_strncpy(buf,uni_out,len2); + + int exceed_index = len2 * block_width[win_type] / string_width[win_type] -1; + + + if(exceed_index<0) + { + ERR("INDEX %d",exceed_index); + goto __CATCH; + } + + int i = exceed_index; + + while(i>0) + { + if(buf[i-1]==' ') + { + index = i-1; + break; + } + i--; + } + + if(index>0) + { + Eina_Unicode *temp3 = NULL; + eina_unicode_strncpy(temp1,buf,index); + temp3 = &(buf[index]); + eina_unicode_strncpy(temp2,temp3,len2-index); + } + else + { + Eina_Unicode *temp3 = NULL; + eina_unicode_strncpy(temp1,buf,exceed_index); + temp3 = &(buf[exceed_index]); + eina_unicode_strncpy(temp2,temp3,len2-exceed_index); + } + + out1 = eina_unicode_unicode_to_utf8(temp1,&char_len1); + out2 = eina_unicode_unicode_to_utf8(temp2,&char_len2); + if(char_len1>=STR_BUF_SIZE) + char_len1 = STR_BUF_SIZE-1; + if(char_len2>=STR_BUF_SIZE) + char_len2 = STR_BUF_SIZE-1; + strncpy(part1,out1,char_len1); + strncpy(part2,out2,char_len2); + +__CATCH: + if(uni_out!=NULL) + free(uni_out); + if(out1!=NULL) + free(out1); + if(out2!=NULL) + free(out2); +} + +static void _handle_message_by_win(const char *message, void *data) +{ + win_info* win = NULL; + char part1[256] = {0,}; + char part2[256] = {0,}; + char *text = NULL; + double time_clk = 0; + + win = data; + + if (msg_timer[win->type]) + { + ecore_timer_del(msg_timer[win->type]); + } + msg_type[win->type] = 0; + + DBG("message %s %d",message,win->type); + + if (!message) + return; + + text = evas_textblock_text_utf8_to_markup(NULL, message); + if (!text) + return; + + block_width[win->type] = __get_block_width(win,"message.text", text); + indicator_part_text_emit_by_win(win,"message.text.compare", text); + string_width[win->type] = __get_string_width(win,"message.text.compare"); + + if(block_width[win->type]>string_width[win->type]) + { + msg_type[win->type] = 1; + } + else + { + msg_type[win->type] = 2; + } + + if(msg_type[win->type] == 1) + { + time_clk = 3; + indicator_part_text_emit_by_win(win,"message.text", text); + indicator_send_status_message_start(win,2.5); + } + else + { + time_clk = 2.5; + __handle_2line(win->type,text,part1,part2); + indicator_part_text_emit_by_win(win,"message.text", part1); + indicator_part_text_emit_by_win(win,"message.line2.text", part2); + indicator_send_status_message_start(win,5); + } + + if(text!=NULL) + free(text); + + _show_message(win); + + msg_timer[win->type] = ecore_timer_add(time_clk, _msg_timeout_cb, win); + +} +static void __message_callback(const char *message, void *data) +{ + struct appdata *ad = NULL; + char *text = NULL; + int w = 0; + int i = 0; + win_info* win = NULL; + char part1[256] = {0,}; + char part2[256] = {0,}; + + if (!data) + return; + + ad = data; + + _hide_message_all(data); + + for(i= 0;iwin[i]); + _handle_message_by_win(message,win); + } + +} + + +int indicator_message_disp_check(int win_type) +{ + if(msg_timer[win_type]!=NULL) + return 1; + else + return 0; +} + +int indicator_message_init(void *data) +{ + int ret = 0; + + ret = notification_status_monitor_message_cb_set(__message_callback, data); + + return ret; +} + +int indicator_message_fini(void) +{ + int ret = 0; + + ret = notification_status_monitor_message_cb_unset(); + + return ret; +} diff --git a/daemon/message.h b/daemon/message.h new file mode 100755 index 0000000..5f783f7 --- /dev/null +++ b/daemon/message.h @@ -0,0 +1,25 @@ +/* + * Copyright 2012 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. + */ + + +#ifndef __INDICATOR_MESSAGE_H_DEF__ +#define __INDICATOR_MESSAGE_H_DEF__ + +int indicator_message_init(void *data); +int indicator_message_fini(void); +int indicator_message_disp_check(int win_type); + +#endif diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt new file mode 100755 index 0000000..4ed88bb --- /dev/null +++ b/data/CMakeLists.txt @@ -0,0 +1,7 @@ +CONFIGURE_FILE(${PROJECT_NAME}.xml.in ${CMAKE_CURRENT_BINARY_DIR}/org.tizen.${PROJECT_NAME}.xml) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.tizen.${PROJECT_NAME}.xml DESTINATION ${MANIFESTXMLDIR}) + +CONFIGURE_FILE(${PROJECT_NAME}.sh.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} DESTINATION /etc/init.d/) + +ADD_SUBDIRECTORY(resource) diff --git a/data/indicator.conf b/data/indicator.conf new file mode 100755 index 0000000..20a618d --- /dev/null +++ b/data/indicator.conf @@ -0,0 +1,2 @@ +height = 48 + diff --git a/data/indicator.desktop.in b/data/indicator.desktop.in new file mode 100755 index 0000000..4a7fcde --- /dev/null +++ b/data/indicator.desktop.in @@ -0,0 +1,13 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=@PROJECT_NAME@ +Comment=@PROJECT_NAME@ Application +Exec=@BINDIR@/@PROJECT_NAME@ +Icon=elementary +Terminal=false +Type=Application +Categories=Application;Utility; +Nodisplay=True +X-TIZEN-TaskManage=False +X-TIZEN-Multiple=False +X-TIZEN-Removable=False diff --git a/data/indicator.sh.in b/data/indicator.sh.in new file mode 100755 index 0000000..8e5236e --- /dev/null +++ b/data/indicator.sh.in @@ -0,0 +1,2 @@ +@BINDIR@/@PROJECT_NAME@ & +sleep 2 diff --git a/data/indicator.xml.in b/data/indicator.xml.in new file mode 100755 index 0000000..4e8aeb9 --- /dev/null +++ b/data/indicator.xml.in @@ -0,0 +1,12 @@ + + + + Youngjoo Park + seungtaek chung + Sung Park + Indicator + + @PKGNAME@.png + + + \ No newline at end of file diff --git a/data/resource/CMakeLists.txt b/data/resource/CMakeLists.txt new file mode 100755 index 0000000..cd7e07e --- /dev/null +++ b/data/resource/CMakeLists.txt @@ -0,0 +1,50 @@ +ADD_CUSTOM_TARGET(indicator_port.edj + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/icons_edc + ${CMAKE_CURRENT_SOURCE_DIR}/indicator_port.edc + ${CMAKE_CURRENT_BINARY_DIR}/indicator_port.edj + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/indicator_port.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} indicator_port.edj) + +ADD_CUSTOM_TARGET(indicator_land.edj + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/icons_edc + ${CMAKE_CURRENT_SOURCE_DIR}/indicator_land.edc + ${CMAKE_CURRENT_BINARY_DIR}/indicator_land.edj + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/indicator_land.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} indicator_land.edj) + +ADD_CUSTOM_TARGET(indicator_icon_theme.edj + COMMAND edje_cc + ${CMAKE_CURRENT_SOURCE_DIR}/indicator_icon_theme.edc + ${CMAKE_CURRENT_BINARY_DIR}/indicator_icon_theme.edj + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/indicator_icon_theme.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} indicator_icon_theme.edj) + +ADD_CUSTOM_TARGET(indicator_icon_nonfixed_theme.edj + COMMAND edje_cc + ${CMAKE_CURRENT_SOURCE_DIR}/indicator_icon_nonfixed_theme.edc + ${CMAKE_CURRENT_BINARY_DIR}/indicator_icon_nonfixed_theme.edj + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/indicator_icon_nonfixed_theme.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} indicator_icon_nonfixed_theme.edj) + +ADD_CUSTOM_TARGET(indicator_icon_animation.edj + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/icons_edc + ${CMAKE_CURRENT_SOURCE_DIR}/indicator_icon_animation.edc + ${CMAKE_CURRENT_BINARY_DIR}/indicator_icon_animation.edj + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/indicator_icon_animation.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} indicator_icon_animation.edj) + +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/indicator_port.edj DESTINATION ${EDJDIR}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/indicator_land.edj DESTINATION ${EDJDIR}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/indicator_icon_theme.edj DESTINATION ${EDJDIR}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/indicator_icon_nonfixed_theme.edj DESTINATION ${EDJDIR}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/indicator_icon_animation.edj DESTINATION ${EDJDIR}) + +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/icons DESTINATION ${RESDIR} FILES_MATCHING PATTERN "*.png") +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/icons DESTINATION ${RESDIR} FILES_MATCHING PATTERN "*.PNG") +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/icons DESTINATION ${RESDIR} FILES_MATCHING PATTERN "*.gif") + diff --git a/data/resource/icons/Alarm/B03_Alarm.png b/data/resource/icons/Alarm/B03_Alarm.png new file mode 100755 index 0000000000000000000000000000000000000000..555600218ffd9f89e113b8f526acab4ef594efec GIT binary patch literal 1960 zcmb7FX;2eq7>>HxwZir@iQwRlvt9tc$tFC1@0w1CnL0{X*oraQa)9s54d^M3C!yFP5* zESF(phtX&>7x`>hL5)-GkCP+yK7Fb#k{ZU4QY9Hq#F9y<5vPeTA_k|+b!Z%}z)>uD zX&oL!qYXN!jZl(GWUfF>=oqNohGEeeC^U^06l^h|>I9sm$KY{Vy%2a&brPU!F(I&! zgRl^T1lMS1rx@|@lz9>Alms;&1A=GJgDe7yK!=kk-J(m>n*L=HmdV@uUjcGv*Opw818hdQ)=j%fu$hQ$X zUB9)7RN$YT|0=&JBH4g56}X8o8`V@6W4*tS`nHhWu=flC1T`k$R2F4uq6zQ$fFOcU z%6Y9GO@s-xS%>RMIV=RsW-TU=ao8LV%od428B0p#hR+5$FpnQ726=2L48wf{UjivD z21a4U5;i1;IUvO0i$G8sz>|mrq%Jn7^)vIy4s2!{QjAeZjE07p* zlq8H11d-TRO<@{>BupB@K$nDb=~EVJ^%#+4^0lX$;--!Y<3{Z=9FrLd9la;&0_|7y zB~n<#5=kUt7zU*f2=X{Av4kh$fiRl`1%hIr7mNMxfH5ggnD#3BqU!p#s8Y61`+JC5 z^mieyr;=u*dTjsj_He3of04tY2utJB?a1ti`R-@a!fh@#2gjc?tn!iNPHLyo)|up8 z+nUQj?WW(eHiQk^nB_l_48(}%`d;;IVx)UuIMqI<_Eb0kcpcUVsb4sTFT^0`p*SAO34}7T0T;aMcyQ{^$f;O(>TKWps zvpiki33K9;FuzH!c3~qL_c9&i@_T{#nKN>lGh?01xoA^J{I#&iLq4YYlLd4w+i}^e zkG@hSmf#!j5tcf)B_Mwexxlbuuyx#l3ZQjd#fUtSN2+zx*^9>l3p76zEXyvajRmxTn%f=YXfbnVxPI?s=$aIs%MR!H2V!FMgo_sHYcbQL#p#+RqP#mLx(>)om-a{_|KgoATN$Q4E2ht z?f5V>;?YET=)JQ1TONlmyxFj&Afwq?^XJ4m$GY76+Yfk_B3HZLYU>!U3vsDOVfHa@ z@Zh3@+HC&0&z-FIT>~%GR8==djc8xBFS@|? z%z5i|a}+Jyy0)gmx{-X%L&{fm9$h}+xV2)%Xdh+e&AdmQw8D_*QGY$?Y*m#ol5MJC ze&>@n(O#_C%D9*?wBx;Br1({#mun|f?&omH)2nMdZ0`0{ZfR}5-vQ}9+` literal 0 HcmV?d00001 diff --git a/data/resource/icons/Background playing/B03_Backgroundplaying_MP3playing.png b/data/resource/icons/Background playing/B03_Backgroundplaying_MP3playing.png new file mode 100755 index 0000000000000000000000000000000000000000..5dc852b4484fe15dd73019b2dc5ea1598980628b GIT binary patch literal 1415 zcmb7EZEO=|9PeN#8x9ns)2ZP+@P&1|>(lnS_R=!jyO!0i-P#pa;#6+!)Aro%g}W>5 z76gWX%qbr*VJ=1zXH;TTrXPIS!lpBZj4w_hK?VsdIx?0;UR*T31bl9+V;{&8FL(F6 z-2eCc{okJJtPgE0DK0BE7z`!;8a9H)a{XC;7kYpH-N3!3g9MZQDkm(_mP7jE}~&Sg@9kO9H{^HbhR45!zsIR_A0c-U2nO8K!vAge1i5-R*GV+Za46myr?z~E1+1rqsjy9Rxiu4d4h#Nq(vkU)(bq8#o+^H z%HamUYjK;cz+RA3Z*0d;=W)#S2k`k4q)_gbBrzK5N z(~^ua4L0oQMqW%vS#`Z$YQ&8~Wud}vhY6n|3D|7bY5orS49mJrZiex&Eby8Euu~=v zV|UvDYo*Lpz=O|W6aPD5B=UsRyKF(%<+o5P>(lu&gckFs5Q?a13OZxTq<^)+P$2qQ zcQiLP-9rWn-H-0iPV8CpP4l&-O`!Zqq5F-U%ii2Ix?=c&S03z&6@I(U_FieQ7e6p@ zXrvh|FTPvp->_n+V_A5+locLp71inCMaPC3sH-&b2+XMMZs z=MLATv8&(dc_b9LaWEV1HpV`yyWBWg(KK9CyB=8#x&{WWepE4a{hr6{dpkZq8u;OF zrt$bCYW#e9|L8`w^hp2VL3up9I`ef$&%FonHB+e%w998cncNXzo{_iy^U{ew&envj zf3|&0g#Rk3etrzTMc|H;orj4h2EF$iM+M_)=ER3bcWeti^<|;D$-mhZKKANBIa@vc z&=(g+&ZyDN(Hl$f<3DZLyDwa`((>aNF>?L2OXVvwUC%cCYTL=5{iScq%sbP@Yd0@c e?baa`8aGk+Y2Hzec||#D418y5~O??eJ3o literal 0 HcmV?d00001 diff --git a/data/resource/icons/Background playing/B03_Backgroundplaying_Music_paused.png b/data/resource/icons/Background playing/B03_Backgroundplaying_Music_paused.png new file mode 100755 index 0000000000000000000000000000000000000000..fdb651ad8c972b8ef91279a291a8b041b17b2922 GIT binary patch literal 1148 zcmb7EO=#0l9FM3&hSP(B%!`lg;#ZrzuIWcuH`2V+6_#yug$)!mOWxYhCNCzhwwtJ+ z7l(q!fhS?$QPHah1reMG3SPv6gW*M;ABW*(D86)UH)ITaBza%|-|zpO`SH;+J>5sU zIgabe52FH`PloTlF7|!#eCaHkdZ{)=C&&z~8$RX~i%esXcZ?D)V8fcdxP%8dZudjG zI7O%Q5!ob8)Cgsw4aZ|>jvE+ic!pWQ6inli?PmBNPoDC?wle&rq>H+z;<7zF=i`aF z(V{t5G1C@5GzbP7G9z#>H9*6ux`Eut@J(Kst;1u12Tc)L$?zLSP3hx6B|ZjHv_E2s z5Q0P^3gc2D0Z)UN2xEfCooz5v5qxJqM z@k;_sr_&)vEEZuBkzm%PMkC?|eQgGW1Jk!XY7-ZPjK(yn(G1Tl-EhJ23U;YXgATbH zw1UOLCNvCBfKgHKn=+w)ZIrI>jBuQebU+Ju)A()qgW{}*g#r#p%{N&VXZp6N+F4O3 z*z!Tv4Zng}7IQ{5z|9L?m&cg#wrf-oF>4NXX&zYOCA4G`YB@EoiAZc?^KL*5*TkXH z5NmH@#T~J->SKcvzeq^6T}|UD6`x)53cl_P@@~dCx9tHV@mFX+T9=|;D5%k`E zT|M=wd~46)wL5RGjt$-)TV0qx`1SL*?8ukPi}(H+>)AIet9RcEhyMIjl;n*AySg~I W+@#gRFe~{Nk(Sz)T>wf{#V|ZZz literal 0 HcmV?d00001 diff --git a/data/resource/icons/Background playing/B03_Backgroundplaying_Voicerecording.png b/data/resource/icons/Background playing/B03_Backgroundplaying_Voicerecording.png new file mode 100755 index 0000000000000000000000000000000000000000..684e193da76d6f34040ce12d1d5da103993022c9 GIT binary patch literal 1499 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{b+9BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFt5)Hi71Ki^|4CM&(%u=snM&*Edc6fV6d^TC`e4sPAySL zN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD(aRO@$TEfZWuQ zM1_jnoV;SI3R@+xxmG|nNLXJ<0j#7X+g1tUs0iNx1?T*tR0UH#W8Gu}Lqi2KGd)8S zQ!_I|9R(u;LnD0yATrZ6G_f)@vobPQfC43;ZAB?*RzWUqP`iLUTcwPWk^(Dz{qpj1 zy>er{{GxPyLrY6bkQqisxl?#aY$uBs(w&vaeir0GB6g?l##5$ZxKi#)DKp^iAC9|z*uxk%qdO0+x?TAG<+;0lZzOA|v=7Yj>sCqoMpR~Hu- zm;uNdfp+Po0QDMK7+F{t8XFp!S~?jTx*9tfni#tQ2_r)@BUe{9bC_PwyyB9?yyR4n zr69eT2)zb)^;$U>r6!i-7lq{K=fF}^Kt_H^esM;Afr4|enSw@mW?o8ud9fxas)1$$ zz3P%$lv$RV;#QQOs{jslt4u8RJG;0z8aO&TJGrE6%3k!fgHpP38Pe{0o9y=P%gTSMlN9UZ;y}w-+6q?Y{Tr z!Jv-mU+oPV70rCN{meSe_vgljnKyr?mrp*sZtav!#}0a3n-LM^BwN7w>OuR;;<=N( z*ra~7=rk|m+OGCn-Ok2)}Y+{xJd1ZLEG>a~2<${P}P566g1s zdvu;yM^6d3n{d0vy*EJl3Wuqad;AOL`UjVPT>f@@W$H$wm3G=^HfT@26ub6}jHy#{ zg#L$g|8J`W?>{ZFTXObFOI^q7QoZ@6kK%X62$#-}?d3_Hger#K79M(z1s|z z6Zmq9V$~mbZ`9sZ*>0PpxY6J1eoWuiPeNIR=P%m)?oymkv(9qagw5)kSPPEazjpY* zUh4w>yq_)WH%y+if|>L7pD8}GF3h^&w}LTxN}b(So97vqI&=NsT=0K-Rry(}l<9Bb Z1cv>YQzY~atfqsCTTfR%mvv4FO#uCEC?)^^ literal 0 HcmV?d00001 diff --git a/data/resource/icons/Background playing/B03_Backgroundplaying_voicerecorder_Recording.png b/data/resource/icons/Background playing/B03_Backgroundplaying_voicerecorder_Recording.png new file mode 100755 index 0000000000000000000000000000000000000000..7d939ee61ff0928dd74a828de9ba813732aadf6b GIT binary patch literal 1627 zcmb7Edr;GM950B#d>}VGne(wM^mc%@O-j=?(IRcrO4ULwojlaJkfyXinwkV!(33}< z4t3z2Okr-*p_9oJ6`$zFaBd<~H+SCon4a#yn^L!Pr`&LJZc7l*KRoZ2OY(c<`}usn zuU~3x8FR;vd3B6LA{lQ<$L+$HEI!eZ!u#7(-HU}`GH=S^vltieCs<0NcQW}DV4;Zu z%1#l^vgO^>Y>8ylK93`Z&#^ARNQRaZqK!O2`vkN^GJ8(IN03Dn59Ct?9s|b0-E9pAV3#;IV_+92YE4JE^aG8 zV9$i3W9vV^oL0)$Ti%OM3jXd}iqjIvr^jG*Ze zYmT>5Pn~}*Kj$d(Q3^Z7F(oW1RMD02jMR&TM8lyNFe||pQ9>2XL@`GVez01xOu>1N zmng;=vV^9*yam^RB_$pwW=2#9f~)j;*bJG3+Mp^J!L_Ky0Bcny9LI+Vo&^e8a;Jb* z8gNJt>tQ8=8erIzqDK(OjH=C$5yiETK{brEcsZW%l9VVaVm(i>&AK-9p_Rqy$QcqABd3t^3Podu zGnSWj!X=S}8!Wiq5%}rX#>_-qKecP`()mj!YD|`-)j@Wh zN5S$~%jF9b+_BwzBKw=U+S2*=9}}*%sZG5U(Si28+%n+Wdbl>vAp2yqZT_8`@#Se_ zzj$}StVMO1W~Y5s4P;K()TGJF7{9rXRnuKwXAMi!?mCLC+K@4w(pnLt9=d4 z_v2Fgk1lDiuWeqw@^ZTL?v>cjBA4}Fo7M1X#*OaS^6vMq-8nYBYoO|E==N^o`t2Jd z>Z<1L2g!Ks%x^OlmD8NTgUd=ke(QMGj^oqAcXaOd$G6BX44`=uI*V8uy)kk|yeK^m|uzUq;0&G?4jqajFmk)ZgRRH*Tpp3b-Y4 zfK=Ob06k%RkdwZruG(S?|EqIX+JQ$ck_2fIvF(*DY0Z_#b9RQp_J)2>PD%QaWDZ@o z2Ddm0GV|!5q0nYd4fP(0TX#~n?lo1g)d`-Drd8;K75Zsc9*wO@Ihfgc?(0x^Lk}C- xH@V}|4{M{Oh4CALGj`~X0VmNoTE>1pwIZ!u-yt%kR&{{sd(R?`3g literal 0 HcmV?d00001 diff --git a/data/resource/icons/Background playing/B03_Backgroundplaying_voicerecorder_paused.png b/data/resource/icons/Background playing/B03_Backgroundplaying_voicerecorder_paused.png new file mode 100755 index 0000000000000000000000000000000000000000..6980ef89e932edb7f3b192922c02c73c192b2761 GIT binary patch literal 1586 zcmb7EdrZ`J9IuBQs4#?~hzcpyMG?5R_u{VMbl2-KPCYmdCg514^m<$a*B)&T4$WLP z%_5JfTSVF1a6X9QbA;*0!06(fBhk$`onXwSd#b_Vrfzef?pFl#4`Z^X?eEd==kxi# zeyw-qz7#!q=41$hq8&Mu8;lE-CsGaGCr|Xg0)|A{UMv>~Ub&VQS;*=U%30Xqrz==D zOMB|7d)X`q3OmFV7R$xXr354RHMC-*3Hbv64MACpLIIkoWM#OVt>AbIGT40#fjN%_ zDKa=QXTZk#xSW+DTd*>>kXc#Dm_5j%g>Y7g00e$krs0skikFCx1sUNbz+Blz5qQKz zuCySJoGNy@V4EPautB5CU@#nqjYbWwHyDk0I;_QTEsBBLn1SmFgOSi?!lM@g)I^V$ za8uc%T3}^Ce6k!MP_(wTR#U6f2x0|_o6Tm0L#xdI78z0shUG+7{RXowD=xCTST5gR4GF_hE!Y=qxGZY{}f z_ObI%<(CTU0xargB_Sv>po-o(Pe?smNHH9ZfpF4dB@3#UO;<_m$OosB$OF!EJY7Wz zOwiBrvV*c9!64@$vJHBJfzn&8cs6DSwK3~)17$L2lDJ84rzmQS;7K6R(s%$?Yt>SA zyB60P%p{K6btW5TGU@d8Omn8zY}a99SO+i3G|#Y#sDkAlW3gvq37g2$vLF@;Le*F| zxqN~wNIoF|+X{^E{34F`2(?nGQfj~rLZw)dt6@FaqTq)|vQBVM(YH~Q6|>rGBt_vM z1l(l6NSn!O!YRE$n~9UiDAx186NUm$P^HVB=(@2j(8|hm{0xD`_$g$0P&5&oG3&&` zEfAzibWqm9(4~PEOU{WG<4+CI4bM$4ik&vEEhiWoku>p?2Fcw4ue;Pfy>#}jMq6fV zLhQtdq*AI{j9(Dn;W`jWM&#dOZg-N)^$%iN1Lwam9$mXjAG7*raq#`2-G6IPl(*-X zUMNd0YHrCVUxQWeUimP`z3rQgiGAm$oKu}^IMT*7oz3DupTR!-F7;Xl{=4c-!7KcUER5`Wasc#YwBM=I1L*5 zsN?dzyOC!^^0Pf?dy3pR9M`7~zi~`u{qx>+lPbCQ;e_%XWQ;i_|3;%P^3}NyH#H2l zbbFIRFDE{q-nt^MDY^P4cO`sQVHa1jd+~~hi@bVuGkyTs%0=|Jx@WCz?}>cl_TscC zUCsSj#aF*BSvBKwLF(-A)Qvlng#Fitryj3a)zH|MH&vbd_8-;F|8)N{?4OAz$JOV1 z>#)iEwVnz4*DS&E@YLANi*5}bpKAK)Usc(((r?eC_r0LQJHlXf>&;fO|E&`B%`){s zzvW_QUengH({-!%hHsyA@B>#=dVW*_QT%Jyp|}UazAfJ`Ikl+)J#l#3{P2VyN|){G z+IN2QwUhQ8OciwH#!*)+6)c95o~VJ$s4Zfp$D zG5^@+WQc&=5a$C?d<~f*0uz}h$8qPO6TA~e5s|4d1a&C_`iJM;a!G!Vd_SMh_w~Ev zM@FpkboY1X@pzt^a4d=&S2-V77w+BIaCI9u__69ZHkwXiZ3IK|6b3qx1T++pOh%D} zA${jnGK|NYUS-n7v2ogssGg?ygwuv^rz{+r#|v9)w-EXik_8gUWRqDA4%A)*0h2)v z#)`GD)}kVfrf>&CMmr*OdPj<0W&qc&0mAGkM?jG*0obWjvlX?=!Es)cn>)855EwUM zQ{>=Vr{c7cfQn{FK+G40=wSo_BoaO%5=$gVFd%>t0R(fmBm@zmVhJh;1tu<#Q)3KC zXcUG|XmKk!Xk=Ln3PCoTjc*h3X(ky$WHOnPLm&v@EJCd5W|pvrn5|1E88FhSXG|8> zM4JI8Bauj_v2u{}^lb=~CCZd+WUW)=X6r<VX=x?{ii<^JF(y(d5FA!>wULPsF(#FTDiNtjjbYd%!TUf?i*Mkt zVq7H>$fRn4Sf)l0wNR;0h;V@r$7Kq!P$-p6Vl`$fOPKYfQ`Ctyy~AQ3#iA;PBv_i! z(RAu$H$@t0mbMyc3!sXY04rimW&>@ru5^}~-nBnm(W}goQGt z7?&wA3{eXZL@I`rDyc$>U?Q;~6j6c`Si}EL7{qx3IlJt=uAAKATG=_BIz!xI>J*Y@ zu4oK*#ts+7>v+6R{?K3woxSsM;im8yg>Pnn$D?SqG0MGf+{J2Rke z@aSL&yD+KL>$kai9e#56=I#xppEXOp)HnNmHT3$#-pH&@>&>LW)j?yAu8cbDrLWJF z+*ov|A+Wr!(R!q?vEMECazMt38mPf*v0q0(F15;#+m1+HJ^CPulkIN@}*=Yyz&p4Liofo`IDhH&w-o_I(i@%l4qkQ(B zIq2si`26dKeI+@2lX?QdX9cuaO`GVfu?7TAlP~jTgdF2L)=W<}NeY@L&9V?ah zf@|{6rTe7B|LgFMKRIppb~>->x^8!47I39&8(yo%gSrEPaRcizJ5JEqv$`A&iVfDY z!Z0SF{9>!L>g0EA*VZ)k8vi^>3-wS-MKDG5#18N5dVt2mr(%zncNOH7K8zu5f6+t6dXBeaWZ$42=9u zaJ}yGrpy^Hi64wvUd!*2@!wxNn-iXSZ{as}8uk6T2Uc9GcIy@VJm>I*m2JaMRQJQf zwnUWv)Y`jFI&)8ZMv-k+d`ABB;x>)7i1EiW-}H=hWOa>IDYIt5yz*0fV&eU`?{@xb MH0lWKxN=AKf9f%wTL1t6 literal 0 HcmV?d00001 diff --git a/data/resource/icons/Bluetooth, NFC, GPS/B03_BT_On&Connected&headset.png b/data/resource/icons/Bluetooth, NFC, GPS/B03_BT_On&Connected&headset.png new file mode 100755 index 0000000000000000000000000000000000000000..aed1b18a394f38bed04f3bc8ec1d167d75496140 GIT binary patch literal 2022 zcmb7FYg7|w8jc_rL9_^qXuB{Cc!gYMk_pKyw}hD(3gHqX2DO!tOh|xa(#${tA|eWl zR@7}#s5crRm0B-bu*#N-VXdoZQ4m{E)O6il)`}i$OIu-a-3bNjj~>t2IWzNJ=6#;$ z{oc!&Eg5Oc0{rItF&K=1WErZU$EEJa*PDKyJKMdQ9_CS)ids(SD686nGsIdV7YCA! z>O5S5tFcjK`PhUamEQbnocsfdO!vej-Iw#{g!(F{gxg3YYf6yOw)i{}|kam+^@ zXPAIN8^>G;%eiuM60SGMN-g;E(ln)}v_K=$G85u~SQ|nU7;#Ds*o=iH60yZGCwLKh z?%w7wfe90;AddNqQ!04|kVIH;0A}-88ZHO|0s$N3!vX;q4M1EF;&AC(zykRQEI^0E8EIr6P7#91z5!Em&lUiBj8GCNg4* z0mVs;#bBlkgb8pns&k1VDvn8e`pXfFW`!Y7Pm#~bP2^;-=&*5YYBL99b2*j?8~6F9 zP;&Xp5k}*4Ym!pnzdHY${G_tPjB^w?NfcQ$bQX0HFG#&y$Za@z21Ks56yS6grRqWw zpZFk`Bk8pB29vrFB{W4w+(ad#am=D3gBFp(d>BUgVlgP?Vsvgqd=N&3q8JG%VwI;Q(Oc#{ zBPV42BhT=}**0&}rbEu`BcFt>(6WUy?&RNp_3Me4vw1W{9~Ro@alPT;{wzeo`l-*u9I*M-vV>%RhZj{*&P{V+mFP|nL2o6mt!?fa zYimQRv%M>Nq`z|O%9_Wv`9Iuo4ox38ICd|{S@Fd{sL+r3+Jg`zP^(GJZ5&Ni2HuPW zulg(A^bO9Qc1JeOAN<{CZ$j~h{^)Lctm7+zMeh*d2i zBhMU*tY8-XlrnCDgH|n~OhFs6D{|sjdAWX+N)Dxjb%psvA-C)UlCGbvuPh1LvtUcl zVk~cNqW`)5hcg!Dt9o}jHeC64({NSWH}Ov#4ckhbNU!&-sG*JrXvdhhfhR|94Z8BkF>E)wiDP z0Io~)O{wo?cB=9+!=iosTk7=JRH?<4v85Zlnk#i}cbQc+3PRSbO!<=3ySz3Ed9v&g%b@aQg1S;EQW}x8>VYoIq9fX9>ei#l2PK)4cwB;^EM> wop7;IP`N3`*;sw_;`V3HqQ1Z4_cX%EXwQGL@5)~t&F(*MGM0uOljKzX52Wo5l>h($ literal 0 HcmV?d00001 diff --git a/data/resource/icons/Bluetooth, NFC, GPS/B03_BT_On&Connected.png b/data/resource/icons/Bluetooth, NFC, GPS/B03_BT_On&Connected.png new file mode 100755 index 0000000000000000000000000000000000000000..44af49dfbce9b1502bfc402a84cf5c079fee0c33 GIT binary patch literal 1708 zcmb7Fdr;GM9IwOqLhw+ib%=|>`9S+f+myCYT-u~qwFrd?=L8noltgG#niPtU?GBWa z+fj7PQ-=;zkfBpNH<{D9?QjD{d5BK%$+_NiI@IBKczVvI28w=Duw) z2n?C9SsL(#Qz^!HKu0?X02axFW(foV3WW%g!wLno2#`u3saV3@3Lzv{!wR)D5*WTf zPR(hts!gbVSc_X}K$2x0YOy#kFHe*w6Vc90F{Dzdd>m4#kh2gn`F0j}3++t!2m?wm zW+&xfDcTPB81W3+#cDv#(-$Gw940E0WSLQNJ2RXtE^T5r?hr#FiP$-0HKT?nWTINAvO^V?Q)vADq6!|k$SU`&u};fwGnq_5nL7Zcs4@}eJ~o; zD>&yVJD!cwW|xhyvj$WHx?Ge+t%v0>jLH!N(n~O|HYzy;qe@kz7E;PF6h%h}UIlVm zA`6FAz&fQ&3u97Pg+UM|Ly$;4iYSx_q}1xAGHe8Eurn-fHxoWlAC`KFMc;^3>zoA6 z(#|BB&K~Kec#>vmhNK;UE>Qu@Pp0e^I*(c4D>cW>g^ChRDwnY6owN-Y%DS3*jlN7G zQ)ywnN{gZpCWRm+EYa$eh!R5Ourw0Vg2PzL|4x{g^F-|HvRArpWQ%KM-*og0af{JY zNZ7feIk_{ov-nvnkM~xY0Y#GBS9`9U$_hpVO}(cCAq8oH-J$;7NT6v4$XAScHYNBX ziUbEQ8hat4VE)`q+cxp{FWDoIOyC#L3GuTxH!ql}|0R6Q`z4#_ERBZ0=#Tn)Z0Xr- z`|TYq_mNqTMu8xQhu}c`umsVdh{R6x_{=q+I=^UA1EPu1@q$HO>UR-l|6(0 zxqAZAmo?t;R;_MUJPkZCPUkM+H|hJ9&Z9|hi@Rvwn54=l!8gTcz2NtB$7D z-1=vOz`v%`_UYu6-PT%#>)!PB)6RvRd^*)!)SHtY)>7HlUR+8Z`;**#zG36Q;F??y zcD_}vKx$@c6Qa7(cWF1E?IFjB$DirQ9A$lCeD%b_BEQ8yPZ5#_+0?q2oz*~VWi!~f zQPvrHHIk*3qcTQ`@ zvg+BX`+w|+I8%Nq*05o)sfVQZ*|nYy-~Ypa#i56_9~JxuTq%Tn literal 0 HcmV?d00001 diff --git a/data/resource/icons/Bluetooth, NFC, GPS/B03_GPS_On.png b/data/resource/icons/Bluetooth, NFC, GPS/B03_GPS_On.png new file mode 100755 index 0000000000000000000000000000000000000000..c594f5a281e5388a32193db0d61e2c439f8ea709 GIT binary patch literal 1692 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 AO8@`> literal 0 HcmV?d00001 diff --git a/data/resource/icons/Call/B03_Call_Duringcall.png b/data/resource/icons/Call/B03_Call_Duringcall.png new file mode 100755 index 0000000000000000000000000000000000000000..6383fa5f8776049db958e0cb59a47ee73c9774a2 GIT binary patch literal 1573 zcmb7EdrZ`J9Pe-fLogDyDZW-KK7qUI-SxQZIL*=a^pwKwKmj)$gD8{jzbb)cP`b36tq$C#WYmabCS0Eak6s8+lh{Js zMcPNTz{-jgD~cD_YW;q{#&6JwQjr$5SS%`sUY`sslI5VFFo9%2o;$`sa;PJZnqGClJCl}<=WP!A41B_RTYIIs@#72#83`Nt=M|eEr*0SQ_ zo;d$ZemOhn<+LtN7JZT%RIzaGQ&P_tQVmCAz-dM*;XoDbOsUL`e4uGO6FAQcOerb4 zeI8Cw9HbTT`FIw$V@3=kjW!!<*HNH079)z0W=l#MYBo|NNsbXb4Fp;m7GTqKDU^;f zQhLlnp(tfYBM80SNDyY7&X7Wp#2D5g$O9aDz}uPU1IktX&d4@JQBi{u%ltWw2ZHq`_uD4U_>z z%{n7N*-!#C8f<2ZEd?3Hvj00_THuLR?Xsu3Zfpy*vN|0m zZCR}Ecf3+rGkJY=Y;M&G;{Dy7XAi{gtZluwudMXvfPZMq)_bjC_Hay2%A9lL z1oq+1`Zm+tgadhb^M9Iow7Aqyd>C!BE;`<`X{F+vaa3+_+ZE^QH!R_w(5$m$ddlXP zcG*^%FP2SeL8_K~X8!wy{oPI99_zDh$BtXkj@JCx)!jX3?mUQzI#s{pq_2Z7|10){ zJAL-Rm6O)4OP_CDV(OkDxH|Cs3x9l^+8Z~}(BN>t_rt{3^uCAdx^m-^&R_cNjW8Z5E;6{>5+aQ&2|+J9$Fp)ZM(R=gXz;!DGsb++;|6&Zm~hx}p3>@UvCxxPEr6n+0t z*soD7w@=p(_IIBB;LoY~odud@%(RRL!@H99^{qLQM+{zddKBq+>Q@Pw_31Yw_Umsg z3noIRcJyJ5p`L$gI#zAYJcSRuoLAKw`Yx1Qe&}NSy-oh#_xOg3CJf}9W1z3Qx5ZWI qX10Yl^dBzM3|GG$x%hC!#A%S{a;>lNT=P8j$L*jp$b)J5mHz>{B0+ip literal 0 HcmV?d00001 diff --git a/data/resource/icons/Call/B03_Call_SOSmessge_active.png b/data/resource/icons/Call/B03_Call_SOSmessge_active.png new file mode 100755 index 0000000000000000000000000000000000000000..920359f9c9704b440cbdcd2ca3ad3526dc2ee6ef GIT binary patch literal 1497 zcmb7EdrT8|9Iso>x=eAVb|VOE4DPHjs};>wf)f^aJ_POrM1q- zNQj6F1l>@#xxtJX(J5xSM`Ug+#t4oXwwN(>+0#km5Vt5qw?y|l1oRI>vdi859{2rx zKHt~xwmTgwGt-_W85CmV_$>&I95SRHi{SCJ_o*-p(d!kMR;Slv&m(FTrdF!pt(Rk3T&Ks?#mLNsLN(rB zi@Qkcj22v((4Z)WaiuaEjVhuV1;+=Jn9*pIIMix6w2%uMLLwcLhlGMz1`-H9o(YQ# z7eXXP+RH^m6AC@O7Xll0F@c~c%#nwLnPkDVDPwe4i78Y{e%eNgZx&^@&yQf)Icq_5 zf&0!slwWXf2m_@H2wa5s!7A1kJRmi{kYqR$18%4JdH}0vr5gk={lRX>E1>gCh;AS` zUxWoA(MFokNQCj@R-IO-Beev9SydFQjZur~NQ1H1j2W~PNs_Y!4+5cQj7EdjY&EMb2Fjo&is!JlkRZ|_ACN>PEOQ@A&Wpt@JfKC6cXM3BY&SWB zoX815E{s?z^~iHoOvukgg%wh%AvX+_1U%CO{8pZ0k?E}C%tQ1^N@F#uNe!XFG?WIz z3@WXKA}|Z4)er_FQH;)D{r@{*O6ZAF>aqvAZgvZ{vNWALLvS&73PA`KjfZD!a?jYu zGTDLw8%elh7svNt<)>bJ>P*g?zoG5#XFoaYOe{{gmpX{SWs^yXZQ*fL;g~qkzd89D zdY>H7-P z>SvBtjAq8CQjQE5 zKXae!cIG)2ihF-Narte0ciSMV^8U?|n_PdCzi@MHIH@aVYGYEQx}E>oY#*^L{jR%o zNn2$R%!`};y!+uu{(@xL-T02yPnNwh PEd6Y4l!H8Cu4(=cn<*M@ literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected.png b/data/resource/icons/Connection/B03_MobileAP_connected.png new file mode 100755 index 0000000000000000000000000000000000000000..442b54296f42893ff36bbd94ee7e1931ae8d00d9 GIT binary patch literal 1972 zcmb7FX;2eq7!Gm>sYn&@K&)#JfkKXrImnWTNj3q*AeVymfRHRCLb74Am;hyl!>Sd< zT0~JnQ3OP-q9_bS1U#yMA}HQka7INaq9WsgTDw6|e>l!`XLrA2-{*PW?>%OJ4G!|N zB|DKxB$91_KO9PoKbjtEE8>0bOw&?gn2Jjx@h~(NH^?!BBvhg?2oRu=$04DJT$!BM zgz!lu^CRl;NIX)u08*eDn%rbVGir1MnndFJ8g+6-Jc0u;NSs(U`SX>P`Dx`UcpmReCGmuBSa8r5L^xzH3?chWE4<_c_CtM+NM*0VG}%F zK>6rYq%0T^qZk6PX>+Iw1_%Ni4h>|nIULXnU@|}^ok83jD#(J^9EiyUMlK4WhACsA zP*^&mMXUrA6^`p5I^AF}&BQtc|4wpgUO^47F2z*7MB~TTD{9C1B~bum|BOc zQ7vF%l*gb+xPU@<`tb-FU8p)vh3h|&YxN_+BEm*D%5`**#-L-vHm389qGYmfBQ%;% z)_Ob?`Rx2x`Ssz+I)omI=+PuhL1Z!3` zrX;XTChW~%vpGz*5ClQV93GP=m54wt8->rc^wN4bbXwxmJOgL`_)rXDs`hSV)W^ zava6NQ8Zz+nu1j*j_OsY4iJZN0QU&BR*4$)9;Q?i+{95~1XHgue32`_-JuYRc>l$f|yVtR8FN@Z$mQWpR z?pWFOlPxDxCE2QoCz+hg*(cgK+LF`cSyAiq&END2S5I=BJMn5!)A<`8vOhFDe3|yD z)^KX7yvW=)zeeBB>rO4u_t)81czIGCX9=j1S;!dMHwC-LHaDm%X7pL?e0_&MWvrrT z+VQMSiK)jrL&TZDxRi$VC3MdM`%+t%`cmQ6bg-p>=F9Dz4xJ4&*SO7Ub8bUj z7Y_A^r}{M%=R8WMRdAaE-cKqp3wyq$Y+PFvSyJ)3A2H=#dl&j8rVhGx z)vS4bq|0>*>1o5{is%Tz^{dN%v&+e>X> zyQqiUt4zCjZl1$kvs;NQo9zj=*Z=vN{ExEkUjO>(f6=mD(ViyH^tN7=wbA*5&D`_} z42#9ikNVB*Ze~h)-n&_O4Di=hsiKlE+&^5PY~0ncKQFgKa6j4&o`KcgD@hr=mN_tS zKgRgkg8w3<>q*Vp>3xga;}#rPlu>29K93f0%6<6)xBX`4=am-iZaV7JyH0qMqxIpJ z&li?S993}e$(bACGRAux?ay46Wzqc58O(rGKBfAw*P39*$HxcrS2j-S88bBR)TRxW z%Qoi2kBfr_1jWrm?vb8Im-B@O-LX1LulbPAJf1hXDzR_cy7cqWqAO7?2}g9#CggTT z7cRZ-=NQn|7u;o+!KpZuU%jAEwAQNaQ2wjHj%}&$PwqXjv6B6-rmhPzTGFiJt!mS9 zeox-hdK=2>a_TN^zwY)+{fq;U({p#~iIeuSP^&wg*(KK}KZwi?_t>E-ZauS&x%~%q zN2C1y3v2f_|DrLy(5>LQl|NZ_2CfJ!IhXC#+MajtfZ_OZqg~xT`-|jGyY#ow`7F$9 zcI92_<7WFK$cpO5MK`ck*Vyu~M=SOP6=vL{`L^)6>b&OL&J$`Q5AL~C5mY3ck@{+B zU+2u114gC4;l8tvijim2KmKgt>D7B|Q0JKK-r~!PcIk4Xx!f2Y;V25wXtri3fX$`MaXlY`UYc(S8KWM*0mw%(p8?5@8z^Na}N)4v)Ele vuP?$qW(#XBZwh>8HS{5B^A_8|O(b(tkb(JbM^&tg=|37E34#xcqBH*kl-ma? literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_01.png b/data/resource/icons/Connection/B03_MobileAP_connected_01.png new file mode 100755 index 0000000000000000000000000000000000000000..a5fa439d0dcd65a1819ba1fcf994fbf83f615ad5 GIT binary patch literal 2040 zcmb7Fc~ld39*+bgU_q8sMPxQ$Rh~H}tKHuAUGxIy<`}usn zzwhzp1FdGAx7SiH8ja?yiidU780mUE7}WdxxvnkLu!K~kkQ?zVG9MvOn#_P_qJYYR zWTQG1F%;x>q0uxN{e&qog-lT=KziK5MqD;*hs8>vX|(7VhZWJAQ4+{RvrU+kIden7oz5_ zZ4MKdF(J)T=1)$gsI@>GPN0B*9mUdfK@boM*&tsa6oP929v9?sxYR9VfqY0Hgm@xg z_F__Mgdq#k!OB@JY9(bFNzw{&IQjYc?EEM;PGoaHiA3V!;PF_L1O>wI%4 zwfgl4i{+)Yjntt(JO7LPw!{J}%F&@V+)n7JEM|qjBK3M9m*MOgAT>gmQ7Vf{B*%u% zd{C>Q4V3dH49S6Uz1@OhqzaZY?RJv^QVRG20nC@lKqXf}1+Z8ml7nKt0*2u^ zf>(i*7TZ8!L8U?|0Qo|mKn8-KB1$ZjDTYFiC}uvCF;VOe#Q!3 zi-qC{6d`dU5yx}ps!40aN!(_{tw7vHA+RdhgcPz4t3=l`mW&bx+^ZS$G8S@Tyw#_Nvl`Jzuj+1K+P+5}3M~(fs{RZs%2~x#p9i zj>(;666;V#NS=^34vUZ`|({|KsqBMH#0xz4ubd*sF=|-=)9l`3Kct#L(x9%?C8S1M@HqHD$Ut7|H| zK+Va96;9T(yw##G9U1MP_QS8&|8_h+>G2u=G{!|oXTyVKEI%k3kTzOAOZIY~uHJ?n znt!;sr}om_;%iSeD~5vm8#k@>>g>Ba9a-NJ-Z|F#Sk%=1<%P>b46U1(HUA3Tm(^O| zR^++e?aatB%l`etK=+;}^YC_E81v)FywE9yPxJU#ZsnRur{Y;KS61HMod)dfqZbUG z>3y?oAJaSG&H%J|#gPo`z|9KUE}5s1p{iS!aKOKEQ*XZ0y@R#WcO^mlSKyUaHC7t% z;gZXzmfRqQx8yLQ>$M&gOmokqX`^_L!Mu)DeKSgV?l6@!bB`vIRjC zxsua>$+kM?&^IGN#V6|aO&#CgxZ>c>(K>ta8^5P9`*QsH-)4L%gJQZ3riDFra#xA< zi=}tpsjO!x!v5Km_nUQh3S0f&FkY|doosw43f;G%1Y(ySJypwz9&K9Q_xM!o&QD6~03JNDV2 zc+uajkAoMVH9s(V1pCv==yugO9QO3)*4?S0qsQ7epF8IiU0I10X}X?+A(DFMQ9-`5$1PAs$1y~{d0(_+M?@>tQ}k1{B|ooC|?{LWzMWRnN{s| z_G{yx(2@pP8dUYD<}2sGRHLM>XHiT1QQPtJi5g=D--n~Qr?-)T2^!_S z@rmv1tsdXS2E_beMF%b<|2uGd%;4z@$1=vR^}Kiy=$X3ig%_9h@KNNDdC{c8^)FT_ LH1MbLjMD!B;wKim literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_02.png b/data/resource/icons/Connection/B03_MobileAP_connected_02.png new file mode 100755 index 0000000000000000000000000000000000000000..64f17aae96cbe90c0c6d883b2e349c8db901d0cf GIT binary patch literal 1909 zcmb7FX;2eq7>;sN5wwWn)g@GlK#ol|35g&kY@&dP5fE?+N=%lpLb7pp12I)AFlY@j zTC`LIN35tskWzH;zDKEuis+yP6-KRcDYmGLQc5=n>JP`6?(FV&?E5^=`@P5PCZ%G& zo9k3p8ja=_u>g*y#sJ&n>`1*YUA*!wHF%TK1TqFoAv0AtLKADS6$lWaQ)!WCM5S51 z>IxDBGDtYHr(R(SczT zGA)$;&Zz{s5(vj|1mH2b3^f}B0Y0AzLOebn3<5Z8ki%kAH=hAQA|7AF5db3>ol?U! zDWYgtHljtXLg}d_X%MkknVFf)OfD0{wJcC56xujA90p~H)lo$~bE5p;%VRGUf?@5%MVNU*4|u}mrh3uLlc_^^%be4{A2{PPH% z?!7fZMk61b|0F*VyV`)Tq7ec!;%X|3DZU>`eO}0BIC2J&T!p70R2F5bbOIUvAeW04 zQO=`!RXU8RjXFe6M!=zTqY>4JWITw+gCVgPl(D5$ZiEoXgM)#h!JU{8v5&laADk?cPTpC=IeS!~T&S zeS415vmfkRHgWuU?`VsIC*al z(Yq!+h-}~3eZ8TG+h6i#H}`O%uJt!bwW)GmW%5{tt7*-wVA|{TZl$i2IaKM#2*$)$)jL+XPSLU4xb<&=zrX!VW^^O%{ zVFK+@JJ<9KPvjjNpW)gTMsw3!m;0c3Xs-XA^>Htx;emCjZ466Ff!Av-7(_%3&fX&s zL{7)-`|ZfRifYBf{*uNwiW3ekm!Fy9?$$addURQm8oq3_&&c}Qqbol0$Fk<>7436b zV|FFpZ^)@A_1^qgisb$t=4_43vhR3$W?I?H;wsCg{5!(f3YO{Z?Jan+(hJ{m1R@|I@#UkQ6 z;)-sEr|8V~wVLu2UDNI8Gf8Qc^x|eeUC;x@{Lzpj)`8@Xv-%4<3K8xfA7?C{%tu4 z$+jFhQTU5`$CGQbWsAJgoTS;fds{M|0&VehBF3nM&eM(5>%kpm&)cSP}Io8W^_xFzL#Qn4W9a>VBY&Yn8 Zj@H-2{A=T^wkF$;FhZ(;t0c+U{{gj$=^g+8 literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_03.png b/data/resource/icons/Connection/B03_MobileAP_connected_03.png new file mode 100755 index 0000000000000000000000000000000000000000..475d65c169d89162c4afe5ce16f68cd6b178f5c5 GIT binary patch literal 1895 zcmb7FX;9N>8190w2)d4|hzCcgh*<5B(u39_q)n?;$|WF-ij+3AwX~^C3I#6&5mdkn z6j2cYPh4^EL|hK<3X1OPfUBar;t7a~_qe(#g8IX8W;02?Bk%J(@An>)m7&2?2Rn{- zB#}sirPJVWVx(9f2Ycdu_OxX-F^s~+(fCX>0Z*125fY?C;}JlrldF($M6OI(U_k^V zl5M3XA{vjD1@RTAjwZL-(9AjmfhLgz0cL|-p+#^Y9#LuZ{^ahOIx?V9`jcm|Wek}? zgs3&sQjN&W)Zhq3s#d{Mk^`my0yCc=&>^@SFzXWa7~kwq?&akZbL%#p4D_1dT7U9q zr=n${fCx1r0GsAZRWLvh;BaUli_PJHlK>_IWYQVL&7p!UKAXd5a)G{!OsE-^3H)$a z(x*kN{K;w@H}L87 z16D?PJZi%I$%Ln$kDxPzYgB3+`$DeA`hrD-jc%43=pcAqNF zcsTOa`S0>$5h(_Q9*$tB$*3T*m@xJmsUHhj4g1c(m&uJqo`@m6A7nCq2;sa& zFHeL~g-M6#aVhLiHkmX^zJ$$Uvtbqlff9z8$PJGLvSB|SR|xvC#4rr^6MPFKv}j5K z3lb=vkjrMWArJ(`z7WF?;)xg>n9YMkT+p{4E7fDTT(3Z^qE@WtE0*;`EMH_q|Q0b{X9>2x-C7h)WLBgeBt7xag=d;vRGBZ3)O))_emA4>_U#*oRF@Yu-?-YdI3Ub%V^Dr}K~5QB*EY}gb^6>mx9EYC$G3(s>?QT2 zWY0W0tC@pSha^fcp6ZSDQQA-6j=PieVkNoBOV=$j#hYu?6;89;Z9FDGhZZr7Qs zlq(O29qFCr ziBCG9fXN=fISW;t6vIpOKvYgubY zCh2S+m4M3ElY&&I?FC+=;(j^23>hI7majNhv`L_?yS%S^N7aR!GYvL5(|6?*H0Q=S z@3HT>JMry+Sjy81yIBoMf4^B6w|)MTO-ei$jaA$HslT zJ{E><3CSFE()|{-WV9)R?Rl?wDCJIAL7CgF%-xxoQ$5eKvb9lQqiXmivJ?7@FTA7=XaDCr)o5)i&O@>R) zOa|8`$CiUD-jP~`m+-uzcIb-pnKO(P-Fu>!OYrH>H?{}|EU`TOc9Aa?(>5}sQ)gu8(rVA^!eORX^p3S778g1b%8F|UvW!@ z?a!Stb=XU3g;sMStDq)EIzwHtH|8cMB;lCdc$Gs~@z%+sulrSW3V!?G<#zsw`ry^L z_k#nx@dxe&r=p`4$E|_3$WJVFxmX@jclKzZ4MmOBm$wLf+Ed#i;kjsFJCCaOde<}P zpL3h8)Ll%;FB^E`t+%>rD{Fk-lf?F_F>lgx#1#*ka56<7bU1^*I=iU0d;u(Gx7z20 zR$n?h@{C1Do?pejd^G8tX2h>Aw^eF8JMMZ>mE-e1eyW^i;lH1n_7f@m&x6ey?w@P6 O{`#ciVEBMAF8x0$NaA|{ literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_04.png b/data/resource/icons/Connection/B03_MobileAP_connected_04.png new file mode 100755 index 0000000000000000000000000000000000000000..26e7242e1cc46e68aafbb11753ae914fc5ffe754 GIT binary patch literal 2142 zcmb7Fdr%X19*+kChf$z_f_kz9I0Gknk+(!hvI#^ULU@Ij8j=kOA=!{DB{GqfRPQLkN%oWva9s+~mJoaezwB z!6nh6NKraIq*R6P&_i)MqT^*d)H0SF7qSTmHnLFy4TMMmqb6HxU>iBOd0sX;w{8=0 zz`O~f=HPyFN)iWX$G8&aB!%nzlEUDiB*|O#PF6}YgkAYnl_?Qsw0vKB%*%a#v0!u zDk|#z2#w~gwE+=BzdQej{D$~^9YhpE1~^wQL#wFpc}ME~LRQ0t7}!x#y&6KRD3oR! zp!p9`QS2?K^D3=08-!)K8c2(XKn^Z9S0!f)X;c~wq;k1rAxVJNhD9aQKqia9BQvQ2 z5Cj(q-UXss1UZT&Ge{KFnn9s)$z-x1h{flEd?uF}1PYimA&I$&6=@BKR4aq5qE@Wx zcP#zAST?Tj{(vtTu>mOkjXqgna3jusX;6TlR>4>a0^)Z|D7-*>Iu=>W$$#| z;uhM<*6G_bgf8BmLP(1iO^=?jy%FN47>unz1ajkz0}m@y;R#%~YaazX`lqMc>RQ3> zzCDgMnq&7?2A&4mc@C+cHq6F2XSh@p3(C9-!`n-6zJayAsT)!v2fn_(GN8(P<+)E=>+K&)SZ)IkikF9v|Ll=&1+_+jDzt`oB&O#w=TEhVf7Cbv!o%cHjMJ zG}OZbyS8dwys4=QJ7}BRI1JM3KDD`0sII!LN@s_AlDRwX;AK+P6)1Ai@#|cX#Libia16``CoIal(IZ<}Q z!b`Rwq*fQwJ4t+Gy5#F=efeEETdBv*XAs?;-=2oJayA{?ypl9O!ye7-~IzH zwxoIN+<39=+z+YVSFo7pz_9P!P~(%C96Q$-C3{KxxNUZ^PPZCa)1q#4Kik@~4&NP7 zYP;1VI~o54_Nv3(yV!vI@g!5u?KV%+)~s9hr_wbak?b>K8w&o>Qx}QZ!!0k8yjoFX zie*pP?lOqqB<>&Hoq7b1e5DcfRTwv1luvzrRKRrN<-W%8pRAeOY{{-3)mC<$s29w7 zu$z9_we)nGvw|wQa%xT}KI)R)oBRo|ZX9#z4WXSf1w5@e_S4OYdk3K8}0y3+$b~>DB-|$@5BP? z*4nu3AriA!T~nvuA$qT&VR|SsK_F;8>N?WV&q_((r&c`r`vc+yMuq>AlLp__U2)(0 z2d_6J0WL3fsjE&b84hJMy(*X)SuR=cb$`UoA?8v^@Q3Fpa=X-v!?7nT_jlHgBLit4 zx6B;$vmf}|bpQ5egxmEY>JRKM=xVycNcReDEM=0LvWAPA8hMsqK#5lDF!Zq5+i@uR zcrVB7xwokKdQV(@_VmhRQ|Ie*rJ7jRZv(vUe>1r$+=gE?9Ae5pWK)`cO}{byR9=5G z;b2OdMSCAfUh(nM>613(-q+rPXNu`zCEY)|s@)q~zmzG?BU!~ge6Ld9@3sNyU;ZW0 zt?$Oj6f?C6=eCuucfhgi3fr7@2kzo0e(l-0epmVHJo`J@{Xbx_Aw5FHw5M_Ng-l=w0)2i#b=wI*F+?lA&ne86MmS?SusD0l0 z*y*xvUCLGOvx8b`_vvwEnB7z~O^?$gfJFGSNONGx-0+*ruYB4t6U9HX%;n|*>mOev Lhz8H_wio^n2dq#c literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_05.png b/data/resource/icons/Connection/B03_MobileAP_connected_05.png new file mode 100755 index 0000000000000000000000000000000000000000..2f38e7fdab91b8fe9ce8567b055c897e01ef6138 GIT binary patch literal 1905 zcmb7Fdr;GM9ItMG!tgaf3WA}EZ`!8s1}bYwD@Dr?Dil2(u?=mcZE6zMg2M+mAE-Bn zI7AVdI%UqGL!BTBWde#aC(fxuZ*wXth{`s6i!Mb#|M0w9F8MvbpU?MwSsfQU&D%4; zlfhtktE1s~dY*^u(l;Iw}EArR)fSGUNt)J_@KUh!KrP5ktnpMl^!K zcyAx3)loXl3`mb#*oaGp?XcKrG=mWl>98UCG?W77qejdsW8JT+VF8#y#!3=uxEfm& zYQmy32{a)yR;$lU(@PDk$f-bt1EL8mD1`tHi`hy-4jHS57oyj$V-5@G5uws#tXD?q zG;u%_PN0C0%@5OaK@bp$*q}ft5`j|y9v9?sxb!Ou0|k&!1o6Z`@57?C5r$MK9#-}0 zqIWWuiK1)}hhw+f*>*k~CyX3WDwVo8c)T!LB8<$iQivnWN{;DcfKgIUU^WWFt$>RW znUAMaG8S#=D;F%bc+6;`$bNDw*&8f6Y#aw-nB1bcmeGzgJ~(pgj?W)khW&}g8KY2z^~Vuo>j zx&^gTYFNffPsa?9N+=KtVS!u@s<=uzH&Ov8ge6k30+a}pFbww*ya}Xru?;j96!4!5%B~t6Dr3R2_cltOUL7H_u%8V%_IMo_Chp z?-laNGevxUgZc80x$YNZRBhxA4{#7;JZ^w!{ zr@V96^YRCw9?oxtg8fK2ek91wmV>_|Y-p z^Mf-41CBUXtQwg<`qJR?#pe>36|)#)3eDTAW4iq_nH>{S_879}<{itgtR6xgcocjp zGAFh(;4{XUs~*R;4E-wG_l9rkNyX4C>8VB;l#$Q;bKjsB+e&-|*%k6!#BxWznL2sn zn>oel3677pr}znS>Zj%|j~2FV-q3X@$@rT+F8M~Qn`E$iC|lo32I+?EagKWI+29PU zw+pXAmsrnVFgj*dE?zx7d4@WV2r~`19#Bc-x0Dt5Y{)-b{QLgs)~9-fW$NAS4)2Q5 zB>{(WHnKB+@!WX7^we3w#m=>z*5C@D&Nr|r!4_j5MS^v8a{n5Nrf!l&~eif=#kZo9P$zvYM4pyEEU^A~4do*@K zTitltD>r4$HidV0mREai)slr}OX}*sE{NDYrFLk^y7s4w&Uz*)H%<$K&b7znRU@rd zRe5OFf%frEq~>x&;T7MtMdRumMZELj*U-|74auP+vDOo9h2pM3{{L>7HfyB!F5}}6 z#CWE7rFW8Dky_eed-Q=IaK$rmOxKd1wk=*`2BrDUtxFr{ku}5aJlUTr=Q^b4Ofd|$MPxnSn?%O%abe^r3mTdabt3a_2Z{il@PZYp(v%>x%?HI=pj>x|ka z_bs&{lMYu78vpn7^-N)9fH5ij_zkx;XPzA44T)WL0%1OVS;JDM-NpyFGs<;`=LAGP Q$#wk%)yi17Op%iPA47HEdjJ3c literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_06.png b/data/resource/icons/Connection/B03_MobileAP_connected_06.png new file mode 100755 index 0000000000000000000000000000000000000000..c484c90d33e7f338dac169525b0caa046e3ab071 GIT binary patch literal 1934 zcmb7Fdr%U297oe0q^6Z+k4ZwWv=mriK{hFY1;wHeskD5pu;7NU1S_Duq|Dw;rDsvu z*<;G;^1N)atS+m&YkHp7m|kUPU0LZ>j%QDA%3DmUKbmH4XLo;({eC{5@9+DVU89^C z>q{L?rBEoo@;F#Uj+5Na!2aa>mkXEXlfx)NnnWbxI>L@vP>M*4XQDK@5z(V66w&4` zyo5$mDE)rG)Ja5=Vg{tajSR$X!*CeQB$`5rp5`zk8UsquGEqHd64KjGou$(-t&lz! zRIn6g37Un)0^LVtHy$v z2@E&U+>A&jo& zKU!M}75d5fFY;T}xn`89Lalg?MMGv$7xJ0Z*M;1My=QjHro_!$Nva4yJ`=i`k$E001dRAYp-G4x0^1c>pK?!9J|qWF-)j26cg-DH{O95_XH;Ce1?jnDEf)ZnAZAB-kM$LgHHf0nuyJ!*0Z9$#Hwh;9EVWm9ze#<=T2ZT7cI{j zV?i&rTPF(ZV`Wo(c0^qsyLaUGJ2eN!dCiY$k~=0*8mlrwi*D9$ZCwYth$S-NL7WtRG{a%9-@rTOd1#y!Le zf*Owd5u5#7(N$}!=1}K{QkOby{=}wGc=tP20h7t5bf9_8~qqAIoD^oSS7sV*F!AenNqaMjA1#paZxxlc7+=YUGTV&xrArC&qQ zt}A5$!=cp1Oi{4@=Rp;x2R5~|>1vae_njI6`$Z{hHsVj|my%q(KfSu@9j)R7oM}s& zHfXK)ke!~Lt#2nqQFH~o!6HtQ_vJA2tbC8UYpvm`tEvv}6t622Ig48Y*HO}aO*iI! zD?fB({n19lY}_;os%QYuw{L@LEom{R?^ti>905&udnb4tj=9REmBICr7wpdRQE1r*?03-+5XwK$E(}p zZgFFCKBKapGd;3Uu;+d$lBXZ?Cj8b=sH1C8i57!v={s%8TT)U56xEoSeak447@^L4y=sj=i^@k6R zFA#2DbnV&s%@bO0uFhNHvH4+Uhm5+cKmWWfy!hqFs`$sY!mjcTUuC=bMl_&qq4Q<- zGJV1I_m{@#ZHJ=8Tl*z2QzYW6hYv3t;oFd(T5K9Nx_x8TtCz_w@v)B=oL(cV*<$ND zD15>lHF8h$hI`Rrv+Jh#`8fxqjq2(?OBWcP1bg(SSWDmucV9&q+9bS7LO&RG5* DUMJ#C literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_07.png b/data/resource/icons/Connection/B03_MobileAP_connected_07.png new file mode 100755 index 0000000000000000000000000000000000000000..eae76256c754a14ec3e4646d802621781c4de102 GIT binary patch literal 1945 zcmb7Fc~sMO9IqE(J?EGQqQ+FAPH3C-qS3ClO^e+uayi%>wxNxsLX$2D7CJY%HYd)B z#}u~5#vBTdp)fhrL3Q3k93r|YqJrp#$DGWmccv%@4 z5k7(&z~yi_BMfuVXm)(v`}p~=??VR~7P7+xMi2r&EX8Hu*b$T@y2(oouZ{cZh zCpC(UPA#5fpX;XZ7ls zNmhc7or*U`0$P&70jWS7Y7s#YAd?9oiBu+oLI79BIRp#;tAXFze}GD?v3^zjiK&S<+WiJ_m86ZDf{v0)RYVNM|=5DBS18}Ir0QAXp-5e~;w zYnqA1pE>_RemXYYi3_7~noOlEY!(;uo|AgHkk|0Z84x2zCF5)s^;imx_kA!Lk@>9i zb^=R5NlU5&Cl~{&1XEM(RzxqANTsMmt%md>9h)141d^g*3b_Uflju+s?I(C1$Z83! zELNlw!#cGbg{5i;f^=dvDv{{LI=vp2YZPjkv>$6AXa*xJxL4GRwLimZUy4Pv6pk?@ z6-$yS{nZqiL^33uL^=U&j11t%*$FG@qGxzh&2qCxMRCf$6u0Ur(gE~E9kIVaU!jr9 zG;&l1t5KZ}h9Hd=(r83_iC7^IlS^RM_s3Z4{|=at^+f2cvgfLDW7swKvu!=C!N?*KUTYXCLXwHv66#7;vSRqkPD{kU5~+ z|J;Bn%ASMEPK_RhsskTY-oZCsXf-0AJ&;PNSFh}(H+2;^y0l#xRe~bCUy^)*HV>k9$GqRwRvLv<;~>S6rcG_XX)=_vi4-oG|%Kq z{h)G(co<Te|#hh5q{K+&$S#N8iqyhGrEf>s#W!Zz@}p{i$=!mY=l1^nxAk%7Ai? z)a7eRFl9n1Wg**VE$prwNZYn z+XDS72D+3!u8plk2IA{+X#QxcfNz7RyDPiPhX;;(l>6a4VHj7I6|iL1xR5P}=;2JJ zr|9hWrd4ux7%#%v)0O?fxhlJJa>zdzmJTzK`DNq%GHmBO(~NuVwv-R##aF@dg!r0k z;p#6c2L{iXo?!Cz-B;bbSdld3`kc@qL~ZB8Il-F(#|Bu-c5Vm>jQh8=b7qBN@I4>r z`eh4(T5Gqi`{Usl`2fpE-j`osc@0|^Iddp+g(a}w);=GqiQf3*Yjri%O;MM>ZHzn2 z_xyb#QO^~7Q9(q( z5Y_4Su1C$r$uS!`R7LA=xpTK`vrO*>EDXPKi8^P-4__(#(0ugb{SEotgyy?ZhXn^j z)GBzv+d+OY(5d1`d-he^f)7yDRON%-)8Wzzd&f%UbE8PD0#Xa&XLrjg#Cr9l^g JZr7Nz{sUKd@^=6L literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_08.png b/data/resource/icons/Connection/B03_MobileAP_connected_08.png new file mode 100755 index 0000000000000000000000000000000000000000..fa0d7ab8426424e4b6b4ff2bdf9338979472ce7b GIT binary patch literal 1908 zcmb7FX;2eq7!C!EiijXq0j+D0nIa^c%}JusCfT4tf)IiRK_w3mpDj5F=esFB3`Y-4jYF?iw7Mgs;Z*G?m?kX44x9G>J5OuFa@Y$0Inf0@0!d0i~y^mI9y}0c9~; zMwc1Ihz^~fY(gTELlx@ecr{N$nL7uVZQ~OJdIVPiHhqG@%(n?B1H61!J zFQ9yIN+}Bi#Fz;I*fb_pO@|tfx(MHsF^fz zd^sF6s70&<6djHm`5$~8E}=2YB2i@F~EpfZ9v zZN}xuN9RAwZ&oB35m1hpF^fq}WHHX?6R9r?*$oHJz?Z2^@d%N{AXS1H8TcTR@fQ-# zqXtz1jHxYp#DGg-0mWiLHT)npi_L~vLLn4Hmk_z(u^=`a$m5EjK$ZlC;UR)gfrJ)K zLtyD5b`Xor<1*Mn2!bR`UJ#uwVX~QG5yTcU>7pU5)L_O{1~pZ?rn9x;-Cdh>8fq|&=(a-4f zL|l%D3v(DkSR!FSkVp)PMD!pQlgAC@vKVa2AXf9g0|pYFfc7f;r0RyYh*GvshkJ-v z40j=7Ad+SxdhD+7j)Z94XelgI*lu<2Zd;%bdYtPqbctv9-*ojaI+Wf`?msYp!u}%Q zpXX%QN$}ELI=;8elDMmKq7Re4WcCFEj# zaN%}t)yaz~uFGCs$mLldw7kxl)f98Xl3sr=bgS}G;F9czFCt@IZ#pbmkL2Y%UE?T@ zCH1EM)h_Pbs?79qcO=&fo?W?C9?)5!RUhow!;f<8yYuf8&!UWmOLC*z{g~BFeJc;t z6bCMGIDMz{NJdjwpPTc=OHQ35y(z6%`(r2V8tbzVX-{^@(VW`dG}EP{bHvdT>*UQ% ze6Y$dy3gxk<5M#JZZw|qu-#>{L))X)n4=y?@*-7P0i!y>1$%D)oS)zFwv6)T`*oZ! z*Lx$~8*g1tUDPFxTiB0ZFKu+p9vAl=Q|UpGZc>CVKaqXx)uZmd(BO<}fy24FJWaE* zFNVBxeK6g*seZC;zpcb8#vyuRTTkkl!-dPcw|yPq9^UG-q;9oK@sz?-kA0hG_?Bts z1SqKeZqvE@o;|X;RBW5a=_2{B>C<~K+EhF8i(?wMHJstK9~r;68~G-c8S7nCHomrI z`E7KM_WTI*3D=K>LmFy!; zY^VxJJo}7o^ayd*E9-BQIC3brkW%Sd7O{7;SLz?$5t+WnJ#)jV|BjrNvfSAqKk{o! zeEdq!$js2bmLhFF@UU>1aZi^+&1TT!1PxtT8DQ~0d@?gM^OaLIl6~2`bX>>?T10ZD z^UPyQ8TrQpL(j)4d>1mj+e^skTMH**SynpI>i8p2daxE0Qf)7}HIIADiIX*(rM_<_ z=?+!D^D0Y;41ZK4-dA>dXMuLt1KEOLk$+WdLCdy3srAi%4TooM^vj7{m9=VZPKl4@ z>MR|-KW&=(O!F$ilxrogyWMo0v9C*K^wu`+Tbq%B0bBaArt|4vh zD67c24>tXNR63^LCzs6Y3hVIBn{)p_RHEV`@ROjzyI@28yXFbnSCL8S_m57W;s?K;5CsnfhexmFHW;ZPC<*@?H5wYc^jwmOXLa`}d0r dbW{6%>qxe@zb(^`T5A8BlBAMQxI`42`X3MS?BoCd literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_09.png b/data/resource/icons/Connection/B03_MobileAP_connected_09.png new file mode 100755 index 0000000000000000000000000000000000000000..52da6fa18688066187632d738360a1c1faa05577 GIT binary patch literal 1918 zcmb7FX;2eq7>>%}fma1ZG_VG$K*_N=HY5@-$tIFQIFf*PAu(B!6_Smcg@i*CP!z|` z6h%b^FFcScqG&xk8qbOsqE+inRq!e@;uJ=ybc3M&aGdGR?taI<&-1*;_s$l_#Y`PK z*k>?>LK&)vgjM7i?0g2gk?*soFU%x|v4kv%P-CftO^YKGu^yX?01A`VfT$3yK5PC3 zB#c5Cuou-N5lPBup$;=Kv`!m_-DDxr6iQfx-J;c{Ap|fNF`#A5EufmSsuu^Zp|_iT07lr_3vYV5vvYIEd+|0 z0Vkt&E|x)vXr!kfLoiuXsKH2BKarcQy~!fe#P{1NuMh2=E%6VKK59W%+pqwQmYa`%-JUCRqmw=&M84SaH1YZJ4Ery=N zviNKsTOi@Gd14R*WgIbI0>J_Zf_b5Gkj0VqVHIX8p*8Cer>GN)e#UaXi4{t5L`z_} z2E)?(PE(u_BQUEGvj9>x1O!e)&3epc4RV&6P$NcfP1 z4?}D*ER(T8P$C5-5|*6H5%5F#WJI)Htp0x|j7fUJbe^&=PF>#?d6b>gPd!8~K6N2t zCX0rXJ(jtt#Z0y?nJ%%$e&^M?*^wHt=lKrv3n_3cW&6k*YS};HIi4uZ+pF}CoRQ+! zB`)IFDDiLW-Zw-UZ*Lf((F|YWMbjgGjQAk2Xxo;t`N?&|Z)9TK`Bt4z>!pe#elv$q zJDXY`9BJ7&+1gyrnR;=4IUE$pj;E>EMQfHEKjHSO|6NCLt*55(AeQ3oQIKaDmpiyC zpt-UrDJ9~td!F#!O85K3UgX^@wg1bLi$*1HEG!E3pu4w-9mO$aHHnSX;w@;y%QKTi zZ#}kC*Tjxj<|o&NH!DSy%tgC^rd|DKF$+qfp=)*Zh2Gi2xL%-UzoBCF>{9vy>NDM~ z1*Hq!M2}qUL*x$IQOGZ(-$gW`Y{HNQZ=VKD?09)5J~cO{sVicNyU|5aIO6oVn}wN; z6IL0L=iiKK3NJ30-r!a}AYf35Pa|(q)=l4v*$^?dQ47d>R!wLfwqN4w+oxt~N zk2~&jZ&1lkH3eS2*)tbkvPB}s$^5p%7L#u%z0)ga-O@*%w+C0#+UCU8hvi;g?Rw9U zcy#uF$`EvhVH& zaDv+(m!``TniLZY@3l;rkymlqvp#O$rJT)8PY%BA@Tzj(+kNiHhwzrAd2h-RPnYS{$z35K- zxEGL5^wqZ062u%IOq}p@sT2=gO>OnfhorXdAM-yPdVd|OA+C+BSN%M!F{gTS^CHEb zKSMgR9krGc^Ny-^t~gXRr;a_Y$#zgJZ=9*6j(ySWG6Z`PH=Gk0zuB}*$mm?^IkJ*i*3BRTQbuMH2D jooVRq_6nLVT{wtEfi&k+&jrmp>ii=rWHE4!B&Fa#SM}Ln literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_10.png b/data/resource/icons/Connection/B03_MobileAP_connected_10.png new file mode 100755 index 0000000000000000000000000000000000000000..b33f4bc8062db68fb171a3517314b0695a75a455 GIT binary patch literal 2033 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 Gt^Wr*2^^jP literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_13.png b/data/resource/icons/Connection/B03_MobileAP_connected_13.png new file mode 100755 index 0000000000000000000000000000000000000000..c1142895a6564d2f89c9ee04ab9a0665ad42f2ee GIT binary patch literal 2036 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 atSH;Q=|5Pu_N2-DJC7E`Aq^3mxBm}m=RVm0 literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_15.png b/data/resource/icons/Connection/B03_MobileAP_connected_15.png new file mode 100755 index 0000000000000000000000000000000000000000..27b0d7e9fb761f3e142651fb0d272662df047d48 GIT binary patch literal 2060 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 literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_17.png b/data/resource/icons/Connection/B03_MobileAP_connected_17.png new file mode 100755 index 0000000000000000000000000000000000000000..9321ebd998306da2d87c20a373e6d7050319af4c GIT binary patch literal 2020 zcmb7Fdr%Yi77mY63gT5kv=L+*q%6rwB4ju2ZcLz9dHEpN zmOiKt5DnNmT8luLX?yINWd6Czy}39K66WAK@lXDKmsW+ zeQ_9Xq+uPD0jsBdF)IbfNYfUG$FtdNT$_+fkoi1NE|Ef$Hzut=!{)qI4hja&qZVVPW-0LnxN48t=7 z&jJ}=TmysU!!i(2E0qF?2mwJvC>J3JEZ~dyN~uhy79`AIH8@41xE^ykbzx0^Vdc-o zLMjqNX@b-dMB&V7N;eWTK^X}Ppvsg05vxtOfv{1Lu2M7HOsFtMnl@qvHA$F(sjNe$ zzws|qt6{zXfkli0M99RAfT{#3C9_(I|6!_YlbB|93R5rfiT-$yS5IYZK=xQ7e z!8;A^v5v)!`}vL4o>ifU(v-e%P^Ab(5RGB?$4>11H$F1dl)c~#_+V%HN&HFKM88G$ z*2b|D-!Aa`-EvBif3N$;2i^6-Yqz46o)wi_J*zz5asH5#6Y>v9XS|V$wUI?gJ}p^H=(erUvY&Am`juzF$+7zt%sjz})Wt%X`OS9FN!!+(NY3 z>H*>W7_Zin=8%#XLYD9BvUc^cvtsui^{BHp?>ib%JwHq%_sjO$Bq6bo9<4AkY`%kB z^cnRy?GPEHi%4^`<}4lG2E6VZtIpyBJ7meS#g z4L5geZ{P%n9?8sZO4>ys`Nl8!t*Nq*&gx^>tZes}X1hns)g?;<6L)BH*}_QoZCfsmXj^=DXei^^df!ze>-P8{ zJma0-Ya!c%JFcH+w|J!b>MwkC6$c~FeR0Mb|E`BBS9fFwpwyo`-@UqQ%P?{bSb0?M zs8o1E$_27W-L54;ssGJwPCvvp8>*iY?S$qox--hD%@zQ&}cDM7pcOTS@uX>bYX>wfe z&D^=qc-VrUx;>e^c+vh_BukWZrt!m7m*(Z=zSh@2`Y`XNSMSND4t)8~ZLJ#(yoev} zBwW69sJcxB4c@)T|4Fssam1TfE=l{xPsI12|7#vd9{3o2cM>VT6|>WEO~FW*m2l-W#`%P_ObPe z|7Lx;CMwRmrPNj*ej3GR)1In=`nEI4Ew$0tuHL%A4j=noaQr)&x%jQh)AU2%Fmto; p>+fgXFJAHFN%W(hMU#o8Zmd^6^NvX2Mc29hyBZ`7ZcfN8{{ztm5I6t; literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_MobileAP_connected_18.png b/data/resource/icons/Connection/B03_MobileAP_connected_18.png new file mode 100755 index 0000000000000000000000000000000000000000..551e7c11849e044448a52685a2cd091a989a9b49 GIT binary patch literal 2054 zcmb7FX;c&E8cv`Di7Ztqg6kM7MKIft1TrOtz$B2CU!3d-hkdpQxWK&yy^ZWfRNcJrbZdwZ!17n-*2UF-zG`lH8lI%j6SWuE7Gx9>eu zDo;-Eqb{J5NF+aLBCH_BaQ8EdLcBlzus59;LU6GPPr)*A8)898A}yvy0jUwup$Zhy zZr#$0#*j#!Ck#pzu977|8qCN*+!%)4XeQVsQjE}UMl@L{4yaL`!6cyl(AiA`3|awg zJy*t(nd4EtAu-Q_rsO3nHF;SYzLq9j4aC?XLcoaP2w*p6o2-ysK%3Hqh`D>4Ndu-J zc$R?n*eR7v4#Z;?6yP!<=^7TB4e)pjHiygOu~z{giw!ba#Lc6#IS`izflVN&kc7+Oa$$~0#FntcL~ZySHW!ZON5!$DIbs-wX9S)m z61Esxf=fVPew;`I@;G8PTO278b2%`~=5Tl*Kav~8n&C=KRva;DP`6Px*YGEo|4c3v zZ$S|pvnVkvd*(FB^%#y>^_UrmPvHS!>kTF?X0xtzmzvNfLWNO_As5w3ESM3P$~t8D z3;WR$3Cse;Fo*C!97)72X2-`xvAJvs7zakjN7AOb+P|GJCgBOweafCXbu(MUQFc$C z^boOl(uJsrD4K=nG3SJ9JJGrmQdp$4kNm$TJy9tNK7W<_`YdsLc&8BFb3m>LIn(-D z*s@b$WwD*|08xcXpn3q51wMDABB&wY&O0x>fL5SEW$#UjrPLMrIgFzJsl&dxd;9Qx zUJ3G9ZT}=yvh-K;U=4qCyEXG%f5_qkM~h{YEhVzKHJp-UAJ+qWEBXCckLrNNe;P^K zz3S?Hz98?OsJOJGeV1o8WsS2sbAxIW+9QQlm1lkVDaR$5o$*cKx&{` zRXt3i%#K}jb=*^MZTXF%t&BMtdn z9R20RAA-OH2fStOaX-K*e6DnES3=Q+{Y_xo-tp>}+KPA5kc}sM+Y06ZRoiA)Y~qdm z{GIYGSH#D7;NIl?w_+S?iu;B_9U32-@BroKepYnA_i1L}t9y;C;RK*;JmrIS?s4CV zpnatS5an!8_~B+!%<7sAiSyUWB3gHMp0~gI)5F6+s>?}s1fL_{EkqguBB~>M!0@AK zjW@jL^(D7U&VF!jVVYkqdFj_3MT&{gI{d=FKhJq6*cmE#vDtN+`m&@aD$RZ?)jpoK zY}?qY9v$=BcKXXNpw&%Zy!VDR`lTwn#FEyLaL{i_cymvLSAe7O*67O8z_CLA`RyyJ zeRZ$5bl>kw`(C;}d#Ad!5-jT$cAECzE^kB!IVUF^J0uN)h3`MwmtR(Zy|~oLDYlIU zg5~!mm8Z9PuNd6e*pZ)0hhn>~tqM2HJInXU@JhdNrl8Nc9}r&he!ffF62d1@Z`%Cr z2@P-3HR1O?Qs*6#7agNY?=+8`>K9RV)o)u(MNQ)N6|Yb)ExVE)tpB!UullF$pXBy! zPSSPsELm5I@BaPd;zdWhQ;Qal1`aR0GkkueLB4cvd!gdZGxbRlauhuIc7C25h)s=&}uhiNP{%3G(PHWXU*1)U?cyf4$*LRN66PN1icIVwJ z=lx^odT3$Z-OZ9T;Y1C%(4Y6M_vw}^5XH2^GSb=ePIm8bMZ}(Y*Hfvk3u`Tg^rFig zlbqFe_(!`L!A;$-1$x{I3+=~im34yO9-a79h~2=*6jH_A VKzhN+%zwH6%u;bO?1#^0dkN`NXVjclxnC@ z*R!zTB3iqOTUZV$wLla>1w`Z&M5Q7s6kd_tb=!*TPAFLa=<~guH#5IuzMs$Md;Q*6 zLW2C9om`x7IGnT4AC_R_X4|vG0eiPJU*Cld>rnnqG)$9#8l^e}$B}E|5xh_(RUi^X zDo;=8s1^bMqtQq-QivLz0svVomW_i<_Q5QC^yz9;YVuL*KU!db z5xq>O)S^m_8gFBi#%l~Hn}B)xYX~Z>M5#zb^{>d)`uSvGX#-4BEdUZpfNsvl7T*F& zEPgXWrFvzpMSG*Op7STuyh)aM+HeVGK~X*AfLhnxqL2(N#@aEzJN+1FJOggJt|ep5SyqCtNaa1 zeIpj)=@2QZ(S>U?DGS{clBhv7`b3Qu&kLjDJ)@LrxyGpXvXvU+#zKV=oiYuP3v?P4 zelF{f@^|!ETn3%Xfazoo%;%Fqkjn$PT#|rFVKJBt%qzk?R{nn{48S}AY+d$R*DY*e zt!$gVIz!mv)hR^OSkZLY8Ot{hw&HO1D}^v8+%z;Rz`STg2II zTwxcrYf069CrjnVvW?F_Fi-5=A6sSi-0ykupjRmS^s1o-`=^q`&0iipt4uNk-OtvH zk|rBU^ovg}-p)MH-Z4Z;-kp5o$x?@${uojd%`c^s2?3Yyf0Y??(7AgD+5e#;EY5ye zR&1B^r_CkT)(8%?5mVl3!3VUGW=jHl9Y5Z&e#w>YTmOy&{PVS&8neyQ9}X3W_J?Pc zdG5QnRJ(lE^69AnYv{psr+mj9qpT*kg1p0<$}0OjPHHc;M+50a%ab0AoNi$yF%{Pe zBEj-eB)XX5w&Ca`k-9cx*}pOuP3P|o4$Fgs4_if*F6YPY$9m`+jS{;}e!F9X1%CH3 z>w5WNyZ@Qm=VXnnw2u9WuvcLyF^JCilnzNVn?}4$Z+Q@gAGMUee-_42~V>Qcs z$UT(il~wmmLy&iEo;#X*=-sAE#$#Oo(HoGaTBVJ_Bi{}52TaADY8bHJ2p#z@u(emv z_Qi3_WKGWTUh$oWmw;?h$Qk#@yrK0^yuaNrIhve0Ni5%&v@VYEmp^L*iw-{@seZO+ z#p4S{{U50fyFv{#!=@J*GZLf{S9jJf<6&g*Om*(ETm$~Evgbc%&csqorzelF2llkA ziSp~IJtx0I(Aq!rwDeuR;-ZhP7q<1|N<Z+SN7Q^^tZmVE7lOvFGg#RsXHYi3!xL_nCOC`ucB4*N5*d zLn8K&-`RS5NBJ>p3ZVUhceI&u68-5Jjxf!j6|RULT1+=ly9gsCBa4u>w6cPVrLM&_ zD63~fN!i-1gUiRRZfg_f_5*?5<#h*;-m86`vKeY>acQ&YhsJLpXyW@PK~Q%`$ChyN zOWJr?)$N>h>*K>+4GYdZ% za;~FS4B!){-gdi} zD76^OEU4q{Drbky39dq2ii2bA)9%5}zNe;`*7sEL4d->z+H`e)YpWZly&vZ14W+M% zOA@F~T$wscx+(hHi?jO6a^C}>+liawcZ+%oy{zq7Au3quXqUl$@4;HmvBAvo?}IwG zRB(&s+;R_&&tM?n_AQT{+aG2X`{b;;c478i@~}G1Wz?`}Mcf}JWD2?Y@2o39dwsjT zOJu$?trMchGbxUOo&Ykda>{bcJ=$)0c4$Ld$5`QZmw^K3^PhnAAJncS6@M0U@%)7u zy4#sG^~ai@LZ7=c`ikmZf=j9SA5)@6|6qX$DYEf-#_jKi%{d%ZJNV)D2B OzlHoD_-k%l_WuB%xk~c@ literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_conection_UPdownload.png b/data/resource/icons/Connection/B03_conection_UPdownload.png new file mode 100755 index 0000000000000000000000000000000000000000..7ed42379ba47cdc9cacad5a54e2eabb5d19a80aa GIT binary patch literal 1380 zcmb7ETWs4@7M2NrxzAqK*KgGnzjb@A*&=A5DRB@ z8G^Vf4Z|dqvZIF*}@(Qf35NK!(GL7Q}!5 z_!Ar`*&x23O^}I#0CP(3m;ndJ`cj#(kxU?qckc#WHjfBYXi30U^P0)qLA=Jxqq(z9 z;Gkw=jRf&KPNft5K+p{cSg+5MAt?&@{a%V;{eG$g&?H3@B)a_`is4y5PjjGt;YiKM z4)IAbR@XwSAfB_V0#6X7QpsELd39r$paOw_!$H#?WZ^MKHA}KRnz^&VAVM=^Cc}0`*qMj+L zP_yD<5HA*$EFWVTmKB+Bn2M26RGR=pv0`U{i%^|RR20Pq!CD~F@@5e>5cYH7aI}+V z!w4DmMLIbl$}m2b6hx8Zd<|?|Gc8HWKu6TUDtEEmx>#N?pk(PrO4sv^ZtBnJmTuAJ=iYGr4-dWO(q^%O!470p0r?92yKB!)FT8yCYV z`#X8%_U-Nq{n+07g_cR)x_oM8^N!+AXM~;|{Lj^aBgg);wTCIR$VcaYtCHZFd!cnA zJ((X2HE&@S`a&yzcDoL^^~?28*M>^@@x`0X%Ui*X@KP)0YN+Fto&>Yyo6XkHAFc93;9ASV1Jxhr znwAfM-Pi&Zy2MonUZ0$rPa3~I?78)hJKdWqw^honFPkciw$+Od+wW>e-RwpuyirE^lGnr z`n|vAZhrf+y(@YA@U-CaTy-DM-Eb|<^dC7<{pgS|Fw@dvPh5Gla<+QTmLGX*_%w}e ZBC*fjj-0=EE7*WRUNws+UHVckpDWE1?rwfAg2*WQ)8 ztL;iKz)WDwj6{K;CM08OhKUgLi-r$~Ovn<9GvO0orf8xrOGb&zsD%35Shsy3OT66O z^K$>+@ArRuZnV3zy|I2*J%S*OkuV>FW2^bp)x!68H)i(3VW%PV8@=j)kry?91SB;9 z&`3rc1Ti2=!v|-84?!%K<#@l*AMIe1YQ`a&HjY9j3(*MTYb#{M1Q?VRKel-F z8ivY}AM2x{&S;hcDLGu!KyR@#o-7U}83}9KgZc_AB**|mL<^a;qO%1*w#>`Ixw(yF z=(341Kc`#+@tK^Elk}Q}uydY+A!r{cVWg9cT3Mv}i7?H`WTI)s( ztU3Qwemy>%1$YeTYEDbSDh@QQliFCwG+c>+jf&b3fK?2MX&o$oh(_5i=)A0mXp@SZtCIh@6kOUFrh+xne za=RFh*W)HBYy~U*?}Xvd6Wr{wbzN84f~{;$SI-b!te!%kz@lmJjJ1k|Jc3l|5k3$v z+)X?xm)mZ1BOMJ~bpvz!@vWnCmXZTqLJy2rS=A$--2&SIaynFge)F!0H-Eh1v6h>I zZI+kLZTs+p6A!Q8RyA;MFH)k=?ae{FiMnup+vc;I?q$OBW3zw$hB6QKSU>uO7;Ei0 zwRJBl%)RLTdMvCtUf}K5n}Z#f%BMyeH?@WrMl7%UMlGdu^Wzrxu%mfN-N&A;=}L(f zKR5BsHOus&(da+@_eI}>hIf7qAGF#0OEIgBzEj_m7Eao%`KF6A)rmi@?|7&l`KsZ> zU)f zvX!@57envOot!>jGkw#ow>UgX-4QWZL0 zlX%%zyAvseriyR;R7c&NoILz#&+&2AxHB=iWq0oPDXx7tJ3qU&_3f6LIw#^CeYVfC R7@sl!j}f7hzZ5)h>^}jM;5z^S literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_connection_3G.png b/data/resource/icons/Connection/B03_connection_3G.png new file mode 100755 index 0000000000000000000000000000000000000000..06cb2e5ed5680c0f8fa465cf2a5153d300507124 GIT binary patch literal 1402 zcmb7EZA=?w96!P~Cjp#9*(>XLEDLkA*SogY_C}@GyB3=Dpet2~F6j08&>nDi_3mm5 zMtO+|%tal>X!c2}W@4f)Ci}2N<4aZ@s2?zHZgI&lI1SDZ$_JMiarhjgz=wsz%iTRM z_y7HV|F`E(MB7@bD)v+$2vQYp=umr%oS*@ONva8e zhGiiIVn9d^JUs)N5TyL96z?*+_y{ekvQ02;Y@ z71U%D5^C1)VbIe%A;_7Slu8@=8o8pcCJUww&kGrxu-S2K#m0=UgyQ+l5wg5yts610 z?)+W(_4q&r;4z@9Sxtmh?5W=%wYiXKxEce^3tAt5RSXIJI#~I@^K?6OUQ&d9P8G8< zP>e9=!?IZ^Nrzlcmy2^U3=y&iVQsul!o_*K?f~I&204x^5o`oPEn5;|IeWlA}~cwthA1GY>K5>4G4y+#Z|Sx)J@T}YN&cz z&7f=tg*J3bN>a_~hs;t#ZWt;DH0c?T3~8#2u4J8-?xODvxT%1fqezAe21$YlutXqW z4>=uPx5o`5!d9`#|D7-#dV-r>wxR1vTdDn2Bi?ve-6j(G3p0VzqJWB{tCWJXA zp8qkiw7lGWA&NvQ*)5fa$8KL7nJZtkp|{YcO**iW| zQ+RXo$gUI9k>an^lj!x);v2|(pTDv7h3-%<=c})7+*-VL>e7RS-@akA8_%KCMX~nL zxAt3J_rLflp4N6w+&JEFZfySevZcM|7?ZHd7i-Y|b~$I<(~ni?uE0{a&Q$-46z>`K)Q+G2bHRcez literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_connection_4G.png b/data/resource/icons/Connection/B03_connection_4G.png new file mode 100755 index 0000000000000000000000000000000000000000..048b90415c4b749fcac89efca1a64e21c77950e7 GIT binary patch literal 1442 zcmb7EeM}o=96l%+OC3r8H^vHkbD$dw{kVQydlw3{y_Pni&=quz7_)18(1Z4_++A(K zu(8ci>c|`#-CUw(U>2fLv*?mVvam?~m^0BCk|BP?5wn;jQ!&$+xLDs~6!>Ey@p5D65nRf|PjNlpl`!YBwBqO3r}P$@fS}T3`@cm=7|* z6Qg?>KSPHH2d*-W2%>nO?FvW%ZyOonV;Wkv(WGK=h(?gc=2V;x^)nI(GQBKkMSq)_ zMFAVOq6bV~oj2}aBCLBzU^<7|yFx?#AtH=6H-W|!2?=71M1xc;%86vkimvdIa4v6a zQLthn^;^;VP6fO^;NS%Ym^21;NQYqn$2FMIgyUEP(CaY0RtIlfjTuQ3PU_8I^+KVV z5bh!UlxtNBuB>Q8lH#ORn@lD(NrQ$LdbJoq5Hg2euZ9+CagdYfl$sN3^9&Rth6FY) zu{;N4MmoqRBr6I%y&pm>?q_==lDJ0BiL1$iY15|YxE9msw8Dyw9A6&g^=^)c#n!Av z$ z;zNlT!$}^>iY5|lm~@$pCKF|}*)W&R32Q?bF%xAW%y!ITbW#+RC)fytTADD#IxM)2 zFxpLelMN!B2Et;rI|*Fpa@Y+xp~v!A4<|}A7h+^l8OyF?jhkXghrrMhFLd#IG~Z3W z2ruzsgpUJ9Cl2-=V7V}#6zkdK>O%+$%wyIYOmik-1 zJQ1xqTg8KCinGz@zqeg0eSP$nTLJ~y6Pb9OcdBXI*l@4;H<`n&i^6@>?%(?5z!j9$XPFryITb5rvcVDY5%^e#p8$0=F`Q)W6 zTQjL@X)Lezs*9KAj$Kf_s|Y@^_n(JKPfzU11b(OcoR@1#bM_a$P)=V`?cASxb8OuG zMa5ZuBrsBxZcr>m zz`x4u(>~01=kBi7p~v2?Vo>zv%iYiYU<-bCoxG7#EVY3{&e3nXCl)>!SvXUc*83Me zKCM_vTP8aS7e6YitG)Bh#hdpE$3jQ`-Z9Zv{NeH0M;H4Ri?X{1rVB3ac!{n4b87hf x{`5&wnm;%7aCPFBX-8`{dHd`2ts(?mL2i8Zlj+BnYbyD#>2bDG@7WI?{SPzv?G69{ literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_connection_E.png b/data/resource/icons/Connection/B03_connection_E.png new file mode 100755 index 0000000000000000000000000000000000000000..4c31b640340438dbaec2a6fbcc021084e275ee2f GIT binary patch literal 1197 zcmb7E+l$;(7!Q_i?ZSc&zO)Z=NTJl)nOr89N!Ykf=49N#&F(Ne*lDHOY;ty!&L$^K z&U9v{AghQ)P)je0NLv=cH_<-0LQ$xow(dh83Z)kP14JmbeP|yRK~JVL+kGeth9u`Z zC*SY)-Sa_h`qi<~-J=Y{j8!LLov!<{=h+eZ{^h5&H|Vm9SWPmE=Sjy&5L5E-90JwQ zSwMB&@riEixGhA$99jq>gZ=yat1JjS zgFPtQyd9U3A58WVG~1hQxV@IEdF;f?V7#kSf)Ei0bi>6c)w>4U=hdm49dj(`tB{t# zK6a{U*FYI32*~+D&gBIGC`w+CWJM7U0Ff6&j;FVh6C_<$bWsI^i>1~QZ(gs%%D@)g z8LUr8taDta)5&)Vd7Lb8f~IL1hbZQ#MlM~7h||qQ>7F42M5&tuF$r)4GDc?(w~4`0 zPalU6#`R#qC+P-xln#$UqbJTkl|OAP#fYn; z6t@$XR&jpMCR1A*$`l7N=(dxz5UpaxSxiy?gKg_G)cGKC79n=qA&N*98f?2AczQ*a zWEo1Ol2G9-S{qFgWLVTxQz%Lngm6f(8AxsAJ&G+0#bQ~3mME7f(khr5lqjEK@@lbA zveY5A8l}XET$CBju)z~7+!Cvo6XXz_G%#Kqc2mvA1gAcZL3vgI`wj+?hdb$uS*a;E z4Hcp!IDx!Mfa!7K}=$ycO;rWRF6l-U8+``-!Us3%<3 zWt+Ngctl${6E|jvZZ@V6MYL!MoiX>(`g?Rf&sSlo(f$4IZ#Q=?gXgXt{|NlCa^#DP zpRb(S>wo-daIW{&sUN5P<)0_Ny?Wnx;h+0IY+GG@{mXdtlV7VNhevLmID4qRbZhGD zgO>kNFy16p^i%T=(BC6~M8?s`YFnA|1Hm0p)6fo1rxU2?xRXL^5n z_lrsUB2%QBmbrn#o?Nq0HV{_XgAWdI(5XyCMT%Ahm7yT>VTjWg3-xzt()D2!JnruI z`+e{G`F#K1+3fg{-tMQmF%0XKGg1z%2fb%^7kYoZeCGwUJPA`pn71ZiU3CDK(5w=` zWka0=IiPAY(|5oKhV59=3q@E|#)PtEgj7!_)G%y>#;}oi!&b{x0Pzx-)Xf-i|K>*o zu4^&kIHQCWTLcw7GwXo-?0BI(TP^b%5kHKNGz3Io0I1>(W6E@eMvQ3j3TW?%Ndj-F zz-o-xaH^FGK_9ENJRyP6=)7`Uj(w|XcIzC zO1EvHQ;euUXbU7+uh&EMNXT*~Ns8xrkAtRzNF(UZm{4s5O?R-vAOW}R=r+_X6ZaU^ zl2wB-0(rU-f??8UTrtn;hWuYTYBLV zK8kzd8&VM;1pNQ{{=C}E{&N4ZQVf4**X^&)thjIebnMOE_x5G3;%^-8>6$yoj;8yC xdtV=$J14-E=9NADwcoFaM>a%zxH;d>1K5k)hcDk)x literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_connection_H+.png b/data/resource/icons/Connection/B03_connection_H+.png new file mode 100755 index 0000000000000000000000000000000000000000..061104a61749f498868283fd8e6e28a193984a5a GIT binary patch literal 2960 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 SpTB%9`V-_bQ~FD7e&rvDWN%*p literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_connection_LTE.png b/data/resource/icons/Connection/B03_connection_LTE.png new file mode 100755 index 0000000000000000000000000000000000000000..f2db63b9218b5be458972342e245ac1d375b98ff GIT binary patch literal 1260 zcmb7ETWB0r7@j03HW>7wpjL!oD%jTU&SmG48MDTjJ-c?nNw%BSEJ~@9nUmcynK{#$ zv+gEOiPVR@sMy+2W1A)v#A+{)Rz>kzEUgbkky^<^@j+D7-arwdf@ik7X&y?zVP?*M z&ivo^-)E*U@MKT-hHi?Ydh**qk*r(d=dL@+`>WIEo+HZxI9tX;XcX725K_8>Mj)N{ ztO_hb%bD194)#%0*KxO0#%1#<%|>3*igl6=FCb`&>g#U=mOTbBJpwDPpJuLp{24>L zPMR5(OwJ54u>{6z8Lbgi z!)bnOfUWtk{Y{Gp%q8k}Bq`@d!3Qn5H&JoOgX|93Z>qK_BNqnyJ-X zN6Sf~Bmq&^`5c!ewNXW00==qY@V#Od0MI5_4J5Xb4#8$b8OS-lSCDjq%%*ffQVkvG zq6(C(B5`eO-jA^5+b}j7W8GU=WlgM>3895iSVCyL-A#om!YHbufX)ob^rm6gcThdr z9G9AKlTZN+-4~&g3z0`Rv#zzFlQIMDx*7@HF zV~Hnh+-0k}u6;yWITlxDh-_A-5c;HOA(^og7Z#3?`TQ;q^ipH_k6E*OH+T2Tmw$Zr zv4fw_oqg+vcR$?!iE?6cdb#7ih3cEe<-){0olnnQ`}RiRjZ^P$(T^Xww?jPj+n)N; z($D3;&&y}#uk_5E*>IqzbN-dC3+I>Zqn*>gUV5$i-r(+?|Ge|+_Nxch56g3h9`?JW zOG|%!di2ZtA1%%omS)%Oy7`Mkp;G(Teqrx}4=pZ#Egd|0?e*)k*F|{t zC*^y6$BmTx#mxRad$;$WKK$p~A55Wj(~G}%bQh*N*B_$p*z`nGJV}4EW2%F47B}x4 T`Dp8v`2Um74uE6E^Dq4eg)ps( literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_connection_UPload.png b/data/resource/icons/Connection/B03_connection_UPload.png new file mode 100755 index 0000000000000000000000000000000000000000..215b20391cb8959744384f473f667977b4224e34 GIT binary patch literal 1391 zcmb7Ee`wrP98ayC`(b5cI=8|kO{Lhm%dflKkI>tiT<+|Rrk3mVhfbks?)4h(lAKAd zckLgeOgG$C#`*)a;E&a+g;F}*kPe)*YZX_JAvzrPkJ^IFfpcy!*RfLOOV{fPj)LJO z@8#w5`FwxA9IL5*rEqi6W&}YB!<9k=&U@^8;|BQrZfg1vw^XOw88)hJf6vaaHijlr{O3bGNTe1A42$q8Vg%^;Vg*%!n1??cP8EEG_IC81e0shMonk1gx6aBXiB z7`hCx5`OHVQ;lK`8qf`ZGPu(rlN5!z-8ki9+-_varq(xP16N{TMaf72SjCW(G{N!*QDk3*&MTUf6m&VQ z0?i5wek`3+yC22CSjoMu05!bgamkk&|vUDS=>&aX<)wJrCZno+v zG*IhCUusaan4U4q>{3H*7^(mar47VFhOVN^S!b2U+2=iO-XpkaP6!5RisAzl&yyjS z)93MeTr`8NaAW^FVFdJqu)Azc*X6cgE8EM}GX!5&Pa)7?(F}OTJ_uCrMv%Pvu)syL zGdKFF1Nq#uN6(cW=crFk7r%R?{&3U$rm8rI559K`nJs?)NBXI)Uu}CaZ_A&ZJt3i{ z=G#f^{mM)C3op!l(X})4=Jyke^CiE27`t~?zqYOIZSra7)T!ZZqdQr!OsBmbTA67`_uS z!i`6%L^AK>?w(TMeP?2!h%tt+#k#hp-^Q-*_E4?i=LSaS>Q3rE^;ON> o63>!_gfcc%@v(Es*!Sd4Bv>%<>EMp7PuRb}aIjh!<(m%w3ydA;R|*>-Dbf(aOQvYtP-}ZsfRyi$t^1zT9x|ik3dK6hV-p;07TA=XLg7xCA~&N5<>mRBVYct443I(vkrXPSNWD z8ca%Y5CM|X`usR3N05S#)o9F$g{oLtPdX*r#+gZ`AR0l+D>ErcZUh!u58|rk!!Cb* z3PV-Jht*OcS19EN33Wr80czU9QMs*AW)!Tl0xi$5kRS;x3C$#%G?UHvusL29uI+6c zL+4DaMjv+5saU8Q_3H*eDW}IFy9ffMX(vHaG)VDO%_ZWo{>^G;dJ4~oQ)k{4iyS5jz}iwtxYQe zZaIHjelyyd0(bdNl-!=AmQWOLsN3akGwVVpXdPSOZdnw9I zaRfn#9*!*I1VJPP(NFRop37l_nrTUz3~W&wtKPzri(*;70VGQ|qPpIc>!#|2Zs}%1 zPoe%A8eLPXYKopV*V?6q+%QxD7-|bp0*0PM=d#YKx6x;KFU@-e+RX`~=q3o>Pw>1e zKzbN&nHPG6WwFZtP8be7!R;>j*vj^D{tUsF`BMlqSTqBkv6(yGq7fu-b5P)- znaSDS6C1x=zdYdi?4$lQ>pJK?U9nilwm0_IJ#jUkuGsbR7C4{W{><6Qs|Y>#K)t+r zM`>YK;@5jtemi#m?iIju^!H1{*U#_0t2?-?x3}(*$3ow~v+_*06^us3&Hov%pT4)} z$!D$Q7o^n!J@|)fqJ4W;;ei)4CI4j4#Bkrhw6tpK(2bX3yQU_N-FdA2t8Jay$YHZ0 z&wJ+5&PSOG?=Cy==i#<%OD^8nJ5aoHyk*a8V|~Y8Iaf7(_b*?(Jw~5+?&ys=W!~B|q|C@4NiNDzG(9 zZ|d(mdTvCXPH?lO55HIWSKbWsQ?0ad#g)v|gPj+L+=tkGML%EJ-?4V<2SdFb+Gx+f s!J%nyL4W?^pM2B(-9J^1)9)h%$ZzXEHKc>wZu<`y6vM(1e#?%30nb(I`v3p{ literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_data_downloading_Wifi_01.png b/data/resource/icons/Connection/B03_data_downloading_Wifi_01.png new file mode 100755 index 0000000000000000000000000000000000000000..f25165aa58acfa5b1a23204c04a9c63fcc9b5f69 GIT binary patch literal 1638 zcmb7EeM}Q)9IkAFE8vD;ktupq-Bh60>vwMyy!KkCwn$1Ngc0y)kM;)bop;x@MVvB2 z)Ui1YqM(ZkDl%mvPMkWw4NhF9jxFlkBAUolVm5HfmPNL`ML_>BCcE6-`*FYLd46B- zt#(AMO$TWfAl{U(r&*xh$sDt)Mh>(pW;9&q-AV|vyFodIwQufp2Qtts2`MG=REHEnAeBmjD3mG{k^;%3hzyp3Ta}6^P^Ai$siBce4AfX> zDQd$_BU)gk6T5kyL1EbM_e=b83C+4-M61}^>Q;u8E}$wuoS~n zv=<675+$^c*NK6rPebr9Hp=DZxiNAtHE+G1PVDnhPSm7SD3!PZ!w{3y2x_BMAWB@LRqGLr!ieMeD8chUpe1nvEQTO@ zm0D?#DKUUF%C#DU+^AAxGMPz_VKQtKYxZ(H;dPK9(GZq;hSk3miyByx;Az%Q)8(Vx zl;fs(nsd_(WXM%PbMh#!llF6SL!}1XAXJ=WsrN~ziKRWzaMn@k1^QaOTBTRxDj9|w zjWQ630nzKFCWTz9)~FRSrFaDE{ND+KfhTaN%bx4H(Jj!*q3PHe0*kRzNP0ohSa8OA z*38~15QJIHIA#yrc(D2Yf^+lZs;7E7ep^_$Z*gaIYtxF#S;c1~`jwSXOk6y3Cfff+ z!B^WGj9>{EWaI{nvx3N5);-QJCBqJ|&#m|Ji~yb?FiDr`Orsk@dZ<-As2P z_tRt>Xe#$Ya3!BrN3_2 zo!I}zAziQ5Tv*WP=@;HO9p`R4IDW7;p1Gi()O2@u)JBb~<;O@YvV8W|X>-1Nl#rBs zv)OZrsxuxwo+{DbD_LM`nX{2v|FGdnL-JtPvQG*JvbWFhjh~p$JbrYd`_i2#>7AtR zrefF~-IjHwcBW)e^Yu*<-LdL!(H1Va*mCgOy`uD~y^FWp5yl@md(G0}&Pez?ezT_3 zdN}8sFM}0(Emil0utqc#I3EXJ**aO5&{@6#0@Iru}ML&?rnCh@oQq z^_9)j?7RBPiZ;c*=ElDZ+p6DdENBt!eKwp*=n0DwbSygFl~|wY4gLAe#%z4Qe#wXb0sUE5 A+W-In literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_data_downloading_Wifi_02.png b/data/resource/icons/Connection/B03_data_downloading_Wifi_02.png new file mode 100755 index 0000000000000000000000000000000000000000..2819ff7b1811143cd21f27b399ad5309023af6db GIT binary patch literal 1659 zcmb7FX;2eq7>=NTv1l!2tW@i|XbS?_Y{PKp==V&cZEVoECbbBEWn9zC-iDFrL@v@YzfO?;%)Hps_RgBxH0Eg`|Zf z?7qc^$TWc(rQ>v99MK#-Q%7eB~=lbnsE+&sn5 zP>7MpXNq|>3_N`lg3E283LQK*L{4)9$pUFZyo4J;MPh{Qw+Y2Jh%%X;jc~b!tU2C7 zK6d`8{G8S2CJ_tCF~zJ6RIwob38`lbg$xH`z)S>NM1m?B2q#DOe=wP_Ily^}CY(59 zD|V4IZ^YGbaWQ4b3^J)qhD$XX)F9S_+Nh+c3|FcYT2v|3<2XJ@@FWmuiR=KYS4y>F zjZ`I(X(TABPu1Yy(dZ4hPGQjKRmwrEk>+@Uwvi#x5SDt3RX!7o=~$BB8P>`$&cSXn zI~bnf9E=;%Wy_(2xfE?@JX~U^)PNg=ijyq0gtQx2#s&3f9iyJ2uhJ^yS_Lkb0H^i9 zd#w)DYQ+X=s!E|$NF_3O0Bir>2}6JOV{^>8 z1p+}>z7f}0y(fd!d9!=WFCAPfyY~C{^XslHMPg1xWPNN7oNO))azT2MzH`)#e}+FC z5jZlP5n{hB#A+((J*I7S?bS;T^o94ePM*?r(ds;xb~B!0+4_=>+aFHoDbCv(8!S5t zUvi}PMcLb8>R(%@D%vRgw=Bkd$(Ov#wjzC)Uo+-%<%3}2@yLv}zQz|8Egxn+`}38W zZ|;mfK7x*~*u8x0D@-bKYCRIYH~8Grb8pOdD7>*2@3^xHWq!`q=D&=a4`#24yi%&# z-Zt00G2W_GPk?Vuf3UyvMDk|&n)5YD?)I=-2hzfIlgnGsSa{UovLmG>Er&<;2G;72 z7SFDkI&pL^esJ~b9&dm!<&et++KXd%8n0m{}BCB@Xl9~_Vo=1^p$y;lyIHaH}avjw))5X>cG7>9tSl=~^(Oq0?Vc|A2j~*7@z%QzxdE zH@x^}@4MSdb63tg*-`YxxNc=(-N@ygGokP^Ww84v=@0IGrt60jF1%M8AG6ty1R7NOnK z7Oo=h{(8Ubv%NcaF1sR(WnXVMmFgv%F7jF3Ri|6kYxmvvjVqaSYx>4x&bK!Q;I8w& z=J5*8cTEY2Ewcm1p5OIyAa8wD&6vOCH5VFN5-UDg)--m}invXNFCPzQww#U<3r-o4 Uss_AC7Wy3+^;!6K?ZWc^06VB`$^ZZW literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_data_downloading_Wifi_03.png b/data/resource/icons/Connection/B03_data_downloading_Wifi_03.png new file mode 100755 index 0000000000000000000000000000000000000000..5fc0dd6d3f98b5a21741ae00cec00726892bbe28 GIT binary patch literal 1658 zcmb7FdrT8|9B-IY%iDGiIYK(T9!vJnDDd(ablSMIL1ps=mT zrkO?)R2VA57z@5&*<@iMbJ_x%CXQirPG!T%HXWjnZ9X#H+!X=+!~skMWI6FN z!c5@ys>(A&hCuLACuz;+@{Ktf8|@U~Asdm`>Eh7>LB=Yt3%8XM98f}(k(3r3@A(P@ zNV^tX2OA|um!5EttE(BpQk`qHRhQe;c5qcDkm1$v1Wtm(0k5-yVl`eZILWKw=b>#e z2uzxA{pr;uEfJL%&n*@RYg+c_$VTA%(2}mW7R4n0dMLHzczzU622~1re zug2I*HD=T>rNytbpo8OF8nM{p@rXP!5zUl|A+=f^;*d(yd5d(misEo@I>n|;GoS=( zV@MZA(i9M4#7k&5rv-UWpM>CanaMH-$Ig&b>{PP&w28gAOALu5VrJ4N6yG$;XnZlk z>721$}W zyz?Z5SD>`b?Ib8J3)O;dH)+=xU^xta>Dzy@URB{YO(P@HbfxMQ; z&SNoDB7@|RS_b)}7m|Y&Hi!=0`vo|FypKW}&tc92gnYH-MJDRh7ujcP+Gmeh=^g>_b?(mQ5 zqfZSs6+Jf3Z~mjIdsdnGd|>n4q?}+O)~~u&oU^MX&~^;j`0F9b!1vdLn?9&)@{KH1 z4%)iIVh%)q-I{o2ysvi?j9A)(WI|oi#lrg1ox{z|!NGmDw-2`XiIlyE{jz~a*B5s0 z{N!qU@1l!K-faM>`vU>2%bhyja636^yL8^j{=9DCLreedy41VQuC3cUKE`gQPNaOe zGPvbRqAM!tbXu3zRH&~pSd*JO)!Fgu6E1~iU(>zZvD}+BdUw(2E%I3B7yC8{;YcL; zLUCsBwdPArndg2!QQ-K-?rVkTl{HjdN@J40JT8N)4J~y^m1}QM4*&T6p`!~X+7JFY z@XOVj`mQc*PE1h^+nHx=#|1}L>qM&w^q>LsfUQ SFt+r!(BB{n%SAhoV&8vPIcux{ literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_data_downloading_Wifi_04.png b/data/resource/icons/Connection/B03_data_downloading_Wifi_04.png new file mode 100755 index 0000000000000000000000000000000000000000..41117ca27a81afb926c21189d2c8eab413000d55 GIT binary patch literal 1621 zcmb7EeM}Q)9IhZJMHIm-=!l*bH=Xw5+TN93=v=SYuH7h>0;7vx9PLrM(!1mCYD<|8 zVVfY1Y%t*uw@5NvmdIo}ogZ`A1U2D9n1Mxg&uQ=qq0I7+0KyHsdY&1QH7RifA4S>LgRV7+8n5 zmj8AR>~D%pi)?kAtq`Q)@rq34y95GETnu1Es#Me&99naASm9+ zd04^2&`_9>%xC<9P69lA7=n+rd)$QrKTA&Y)5!v9lLtvw4$BmBZptPc-weuXeLBMD zo3-WzJN3xzB`hVkQ#|A6oS=#Ys~(ejx=`3~ItI*2a$X8l(L@&U)YJ#77261$ z_t0b!!8rXsiWV${PU81_T$l+_BM70^>tU0^2x_BM!w8Y8)!=Zd+DH(@48h|-pe1tw ztlp?s7{E{>dVn;l^n})c!ziIbPy#WklrvZh%?l*$q{5u zPZ*6#7{(1Sjw?)Rl~$9gQ7aM2G}iUM6D9|q$irRsSl7*LfmRMLXU`CLnLULR4T{Er zGnOXLY!ith(kz5NJ9zc?hKuWn%%lq=T}kK7hw&_jtu7@tpVU{~chn+B^c}c(b?k$( zdvji^H(hBjFuz_I6?@~*r{|D%cj9IK_9=hw(xIJseI>u;s)o<3==q56DIK1h-rF}> z5q12n{HW!F&cfpck~vSzLGyvkdRbg6TbNmUWEp?3h>!N3zWVPo&z+n*mYjI#gFEasRo6=H2lxazF~=UE zJ%fACMxKo9%yV3;n=_ENXmfG%vSSsp`1*6rWs4gt64+mJ+g9vruDKaq-FUb9r1*>X z5Au5_i8f|(v}@1uq`}Qg(krZN>#4XJsYojVQ-aU_joTZEjT(qv|72pcvDa3gG>JH5uMwEt<~n|`;T9Y z{rMa-d9iNnihp3Bqh>6aH0s~7?w7WlrUhw78_-=PH9h64#=oC$E?t}O*PZSq5e-ns z$XZ+EPj~<5ZWT=&L#wl6a`1h& fN7MaRC*t!&vUhIxHM~^bAO6u>j2XmXJg@vexms89 literal 0 HcmV?d00001 diff --git a/data/resource/icons/Connection/B03_not_conection_UPdownload.png b/data/resource/icons/Connection/B03_not_conection_UPdownload.png new file mode 100755 index 0000000000000000000000000000000000000000..6590c31781f54f56b1c03d1c9b746ff15cdedb3c GIT binary patch literal 1365 zcmb7EeQ4Zd9F9G~_7|E=ndqSXu7^ zsGv$YkOGoi?wbN(1aZBiq&w^maVL}2Rj=gOcuT4Q(FhW5EE!U^2iRyA$SGO`oBMbY zLlrrK?V?1VXhcC?Y3esYdw)wh+uxI=WvsCQ4VM^5paNS$OKPuXF{KE$z{|k3vyEfu zf{EP|!EQL!AtuqNZUU6@)_bx(f)C<| zG+W>!SfQZEOq?PqiYHl?i2Gu&HZ)04e25NmM2L*>JYOML4uo1>8Dc|hoMPiV>!(

;Vh6HBj%WuhjKY~4)jdT*thl6l?Mt-Nla z(e?mZyGzkzy=ZN7N)5STs5~&0CxIL{broI6I-}e|pXP!AF31P`EFX*c34)6f9OsLZ z^>i>4B>fb&h?W0$!f@yb?sVC*uB&XpR(6(4X9&J5okF0&qM7iFaf9v=1i39N@NByD z?d-_k&7bX9e_@JWWH|Gl{@wy`=kB5D{=Pch7-xMF5fr!_1d9J7k{sw&1b4=9vJ#``}a>L zzB+b~sSZW%s>zJ5Q!f^;xWn75jhCw$gl~jbuRb%rWgye^BQ;{2oaX-Nyw>pk^Pbv= zt)nyR(_^l>ore#9*|+8#_tWmH*W8bbNB3`dFV(nb$9TLM_rEs2_v}-B%;4**rbZvl z{k1o9;lsq(*r~`^^Ze(+aHe?ah?}Zdt@}E R&CEGJIw97=zs>C#_!mBA)lL8a literal 0 HcmV?d00001 diff --git a/data/resource/icons/Earphone/B03_BT_Headset.png b/data/resource/icons/Earphone/B03_BT_Headset.png new file mode 100755 index 0000000000000000000000000000000000000000..2b5f7a0eb8db008e22b7044b14c02f22851e62dd GIT binary patch literal 1680 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 literal 0 HcmV?d00001 diff --git a/data/resource/icons/Power/B03_stat_sys_battery_15.png b/data/resource/icons/Power/B03_stat_sys_battery_15.png new file mode 100755 index 0000000000000000000000000000000000000000..adf3b9935e243d225355db14c91634a150703974 GIT binary patch literal 2938 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 literal 0 HcmV?d00001 diff --git a/data/resource/icons/Power/B03_stat_sys_battery_57.png b/data/resource/icons/Power/B03_stat_sys_battery_57.png new file mode 100755 index 0000000000000000000000000000000000000000..fb1a3545083243fe5527794fcfa56e0e9bfcdd46 GIT binary patch literal 2939 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 lfq@}~-~h#F8lX1-3;00009a7bBm000XU z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0001_Nkl<)nOuN1eK3&`&*TEE>4S;Pc&5Y=gDVY;I$+cR zgRe3&pLBOL3Pv3;>VQ!Pj5=V{0izBWb-<_tMjbHffEP5h?>R9J$YNk%cu51xpD-{m jq!1jS7)=B827mzojYJ-iA6SMk00000NkvXXu0mjfP-19I literal 0 HcmV?d00001 diff --git a/data/resource/icons/Power/B03_stat_sys_battery_85.png b/data/resource/icons/Power/B03_stat_sys_battery_85.png new file mode 100755 index 0000000000000000000000000000000000000000..b99d7aa8f42c2d7c118ccb392956596b59aed076 GIT binary patch literal 2940 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 KMNUMnLSTaL!Yoq& literal 0 HcmV?d00001 diff --git a/data/resource/icons/Power/B03_stat_sys_battery_charge_anim28.png b/data/resource/icons/Power/B03_stat_sys_battery_charge_anim28.png new file mode 100755 index 0000000000000000000000000000000000000000..76c86e1958830591b0241a627ed87c8473f0bf71 GIT binary patch literal 3341 zcmV+o4f67dP)00009a7bBm000XU z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0006wNklCKm!dthiV+ux`^;51xJ^nqmxidhJrt~_dgVe z_@;Joa&R)>RIt#wPH896)Ilmw1MRDzeNug4c&vF!O8Q3m})v!SDA20D8S1*<%=qM3Bj3 zbX`#tasV!u3#C#CH2w2)qB|f60$7&SbyZa{oleOBBoYZElS#vz+3nx?O6K)?Aqc{6 z^Wkt9l}ZHwplKRJQN(C8IxGN1Q79IRaJ$_b%P_+*0DxAjwYBq|09clVEX$B(82}KE z#}NvJ3^v2z5cPW9nh>a}ie|H^>(OY`u)bQYP_0(6TrSDf0iNd#dZW?6U@#za3^|T7 zOde6(8r6#0-`8ly> zdw6yA%)Y+h?OeiFZEhdH_4@Pw^+dA?U~Hkk%WVLj0+?9f`~!d|e|?}h>hAa`0lp0Y X6RWM5PoAz#00000NkvXXu0mjfv7|eA literal 0 HcmV?d00001 diff --git a/data/resource/icons/Power/B03_stat_sys_battery_charge_anim43.png b/data/resource/icons/Power/B03_stat_sys_battery_charge_anim43.png new file mode 100755 index 0000000000000000000000000000000000000000..333958622bc4c33331e1094a59dd39eacfd5e386 GIT binary patch literal 3345 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 b0e%bs3}UO|4O?_k00000NkvXXu0mjfXa_rB literal 0 HcmV?d00001 diff --git a/data/resource/icons/Power/B03_stat_sys_battery_charge_anim57.png b/data/resource/icons/Power/B03_stat_sys_battery_charge_anim57.png new file mode 100755 index 0000000000000000000000000000000000000000..0f4fca39c39da34abd733ba0c6b66003f6ac0cbb GIT binary patch literal 3355 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 l1MZ*rKrzs_00009a7bBm000XU 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 literal 0 HcmV?d00001 diff --git a/data/resource/icons/Power/B03_stat_sys_battery_charge_anim85.png b/data/resource/icons/Power/B03_stat_sys_battery_charge_anim85.png new file mode 100755 index 0000000000000000000000000000000000000000..412cce4555ddffb1743da6ff83fa1db876bb8cc4 GIT binary patch literal 3355 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 JPDHLkV1lH#I3551 literal 0 HcmV?d00001 diff --git a/data/resource/icons/Processing/B03_Processing_Syncing_01.png b/data/resource/icons/Processing/B03_Processing_Syncing_01.png new file mode 100755 index 0000000000000000000000000000000000000000..e23e81865c9edb5f24e63d7cb3356b7d0bdf08ab GIT binary patch literal 1775 zcmb7FX;2eq7>*POA|PXh0xGWY04d}m2}uMb$tDnDAcPD?f{aVDkQI`R*#!b##0pkH z(O!5I5bKmWiWN%>3W}l@L{t<7#qmUE0EJSI(o&CZ5YQivGu_$U@7VWwp7;7@H!ETy zU7dZLNhFf1GzwG_V}R{(awOj8&Yaf}gEuZ#oFlvIQ zhf&@-rIsrI5o(43HZ?d%OJ^_u4u{HMu{j(@Ai$(Em^3{O%wt&T8h=aLYP{ajU!2%AOD`pDV<5;N?!y%&2TJ%XKNdWS2zB1@f$~hLg`d>Xn#avT<`kNYnre%LA{QfPPw()Cv=?1 z8S*T$LPIkTaWBt1nM>|I1+>_|T7R?e$q?l{I>(?C|pTi`6ebBpuoan!9PhaAu*dky1 zyX@p$Kh&kS7kN~7O&YYq1tpEW4_MI;bLj`^b#{mIRu;D3bdz|e+)CPbC&6ploq?=2 zPlhQ(*t<+qA$^)ux4EmU$Ny=_gX<^hPP1w}b|-jAbGA(PJ>h%*N-;;M@o-$w+hg)r zHnofyzqBwkxwf-hkyP(;)b~P_TKIL_n+0|0Yb&q4iO#uJSxU}qd*gQDvuL)*Yl`~Q z{>669&#KxAWfbx17qu5cOCx6p0`JNOEXsK>y9z z&U=RCJ$Q&4Jq5SVsCM_N9FQf%f6;l&X)993SEydrMl_i$?M@@78-6di(fy<_SJBZr z@9J4-J`d~`n8AqvytrZB|KxfB8Y!}D&rB)><#pU>y}`dv1~ z$1U*jn(oD5Fnkm-h>9NPIv)>r`rX!gW;s1fqh!fc0+CLcQ4(WFv_u*PDD-FsrovEd z&YCk=6ocW~fUA?KWMwR*A@nTNX~VMUjWn9Uh>ErtQB5XB0cltUZV)pc96QMbaIKh` zBv7)IMk%JlV{%C>AvaE~$<5S=w9M%FK$Hcd3G^6+0v3Ii!30^v%n@FQo;$ZeCNN?` zWr~^4ok~{515$#-00D~^u3>XHfKbTd@C8C4Ck)`SIb4uU-@{?}CpVZzlSQWuw4g?i!(xNvh>bJ8F_cpIdW2p- zZf&Ae*bC=h$!}8U7%@nTgR=l%rWDY~+Jd2`#3b z#|>x}LTIw}n1NCtVrF(Wu7%_RzCeKRB@&LDEu(8A;&TK@q$mRBMDk?_f{YQo45YPK zS{fV46Gb2}Ps9~S_#BRm2g_xVupEwvgz4gPVcr;4VK7msL4!F(oml(@HuAMtNJ?TT zMUZNO$QtXWcpX6zCLLh}qzOV`P7-d=5@u7Vv(z*<9V&v6_*zUWCkZ_;l644wg}xMK zOJOOW%YzY#j7!HYW%K2d2!Sj@Ae6&=4s#T%{oe@#X-`0Bm%Y?=V_S49JE!Akh+d4J zLd-xHjik@m#m%BZ2IGx>1tL*f?Ds1c>8334FWJUFuqkmf-z{|CVo9~mZ7S=YchiZQ z8t=B^Ky&tin#U`=nK9LEQxk7&$(xnTY(BiXnY%P7elBj?xq6GbJ^!{x>u(*m_Z;Po-^jOA}P@IASS&g1cr)X6q(IxA<2uK*`Ou1-jz- z?)@8!J?bZBv_w?77`&hLx#&Y6nQx_ww98a*HE7CVRd?baM`A;7VRbh`!0+wf!o=K^Uxki|F4h+Bs!y|&wtUTL?!$NdeFDl{g90keU;0L6I6T=i znqAzY+V*q(!V4^=wO0Pe-`noa>@3Z79I^==!@J!BVZ&rMHqbPyQ{E)0csxroCDQj! z)T*o>3c~`sXZK!0C|>euyF1>WGU0ft|JRMza~mFpzngUl8Tg!?Z@nh&x0g4S>4GaV zy08C?G?fo;OWhS6T+vuo`@!8?hmO3xb6r#Ma6?_i>h-DX8|A&KJ5%fC49t6!Ful65 zW7P^-HGZd@4|{h!sI9U6(otpe_=$6J3{0_W40)|AA~o=s>9Djl^90 zB(EV%a8Ebe@m9*YWd|!;FI@=hv7T!Q3DlI3A1*C<7Lz={3xL1#5Y;Q-l*C%~#GcSc zp22*V{b#k>kIRZ|Y^TkB(W30l2M5X-u8du4>(D<- RSa#>HNg<0v4#KI0{{fqduq^-p literal 0 HcmV?d00001 diff --git a/data/resource/icons/Processing/B03_Processing_Syncing_03.png b/data/resource/icons/Processing/B03_Processing_Syncing_03.png new file mode 100755 index 0000000000000000000000000000000000000000..9a57e775c4cd4e1d8048d9dd5c72b4858e0cb857 GIT binary patch literal 1857 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 literal 0 HcmV?d00001 diff --git a/data/resource/icons/Processing/B03_Processing_calldivert.png b/data/resource/icons/Processing/B03_Processing_calldivert.png new file mode 100755 index 0000000000000000000000000000000000000000..c206e5056be351b739b733f1b795796a1c385779 GIT binary patch literal 1556 zcmb7Edu-Hn9KSKQ9gN}5A)AAlQV6hxd-T?Jcg;@dU3=`r8_RaW0gCIczun4q?b&wT z?FtF}43+V41B`$;BN7oY0py{?n3L$QV;lTINNn2v9{qkk zpYQ9}WhKQk(ne&D(CKt(o+73cj(OUnPloSfU!I%~hv!t*ua-%bYJ`)4j^?EbfOtY& z5R?LruY3I@DAef^cMCqh>i51x1*DLP(`-!9P#B_hy25GEFc+u>DpCQ0g6KeR9Xf&{ z0`EZQ5MGNn>;hFnQA`G9v0`5!RvobO=(HD*!YBm^LO|t^XsAY1sHg+&=cV9W+cu*} zzlmDyKp!~e_m&_oNd^dE$~Oiq7>1Cf3Bw7J#HJ!v3uZN2;7uAaoFYidT7V2(C{&aA zN~)A`4`{)a1FcfkFl9DJA`w$0-z3RFGiJBjH4dxQ2rZ0Cov3nAqo_<6WMF_2kcF@+ zNFt&!aurgo>Oi5V4?+lqONC&Sstl2f%0RMU+RRZdY{pC$v)pf^#W#rZdY_C4g@&vZ zwG=#b{;~XuuPzMCr9hEt}~sHmJ60Ggf`HZjl`^j5N-v98&o}OKETT+fxR!)vz?QN~Qweu&-$hOQK zUDpiXI`@|t|Lokq*kIP@B#kZaPMv=%1>2(^wxHpg+&!aS{5;&Uq${CgZ_I-H{SnfU z%#v-p%U8a8bbMBF=GHst>g%oay4c6VN9W!BJtHge&7QgFxk>xWllYO>rlz4g{`%ow zRf<1xeCE&O@NA}HU(SvCXV#Cp*mUB;(&?wd$BT-*t->dFe;XG(v=_gX+%oK~>jri1&Z~9!!lv~1=%=G)>8rjgPk-eUKk34l zMfJm3)N?}ZGn~xG-jW%AZ9?;z#$ju=t8<>`S2Sg>U8$IIZ;$M$*GJC)4mmz;b@S-# zYa444R$XdsSlHV+dt%zItSeg@J9;`d3a!}eQNR9sto?(TWREA3y2*d}i_GqAvA$o_ zM$f$ItJnUstt;4xC+MF&eed$R*>{TPFS#%*jyf{#^x1lgipL)4jDrn_p1OIw?bU_t z?FY{q``)=}TlCq>`@WudHa@+;pPZXgfp7ja^}YZ$8GO0vv0xLwPJg~F2bRH?T6^Mf aQkE{?wEkSq^79$mf7-(qGrOGS_5T6adMtMU literal 0 HcmV?d00001 diff --git a/data/resource/icons/Profile/B03_Profile_Mute.png b/data/resource/icons/Profile/B03_Profile_Mute.png new file mode 100755 index 0000000000000000000000000000000000000000..4fa159273a0b6b88f24ecb970f640a10d3fa4853 GIT binary patch literal 1594 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 Yi_@% literal 0 HcmV?d00001 diff --git a/data/resource/icons/RSSI/B03_RSSI_Flightmode.png b/data/resource/icons/RSSI/B03_RSSI_Flightmode.png new file mode 100755 index 0000000000000000000000000000000000000000..94244896dd92482f2106217d80363dd276c5b6a5 GIT binary patch literal 1636 zcmb7EdrT8|96zZN2J4&=5p*oKBO*TN_1a$P9d=rJEjH4QmM%P8)T2Gxv$R+5uC{2L zf^))n`CQPcbQ!F##cSS(|Feba)-S2VV&*$@f z{jMV0lqrs$5Dfr;*f5*02;~%j0vHBHmB36riy)g%oITlMc#4 zk@k{Bt<($v5bdR{d3>HR3%4J$Kjb1I~q-QT-shlMyt8IzPhS{N+AA&OixIo~hcoGb_i#;43P(uT}xG)cI!w@)N z!n@Sa3#amo*`StTDG-&&Q*BZN0hLM#qCk~OWI8C5A~IMi+{#o$ful-XmIe-9kf6re zi*O5}AJh_7YRJj+UL1z~e!s*omoTgYMlcKubI4?=f<-D<;^E0as)tJ&Vjw8a#?oG% zW;|e+kt}39+Yl)YFEfmN2SesDAqNG=(-YgV09E<@slB|mos;DQ6Icng8(TIN}I8S@X zVuG>x+?0nm5NgQhqwTmJRiG%L&}b07R43F1Qy?gz!qPGjl|n}l#1O%&KtW4l7qBt{ z(<5>{CPOtSg6QNbOqZrfL-blgsI6W#j5T;Tp7hwLuxJ=dzr?EEh{d%mMe+=5Wtifj zZpwBtJi|E|FR0B?f+@MQ$Ike1&>>nSh9L+cRcfF?to?r{3>G|r!(H}D*9~n6tsI^XpCMr}d?(19AxwiAm+ptH=ZdK)) zV=pdWa~cs`K;+_H*Ly1RMB!Ncn46c| zYh{=?a-^rcZ{y15d!ho@4-x0{-)ouM+dVeErTkh)R+svTHZ*sUsXmx>u6ADhTV;;b zRW*MfEw?8Z$fpIfZ#V1L1~)e>zq091z*?4QNNx^RJKCK^J*88=+SUJ#wc?XoS$*9i zMw!qs{#avY*Y3FKuAS)`^Yq?y^B;FtejLYLC|^gc%XyMQ?L{l8Z=heDk(E&`aaBcS zOFLIR`boF`{iGb`TFOTHnet?IQ`Qc}-GkpxJ+Mb{`SYXEGskUM5wWH@*aIK$?fjtL zJEs~*KeH!69$jkM2VXj5QiNQ_XOYvstp4Km!i2n$e}&FAuCDNp?+BT_vCOR6v)IDp z>AU71yjR|ZMn%=BMfqE}$829@gJ~IYBv^55JWWr$>8-iA(lGhvO=l!`XLrA2-{*PW>zgf1 zh>w{yW5Em>jW$aWi>RqF)b&i8O1+yeT}h#acSuM)Z!JHu=Znq)vwtDe9t zB!-&-7o%<+o=u8D%G2i|m@H~6!$?|RkejU&$)eK6vg<4?h{MqfJrT7Ij>VL@4H)QV>lda8=)L9a-?S;%EL5d*B!5t%4eMY%4^ijIF!so+(V z^O#weh2Z*Z6KWrt1e3yZzP3g3u@qX|?; z;)DjrvnIPK!HAQ%)rebw=tMrSREwDnxXns;m73zFLPbyl+lU(E1a1Pxvkqgg(dP*{ zY_?P&2twF=2{?f@{O^RZC{I|fE_TLA!_mB z6ryITXase}RHQV7Msxo`fk-s=Tf_VM;xrQf%h|o#c2s|^^gP?vwJlfKG|Xtd-q1Ma z+bMV&=d9k%SQPwp;Y0c~wKAudQwferR;z19yaqpL@W{AhDc!&Se3vG&NxlHSw4@Po$zijc)Q1uZ9Po8^_Z zCho4L(O@)f`@OErx%>SKqS`%`D>oudW!%E=b!k2PVWFZm-Po2~KG2OuIzJoLuBg3n z<7r?-<%QI9=8<>r2Kb#1y*IO#zjo!9IZ4lA3K|uy{~E^1mvqEcHDt~a)(ra$rTOIf zPp6mHio?eAW8Vw_w{JYjS5;0gpESaW&LU_HI9F6&VJ;lsap8^Tk+n44Or{X=;t%b-8v2*t*h99?{{ zA}hrFb5(ee#ywzAS$(D$tZxqNkW@wKZfXw|UrRZ8q!g|$U!dT1HSe6V-EU+;Px0cL zGFC>ryXW52u87S+aHMz29`b(Es-207%jaUdR?4c6ZT&OrJMC@@48} a&d^30XhQe4UafGrem4qPJaSUHcFTWQtedF- literal 0 HcmV?d00001 diff --git a/data/resource/icons/RSSI/B03_RSSI_NoSim.png b/data/resource/icons/RSSI/B03_RSSI_NoSim.png new file mode 100755 index 0000000000000000000000000000000000000000..6bfdb2d2192eb5e25e24d938660455bba498d1a8 GIT binary patch literal 1803 zcmb7FX;2eq7*4@K4B`dYVrO7k2L}+6Y)CfAN`xevV32StSVkly3xph-CW{Fak)tZ2 zz)(e{6qR~lk;|jn3KXZHCDAskVs2Czf7K|uxElqB*p_#RM5>27_`J44}g&HG(1T0CV{w^JtRtzu2%4rp#O5f&y0`+T8xkbX01kNM9h3}f)^p@mTfu+OqdXA zKKRP17+Dw~!VMU}ruq6P7!U-&Fb!g{VHolTm<)(XXOK7S1F;Y`j4(OCF2eS|70nJ`Y1>x`4hBGX1U%k^}K#-JM}Y%K9jp=7dmBedFS zYa|Ys{Klv>Jw}hfjCiU+K~^zw@f%X_7P1&l#(>D=1~o=jQ6kqEv55~d84^l5 zuhPjiD6UA=Vmd;K^1;+pl@gJ#S!_1S5(pp(Lrm6&$AZ`>m&Xx8T$UI`(J6vAfut5q zNn)97k%;RnWqY3r@$eD5;qw=Eu|*8$xu*KX5izTbEv+@}*0D>sp$KU`5%Fnlalfmz(*QfmZMU-%cpCQb+!)~EXL37v z?a_YfNN(vjc228pX0{~o)r5PsgC9kGm&OvShb4WLdwbXDm(CJy%w7Hrc_Q58lXY1- zZ!EO6YJSRzN2AvQko+G{e=yK{|6yF+an2my(duI1U3o$QGiu2=D?2=F_{D1XeS`5c z{NCHw5_+lQ&ms>Yp8ll9mbs(?ZiwqIUMEnuZ5_9b%T7zD2epg#m%q%Ic|V~2dRN)l zW`o5z2N52n}hx>f_6?v;-PyVB`=HJ?XL1WwkD}( z_dNf|PVawm6P$M*sgo#T?V4zAcE4T{?7c$k=3Keey5^Hg#~mfR%1>Ormvp51+1j~C z-ooz8?1F0t@|H&4KDn~ONNi{|YGGlK>jtnVN_saF-{YhR4j?%iHBC+Xb!EN}DCKN@DnUH$s^;*ecG z1VI~*ZXfw{-iGT}Z`f1M!@0L@n`pUP)&4!vY3yMY-J{hlKdX|emz9qo(^I453b{-si%MHU*`#qn@Cgr--c8@NyeSPYi{@-Gi^~20 zHb67Q@3a7eOg5&5wP%aj)@8VZb1Lbejne0IOK6$Qu-NCO9R)yyazGyIGQzzLXJLqC zjPMG~s2}AO0*9V~7cYVgK3pPj0+EJ%&O(=f`;71qFD}i4+bS3u zG7$@m@Dr!9t;->j;{k*zHAxONf zBFnj;AS0c_c|;>DdHN&-r`yKn<%_~7xl0&MmXtP?k9MmNrCP-g*#zSoL0PRYMmU|L z)`DmQPn~}*zhEzR1C|N^3G97PVQbjb4jjREj>CKvJ}3ilRmco&`!;N=Cwx zDJHeXtf5fMq(>05#zZA+ErgDsQc%)@lE?@)%_WGm%K?I-K`i?eOTG|`lRThBj<<7M z;Yc?v&*wx=$miS;nWcl`R2~$a)sDfSgOxKNUNv#~5j-DZDF?tGtODY;K zoiTL(ta6zwgiNDMcHghpDlaBbnKRDcQfxAi7jg`J7c7pvqMgwzv*Rj5L2Pdvpl{9c z@7TIw!{XBI1Whh&anPUcOzoRi*~Dz=esn-l&)hZEtQ~iDK>LI7;k7^aU;p@e@8c4U zBKF+9sfpj*OI>EKnslOc{Ea$u{NFvHd!U0wFI_8Zqb*GIlz!rCMNJ^r9r?JiU{^cn zJ6XHQ8fxk?3>?~g>E^w=9rE_cj>M@akUO3H_G4=gj$QiNxU7ZkkLZ=7FQS5rEF;O)+q`wQaxB2HCQbWa(Gi@)DF#}PM4G1ePRoV40@Up9Q1 z@cYj*GHbsgR!sTHMC4$t-&QL52;1cF5?R!ZM)|hO@3+NQtLqKNBTm7gHzqT2(U-bc zeklJpEONn#u1-TjrYB?4=@@nOt6*F3F?TKnWzwRQJab{jWm|gY37wz_Tw#ZOk>l@!+miXQvUYc-#7)-f*rAmGX zEk_i5&I>N8?>*?+!2TU-DD literal 0 HcmV?d00001 diff --git a/data/resource/icons/RSSI/B03_RSSI_Sim_00.png b/data/resource/icons/RSSI/B03_RSSI_Sim_00.png new file mode 100755 index 0000000000000000000000000000000000000000..efe9c29a092b73cd8262e274c3ea263c5f601b4b GIT binary patch literal 1179 zcmb7EOK8(z9M60+CyI(VMF{btVv~GXlQv=5Y?{;+%&c8uLlMl9Z*Az3FD74Yw~G%D z5kbNCQBd%4Q1B)SDxxqIJn2F3pci2(1Hqf9U%GbgAOl14J^#Po|DDr?!QHDmH+51J zwJJZL7s_?n4w)qWrjtQH-jv!xC4_R9GV;~ z*^^aUc9{M?y0@Va0uN$~Zg}H5f$*Yice9SR)Qv_F4X4a??vp{E22x*b+N!UC9 zv?Q@0DM}L9Nees>IG(&x0wfhtQiK%UdKjWDbjFmTo@?nMJC&(m94H)Duh-dn4~xPw z2V_}}IRqg=BofhtkF7?+kG8fMbQsy88(T-cO}{cEF4b76$%%}GbN2>%-YPyVPh5kRg8BUB4*lEtyD^HeRYC>Ct_ zpqN%zg(QnPYdnI@3)58g660Op8rP9s^PrFOy2{jQuA}6{q$ujiOa|n5gXBg|0#Q%P zDGj8PhOX;vg84wAi**P#EsCP1@v+tpO4AdI343h3;RL~k2*eFxQ}?QyCJH*r;mp?d^6xe$4DGwO=_ z5B*|V;CU@&2t9hz5CBMvDa`;`NtOZ7c`3uRu+D!6j3btCah1)hy7mz%<#;*QLu518 zh0rHS3rUZu)`2e4pC|Hqrqp=<^(yFmLa$k34}7Wq{Jrk`#;L{Z<@33W`i@_@Vfk>^ zD{%7Z>$6+dQcKqtc73?;^32Iqmwv>5sXNrFflc z4!xPq-MoEjGeLBy5AKw2>>K_OTtD`!JDD1r+0r)^Q@wq(sEc}WOI>~G(}Vr-?;>vu K>UXt6C;kA2YI*Ab literal 0 HcmV?d00001 diff --git a/data/resource/icons/RSSI/B03_RSSI_Sim_01.png b/data/resource/icons/RSSI/B03_RSSI_Sim_01.png new file mode 100755 index 0000000000000000000000000000000000000000..54dda1d847cb58ed8694260eedbd3406cf10bfae GIT binary patch literal 1188 zcmb7EOK8+u7*1QNGN^Dt7Ya&?0n+&Ud_)P<(W=}hb-Cnjf{ zw5#g9LdBg6m&GE;**sog1WzE=zja;9gDQa*i@=a?TVtN$T952JXxp9l39XrDulnmbR z^RVvhn+)K{WT|3Jj$4Y&4DF@|Bb5-i5Sw)5HoQ=cGEAFSCG&WjW9YUC9?vk}oT?hb zbRGqeme_%$#REXgG7CgWmccGs;DNyL zIj+@ev8@3X1vL&RiV|}OLXub{!wCcr8-T5E#hm{E*a%C8zW?+#l zj%`^YwY*Sl*g1o0n87$CSuB{15Vk)UhWa~k-to+ahODLwJzUf>Otb0OYC#euNfWbK zP~dfv8$|??mR3?ZkQQ}K)4Bvpfkcb72{tVh3ONlZf|N}IpbzBoK*`Ipm`;H_5VB$y zTl7L~dKQdDW32NXn_d>H<^yPA6jTsubgOB&jxY-A$fxroGQItvObD&iw!1%$04=-1lz_r+U{a^TEd>Hed>{*8ZbE`51{ mKh4xWZtY8~`|G&Zvw}K%f9T)p?UTR7|Ba$v(&lo{(2UFMP?r|LZ1Q#{>?SXp zym7K~(n1d&t@PGKTfxIZZ4o_G5!;HODD+e+3krL4MNkSoc+!_~X5GWGU`XEQ|M&ZU z=j?Rj=-$-66vuIU>r<%7<}Z?O&j)P0d*}W)Z2F8Evvh{c)1DP#uI!LG4CkdHbz8G^*8EbpiI=q!nQZI@49#)H$vCj=1x&#lZo7Voe{u6R4_v3jA6HD# z463-}PW3}P({Hrw{(`MJ{N!O!jCDrfVQPWcTl6D6F7X3iovo8&fd>N-x=`ZZ8Z~Q9 zgDMFzP_nsx!yNc`$rXLTm*B%!)!dkV*U-p-gjUgy(HaN3@CG8NV%m)LIU((8LkxhBnLM z{DCd1c2<-K4t>x~D_p=Vi#2O8!h;Lb)Q>UaUEf+n#O`|7r*%}~yIt4OYl^HWNG_LQ zO*B|;G#M(WpyeyDAR7pw5y4g<)0K4?wjkD&N>$b*rCfl}$Z5H%RzSIO4jP&Ykut*8 z{fJt=jT5B_)_sR9?1bkp)ex)FZVkK`#IV2krgasvEF<@2IGzgKXmiZypdGCM;%n~7~vMp6N zI%1`qEH`_IZ8p0Q`z&c8>oM*xInVm@Y#o(b@!Io8F!cvWf4BbijsCeSw_bmoI#Hb3 z*ws9`RKE!R{_jJnc<<#;-~Z{%KS=*@dTe)!#`~{F=P#_aC$FU@zB+X^Ew_%GS^f9& zZ~adj^0j_^>ByPJSmydK8$YKWuRQ!`e7F7yefsRx*!~;I-RtzNA179RUzu20Kc7B0 deR1{wl*r|tRO+keS|25Ujk?i5S1KpJeFGXjfJ^`Y literal 0 HcmV?d00001 diff --git a/data/resource/icons/RSSI/B03_RSSI_Sim_03.png b/data/resource/icons/RSSI/B03_RSSI_Sim_03.png new file mode 100755 index 0000000000000000000000000000000000000000..4ce8fa49fce4fa82cd8ed1e15ab4bfece7edf253 GIT binary patch literal 1185 zcmb7EO^DQ191p0=x+o%eX^SOh5kDu%%Osge*wM|*%XEjD-Enqc2fdh0-tL5*LT?`Ip_ihE9&ClBheD}r5w!FoqJo0#rH9s+ac13vEEtl!kNkhX z-~atTa=AMB#rBa;M;M0LUYUS3Ivz});UW6|_5SinI($OR2ARflq+>^jFn>_lEjJRGnoqdkk;q`*;6 z-yOjZYuO{0C-V|dN%3#1}Mwg7~%VC)-kD}_s)NiKdvu^NT{J0 zw-)W$-oVgC%eWk(B$X0dFyV$}O!S^5-p-V5v^5s0jaUdt6hUN#|w1A_HHs>Qn$n=8s9ESj367cGeVMNwCa(^`eB*W%~NE9Cv%w?{X~GK}>ao<$3|WrdJZ9W)Q=qG#1% z1zOI^yGJlfQBT};t2JCRuPZk4l2)vfY`pP=F10dNqWztEH;Fx@gM|Gx;)|Z7YPpgV>_m-jW|F?HtqLRmeU*W*NGpf){hl zBd2O+nJ%CZ(qb}|usHx|NlF4ilqB#X&2xZfIdV%0ASj}w@M*exF~nNvEGQMt=-MJu zj%i>VC@kA*wUVt=5`}dZ$g&)B@O*-3B%&1`TkV7&jrABb7}=p4U>Esx%xKM{CeAU$ z(?=nALB*{%aCA!UN8MzRw6Sd~U_p{&!;VfIUk_!P7b86HR6D{I_}KY#`J?Je0NDzR zP&2ei6&J?Nn7Y_dtk{h~F|BYBk}4Y3QUp66OjDU5&bz*~q#?WMK_3^j9Mf#Nj$(*{ zC~AVL0)x{@ZDaw6T1HOiK}OIuP3sYy1rl3HhhQZ=pEABKLqs^8Lg|Z}-8#Aw4+t+E4$!wg2Jm zSD$&QZ*cFqkDd*No*tdJRj%H9{nO8%8s3>&f3xp*`vf(A-F*I+z5bzt(TN{EE6=TF zBV}g$ug&qDsr{)hcaQP*^6m%OOZ{7yMz*#;$?A8A@b$<)rN4iySJqDcG}bTozw`b0 ZA+_Em#9CsNT)z)^C7)UMZa9s(?XyT99ZfrFxiS4YZ<~BtMKdIYZazS>BFBr&0N%I=q~_>Z zF(tr6&Ir@ovUXt#+;#q* z{BC->1jrO{?Xr_WRm}EoliFFxH*CZps+v;(sETo|=z{tORTamO^M<7rWjj+gfdvzC zgeaE{U5s-q$H{CoO2;V$)ka`xP7VtLF*?jDvMe_VwgZt?P)FD(uY^MiCoo(zOw&pT z4N*BJ#1u+lLv)O9ViT4NH7f&rQ6FpE#fEppijo5~Xgg`!E;hR|98SjT5O#{V4L;(?w7oW4m`OZ-sqhh?LYo(N10v2`rfG#wV_?Lr$<5$2ChFwwj4R$bNke#hhL6I zTCaAseRinx_b-V(U;p{r+&4=j{~JHPckSkPtJ2Z#kr!(6o6Dzf_Kd78=h)X?7vYVi zxkYcea7{|gUtg-cKZ0y&MKB%5~<(&Vs NN+_f9`Pg%({sR;0v|#`M literal 0 HcmV?d00001 diff --git a/data/resource/icons/RSSI/B03_RSSI_roaming_01.png b/data/resource/icons/RSSI/B03_RSSI_roaming_01.png new file mode 100755 index 0000000000000000000000000000000000000000..e47eb3dfe431bbb6d7f3045e4394d0d6f21cd5bd GIT binary patch literal 1315 zcmb7ETWs4@7GOG9*_`1D#uyU^wN z2njjb&_b&Sk@LKQK$4|WDOd^xZ6`|tp67iInhqd~fIDw_S~+03{Y?fLx@pHKc!q7^ zKBG2k7rh99JiQ-+Sx6Y!oae5STW%v+C~ag}E07>akxt#lkFSYR)y)y6xo+)x3HZSI zhw{6r`2r*p(6x(B8dWjVzd>qqA>XhOgP>~897I)&YIzsdKd7p37&&iPT3)u(MH5mSI_$5k(NC6jU3Y0jwP6hsHpdQDj+e5^Mw_t)PyuBFoTJnB!?y38QejCN^fdo@S+?FY05B2iWkYSV3~2=Gjilw)4$yisx+4c5`+Cmy#Sl zFl|`6U2>oFOO3cus4{enV^EJewu#rXE*KBdXTvl_jSVSuNM;lofG|5WrT~fKc>rXJ z6Nv^^|KABCktd|zWgEJ#xrJKUpRS)Fv{*ld&_YFX&>4H?@M1THwY0}%F;%`h`|sM? z=yDu8)FEv>E1bK#xb4h4J9a*PFTS?#^t5FBvn8GxTmE&eRw+H5KdbCl!H$;WDg5KN z7Q>yVx1A_Iw)3fO?{YVgSOT}9?HHt=qZsExMPo}CQs3jA<@Y#BMyS3P-c&nwYL z+s&Si&-U&8<7;C3w}1U!`EKcFIyu0+cdYBTo7b>nzUON1bd9IPJY&%Lj7 z2c+Fsg*H>2t-}vSH_ji80B#rk@zFd>vym;zP-{j?sS?0CZ1@HD! z<;$gMF=9ONQt=}pbp|`mRL6UTYMkg@IDzfoI`ZgBGTGUBZ}rySK7mlZ_0=QTmJV!J W*C!Ku-gZ~~-&RbSl0O)G;pBf*M6$d9 literal 0 HcmV?d00001 diff --git a/data/resource/icons/RSSI/B03_RSSI_roaming_02.png b/data/resource/icons/RSSI/B03_RSSI_roaming_02.png new file mode 100755 index 0000000000000000000000000000000000000000..b4bcce3c6ba9191cc226de52264ba5cacb08c953 GIT binary patch literal 1313 zcmb7EO>Em#9CtT5qOI+Q7(*-S=D8A-(ZqgE?AlhdlGx6cYA#tC)BqCT#xIF!Y-je% zlJ>$_k-CXqHVp&^U{x;_2M`iNqNqZs8)#@82IFhufS8853W-&~0W_&RXGzz?R0+%W z`|$tw`~AP3Po;(qwr}m+N)SYQ@{p3o<9`1MY{Bn~isXspb zj3P}VN{w(Dqm^Y?G!IR&8_M}>rs`E;C?r+l+ zSvNsrQRfe6R*pqFGBz|su9`5=f$951nbWaFZ+nrq~x zw329O;Z>9>B2<=Wx>~JwS z^--sSq7?S@P6$>xZ5E2iTO+rFyZBRZQq557s|un)DQQ-n8|S;^Zn8v{6!t zQk9BnNC_^&aY`f>0|`dOwGktLQv|Uu4upuRC`yxHJrHY!42+G1c}`%$BFn`D0MxLc z09FBFj8PMUEOT-bo3uTo+d1fq`dITWR@e|L$u889<7OPE)a<5I(Ls(^bjqYW%#%GM zrfoP??{UA>m>Y+xK-WA5jfCr1WIgMWc@KR~U>PRfr?O!sqOt%8Twh!TGB1h%C=4H? z8d&3hCyd6P(0-S#>$>I^Ze@SEc82g`?G!>A7tO_ItS|7!0|e0$NGh>R?b_(=)zyK; z6mhsszHeGOd+m7ZYj1Ab@yPYm>YkG$via|(R6f3VV|8V+`ebQZ-K&9ZEiY%t4_`kn zw4ZE!rS{N{C$^)j-IGJTM_%ZtM9vdEZ>>-(1DjW#84N!d{N_=*<-n1B%O@`EdNmOZ zT<&c9WY6y3zo52!_4m!muV;Q_hkGJ#AM5z-@&%$&>Rjj=d?`OawR3)Q|MF4s?0f3= zpuBTIIXAbo?}wRlAAK3Pxb#c!nV;Xe^8L4S^1-gbuBqo+xx(pN-+jKE3U0c6Wo~a} zX-=LxBj0@Xuhg%p`CZXj6J4EI{AuRlz^zkH|9P5tH_Nq6&&t}ks)S|x zT>O9E_ur0RO^qCH-`l;HAc*$lketTjlm64X2fx2sx%w;~x{#7ZqjnxuG#3(4-5!Tz z($oqt4K;oGg{yFYAa;FdWU?r$o{)038Pt56VAXUmnji)StB#hNgoqr61;dI^zhC*B zA`Lx4jqxg@I&oMuhGtwiIx~{V%}nM*of)$>wX zPSmyVDnb|V zOgoTHL(eX|Ib6kj?>4EOg?z($43et3lMq)ip_M#X`=F}QN$k8~X(idtl}%`&q#U8j zWkZ(|Jje4g7mb1hqu|#7c1&YRGmowq0s;Q>thq+bh}*86OqMzA?kn z?TYt=Uuw*aLzSUxOhG;2+9p}cx@6o#pAWMP6YE#lkjyD80AapArhvF0iU7!r5T)u^ z{eLHn#-7lAmu>61#ujd6f4X&s@M7x}LJJqo#b>N_{gZi99&5e zC)(n>&r1t8W?Rm^xv%rVo2ktsXUF2kKh3FpY~`2Djrq#crSrpmpf(0~Z9Fp^IuQ8rak}Z)sYll5Ru8?Bh_qho zZu|5|*Kc1_d%peS*ZJ=je_}`bxVNV|Ze3d?%BAkldWI+R%V!QQx5d9)T%CLWqSSK# z>7Ldz%bknQog>~Uelc|O&pu(L>-t|E*|mobo3~z*(4*qQgtGsGp5e=v3f%hf9%=oD z=+CL;Ly?8>!jkfRvAd^y+nKuE(){AYdw&njo_u5Jo8sC939T)@+ws@|V)tR9oWD|R TzHt3x|DTmqM&zZ~^K<_JPJ^&1 literal 0 HcmV?d00001 diff --git a/data/resource/icons/RSSI/B03_RSSI_roaming_04.png b/data/resource/icons/RSSI/B03_RSSI_roaming_04.png new file mode 100755 index 0000000000000000000000000000000000000000..6a4206ff73232b79c8f768bac4b82ff33532656a GIT binary patch literal 1303 zcmb7EUufKP9FJR9rL}*MZP?A#kVEO_?vmf#C6|QW+Pfsz9W?FjdeWi}mL|XJ#k(YD z@;mQ(pmsW4Wdj*Zob_o8?R;=L1O@kCrS4%+m}BC@*u!uP#6GAnQHEH5x!rYr7zIP} z`}_TTzW?)XW^AOZV^;@35MAkmau(0~{O_@LJYHVD@*ND{FcYB61qen0B1{?b5dt zX&P~Al2sYCEWv_#urhB5 zSR~0Qe1zdz*tG2-&DNo>)W@0+u>7W2QF5V%95?4UrB*d%3J!9-f>S1?3630?G;PDF zdVBp;V{YuK3|;e8Xrx@nA{$W`&4=h``7pyIV@fz8N0l%DJR3`5cQ`=+KxViE)x;YA zJ76@ng!Zd!L)Ep8a4GxC^&Y~T^)7@qPMV8*jK02`!u|PgT2AC@H>UqtTN_%=5TlPv zZ70RkH|DmTIMdm?`*vone|}Oj?`_HClgoG3{&=f8Tso;dt%A-+-pG*`-=E{V=C>WK z?dW~3=aXLLgVm+LNa(=ZJN3mcJ`J#uYm~L{#I4&aqrdcZwzr)<)U)NwcIm=M`=yKX zN8Q)%9q|UfTG`(5{hi^P!kNhR(er;F-j{#2H23og>e-7Pt?a13C;z!PeCnNJ<6Xz3 z!{?vB+q?Bi^Jf3$JRj(LIrY)(x$Zqbb$|TAHEH#w@z0)$FRYI25r6&RyIYxWcE(R{ zAHTc5o;tC3=y-SWc>gm?i(l_rs4A&*um5-!<0=Cm666wb>aVL;+k(Fr{9jdC8Ivz0 HkG%OG($lWh literal 0 HcmV?d00001 diff --git a/data/resource/icons/RSSI/B03_Roaming.png b/data/resource/icons/RSSI/B03_Roaming.png new file mode 100755 index 0000000000000000000000000000000000000000..4a3d82c2e8b8b53a6e4c7a1ab8722773e6875849 GIT binary patch literal 1444 zcmb7EZA=?w9KYI)b!^2t;|pVKx1)=ow%04YzMPcy+H0Y4#abF6&KQsOfu8j4+Pf<) z{h(}WV2F@y#AJ&m5`v;1Tzp9!F3uN9`_)HR2H!K&vxneNsRY`URqWi?ZTj% zl<1_QOmIyLuH0BsQPLES=W;o7uHGz4T{z)#xl|6T)dVd}a<8DUd6OX5lo%Kw$0aVU zaH4>!jBJOPRooc#^hOALI?8n=6?vUpkk^t0(}w5SG)|Z;xU_1c##cgx!`e%)GD zqTr_Ux8#>&y=j0)fh=aFIILo4%?7E>g;c|}7^pBSbpu$%Ae)lG>W6TcdIUPp32cfH z<5?aEN{De|*({f!f~1Wk85>O#K}!JE#$_W&#_4kS2&XN;FieSHBM@qt6A(-Ie6*AH zyR0Nl5=5Zh8Ss&QXOO0Su3$YKw3o0UK~`8H4pdPU%iY8}H^owZ39yPN#Y8bx>ZV9i zR75!`rcr;Z9j$HSgoK!r>(o+1ZWt;9B(4V}f|AIit68VGTj-NctHt7T1g!OpEnp=G zC+YA72*2IsA_&G}r?E9`;(sR$ho0bSmu={}(iUuGb-I3r;9~t00s$6Hf@f^f*})1-~MFEp70b=+JJa$;OxR{^TM{qG(-by7Dm;W1vi zL))?U@rA+@uWcK6c=qCXU9rd8pdBEW9v%Lrrat1G`I1g%{yw&M|DfrOUDn0hZBu=p zw4zULFLIZAme|So_6e@ncx_@V`og(={OAxhI(+g??Z6e?xQSkzU|q$vFCo47uqjrit`tbRK=#74P)Ep+Kw~x4}4qWSV5L|?E1^1UDl(| zX!UzsAKp`CL>jT(xUuQq3!1MSp61NbIgL{L*x8K!__FsQzD(&c)>a>4e`_V?E2kGb z`*yxO<@@pdEx%Tx)59N~S-CnienLN9QJt;LBHlg?(%I#|`@&t=g!N9+p^8W7I$O2_ZkZncs9HB%GG9n9D-NHf^%<(a$ zYyr!-E8dB)82~W!Q_fK&7tu2bm*CSes*Nt>^DAfo$e0%LGp;gL1{boW9B+YcetiN0 zIkyFxi_$Rd&tg4XcBRP9smyb@D$88B8=960W`qcZz{koA81i{}i3nMsK3+nZtJ``A z>@$(eEYM@8is*bWOAuKQ)fu%e7(qY`(;+4l!;q<<0Y(gZSh+DRVj@tCFrMaviEB#D+}b2Wj~?U2ZKRf(5Mr{Qays>xXNKLXcY^sRKd$kNXtt}0}K=^xkSz{ za{>>ljLbqIAX^~C)5jtB`~_U8N0tW3d8t2HO4{@x#;-?ouwLx5QR5px(e(2XKHs3V zBp0wxoPQ?23;ylMQ zUP^EUd@L{LP!=c<;M{~AHK8bFvRV;4Y*T83n-G*Tg*P6yABvKTytEUy$zRL)q^ zHt`|=3`xwPtd7uyuFXg`X^lVCoSc*#{;0iq-+@WH_l&RIvnssfaP6u|TqJcJwqT0K z^NA+h9L6}$p*3xh6i==(H8nRit!rs_^i4}%N6+P+irR^f+JiU$ezd3~*s&yYYc<(A zd&DnS!lU+&XwK?{+p5UAwwhseIKE|V;C5j})WoV;g6%*YJ|c7G`nwlKef-e*O5=Q7 zbEdas^q*;+iRX{BjOiS6t}rsD7~1sHaclgew)$-cBiAk*j!h^&;9>SNWnTSw6m=K-P6maAKvMnome|>v^OFC)EmFW zT)K9&*wHy*?_ZZ&zKXBTZi3Pr4$qpiV@K<5BDj7Mf$redrqY77-S0O~)AB8Wc6gp;U z;8@+dlVKBCw|`OYmdP4v^Nq>3Vs`wTS+(Zu_xGFF+!@zt`1hVJz>N1qx9n|MT%Wx7 zz-JxZn;;~D{kmc5!4pyQw${{;;j>qlTwHl)*`3jMSA0I4ef?p{rn;WAA4pBPrO9>W zMgGdrQQecw4Y>`C8z(f)kIgv0I#BN4t)-h+@V&{q&;9GY_a(VBIv!}fQQX_O>lUW| N&2wyd)Irj@{6EsSNK*g+ literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_Processing_download_ani_00.png b/data/resource/icons_edc/B03_Processing_download_ani_00.png new file mode 100755 index 0000000000000000000000000000000000000000..e85c095cb136f8ed0651146c81c4bbde1301c9bd GIT binary patch literal 1373 zcmb7EeM}o=96sGd1tBq;#!VNFW6q7Ny^r2q+mmiQ^*?GIob8NsuJUvUZYYSeD$3QUpoi1RSi5q&bG=C?~pbVNgv= zHE>ZrxS$2!JXqQ=R1U{;xtu-cuq#?4PP*N0i-V$U(88uS%Z6auWW7Akzym$0iK-zg zGHNjj2_qZpZ zbpDq7daPLmcogVLR!hPvHk2=sT3*O9T!?{-2wD?>RSXIl9n61-M7ZtHc~KTJypqgH zKsG|W2g_!~6c=P@hT&=4Q6%R6W*|DQ-XZ_36^iBeQoF?g||$@=jKk zlr`hm?|Hi9p9`1A$5)JJciM`sc7gR&`J44~pO>rWHjE*Ad;cgke%aTdU+j4C{p^=#rpNRhs zBnsNP!lSFMlu!IMc}hMu*W;XCIUKrtVtDtq^zl{dfirK1rqcVXV$qSBmqyFlet#o9 qyH5Y<0=jcjf90c%?F~=PtnWwOA;Rl=GMA>TA6_U>!}s`}+4CQ|h3EPJ literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_Processing_download_ani_01.png b/data/resource/icons_edc/B03_Processing_download_ani_01.png new file mode 100755 index 0000000000000000000000000000000000000000..c0278ef1dccf11ebbc5dddf7ffafdcaf58581937 GIT binary patch literal 1387 zcmb7EdraJP9IqqDV4E1-j5s&DvMginuGhQv9t}6VyY}D~j>mBe+{~2H{$q7kIHB$eR!IMC4s5EW%N_VfG0 z7%B>GtdFp>%r+BmAqdoNHxndfw-Y;2tA()Q7I@oD1W8kN+Uh_TFAS=w zLL(hw{EJ#}<;G&Vo}h6&nM|6KHnXBeal++t85~xt30j!6w5)R}ldKhH7#N`Os+iD4 zMMe!qu0d(m-5B)rP6$#WBt~PpwnQ##i^+m%!&6)WC(IUHU9d6Y%b@PU0ITTdnl!NRAsD19q4T25H8Bd` zECE>$Fm9~5SrlkLMN$+)dOU>R!ou3PNP=RVE{B(Jk}Sh88G_|NsAU!))@ApSq|@rM zQXY~ZSew(~@iCOe;j;Q!#z8nU*nq6*oXi75)WC{&vCb8-v`+<`uBc%}Y07j{RZP(p zEv6(;UyU8zUMtFilGKWfQbTSSDg#vUIUx8|MM4*{PK)=@_jxTouaC6ayo`sn!nl1F z((iFltb?-qy(EDxVuk;mFdTY<8(p@n>oQxgm5u4r8G?(YQwU^OG!>q)EqwtKg4`Dh zFrIK~dcJ#N_vlj(9(ni{7P^t=ReIZJ&ML|CO;WC**brEysxO;^5gYmFZT>iAGNP(?anpxmn#P@^~@CxG+eGt>}&6f z%y7F~I$xX3-&MYIZ`$Z-rC%$3Fv*(JMHvTb^GjRP%>88Cy2X1ZcKmRG$bNHQy#)?k; z8Tf+!YELA0L$znm-#dKYD%0H~XMeenf4i-FGJ0b2jjs0LEuAPgRay|e(pBY0O&eEIzcH$Ipg;iU@Mrn Iy!9{q2b$jJ(*OVf literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_Processing_download_ani_02.png b/data/resource/icons_edc/B03_Processing_download_ani_02.png new file mode 100755 index 0000000000000000000000000000000000000000..6a7af02af828a5b144e470eff905ec78b665c661 GIT binary patch literal 1382 zcmb7EZEO=|96y+DW-?`%NGJ%G+ooXJ-b?S=^|CtK-j!Ck(Y2kcxDUIv&(_O!cjfN7 zc8f2=8L};!5i+tU_yL>&HDJ^anjm31(9HolCSN85;|qp_I2B2ZZs2pH9s59*c)7dh z<^I3l@Bj8(f4FXIS*fKIL6EXgkc+_aN%MK27{1SpO*{{Wbp{_dqH3#=6*Yi(lWGe< zL$cTgB0x-b?V12J2vYQc6pI^iVLO{pWxHtF*mH6kq7kH~HkTF??Z7}=K%1m^u-Ox* zFjPu<(LkAW78ew39UBbdpw-B1j4+;O(@LG|M+1^!BU2iW^p{5&DygLyQ;O}q}%N_IVj2oEo^$1Vu(4LqE{3cIG`sqDQ!rq zf|`tCi<&V!81(c`2y!|iwWSPwkzCR9$%1Lab7C4N?F6nZ*qHGZP=c^LLY5b;bt3}q zI)6`oJ=T>5cm(KbMoYjdwpJ{WT3*OB%*VhAqSg*z6$4_24i-KL0=ok`FDYUNrzSEo zP>c}g!7>>s$p#pjVL00BB?ANxYvZO#hO2hFd}KAva~xM7SPFz%_9Vo*-5f&_l$&C_ zG)eLfZ#D1rRr5~9M|pibMHH|hMK?qx0ZdU7E8WFbFNYcyp_{@f)ll`6 znnwLmC%U;&Qj%&`-(r>;a>GzLph=w|8PHT2UC25s-9z8+Bm6!;O*wp=m#1Ldeu55o zT@3GHoB1nz`>`PTvmRqJi9h|)|dZOwRCu+n%-Ot(KoH$NuPh zX262~kV#j}+}!!%zZ;6(!N$Ko3p_W(k6F7PZALac6n2!mN*(5(FT~ez$9>JO{0DGI B<9h%A literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_Processing_download_ani_03.png b/data/resource/icons_edc/B03_Processing_download_ani_03.png new file mode 100755 index 0000000000000000000000000000000000000000..6d1e457f5b857bcdf0cf489f6988f2d46f809041 GIT binary patch literal 1387 zcmb7EZA{!`94|7)OSY4_`EpbANx@_)T(5WS9c{SXOWPZ#J3I~oM8B-uJwS!NtnGOR zBZBC5o7tR3lL?ECjSoo7#4Rz-m&7Gwx-Byq28~(fOo)r~E$)Ma85#JLaf}ZOiA~$* zrT^dW_kVl3FIKm0eaYq$48zt(YWX-CpR}H$wdj5J%=zchU^j&pvq5b$)1nTsU{Y;` zAR>$HFb>6J_s;XM2E+2lrN$PsCAytWsIo(}Y#bR`Lud@E@nchyV5Y zmpG7;KD?QZI-?o~JEYnk9X9mTH70sG6HF5KZv{0O77@tM6hTJrQVcfZ!xwp3G`F@1 z94wlcoj&}wQ!UXL;8Yy~+TpHBI7t$CJPwkgJsz?WxSXVmaH88&MN%y7VO?IZbm2%% zPqwjfKD?xbRzAGLG&PnW(&@A#?RKboJ3%rGV{y1#Rmh^s=vGWIQ>7T?IR+jY30=}m zNmYQwD7LC8(}yEZZ-*djajCt-G?vK~V<}lEZA3=Y2-4vs^hFyhz8oqVT^%9I%hrY& zhj*O6E5Fg$twACV4K<}FP!-$CS4gccWEn2Sz(z&A6QU}H#V!LbeuzfdXOZ)gB6jg= zA|*q`jPO1@m6DQdn5Jl&r-DH;>=aOK7>cC%YQ`HPt0{r!`5eJYAkuOq5tiWu(k+A- z7agQXQgDad6d4j27gJ3+8F!G$VIzuRib?`nq83)VgRNc_%W^stO;vAH)vjDO#X3|| zH9Axca19=?rCCyvYT9_hDmCIpq4H3dUWCc8uF7CB>#TGaeJW1?=!bmJbaYR`KK9O_ zW?xfs?URu~Y3k^Rtt@r@eQsMBd$R0>!im|JGw#wuc_;FUds6+UO80sL-xPu418cvZ zsn{Wa`5TYj|3%)kys-0?cLQ_xMgMrJ^x-#Jy<@flu@B789O=FB;NC>-$A=!t4rs*% zHu>?d>z*F!z7VK<=Gc3`1bW}P`sw_m`~JLmZ=iPhOh0 zf1uaCw{K(2*xkSRvrRYs!?u620Tw%zg- zU75)~l)ZY-^pX7Q=YEQLhq13F$+`OM>#X@Ivk9EW;IUtC4orSmVEz6gLLL8MXve^R D1(e{a literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_Processing_download_ani_04.png b/data/resource/icons_edc/B03_Processing_download_ani_04.png new file mode 100755 index 0000000000000000000000000000000000000000..1c703859cc1127d317e40b7c03fc875ac5fe4fb7 GIT binary patch literal 1403 zcmb7EZEVzJ9PfE!g9}?OzGk>(PdaBr*|oiE@1^Y6dhOkI3Ac^g2{XimUhmnh+xkM= z^KJtJ3PhGf2cFqwuJ6A&=LL>SW$KS*vq9lNm)WQk4N z=cWJO@ArRu`f6u;Yo%+03&XI=c$<(!o!Xy+kgS%&76NWj@$f<6tJF%6OG{qy@HlBi_BQ%CJH5YVI>W3Cc!>p`^@wv~= z;XuxW@f}QpOz1r9mD`34*frFil7{-FPzG<_0-6deB2b_uf`T%jnrtDAFY>ZzZf_Gf zSTwQv!}vX?x)Ys%*9-_4kFQZ8DGK=g9*SoCergl&l9ZPq(d}=fXqNG_-T+v-aHM8r zdf228Thc zQ-RGWrnQ_E#*wG@LQwRiob9#DWpdSAN)}2RQ4n>4@{okFXk*7$LM0NbBNS!X+O(4J zzVi>{H&cT;B$Ck7a)yMe*i*kkYIPyoa47~hAsYPZZA1k9 z3csZ9E-W;k@5HvQ=gZbtAD-&`aZ?OD&ONfHVtQZ2+x!{lS@x|tyt+nh_ZC}OoKL-jv_i@Kr$GV~1{!iQ^ftDZEg44t0Ki_$3 zR}>U)*FE;R(*2$ z4Hw&uTG!X+jDCHCadYB>u&d9SbENm+KaDxkJ3*0hS7t@9#i3ld=Iq#isb*xXG8J<5 zefsZ1^A$~fUqp_)pLM=?o9)}kqep*xjkRXS>%Skz9Oc-_FXyqzj>*65-(fu3 KE=)#t4gUwt)7uOH literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_Processing_download_ani_05.png b/data/resource/icons_edc/B03_Processing_download_ani_05.png new file mode 100755 index 0000000000000000000000000000000000000000..ee6de79a871ccb29c1f701b86ebd1f12f3a3915d GIT binary patch literal 1416 zcmb7EZEO=|9KTv%(6FVEhz_^#-G9_ZO@ghz3Xj_bTnP#W{8pN_14|Cd)eJn z+ik?LnZS&JxGx~SWX_QYCXPU2d<~)-A;Xwxf=c`%!Ku?s2SGGZ?0l}QV;{&8FL(F6 z-2eCc{okH@A>PtdZrftRFswY<%qGyd(|p#iL+=YyGkeic2_x;WRqcQ|UKg=YT1|-{ zD)SjJA@b?I-WjnT!>p&JWIJq+?WP4)cJQW+BQI+RjbZf-d5sskMF>)2MpAFH(o2nx{w3nh?KCpD*NKH?7 z&b6GSeTbL89(RnHJ)AP_J)T&_A~QD^iikk8jC#X;4xX zU^4P4H4B3{^7Kv!vX+oCozPe&SB#}(p|lZsUL#0{lhBJcW_%@7EVepAmY1y!m=Nze ze@}iR*{6v_LNwH@E}$xQY+E6h&|vG^etqxT@^C57){RUs>j z3XHNrJe!r$H0Skry{sn`A~|OS)h6H}y{tdr3zL3Ngk{+h!Ac;~a-Nc9^9`+$dC5)TL*|G^eXFC}y3O?xD|wolKbVxZGhj6mg-r8K;K} z`MeRIm*T=65?{im|98R&=no}pj4Vg*l*9~3H2y?k7& zTx0w3y@}(}g?P}rm31fTisPQ{nt?5Z9ir?W7*K3J@CGL#Mk)6dhpKhx^Heh zvM&M(*S9|KvE`b)*!%qJjkoWQ%|B*;_@$KZRK;3;5EO2W?Z5uuh|v7*v8qGE+J?0i z^7e}@dbRB{V@8|ZqW?B=B53P^3zpOX{`Ht8wHFjfdwGTjyDajBAFO*0T&WrvD^CV& zT_5~&-;J{Ru5;lR-^^H_zWP0OO#_9)k>9u4FIsOrb?I?>Hd6y%JG}j7vi0-*J;Tp@ zS-Yv`)APSH|9y0H?jhLd{C3ciQd|S0Z=Cy=13y_(K2Tsn#L?0CY*M?84SCKD#gJ0WrBctAV<#KN!l!L(VW(S%H>kI7pBHhJIBpF$h2pX>!t# zRRuK}rA9SnxG?DH-4GJVfEsaa4% zsRU4r8o`C7QgWE{GBm>owA)R3?INs=lO`FV%vs8lWwa;=LXKc65NhFJh;=hO?Gz{{ z#kgsb6dk;ir+7PK=LLom83&ug)+o9mDIs8rnppWBwrpA~=h1*LmyN}_qVikzteFp|Fvz4+1~b9OB$9uB+i?$aFCB* zIVyH`Q+{`bK;j~ za<7(T^G}YPaVF!wF+BL#lReJWXV-uC z*;w(Ot-_s-lCHo0-eh@WWbJ|`{G)YZ!MFeHyY+s4yf4)*6fDi_eyM_K7Yk-T^=8%Q z*Z2!79ma-1et4{Zqve;KMO_Dyd;M1ie#?vOTY0LYspQ6@>gtEZQL5tgKx6&C4*dBM)D( Y4kFgkw$sItQ?&UZdN9smFU literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_Processing_upload_ani_00.png b/data/resource/icons_edc/B03_Processing_upload_ani_00.png new file mode 100755 index 0000000000000000000000000000000000000000..e1c08a4eebaa9cad9eb1921498dfc5a94febcdc7 GIT binary patch literal 1343 zcmb7EZA{!`94|w0ES~cvU^aD>5{I7N_2t@f*Kr$n*PgpT5e}B2XtL5i&<@((+MajZ z7qgKl8eMdnP5s~tGfFVP;t&Kza1k^4AVl34mpIM*pi}2!WXX&!@#*c3@nIpcdHTHd z|NH&l`$9|eW1dZ0Hz5e(N$lp6aP_+H#xgj6@%dsWT(&quhtp7*ic5#o>4+lksN)e$(o~$xtZda!`~HO8D%4!;!K+!>%bZ@W7TWE#+vYfx3)R zmzj3L7_{`d3wkQ4^{9@$N^aPNV8O8ASt*5+ege1hGOm9`lqjx`(DhYm+ev~O#^03R zZtqV4JPB+wZOJf;-8E}et*^)xEcn2QlGO`f7UNQ%4e}pEk$W5(uNhJwZ^~&M7*2u@ zW9hV}aB+ra7@m$q$T%Uu+=OV7;e(;NC>f*$p681MYk^RgUxC;dA7n#hJU~SQQIZtk z6d{F3Bqs1QAEyFD5t}e1sKDs{2i4J@@TmWx?Ha!jk;H2aFx)S{Y>X{%-mjkU4p zLwhwtF*EkVZmJOu??Wr;XL zP^^Fzu*&}q7!EDL-6~sCb;T=K%If|P7e@R9cHx!>Oq zH=k~}^SM`ts{g#}?&{#x!B;-rarN&zE?iiu`YbZIFm-lz@&31lW@Z}i3oP2|xBA;l zOMgtf{N&M!^4J1aU0&%KQ14yY^F!w+YU%3@B@+W)?=8Pg{zMJmD$=DKPCd2p#o>#| z*IGxuTNxKTM_&5pRQ#jirpc!H9S5tv{y@1lHzJP?RkZ9m5l}0>8aTQAZDXyK*S;Bfc4}+r z_{T#(BiW}<4K7_AxOD8u$>--E_;>R=!V@dY{N)X|BVw+0y0WI>nEOjh2+jOhbl;)> E00i94$N&HU literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_Processing_upload_ani_01.png b/data/resource/icons_edc/B03_Processing_upload_ani_01.png new file mode 100755 index 0000000000000000000000000000000000000000..d9a76cbad44594812417b5480f3fa53744160409 GIT binary patch literal 1362 zcmb7EeN5bB9Ik>m&tQ}ck`a@2MP)j!z4qFJcHE%7_O^2#!g0$ksL6WQm%9pWZ*6aP zFk&1gQ(`thmIyM88%vh?arn=oh&p6b7dE$qWHE+iiRLo5iHRS?7#$|QWgO#=g~aA< z-?wjn&-47g-VU_3Y%OlOO_QrDyjvXhe{bkJM<)j)kA%5{8D$jt!pE(h!XxjZL|UI}VNW<604a4_uL;_FTcU~Ht^})KO((tU=f@U#IkT&aGQDMFtUA2~$nm zs-dF}qZ~IfwjYC@-U>lWN7Q7>wwB3tYbjYUZA4B^6C~~-%tad~z9K3dULB!n%hr}1 z0k@sMBfk~xNdqDREF)tkU==%SR!FTbZMP)_UA2HROh&iojI&03~P|8oHQuPQ8PEK=1^F08M!Xk(VeKcfdmj z`FcjGXM90{Cb1=~^1l;CKu-v#%T{z#<7Al&y?6M9O3=UK^6rPC3y%%o zov*DKnSV94AhlFCCJ#+kF`p{pAJzF$>{#VszLXlxOfBqv>uiU#{m6$$s8r>J{{2e+ z!d%sXeFqDt?vH&wp1kiOer3~!iRUHEHMXndyJ$CY@Q-p7OH;cJ`r-Z+NO_=ox$ zu69SSJv{4wW8=V^aGdz-;w5Wj{e0Dl&Ho%M%xrF(f9bn(@v}F_{oil-VQloB!>+B$ zlWg@PZD+22QkeRE>YF`IS3FT3U>`?tc4&OdY40om4rwN?C^ coOu~3K}tVxCr({Hx6k>@g`^g7OxV@`9}&UZ!vFvP literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_Processing_upload_ani_02.png b/data/resource/icons_edc/B03_Processing_upload_ani_02.png new file mode 100755 index 0000000000000000000000000000000000000000..7faecf2e4e8ee1257488f128e65d7ab7388dfc6e GIT binary patch literal 1357 zcmb7Ee{2&~96uzJrMR)ofX*nn+*UzGdp~y9u9wy2uGhK_Zf@-vW;SuR-fMf=dROnR zwyTMMY>C+h1WgnXBeErsshJQ(oq+fYm0~a zfQD0Y0z`nU3_Vi-EeNvmuqt(1-Qrd@rl;JpZR5_R(h!XxEv>n<92)=@+7A+{=Etrb z{}e-2#gA=cL_$mlKvHeX8z7qRkYf3Pm`}l4A4OYoEF?$)OGb04LCs`yeyqsL!nM7P zV`$OD8t`Mcoaz=k(SU9MlyNt?VgyN|9*>)(8IOnDj8X(i;RGBW7fG{>ho!t|>B69z zp~TsU5GrZGH$RrNtTc<`*=*LGZF1{I0w;YwpUpv0E@7CJ<;S3>w?aszBWfaPnTzC_SxOd68=jNXIO!&EqiAEtS4N5A@`zMw(b}{k z;I{L3p^YUaf9TWtiOt2IPwcHBC@)XZN8z04R zG)V@Vd^G3fX`U7sisA$+P{xKe(~`9qutjaGdK=rkES3!zK(=&4()Gb|H+3d;OE;5x z8Vy7}=*DfTrs!Go5xdlo8-^+XLwyz~Awy50#jLaH9rOb{5#R$f)x-;2kb-ds2s*@h znV^^Pgm{|7N?7H8Ck%(4;C7cS>ALb3Y-M}7c!uE1;wc0gESdq&*c0n!Oaxg$hXqc` zUAVfp;P`^5d0~2H;)jZgF6mT7SIzaar@py9Kl{$A`=qyrS37R3nMV&!zoi~|rS8va zm-yGdtyF;dp01ZilMM~rq+Ijs$i$^TKMydv@OWd$jokjrvS91BYK-n{I)|H%c{ z=UwR&3yJCM4)W)XW1A{pdhn-nJKM(>R?dOZ(T?X&T)cYmjdAJW3pX0tC;#32cWoc? XVs+yuANNev*gv>%utRv4?;HLP6kOKZ literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_Processing_upload_ani_03.png b/data/resource/icons_edc/B03_Processing_upload_ani_03.png new file mode 100755 index 0000000000000000000000000000000000000000..225a2e2f1f27954b100eab3153350c676a8380f7 GIT binary patch literal 1360 zcmb7EZEVzJ9PdI9GXuV0ZV@pyCEzi<>&vy>UEMkF+8$i8o8xxM1T*cf&vwnOFSb3e zTS6FHG}}I);U!`iikBr|#=y;6M#O}Ph)$A4Fyn)f51Qe?pqQvZhbBH9yRi>siA~$* zrT^dW_kVlZTVJ<%W%-(N1VL8Dw+Kl%R=Usq_rdoUpHJ+7!(+DCXgBCBc3v_85|Q<0 zfW}p+6(oTqx4$+4su5(_NhQ^2HzsPiw66Lk*T(Ot21FxBb&X?4={8`a&7f7$!r0Bz zXE0Qe!`L<^K_muzK?|SNuGx~~)2wwR1_4-UQ!#8s z*HD*HYSwdh7=xbP2|+cIN^8cp7RWVgK3OnrxFZ=j=_hb=&c=8D|fG2^a=gc&$V#~TkQcDZDhVwCS3CU~&u!=D$Yk|2Bi3ImNbY9V5XN#jMdo4*%`gHTiI6cugtZCLBqIbvRZ%iXi-I7O2o?jOmS2Y0C=(P}DiETW z2u+e=AR6EqF+>GfkqU`1o-SeInq^B`8n~h^R=JA}E{WxM6G*mhrgS}9>ZbaPZtGS? zH&DKTMZMb;P1f_)Mz_?E8-^+XQ+XZ8F;iF3xvX=_J@ok~!AE(T3Pgp7NWr*yf{sP1 z7_o|BV^NyK=CShsP8be7!QC!f)ODpT*vjs7;S9mW!YKqAESd?=*!h#Q4UwqG$l>eg_vGeJ!Owecb+$R~!!zn23_1e3>+*;=Ku4Rq3+uCj{z=z$gPup8}FT1_hZ3SlE=nvi{vCF-IvMn#`1?brvh#LIK{ zy#0T_|ND)!#rD)%p0XeaQX6UE;&6W6d^gs>Z|U;%emFH4p)Mn#q>Tcv0fb2@JpheJ zdoNx-wC}nrq1P4K&ZnvEvDYu*0g*qLC6L-Mjwh<&vxoM{dtvndirlrz! zoC{ZU!Ce5$8iq>ac%e|R7hHBl%ix61=QBB+P8*c4=>xLC7j3e>y~@A=UC>0;5EU6U z8TlS1Zv-%C=>r!eH7;hdhQ3TL>y==^u;E2s#RIcyaZ$; z!UeE=UQE$piliuxWEdjs2*KR=NP^8n;#TUId?J*%iF zn{cB$_KI>!Dd;=RR6}m)DhD+26_5&RiiDP*M32=imRqGqXP1 z;ykf*B>Nj1-50xl<-V=A=~&(6oWK6&bmw#kYowsgK#c=u?-@Zs}`-;M1& literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_Processing_upload_ani_05.png b/data/resource/icons_edc/B03_Processing_upload_ani_05.png new file mode 100755 index 0000000000000000000000000000000000000000..f311b34b2e3ab55619e6fec9ed7e7031c4693e73 GIT binary patch literal 1383 zcmb7EZA=qq9KV7NG{8CyS#(2hM@(?iUhlXo?S+E9yB3;wtSe1y^ovLPKyT2yPLFLY7RUhB)I!BBFZ_9~Ni#0hc9Z&TP76$?yy7W|S=?%Vx%&LyCMbB)i<* z^K!r6@BjMT$#7?T_12wRF$}8?b%+r(zHB{}&!G2LH)ao`VFwJvV3*bdGqM3Ne?sd9 zcqk?Jf(VckLj$v*1;fg(DA5>c+_ZCPE8_W_7^gI-1T5f5g* zAaEt&BM!2XOVS09R62$Y&^6o{jSu(5y$PbN6>rIMNFW8EjAv8*s>x-2#ELG5=GHbz z;42W==OZ3F6_diapcw#XolTCoi=uG1+etC3+f6m%w2Pui7rNaJis4u{M>pfE7lEu9 zi5@N@23KvNm5)e5sBi&{LL z0xArNJ|dk~5?qjFSXN~Gek$k+pxSsDiWNQHW}fme0Z|l70_%y$mNS94yx+spH1DNZ zKSNQ0CJ#?Hd)z!t(|)g)4+tf0NHw9X#(`zj;wn$Lo(;L2U;r6vMpV=KOWhPsYEUzi znvM%yZoJ{3q9(MAxz{Q+(ng_*z)%K3B4}tSd?o9g@)Y|5?-F={p__QoAD~g(f{O|I zo7q4!>kje^MXYiY|2ttM@`SXyY+cutwoofu)3q~%7Hg*vsHkWLI%Dq^f0r=K))^B0 z(d^ysN6X7?H^SI~Dq+(p4mNnA+egzMq}(6ZO>WB1?{BQiPriA305XjdolkPbVOqa)><@p1cku0d9mnv0136*YHqdyvZn84JyU=*F zI)7%-)4$K&CT#zwCja+)KS-}lRn#s#$o+-ecbCnd-T(ULciz$$PL|JqS~z{P{Pa|H zE@m4gxAjr=wLf0?tZG}1gC8w1#lov6#yI%h#D$tYSAKc);^jciWbx;@>yGo&PT~4u=sWBt>n(SGy+PjV_Wl%atf+oAR5A;HNSMHv! z1&LEX2uoy!1pVR%_m<5pZeX$)adR`HMv0nWvY4qcSuh$hO$f=2r-fDtGqhKJ^1GeMZ9&HHEoj&8(Th|!DxbLZp~+;_#i|e1_xxtM=oEw zN&-3IBM-7+dpHw-Nx6MQgFPdi(fG(<+?yaJ4{+fT}^j+ML$7ou+}yWuqC^<)WK_!%jOWJHB03n&DU%=Wv6yi^OVL zqMwTh!8I+s@{vh|G8{$aayeVhX;ZZUiuQWF28Y98#THh5SV24hGhkY=jotb#I^Ao(-{FK!XxewWzA5O5N0zRFSGD z)eH#qxIn`}SxKllz0oK&=Ek84P?HbCL{L-HpqO<|euRF&Zx8qbjKk>{c+r954%nF> z?`B0e>k9fAnq0#s{&&JC>9dqo}DF#vc8bO zNAo|%R`1)_I1yhgL|h=?Q9#}HC~bV>PSUw4`>m)7tb!7xYjmWK7OF`gICOj zXWCX%K=W<2OxItV1fZ($Q)6RQ!_ZO__;?Th*>219$=pixulGk6`01CH->w_mzV+X- zp{Db-=PC48FNmJo zg|d}C@M1-5Tk=!ardS2I(muUdRX_WS<;mAMbn#E-)>S@ek+3neU414a94NiP$oB=;!enO*Q_5A+b}q;6L=n Ef48*S2><{9 literal 0 HcmV?d00001 diff --git a/data/resource/icons_edc/B03_indicator_bg.png b/data/resource/icons_edc/B03_indicator_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..c27b6191185843392520c494135a7edd9b525cf0 GIT binary patch literal 1052 zcmbVLO=#0l9Pdzc6nFPyu$UcGu*rM*Xq&J)({&#ZX*A>d1@`Cj7cApC1$IiVfJ&gFmOHi-qRFL+ zy1g`OD-Jt)h8c-fD&QevF|jx2M`~PPJGv^}C)Yg7bRcB5z-~L$s8ksphlr6mkg-7) zGFgd(5>O=NG$Q~Acqs57mw`Z)b1HyL_hG5E&}phQqtvxUPX)F`NTBk3yWQs6B8S5n z9x95$1A!NW3`Jz3MW0x4#*c=33I>Yo&<%)-eI`+~rtv%}u+-D-5WJvL*%9`mZlY+) z_}B_~$N}E-lDInPh}6(uH+Drw^~C`3H5B3b(5Cfh4)@43cY7O3fYclHLg><>SaSxp z=RM?;vQc2^AI@_4idsq2^F58-xU#Hhng#$cixPyU zSfm8qltlq3rdblj9=GgA#PV&_v+Gj39j;O;?a5X35LpC=b&ThF9Z+pyf}<7=7=1F! zoSbrf2e+eBNqM%THBjg-Ag2^!kLl!Bb$783O-ae=d0mu%X^If$^FmICx(thoE{S=K z?Q)&}$r(?b;gjb0r&)Sev;&jvPV3Xd&hQ|gPE1HgQ!8!vBGwd;d}LuDhpdu?SoeMnmQaq;8f%zf!C`PE##{B>*f)%Sa! ii)))h57yU@>C1ho^P6ztp>*PLGOuNG!gyA^a^nxFfKCwr literal 0 HcmV?d00001 diff --git a/data/resource/indicator_common.edc b/data/resource/indicator_common.edc new file mode 100755 index 0000000..0a0443e --- /dev/null +++ b/data/resource/indicator_common.edc @@ -0,0 +1,427 @@ +/* + * Copyright 2012 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. + */ + +#define TEMP_SWALLOW_PART_FROM_LEFT( partName, rel_x, rel_y, MinWidth, MinHeight) \ + part { \ + name: partName; \ + type: SWALLOW; \ + mouse_events: 0; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 1.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 1.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 0.5 0.5; \ + visible: 1; \ + } \ + } \ + +#define SWALLOW_PART_FROM_LEFT( partName, rel_x, rel_y, MinWidth, MinHeight) \ + part { \ + name: partName; \ + type: SWALLOW; \ + mouse_events: 0; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 1.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 1.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 0.0 0.5; \ + visible: 1; \ + } \ + } \ + +#define SWALLOW_PART_FROM_LEFT_WITH_EFFECT( partName, rel_x, rel_y, MinWidth, MinHeight) \ + part { \ + name: partName; \ + type: SWALLOW; \ + mouse_events: 0; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 1.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 1.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 0.0 0.5; \ + visible: 1; \ + } \ + description { \ + state: "show" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 1.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 1.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 0.0 0.5; \ + visible: 1; \ + } \ + } \ + +#define SWALLOW_PART_FROM_LEFT_WITH_EFFECT2( partName, rel_x, rel_y, MinWidth, MinHeight) \ + part { \ + name: partName; \ + type: SWALLOW; \ + mouse_events: 0; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 1.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 1.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 0.0 0.5; \ + visible: 1; \ + } \ + description { \ + state: "show" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 1.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 1.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 0.0 0.5; \ + visible: 1; \ + } \ + } \ + +#define SWALLOW_PART_FROM_CENTER( partName, rel_x_left, rel_x_right, rel_y, MinWidth, MinHeight) \ + part { \ + name: partName; \ + type: SWALLOW; \ + mouse_events: 0; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 1.0 0.0; to_x: rel_x_left; to_y: rel_y; } \ + rel2 { relative: 0.0 1.0; to_x: rel_x_right; to_y: rel_y; } \ + align: 0.5 0.5; \ + visible: 1; \ + } \ + } \ + +#define SWALLOW_PART_FROM_RIGHT( partName, rel_x, rel_y, MinWidth, MinHeight) \ + part { \ + name: partName; \ + type: SWALLOW; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 0.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 0.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 1.0 0.5; \ + visible: 1; \ + } \ + } \ + +#define SWALLOW_PART_FROM_RIGHT_WITH_SPACE( partName, rel_x, rel_y, MinWidth, MinHeight) \ + part { \ + name: partName; \ + type: SWALLOW; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 0.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 0.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 1.0 0.5; \ + visible: 1; \ + } \ + description { \ + state: "hide" 0.0; \ + min: 0 MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 0.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 0.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 1.0 0.5; \ + visible: 0; \ + } \ + } \ + +#define SWALLOW_PART_FROM_RIGHT_WITH_EFFECT( partName, rel_x, rel_y, MinWidth, MinHeight) \ + part { \ + name: partName; \ + type: SWALLOW; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 0.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 0.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 1.0 0.5; \ + visible: 1; \ + } \ + description { \ + state: "show" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 0.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 0.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 1.0 0.5; \ + visible: 1; \ + } \ + } \ + +#define SWALLOW_PART_FROM_RIGHT_WITH_EFFECT2( partName, rel_x, rel_y, MinWidth, MinHeight) \ + part { \ + name: partName; \ + type: SWALLOW; \ + mouse_events: 0; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 0.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 0.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 1.0 0.5; \ + visible: 1; \ + } \ + description { \ + state: "show" 0.0; \ + min: MinWidth MinHeight; \ + fixed: 1 0; \ + rel1 { relative: 0.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 0.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 1.0 0.5; \ + visible: 1; \ + } \ + } \ + +#define FIXED_RECT_FROM_LEFT( rectName, rel_x, rel_y, MinWidth, colorValue, visibleValue) \ + part { \ + name: rectName; \ + type: RECT; \ + mouse_events: 0; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth 0; \ + fixed: 1 1; \ + rel1 { relative: 1.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 1.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 0.0 0.5; \ + color : colorValue; \ + visible: visibleValue; \ + } \ + } \ + +#define FIXED_RECT_FROM_RIGHT( rectName, rel_x, rel_y, MinWidth, colorValue, visibleValue) \ + part { \ + name: rectName; \ + type: RECT; \ + mouse_events: 0; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth 0; \ + fixed: 1 1; \ + rel1 { relative: 0.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 0.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 1.0 0.5; \ + color : colorValue; \ + visible: visibleValue; \ + } \ + } \ + +#define DYNAMIC_RECT_FROM_RIGHT( rectName, rel_x, rel_y, MinWidth, changeWidth, colorValue, visibleValue) \ + part { \ + name: rectName; \ + type: RECT; \ + mouse_events: 0; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth 0; \ + fixed: 1 1; \ + rel1 { relative: 0.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 0.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 1.0 0.5; \ + color : colorValue; \ + visible: visibleValue; \ + } \ + description { \ + state: "changePad" 0.0; \ + min: changeWidth 0; \ + fixed: 1 1; \ + rel1 { relative: 0.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 0.0 1.0; to_x: rel_x; to_y: rel_y; } \ + color : colorValue; \ + visible: visibleValue; \ + align: 1.0 0.5; \ + } \ + } \ + +#define DYNAMIC_RECT_FROM_LEFT( rectName, rel_x, rel_y, MinWidth, changeWidth, colorValue, visibleValue) \ + part { \ + name: rectName; \ + type: RECT; \ + mouse_events: 0; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: MinWidth 0; \ + fixed: 1 1; \ + rel1 { relative: 1.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 1.0 1.0; to_x: rel_x; to_y: rel_y; } \ + align: 0.0 0.5; \ + color : colorValue; \ + visible: visibleValue; \ + } \ + description { \ + state: "changePad" 0.0; \ + min: changeWidth 0; \ + fixed: 1 1; \ + rel1 { relative: 1.0 0.0; to_x: rel_x; to_y: rel_y; } \ + rel2 { relative: 1.0 1.0; to_x: rel_x; to_y: rel_y; } \ + color : colorValue; \ + visible: visibleValue; \ + align: 0.0 0.5; \ + } \ + } \ + + +#define PART_SWALLOW_SET( partName, lPadding, rPadding) \ + part { \ + name: partName; \ + type: SWALLOW; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: 1.0 0.0; to: lPadding; } \ + rel2 { relative: 0.0 1.0; to: rPadding; } \ + align: 0.5 0.5; \ + map { \ + on: 1; \ + perspective_on: 1; \ + rotation.z: 0.0; \ + } \ + } \ + description { \ + state: "rotate_tick" 0.0; \ + inherit: "default" 0.0; \ + map.rotation.z: 20.0; \ + } \ + description { \ + state: "rotate_tock" 0.0; \ + inherit: "default" 0.0; \ + map.rotation.z: -20.0; \ + } \ + description { \ + state: "rotate_180" 0.0; \ + inherit: "default" 0.0; \ + map.rotation.z: 180.0; \ + } \ + description { \ + state: "rotate_360" 0.0; \ + inherit: "default" 0.0; \ + map.rotation.z: 360.0; \ + } \ + description { \ + state: "invisible" 0.0; \ + inherit: "default" 0.0; \ + visible: 0; \ + } \ + } \ + +#define PROGRAM_SET( sourceName, targetName) \ + program { name: "icon_default_pre"; \ + action: ACTION_STOP; \ + target: "icon_blink_show"; \ + target: "icon_blink_hide"; \ + target: "icon_tick"; \ + target: "icon_tock"; \ + target: "icon_rotate_180"; \ + target: "icon_rotate_360"; \ + target: "icon_rotate_0"; \ + } \ + program { name: "icon_default"; \ + signal: "icon,state,default"; \ + source: sourceName; \ + action: STATE_SET "default" 0.0; \ + target: targetName; \ + after: "icon_default_pre"; \ + } \ + program { name: "icon_tick"; \ + action: STATE_SET "rotate_tick" 0.0; \ + target: targetName; \ + transition: LINEAR 0.5; \ + after: "icon_tock"; \ + } \ + program { name: "icon_tock"; \ + action: STATE_SET "rotate_tock" 0.0; \ + target: targetName; \ + transition: LINEAR 0.5; \ + after: "icon_tick"; \ + } \ + program { name: "icon_metronome"; \ + signal: "icon,state,metronome"; \ + source: sourceName; \ + action: STATE_SET "rotate_tick" 0.0; \ + target: targetName; \ + after: "icon_tock"; \ + } \ + program { name: "icon_blink_show"; \ + action: STATE_SET "default" 0.0; \ + target: targetName; \ + in: 0.4 0.0; \ + after: "icon_blink_hide"; \ + } \ + program { name: "icon_blink_hide"; \ + action: STATE_SET "invisible" 0.0; \ + target: targetName; \ + in: 0.4 0.0; \ + after: "icon_blink_show"; \ + } \ + program { name: "icon_blink"; \ + signal: "icon,state,blink"; \ + source: sourceName; \ + action: STATE_SET "default" 0.0; \ + target: targetName; \ + after: "icon_blink_hide"; \ + } \ + program { name: "icon_rotate_0"; \ + action: STATE_SET "default" 0.0; \ + target: targetName; \ + after: "icon_rotate_180"; \ + } \ + program { name: "icon_rotate_180"; \ + action: STATE_SET "rotate_180" 0.0; \ + target: targetName; \ + transition: LINEAR 0.8; \ + after: "icon_rotate_360"; \ + } \ + program { name: "icon_rotate_360"; \ + action: STATE_SET "rotate_360" 0.0; \ + target: targetName; \ + transition: LINEAR 0.8; \ + after: "icon_rotate_0"; \ + } \ + program { name: "icon_rotate"; \ + signal: "icon,state,rotate"; \ + source: sourceName; \ + action: STATE_SET "rotate_180" 0.0; \ + target: targetName; \ + after: "icon_rotate_360"; \ + } \ diff --git a/data/resource/indicator_gui.h b/data/resource/indicator_gui.h new file mode 100755 index 0000000..db03983 --- /dev/null +++ b/data/resource/indicator_gui.h @@ -0,0 +1,79 @@ +/* + * Copyright 2012 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. + */ + + +#ifndef __INDICATOR_GUI_H__ +#define __INDICATOR_GUI_H__ + +#define INDICATOR_HEIGHT 60 +#define INDICATOR_SIMPLE_HEIGHT 20 +#define ICON_PADDING 3 + +#define PADDING_WIDTH 10 +#define LEFT_PADDING_WIDTH 8 +#define RIGHT_PADDING_WIDTH 14 +#define INDICATOR_PADDING_H 0 + + +#define CLOCK_WIDTH_1 110 +#define CLOCK_WIDTH_2 120 + +#define CLOCK_HEIGHT 34 +#define CLOCK_PADDING 10 + +#define DEFAULT_ICON_PADDING 4 + +#define DEFAULT_ICON_HEIGHT 42 +#define DEFAULT_ICON_WIDTH 42 +#define BATTERY_ICON_WIDTH 32 +#define BATTERY_ICON_HEIGHT 42 +#define FIXED4_ICON_HEIGHT 50 +#define FIXED4_ICON_WIDTH 50 + +#define MESSAGE_PADDING 10 + +#define NONFIXED_DEFAULT_PADDING 25 +#define NONFIXED_DYNAMIC_PADDING 11 +#define FIXED4_DYNAMIC_PADDING 0 +#define FIXED2_PADDING 2 +#define FIXED1_PADDING 72 +#define FIXED0_PADDING 72 +#define LANDSCAPE_FIXED1_PADDING 122 +#define LANDSCAPE_FIXED0_PADDING 122 + +#define HOME_PADDING_PORTRAIT 50 +#define HOME_PADDING_LANDSCAPE 50 +#define DEFAULT_NON_FIXED_PADDING 0 + +#define INDI_DEFAULT_BG_COLOR 30 30 30 255 +#define INDI_DEFAULT_BG_TRANSLUCENT 0 0 0 125 +#define INDI_DEFAULT_BG_TRANSPARENT 0 0 0 0 +#define INDI_DEFAULT_BG_TEST 255 0 0 255 + + +#define ICON_FONT_NAME "Tizen" +#define ICON_FONT_STYLE "Medium" +#define ICON_FONT_SIZE 20 +#define FONT_COLOR 255, 255, 255, 255 + +#define INDICATOR_HIDE_TRIGER_H 30 + +#define DOWN_ANI_TIMER 0.3 + +#define DEFAULT_LABEL_STRING "%s" +#define CUSTOM_LABEL_STRING "%s" + +#endif diff --git a/data/resource/indicator_icon_animation.edc b/data/resource/indicator_icon_animation.edc new file mode 100755 index 0000000..435e1e6 --- /dev/null +++ b/data/resource/indicator_icon_animation.edc @@ -0,0 +1,339 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "indicator_gui.h" +#include "indicator_common.edc" + +collections { + group { + name: "elm/indicator/icon/base"; + script { + public ani_playing,direction,tick_timer; + public start_timer() + { + timer_cb(0); + } + public timer_cb(index) + { + new buf[32]; + new tim; + + if(get_int(direction)==0) + { + snprintf(buf, sizeof(buf), "downloading%d", index); + } + else + { + snprintf(buf, sizeof(buf), "uploading%d", index); + } + + set_state(PART:"elm.image.icon.ani", buf,0.0); + + index=index+1; + + if(index==7) + { + index=0; + } + + stop_timer(); + + if(get_int(ani_playing)==1) + { + tim = timer(0.3, "timer_cb", index); + set_int(tick_timer,tim); + } + } + public stop_timer() + { + new tim; + tim = get_int(tick_timer); + if (tim) + { + cancel_timer(tim); + set_int(tick_timer, 0); + } + } + + } + + images { + image: "B03_Processing_download_ani_00.png" COMP; + image: "B03_Processing_download_ani_01.png" COMP; + image: "B03_Processing_download_ani_02.png" COMP; + image: "B03_Processing_download_ani_03.png" COMP; + image: "B03_Processing_download_ani_04.png" COMP; + image: "B03_Processing_download_ani_05.png" COMP; + image: "B03_Processing_download_ani_06.png" COMP; + image: "B03_Processing_upload_ani_00.png" COMP; + image: "B03_Processing_upload_ani_01.png" COMP; + image: "B03_Processing_upload_ani_02.png" COMP; + image: "B03_Processing_upload_ani_03.png" COMP; + image: "B03_Processing_upload_ani_04.png" COMP; + image: "B03_Processing_upload_ani_05.png" COMP; + image: "B03_Processing_upload_ani_06.png" COMP; + } + parts { + part { + name: "background"; +// mouse_events: 0; + description { + state: "default" 0.0; + color : 255 255 255 255; + visible : 1; + } + } + part { + name: "padding.left"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: DEFAULT_ICON_PADDING 0; + fixed: 1 0; + rel1.to: "background"; + rel2 { relative: 0.0 1.0; to: "background"; } +// color : 0 255 0 255; + align: 0.0 0.5; + visible: 0; + } + } + + PART_SWALLOW_SET( "elm.swallow.icon", "padding.left", "padding.right" ) + + part { + name: "elm.image.icon.ani"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "elm.swallow.icon"; + rel2.to: "elm.swallow.icon"; + visible: 0; + } + description { + state: "downloading0" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_download_ani_00.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "downloading1" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_download_ani_01.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "downloading2" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_download_ani_02.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "downloading3" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_download_ani_03.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "downloading4" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_download_ani_04.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "downloading5" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_download_ani_05.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "downloading6" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_download_ani_06.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + + description { + state: "uploading0" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_upload_ani_00.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "uploading1" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_upload_ani_01.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "uploading2" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_upload_ani_02.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "uploading3" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_upload_ani_03.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "uploading4" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_upload_ani_04.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "uploading5" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_upload_ani_05.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + description { + state: "uploading6" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_Processing_upload_ani_06.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + } + } + + part { + name: "padding.right"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 0 0; + fixed: 1 0; + rel1 { relative: 1.0 0.0; to: "background"; } + align: 1.0 0.5; + visible: 0; + } + } + + } + + programs { + PROGRAM_SET( "elm.swallow.icon", "elm.swallow.icon") + + program { + name: "indicator.ani.downloading.start"; + signal: "indicator.ani.downloading.start"; + source: "elm.swallow.icon"; + script { + set_int(direction,0); + if(get_int(ani_playing)==0) + { + set_int(ani_playing,1); + start_timer(); + } + } + } + program { + name: "indicator.ani.uploading.start"; + signal: "indicator.ani.uploading.start"; + source: "elm.swallow.icon"; + script { + set_int(direction,1); + set_int(ani_playing,1); + start_timer(); + } + } + + program { + name: "indicator.ani.downloading.stop"; + signal: "indicator.ani.downloading.stop"; + source: "elm.swallow.icon"; + script { + set_int(ani_playing,0); + stop_timer(); +// set_state(PART:"elm.image.icon.ani","default",0.0); + } + } + program { + name: "indicator.ani.uploading.stop"; + signal: "indicator.ani.uploading.stop"; + source: "elm.swallow.icon"; + script { + set_int(ani_playing,0); + stop_timer(); + } + } + + } + } +} + + diff --git a/data/resource/indicator_icon_nonfixed_theme.edc b/data/resource/indicator_icon_nonfixed_theme.edc new file mode 100755 index 0000000..b84658f --- /dev/null +++ b/data/resource/indicator_icon_nonfixed_theme.edc @@ -0,0 +1,72 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "indicator_gui.h" +#include "indicator_common.edc" + +collections { + group { + name: "elm/indicator/icon/base"; + parts { + part { + name: "background"; + description { + state: "default" 0.0; + color : 255 255 255 255; + visible : 1; + } + } + part { + name: "padding.left"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: DEFAULT_ICON_PADDING 0; + fixed: 1 0; + rel1.to: "background"; + rel2 { relative: 0.0 1.0; to: "background"; } + align: 0.0 0.5; + visible: 0; + } + } + + PART_SWALLOW_SET( "elm.swallow.icon", "padding.left", "padding.right" ) + + part { + name: "padding.right"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 0 0; + fixed: 1 0; + rel1 { relative: 1.0 0.0; to: "background"; } + align: 1.0 0.5; + visible: 0; + } + } + + } + programs { + PROGRAM_SET( "elm.swallow.icon", "elm.swallow.icon") + } + } +} + + diff --git a/data/resource/indicator_icon_theme.edc b/data/resource/indicator_icon_theme.edc new file mode 100755 index 0000000..2fd47e7 --- /dev/null +++ b/data/resource/indicator_icon_theme.edc @@ -0,0 +1,72 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "indicator_gui.h" +#include "indicator_common.edc" + +collections { + group { + name: "elm/indicator/icon/base"; + parts { + part { + name: "background"; + description { + state: "default" 0.0; + color : 255 255 255 255; + visible : 1; + } + } + part { + name: "padding.left"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 0 0; + fixed: 1 0; + rel1.to: "background"; + rel2 { relative: 0.0 1.0; to: "background"; } + align: 0.0 0.5; + visible: 0; + } + } + + PART_SWALLOW_SET( "elm.swallow.icon", "padding.left", "padding.right" ) + + part { + name: "padding.right"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 0 0; + fixed: 1 0; + rel1 { relative: 1.0 0.0; to: "background"; } + align: 1.0 0.5; + visible: 0; + } + } + + } + programs { + PROGRAM_SET( "elm.swallow.icon", "elm.swallow.icon") + } + } +} + + diff --git a/data/resource/indicator_land.edc b/data/resource/indicator_land.edc new file mode 100755 index 0000000..1954034 --- /dev/null +++ b/data/resource/indicator_land.edc @@ -0,0 +1,715 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "indicator_gui.h" +#include "indicator_common.edc" + +collections { + group { + name: "indicator"; + script { + public bg_set, badge_set, theme, changepad, changebg, changeHomePad; + } + styles + { + style { + name: "textblock_style"; + base: "font=Tizen:style=Bold text_class=tizen color=#FFFFFFFF "; + } + style { + name: "textblock_style_battery_percentage"; + base: "font=Tizen:style=Regular text_class=tizen color=#87E22DFF valign=baseline wrap=none ellipsis=1"; + } + style { + name: "textblock_outline_style"; + base: "font=Tizen:style=Bold text_class=tizen color=#FFFFFFFF"; + } + style { + name: "message_style"; + base: "font=Tizen:style=Bold text_class=tizen font_size=26 color=#FFFFFFFF valign=middle wrap=none ellipsis=1"; + } + style { + name: "message_style_compare"; + base: "font=Tizen:style=Bold text_class=tizen font_size=26 color=#FFFFFFFF valign=middle wrap=none ellipsis=0"; + } + } + + parts { + part { + name: "background"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 INDICATOR_HEIGHT; + color: 0 0 0 0; + } + } + part { + name: "padding.top"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 INDICATOR_PADDING_H; + fixed: 0 1; + rel1 { relative: 0.0 0.0; to: "background"; } + rel2 { relative: 1.0 0.0; to: "background"; } + align: 0.0 0.0; + visible: 0; + } + } + part { + name: "padding.bottom"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 INDICATOR_PADDING_H; + fixed: 0 1; + rel1 { relative: 0.0 1.0; to: "background"; } + rel2 { relative: 1.0 1.0; to: "background"; } + align: 0.0 1.0; + visible: 0; + } + + } + + part { + name: "padding.left"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 8 0; + fixed: 1 0; + rel1 { relative: 0.0 0.0; to: "elm.rect.bg"; } + rel2 { relative: 0.0 1.0; to: "elm.rect.bg"; } + align: 0.0 0.0; + visible: 0; + } + } + + part { + name: "padding.right"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: RIGHT_PADDING_WIDTH 0; + fixed: 1 0; + rel1.relative: 1.0 0.0; + color: 0 0 0 0; + visible: 0; + } + } + part { + name: "elm.rect.bg.base"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "background"; + } + rel2 { + relative: 1.0 1.0; + to: "background"; + } + visible:0; + } + description { + state: "hide" 0.0; + rel1 { + relative: 0.0 1.0; + to: "background"; + } + rel2 { + relative: 1.0 2.0; + to: "background"; + } + visible:0; + } + } + + part { + name: "elm.rect.bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 INDICATOR_HEIGHT; + fixed: 0 1; + rel1 { relative: 0.0 0.0; to_x: background; to_y: elm.rect.bg.base; } + rel2 { relative: 1.0 1.0; to_x: background; to_y: elm.rect.bg.base; } + color: INDI_DEFAULT_BG_TRANSPARENT; + align: 0.0 0.0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: INDI_DEFAULT_BG_COLOR; + } + + } + + part { + name: "elm.rect.left_con"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: HOME_PADDING_LANDSCAPE 0; + visible: 0; + fixed: 1 0; + rel1 { relative: 0.0 0.0; to: "elm.rect.bg"; } + rel2 { relative: 0.0 1.0; to: "elm.rect.bg"; } + align: 0.0 0.0; + } + } + + part { + name: "icon_bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + rel1 { relative: 1.0 0.0; to_x: elm.swallow.fixed0; to_y: elm.rect.bg; } + rel2 { relative: 0.0 1.0; to_x: elm.swallow.fixed4; to_y: elm.rect.bg; } + align: 0.0 0.0; + } + } + + part { + name: "elm.rect.middle_con"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + rel1 { relative: 0.0 0.0; to: "icon_bg"; } + rel2 { relative: 1.0 1.0; to: "icon_bg"; } + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + min: 0 INDICATOR_HEIGHT; + fixed: 0 1; + rel1 { relative: 0.0 0.0; to: "icon_bg"; } + rel2 { relative: 1.0 0.0; to: "icon_bg"; } + align: 0.0 1.0; + } + + } + + + part { + name: elm.swallow.fixed0; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: HOME_PADDING_LANDSCAPE APPTRAY_ICON_HEIGHT; + fixed: 1 0; + rel1 { relative: 1.0 0.0; to_x: padding.left; to_y: elm.rect.left_con; } + rel2 { relative: 1.0 1.0; to_x: padding.left; to_y: elm.rect.left_con; } + align: 0.0 0.5; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible : 1; + } + } + + SWALLOW_PART_FROM_LEFT("elm.swallow.fixed3","padding.left","elm.rect.bg",BATTERY_ICON_WIDTH,BATTERY_ICON_HEIGHT) + + part { + name: "percentage.padding.left"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 0 0; + fixed: 1 0; + rel1 { relative: 1.0 0.0; to_x: "elm.swallow.fixed3"; to_y: "elm.rect.bg"; } + rel2 { relative: 1.0 1.0; to_x: "elm.swallow.fixed3"; to_y: "elm.rect.bg"; } + align: 0.0 0.5; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + min: 4 0; + fixed: 1 0; + visible: 0; + } + } + + + part { + name: "elm.text.percentage"; + type: TEXTBLOCK; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to_x: "percentage.padding.left"; to_y: "elm.rect.bg"; } + rel2 { relative: 1.0 1.0; to_x: "percentage.padding.left"; to_y: "elm.rect.bg"; } + align: 0.0 0.5; + min: 0 0; + fixed: 1 0; + text { + style: "textblock_style_battery_percentage"; + min: 1 1; + } + visible:0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + fixed: 0 0; + visible:1; + } + } + FIXED_RECT_FROM_RIGHT( "elm.rect.fixed2", "elm.swallow.fixed4", "elm.rect.bg", 12, INDI_DEFAULT_BG_TEST, 0) + SWALLOW_PART_FROM_RIGHT_WITH_EFFECT2( "elm.swallow.fixed2", "elm.rect.fixed2", "elm.rect.middle_con", DEFAULT_ICON_WIDTH, DEFAULT_ICON_HEIGHT ) + + FIXED_RECT_FROM_RIGHT( "elm.rect.fixed3", "elm.swallow.fixed2", "elm.rect.middle_con", DEFAULT_ICON_PADDING, INDI_DEFAULT_BG_COLOR, 0) + SWALLOW_PART_FROM_RIGHT_WITH_EFFECT2( "elm.swallow.fixed1", "elm.rect.fixed3", "elm.rect.middle_con", DEFAULT_ICON_WIDTH, DEFAULT_ICON_HEIGHT ) + SWALLOW_PART_FROM_RIGHT_WITH_EFFECT2( "elm.swallow.fixed5", "elm.rect.fixed3", "elm.rect.middle_con", DEFAULT_ICON_WIDTH, DEFAULT_ICON_HEIGHT ) + + FIXED_RECT_FROM_RIGHT( "elm.rect.nonfixed", "elm.swallow.fixed1", "elm.rect.middle_con", DEFAULT_ICON_PADDING, INDI_DEFAULT_BG_COLOR, 0) + SWALLOW_PART_FROM_RIGHT_WITH_EFFECT2( "elm.swallow.nonfixed", "elm.rect.nonfixed", "elm.rect.middle_con", 0, 0) + + SWALLOW_PART_FROM_LEFT_WITH_EFFECT2( "elm.swallow.noti", "elm.text.clock", "elm.rect.middle_con", 0, 0) + + part { + name: elm.swallow.fixed4; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 0 0; + fixed: 1 0; + rel1 { relative: 0.0 0.0; to_x: padding.right; to_y: elm.rect.left_con; } + rel2 { relative: 0.0 1.0; to_x: padding.right; to_y: elm.rect.left_con; } + align: 1.0 0.5; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible : 1; + } + } + + + part { + name: "clock.padding.left"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 4 0; + fixed: 1 0; + rel1 { relative: 1.0 0.0; to_x: "elm.text.percentage"; to_y: "elm.rect.bg"; } + rel2 { relative: 1.0 1.0; to_x: "elm.text.percentage"; to_y: "elm.rect.bg"; } + align: 0.0 0.5; + visible: 0; + } + } + + part { + name: "elm.text.clock"; + type: TEXTBLOCK; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to_x: "clock.padding.left"; to_y: "elm.rect.bg"; } + rel2 { relative: 1.0 1.0; to_x: "clock.padding.left"; to_y: "elm.rect.bg"; } + align: 0.0 0.5; + min: 0 0; + fixed: 1 1; + text { + style: "textblock_style"; + min: 1 1; + align: 0.0 0.5; + } + color:255 255 255 204; + } + description { + state: "set_color" 0.0; + inherit: "default" 0.0; + text { + style: "textblock_outline_style"; + } + } + } + + + part { + name: "message.bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 INDICATOR_HEIGHT; + fixed: 0 1; + rel1 { relative: 0.0 0.0; to: "elm.rect.bg.base"; } + rel2 { relative: 1.0 0.0; to: "elm.rect.bg.base"; } + align: 0.0 1.0; + color: INDI_DEFAULT_BG_COLOR; + visible: 1; + } + } + + part { + name: "message.padding.left"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: MESSAGE_PADDING 0; + fixed: 1 0; + rel1 { + relative: 0.0 0.0; + to: "message.bg"; + } + rel2 { + relative: 0.0 1.0; + to: "message.bg"; + } + align: 0.0 0.0; + visible: 0; + } + } + part { + name: "message.padding.right"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: MESSAGE_PADDING 0; + fixed: 1 0; + rel1 { + relative: 1.0 0.0; + to: "message.bg"; + } + rel2 { + relative: 1.0 1.0; + to: "message.bg"; + } + align: 1.0 0.0; + visible: 0; + } + } + part { + name: "message.padding.top"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 INDICATOR_PADDING_H; + fixed: 0 1; + rel1 { relative: 0.0 0.0; to: "message.bg"; } + rel2 { relative: 1.0 0.0; to: "message.bg"; } + align: 0.0 0.0; + visible: 0; + } + } + part { + name: "message.padding.bottom"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 INDICATOR_PADDING_H; + fixed: 0 1; + rel1 { relative: 0.0 1.0; to: "message.bg"; } + rel2 { relative: 1.0 1.0; to: "message.bg"; } + align: 0.0 1.0; + visible: 0; + } + + } + part { + name: "message.text"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + fixed: 1 1; + visible: 1; + rel1 { + relative: 1.0 0.0; + to_x: "message.padding.left"; + to_y: "message.bg"; + } + + rel2 { + relative: 0.0 1.0; + to_x: "message.padding.right"; + to_y: "message.bg"; + } + text { + style: "message_style"; + min: 0 1; + } + } + description { + state: "line2" 0.0; + inherit: "default" 0.0; + rel1 { + relative: 1.0 1.0; + to_x: "message.padding.left"; + to_y: "message.bg"; + } + + rel2 { + relative: 0.0 2.0; + to_x: "message.padding.right"; + to_y: "message.bg"; + } + visible: 0; + } + } + part { + name: "message.text.compare"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + fixed: 1 1; + visible: 0; + rel1 { + relative: 0.0 0.0; + to: "message.text"; + } + rel2 { + relative: 2.0 1.0; + to: "message.text"; + } + text { + style: "message_style_compare"; + min: 0 1; + } + } + } + part { + name: "message.line2.text"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + fixed: 1 1; + visible: 1; + rel1 { + relative: 1.0 -1.0; + to_x: "message.padding.left"; + to_y: "message.text"; + } + + rel2 { + relative: 0.0 0.0; + to_x: "message.padding.right"; + to_y: "message.text"; + } + text { + style: "message_style"; + min: 0 1; + } + } + } + } + + programs { + program { + name: "message.show"; + action: STATE_SET "hide" 0.0; + signal: "message.show"; + source: "indicator.prog"; + script + { + if (get_int(bg_set) == 0) + { + run_program(PROGRAM:"message.show.effect"); + } + else if(get_int(bg_set) == 1) + { + run_program(PROGRAM:"message.show.effect"); + } + else + { + run_program(PROGRAM:"message.show.noeffect"); + } + } + } + + program { + name: "message.show.effect"; + action: STATE_SET "hide" 0.0; + source: "indicator.prog"; + target: "elm.rect.bg.base"; + transition: LINEAR 0.3; + } + + program { + name: "message.show.noeffect"; + action: STATE_SET "hide" 0.0; + source: "indicator.prog"; + target: "elm.rect.bg.base"; + } + + program { + name: "message.hide"; + action: STATE_SET "default" 0.0; + signal: "message.hide"; + source: "indicator.prog"; + target: "elm.rect.bg.base"; + transition: LINEAR 0.3; + after:message.line2.hide.noeffect; + } + program { + name: "message.line2.show"; + action: STATE_SET "line2" 0.0; + signal: "message.line2.show"; + source: "indicator.prog"; + target: "message.text"; + transition: LINEAR 0.3; + } + + program { + name: "message.line2.hide"; + action: STATE_SET "default" 0.0; + signal: "message.line2.hide"; + source: "indicator.prog"; + target: "message.text"; + transition: LINEAR 0.3; + } + program { + name: "message.line2.hide.noeffect"; + action: STATE_SET "default" 0.0; + signal: "message.line2.hide.noeffect"; + source: "indicator.prog"; + target: "message.text"; + } + program { + name: "bg_opaque"; + action: STATE_SET "default" 0.0; + signal: "bg.opaque"; + source: "indicator.prog"; + script { + set_int(bg_set, 0); + } + + } + program { + name: "bg_translucent"; + action: STATE_SET "default" 0.0; + signal: "bg.translucent"; + source: "indicator.prog"; + script { + set_int(bg_set, 1); + } + + } + program { + name: "bg_transparent"; + signal: "bg.transparent"; + source: "indicator.prog"; + script { + set_int(bg_set, 2); + } + + } + program { + name: "bg_notification"; + signal: "bg.notification"; + source: "indicator.prog"; + script { + set_int(bg_set, 3); + } + + } + + + program { + name: "indicator.battery.percentage.show"; + action: STATE_SET "show" 0.0; + signal: "indicator.battery.percentage.show"; + source: "indicator.prog"; + target: "percentage.padding.left"; + target: "elm.text.percentage"; + } + + program { + name: "indicator.battery.percentage.hide"; + action: STATE_SET "default" 0.0; + signal: "indicator.battery.percentage.hide"; + source: "indicator.prog"; + target: "percentage.padding.left"; + target: "elm.text.percentage"; + } + program { + name: "indicator.connection.show"; + action: STATE_SET "default" 0.0; + signal: "indicator.connection.show"; + source: "indicator.prog"; + target: "elm.swallow.fixed1"; + target: "elm.swallow.fixed5"; + } + + program { + name: "indicator.connection.hide"; + action: STATE_SET "hide" 0.0; + signal: "indicator.connection.hide"; + source: "indicator.prog"; + target: "elm.swallow.fixed1"; + target: "elm.swallow.fixed5"; + } + } + } +} diff --git a/data/resource/indicator_port.edc b/data/resource/indicator_port.edc new file mode 100755 index 0000000..123cbb9 --- /dev/null +++ b/data/resource/indicator_port.edc @@ -0,0 +1,802 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "indicator_gui.h" +#include "indicator_common.edc" + +collections { + group { + name: "indicator"; + script { + public bg_set, badge_set, theme, changepad, changebg, changeHomePad; + } + styles + { + style { + name: "textblock_style"; + base: "font=Tizen:style=Bold text_class=tizen color=#FFFFFFFF "; + } + style { + name: "textblock_style_battery_percentage"; + base: "font=Tizen:style=Regular text_class=tizen color=#87E22DFF valign=baseline wrap=none ellipsis=1"; + } + style { + name: "textblock_outline_style"; + base: "font=Tizen:style=Bold text_class=tizen color=#FFFFFFFF"; + } + style { + name: "message_style"; + base: "font=Tizen:style=Bold text_class=tizen font_size=26 color=#FFFFFFFF valign=middle wrap=none ellipsis=1"; + } + style { + name: "message_style_compare"; + base: "font=Tizen:style=Bold text_class=tizen font_size=26 color=#FFFFFFFF valign=middle wrap=none ellipsis=0"; + } + } + + images { + image: "B03_indicator_bg.png" COMP; + } + + parts { + part { + name: "background"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 INDICATOR_HEIGHT; + color: 0 0 0 0; + } + } + part { + name: "padding.top"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 INDICATOR_PADDING_H; + fixed: 0 1; + rel1 { relative: 0.0 0.0; to: "background"; } + rel2 { relative: 1.0 0.0; to: "background"; } + align: 0.0 0.0; + visible: 0; + } + } + part { + name: "padding.bottom"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 INDICATOR_PADDING_H; + fixed: 0 1; + rel1 { relative: 0.0 1.0; to: "background"; } + rel2 { relative: 1.0 1.0; to: "background"; } + align: 0.0 1.0; + visible: 0; + } + + } + + part { + name: "padding.left"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 8 0; + fixed: 1 0; + rel1 { relative: 0.0 0.0; to: "elm.rect.bg"; } + rel2 { relative: 0.0 1.0; to: "elm.rect.bg"; } + align: 0.0 0.0; + visible: 0; + } + } + + part { + name: "padding.right"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: RIGHT_PADDING_WIDTH 0; + fixed: 1 0; + rel1.relative: 1.0 0.0; + color: 0 0 0 0; + visible: 0; + } + } + part { + name: "elm.rect.bg.base"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "background"; + } + rel2 { + relative: 1.0 1.0; + to: "background"; + } + visible:0; + } + description { + state: "hide" 0.0; + rel1 { + relative: 0.0 1.0; + to: "background"; + } + rel2 { + relative: 1.0 2.0; + to: "background"; + } + visible:0; + } + } + part { + name: "elm.rect.bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "elm.rect.bg.base"; + } + rel2 { + relative: 1.0 1.0; + to: "elm.rect.bg.base"; + } + color: INDI_DEFAULT_BG_TRANSPARENT; + } + description { + state: "opaque" 0.0; + inherit: "default" 0.0; + } + description { + state: "translucent" 0.0; + inherit: "default" 0.0; + } + description { + state: "notification" 0.0; + inherit: "default" 0.0; + } + description { + state: "transparent_slide" 0.0; + inherit: "default" 0.0; + color: INDI_DEFAULT_BG_COLOR; + } + description { + state: "transparent" 0.0; + inherit: "default" 0.0; + color: INDI_DEFAULT_BG_COLOR; + + } + } + part { + name: "elm.image.bg"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + rel1.to: "elm.rect.bg"; + rel2.to: "elm.rect.bg"; + } + description { + state: "opaque" 0.0; + inherit: "default" 0.0; + } + description { + state: "translucent" 0.0; + inherit: "default" 0.0; + image { + normal:"B03_indicator_bg.png"; + border: 0 0 0 0; + border_scale: 1; + } + visible: 1; + + } + description { + state: "notification" 0.0; + inherit: "default" 0.0; + } + description { + state: "transparent" 0.0; + inherit: "default" 0.0; + } + } + + part { + name: "elm.rect.left_con"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: HOME_PADDING_PORTRAIT 0; + visible: 0; + fixed: 1 0; + rel1 { relative: 0.0 0.0; to: "elm.rect.bg"; } + rel2 { relative: 0.0 1.0; to: "elm.rect.bg"; } + align: 0.0 0.0; + } + } + + part { + name: "icon_bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + rel1 { relative: 1.0 0.0; to_x: padding.left; to_y: elm.rect.bg; } + rel2 { relative: 0.0 1.0; to_x: elm.swallow.fixed4; to_y: elm.rect.bg; } + align: 0.0 0.0; + } + } + + part { + name: "elm.rect.middle_con"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + rel1 { relative: 0.0 0.0; to: "icon_bg"; } + rel2 { relative: 1.0 1.0; to: "icon_bg"; } + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + min: 0 INDICATOR_HEIGHT; + fixed: 0 1; + rel1 { relative: 0.0 0.0; to: "icon_bg"; } + rel2 { relative: 1.0 0.0; to: "icon_bg"; } + align: 0.0 1.0; + } + + } + + part { + name: elm.swallow.fixed0; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: HOME_PADDING_PORTRAIT FIXED4_ICON_HEIGHT; + fixed: 1 0; + rel1 { relative: 1.0 0.0; to_x: padding.left; to_y: elm.rect.left_con; } + rel2 { relative: 1.0 1.0; to_x: padding.left; to_y: elm.rect.left_con; } + align: 0.0 0.5; + visible: 1; + } + } + SWALLOW_PART_FROM_LEFT("elm.swallow.fixed3","padding.left","elm.rect.bg",BATTERY_ICON_WIDTH,BATTERY_ICON_HEIGHT) + + part { + name: "percentage.padding.left"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 0 0; + fixed: 1 0; + rel1 { relative: 1.0 0.0; to_x: "elm.swallow.fixed3"; to_y: "elm.rect.bg"; } + rel2 { relative: 1.0 1.0; to_x: "elm.swallow.fixed3"; to_y: "elm.rect.bg"; } + align: 0.0 0.5; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + min: 4 0; + fixed: 1 0; + visible: 0; + } + } + + //battery percentage + part { + name: "elm.text.percentage"; + type: TEXTBLOCK; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to_x: "percentage.padding.left"; to_y: "elm.rect.bg"; } + rel2 { relative: 1.0 1.0; to_x: "percentage.padding.left"; to_y: "elm.rect.bg"; } + align: 0.0 0.5; + min: 0 0; + fixed: 1 0; + text { + style: "textblock_style_battery_percentage"; + min: 1 1; + } + visible:0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + fixed: 0 0; + visible:1; + } + + } + + FIXED_RECT_FROM_RIGHT( "elm.rect.fixed2", "elm.swallow.fixed4", "elm.rect.bg", 12, INDI_DEFAULT_BG_TEST, 0) + SWALLOW_PART_FROM_RIGHT( "elm.swallow.fixed2", "elm.rect.fixed2", "elm.rect.bg", DEFAULT_ICON_WIDTH, DEFAULT_ICON_HEIGHT ) + + FIXED_RECT_FROM_RIGHT( "elm.rect.fixed3", "elm.swallow.fixed2", "elm.rect.bg", DEFAULT_ICON_PADDING, INDI_DEFAULT_BG_TEST, 0) + SWALLOW_PART_FROM_RIGHT_WITH_SPACE( "elm.swallow.fixed1", "elm.rect.fixed3", "elm.rect.bg", DEFAULT_ICON_WIDTH, DEFAULT_ICON_HEIGHT ) + SWALLOW_PART_FROM_RIGHT_WITH_SPACE( "elm.swallow.fixed5", "elm.rect.fixed3", "elm.rect.bg", DEFAULT_ICON_WIDTH, DEFAULT_ICON_HEIGHT ) + + FIXED_RECT_FROM_RIGHT( "elm.rect.nonfixed", "elm.swallow.fixed1", "elm.rect.middle_con", DEFAULT_ICON_PADDING, INDI_DEFAULT_BG_TEST, 0) + SWALLOW_PART_FROM_RIGHT_WITH_EFFECT( "elm.swallow.nonfixed", "elm.rect.nonfixed", "elm.rect.middle_con", 0, 0) + + SWALLOW_PART_FROM_LEFT_WITH_EFFECT( "elm.swallow.noti", "elm.text.clock", "elm.rect.middle_con", 0, 0) + + part { + name: elm.swallow.fixed4; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 0 0; + fixed: 1 0; + rel1 { relative: 0.0 0.0; to_x: padding.right; to_y: elm.rect.left_con; } + rel2 { relative: 0.0 1.0; to_x: padding.right; to_y: elm.rect.left_con; } + align: 1.0 0.5; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + part { + name: "clock.padding.left"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 4 0; + fixed: 1 0; + rel1 { relative: 1.0 0.0; to_x: "elm.text.percentage"; to_y: "elm.rect.bg"; } + rel2 { relative: 1.0 1.0; to_x: "elm.text.percentage"; to_y: "elm.rect.bg"; } + align: 0.0 0.5; + visible: 0; + } + } + + part { + name: "elm.text.clock"; + type: TEXTBLOCK; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to_x: "clock.padding.left"; to_y: "elm.rect.bg"; } + rel2 { relative: 1.0 1.0; to_x: "clock.padding.left"; to_y: "elm.rect.bg"; } + align: 0.0 0.5; + min: 0 0; + fixed: 1 1; + text { + style: "textblock_style"; + min: 1 1; + align: 0.0 0.5; + } + color:255 255 255 204; + } + description { + state: "set_color" 0.0; + inherit: "default" 0.0; + text { + style: "textblock_outline_style"; + } + } + } + + + + part { + name: "message.bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 INDICATOR_HEIGHT; + fixed: 0 1; + rel1 { relative: 0.0 0.0; to: "elm.rect.bg.base"; } + rel2 { relative: 1.0 0.0; to: "elm.rect.bg.base"; } + align: 0.0 1.0; + visible: 0; + } + description { + state: "transparent" 0.0; + inherit: "default" 0.0; + color: INDI_DEFAULT_BG_COLOR; + visible: 1; + } + } + + part { + name: "message.padding.left"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: MESSAGE_PADDING 0; + fixed: 1 0; + rel1 { + relative: 0.0 0.0; + to: "message.bg"; + } + rel2 { + relative: 0.0 1.0; + to: "message.bg"; + } + align: 0.0 0.0; + visible: 0; + } + } + part { + name: "message.padding.right"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: MESSAGE_PADDING 0; + fixed: 1 0; + rel1 { + relative: 1.0 0.0; + to: "message.bg"; + } + rel2 { + relative: 1.0 1.0; + to: "message.bg"; + } + align: 1.0 0.0; + visible: 0; + } + } + part { + name: "message.padding.top"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 INDICATOR_PADDING_H; + fixed: 0 1; + rel1 { relative: 0.0 0.0; to: "message.bg"; } + rel2 { relative: 1.0 0.0; to: "message.bg"; } + align: 0.0 0.0; + visible: 0; + } + } + part { + name: "message.padding.bottom"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 INDICATOR_PADDING_H; + fixed: 0 1; + rel1 { relative: 0.0 1.0; to: "message.bg"; } + rel2 { relative: 1.0 1.0; to: "message.bg"; } + align: 0.0 1.0; + visible: 0; + } + + } + part { + name: "message.text"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + multiline: 0; + description { + state: "default" 0.0; + fixed: 1 1; + visible: 1; + rel1 { + relative: 1.0 0.0; + to_x: "message.padding.left"; + to_y: "message.bg"; + } + + rel2 { + relative: 0.0 1.0; + to_x: "message.padding.right"; + to_y: "message.bg"; + } + text { + style: "message_style"; + min: 0 1; + } + } + description { + state: "line2" 0.0; + inherit: "default" 0.0; + rel1 { + relative: 1.0 1.0; + to_x: "message.padding.left"; + to_y: "message.bg"; + } + + rel2 { + relative: 0.0 2.0; + to_x: "message.padding.right"; + to_y: "message.bg"; + } + visible: 0; + } + } + part { + name: "message.text.compare"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + fixed: 1 1; + visible: 0; + rel1 { + relative: 0.0 0.0; + to: "message.text"; + } + rel2 { + relative: 3.0 1.0; + to: "message.text"; + } + text { + style: "message_style_compare"; + min: 0 1; + } + } + } + part { + name: "message.line2.text"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + fixed: 1 1; + visible: 1; + rel1 { + relative: 1.0 -1.0; + to_x: "message.padding.left"; + to_y: "message.text"; + } + + rel2 { + relative: 0.0 0.0; + to_x: "message.padding.right"; + to_y: "message.text"; + } + text { + style: "message_style"; + min: 0 1; + } + } + } + } + + programs { + program { + name: "message.show"; + action: STATE_SET "hide" 0.0; + signal: "message.show"; + source: "indicator.prog"; + script + { + if (get_int(bg_set) == 0) + { + run_program(PROGRAM:"message.show.effect"); + } + else if(get_int(bg_set) == 1) + { + run_program(PROGRAM:"message.show.effect"); + } + else + { + run_program(PROGRAM:"message.show.noeffect"); + } + } + } + + program { + name: "message.show.effect"; + action: STATE_SET "hide" 0.0; + source: "indicator.prog"; + target: "elm.rect.bg.base"; + transition: LINEAR 0.3; + } + + program { + name: "message.show.noeffect"; + action: STATE_SET "hide" 0.0; + source: "indicator.prog"; + target: "elm.rect.bg.base"; + } + + program { + name: "message.hide"; + action: STATE_SET "default" 0.0; + signal: "message.hide"; + source: "indicator.prog"; + target: "elm.rect.bg.base"; + transition: LINEAR 0.3; + after:message.line2.hide.noeffect; + } + program { + name: "message.line2.show"; + action: STATE_SET "line2" 0.0; + signal: "message.line2.show"; + source: "indicator.prog"; + target: "message.text"; + transition: LINEAR 0.3; + } + + program { + name: "message.line2.hide"; + action: STATE_SET "default" 0.0; + signal: "message.line2.hide"; + source: "indicator.prog"; + target: "message.text"; + transition: LINEAR 0.3; + } + program { + name: "message.line2.hide.noeffect"; + action: STATE_SET "default" 0.0; + signal: "message.line2.hide.noeffect"; + source: "indicator.prog"; + target: "message.text"; + } + program { + name: "bg_opaque"; + action: STATE_SET "default" 0.0; + signal: "bg.opaque"; + source: "indicator.prog"; + script { + set_int(bg_set, 0); + set_state(PART:"elm.rect.bg", "opaque", 0.0); + set_state(PART:"message.bg", "transparent", 0.0); + set_state(PART:"elm.image.bg", "opaque", 0.0); + } + + } + program { + name: "bg_translucent"; + action: STATE_SET "default" 0.0; + signal: "bg.translucent"; + source: "indicator.prog"; + script { + set_int(bg_set, 1); + set_state(PART:"elm.rect.bg", "translucent", 0.0); + set_state(PART:"message.bg", "transparent", 0.0); + set_state(PART:"elm.image.bg", "translucent", 0.0); + } + + } + program { + name: "bg_transparent"; + signal: "bg.transparent"; + source: "indicator.prog"; + script { + set_int(bg_set, 2); + set_state(PART:"elm.rect.bg", "transparent", 0.0); + set_state(PART:"message.bg", "transparent", 0.0); + set_state(PART:"elm.image.bg", "transparent", 0.0); + } + + } + program { + name: "bg_notification"; + signal: "bg.notification"; + source: "indicator.prog"; + script { + set_int(bg_set, 3); + set_state(PART:"elm.rect.bg", "notification", 0.0); + set_state(PART:"message.bg", "transparent", 0.0); + set_state(PART:"elm.image.bg", "notification", 0.0); + } + + } + + program { + name: "indicator.lock.on"; + action: STATE_SET "hide" 0.0; + signal: "indicator.lock.on"; + source: "indicator.prog"; + target: "elm.swallow.fixed4"; + } + + program { + name: "indicator.lock.off"; + action: STATE_SET "default" 0.0; + signal: "indicator.lock.off"; + source: "indicator.prog"; + target: "elm.swallow.fixed4"; + } + + + program { + name: "indicator.battery.percentage.show"; + action: STATE_SET "show" 0.0; + signal: "indicator.battery.percentage.show"; + source: "indicator.prog"; + target: "percentage.padding.left"; + target: "elm.text.percentage"; + } + + program { + name: "indicator.battery.percentage.hide"; + action: STATE_SET "default" 0.0; + signal: "indicator.battery.percentage.hide"; + source: "indicator.prog"; + target: "percentage.padding.left"; + target: "elm.text.percentage"; + } + program { + name: "indicator.connection.show"; + action: STATE_SET "default" 0.0; + signal: "indicator.connection.show"; + source: "indicator.prog"; + target: "elm.swallow.fixed1"; + target: "elm.swallow.fixed5"; + } + + program { + name: "indicator.connection.hide"; + action: STATE_SET "hide" 0.0; + signal: "indicator.connection.hide"; + source: "indicator.prog"; + target: "elm.swallow.fixed1"; + target: "elm.swallow.fixed5"; + } + } + } +} diff --git a/debian/changelog b/debian/changelog new file mode 100755 index 0000000..3afe19a --- /dev/null +++ b/debian/changelog @@ -0,0 +1,1571 @@ +indicator (0.1.0-198) unstable; urgency=low + + * bug fix on battery icon + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-198 + + -- Jeonghoon Park Tue, 05 Jun 2012 16:37:39 +0900 + +indicator (0.1.0-197) unstable; urgency=low + + * check battery capacity changes before updating UI + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-197 + + -- Jeonghoon Park Fri, 01 Jun 2012 11:52:30 +0900 + +indicator (0.1.0-196) unstable; urgency=low + + * apply sos event icon + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-196 + + -- Jeonghoon Park Wed, 30 May 2012 14:13:02 +0900 + +indicator (0.1.0-195) unstable; urgency=low + + * apply vconf policy changes + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-195 + + -- Jeonghoon Park Thu, 17 May 2012 10:13:22 +0900 + +indicator (0.1.0-194) unstable; urgency=low + + * update desktop file + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-194 + + -- Jeonghoon Park Mon, 14 May 2012 11:19:55 +0900 + +indicator (0.1.0-193) unstable; urgency=low + + * apply vconf key changes for the telephony packet service type + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-193 + + -- Jeonghoon Park Thu, 10 May 2012 11:25:06 +0900 + +indicator (0.1.0-192) unstable; urgency=low + + * apply cancel key + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-192 + + -- Jeonghoon Park Tue, 08 May 2012 11:45:42 +0900 + +indicator (0.1.0-191) unstable; urgency=low + + * bug fix on displaying battery percentage + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-191 + + -- Jeonghoon Park Mon, 30 Apr 2012 18:24:53 +0900 + +indicator (0.1.0-190) unstable; urgency=low + + * remove scale for 1 pixel line + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-190 + + -- Jeonghoon Park Thu, 19 Apr 2012 10:26:47 +0900 + +indicator (0.1.0-189) unstable; urgency=low + + * change vconfkey for timeformat + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-189 + + -- Jeonghoon Park Thu, 12 Apr 2012 11:59:22 +0900 + +indicator (0.1.0-188) unstable; urgency=low + + * apply notification display app + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-188 + + -- Jeonghoon Park Fri, 06 Apr 2012 10:13:03 +0900 + +indicator (0.1.0-187) unstable; urgency=low + + * bug fix on battery animation + * Git: slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-187 + + -- Jeonghoon Park Tue, 03 Apr 2012 19:18:36 +0900 + +indicator (0.1.0-186) unstable; urgency=low + + * enable opacity mode + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-186 + + -- Jeonghoon Park Wed, 21 Mar 2012 09:11:43 +0900 + +indicator (0.1.0-185) unstable; urgency=low + + * apply desktop file changes + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-185 + + -- Jeonghoon Park Thu, 15 Mar 2012 20:12:33 +0900 + +indicator (0.1.0-184) unstable; urgency=low + + * ready for indicator transparent mode + * apply efl 1.0 migration changes + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-184 + + -- Jeonghoon Park Tue, 13 Mar 2012 18:30:06 +0900 + +indicator (0.1.0-183) unstable; urgency=low + + * bug fix on transfer icon + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-183 + + -- Jeonghoon Park Thu, 23 Feb 2012 19:37:08 +0900 + +indicator (0.1.0-182) unstable; urgency=low + + * change deprecated elm APIs + * apply hw home key emulation + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-182 + + -- Jeonghoon Park Mon, 20 Feb 2012 16:53:34 +0900 + +indicator (0.1.0-181) unstable; urgency=low + + * checking system status when the home icon is clicked + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-181 + + -- Jeonghoon Park Wed, 15 Feb 2012 14:29:56 +0900 + +indicator (0.1.0-180) unstable; urgency=low + + * Fix cannot home launching issue + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-180 + + -- Junghyun Kim Fri, 03 Feb 2012 19:49:41 +0900 + +indicator (0.1.0-179) unstable; urgency=low + + * Applied wifi vconf key enum changes + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-179 + + -- UkJung Kim Fri, 03 Feb 2012 09:47:45 +0900 + +indicator (0.1.0-178) unstable; urgency=low + + * Change Scale set code by EFL devloper's request + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-178 + + -- Junghyun Kim Fri, 27 Jan 2012 17:19:16 +0900 + +indicator (0.1.0-177) unstable; urgency=low + + * Change Interval value for display processing icon animation + * Fix Icon Show/hide code + * Change function for get 3rd event information by request of notification library developer + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-177 + + -- Junghyun Kim Fri, 20 Jan 2012 17:16:05 +0900 + +indicator (0.1.0-176) unstable; urgency=low + + * Update version(Fix crash and change image) + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-176 + + -- Junghyun Kim Thu, 19 Jan 2012 20:33:09 +0900 + +indicator (0.1.0-175) unstable; urgency=low + + * update version(apply wifi-direct,20 level battery,display 18 icon in landscape,ICON update) + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-175 + + -- Junghyun Kim Tue, 17 Jan 2012 13:53:58 +0900 + +indicator (0.1.0-174) unstable; urgency=low + + * Fix RSSI level bug + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-174 + + -- Junghyun Kim Wed, 11 Jan 2012 16:42:32 +0900 + +indicator (0.1.0-173) unstable; urgency=low + + * Add NFC,Wifi-Direct Modules and update latest resource + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-173 + + -- Junghyun Kim Thu, 05 Jan 2012 13:57:30 +0900 + +indicator (0.1.0-172) unstable; urgency=low + + * Fix boilerplate text + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-172 + + -- Junghyun Kim Tue, 06 Dec 2011 21:06:28 +0900 + +indicator (0.1.0-171) unstable; urgency=low + + * Update boilerplate and remove unused code,function,macro + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-171 + + -- Junghyun Kim Tue, 06 Dec 2011 13:57:04 +0900 + +indicator (0.1.0-170) unstable; urgency=low + + * Add a Lock Screen Check code for Fix H0100137119 + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-170 + + -- Junghyun Kim Wed, 23 Nov 2011 11:06:13 +0900 + +indicator (0.1.0-169) unstable; urgency=low + + * Fix code for unit test + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-169 + + -- Junghyun Kim Wed, 16 Nov 2011 20:00:15 +0900 + +indicator (0.1.0-168) unstable; urgency=low + + * Fix H0100136752 and Change Code for Home Launching + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-168 + + -- Junghyun Kim Mon, 14 Nov 2011 16:05:43 +0900 + +indicator (0.1.0-167) unstable; urgency=low + + * Change Home Button Width and layout in Landscape Mode + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-167 + + -- Junghyun Kim Wed, 09 Nov 2011 14:18:47 +0900 + +indicator (0.1.0-166) unstable; urgency=low + + * Add debug code + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-166 + + -- Junghyun Kim Mon, 07 Nov 2011 20:24:17 +0900 + +indicator (0.1.0-165) unstable; urgency=low + + * Remove Unused test code + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-165 + + -- Junghyun Kim Mon, 31 Oct 2011 13:42:22 +0900 + +indicator (0.1.0-164) unstable; urgency=low + + * Apply Status_bar GUI + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-164 + + -- Junghyun Kim Thu, 27 Oct 2011 16:01:43 +0900 + +indicator (0.1.0-163) unstable; urgency=low + + * Fix Build Error + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-163 + + -- Junghyun Kim Wed, 19 Oct 2011 10:57:36 +0900 + +indicator (0.1.0-162) unstable; urgency=low + + * Change code about touch area for display quickpanel + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-162 + + -- Junghyun Kim Tue, 18 Oct 2011 15:16:45 +0900 + +indicator (0.1.0-161) unstable; urgency=low + + * remove unused vconf key in battery test file + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-161 + + -- Junghyun Kim Tue, 18 Oct 2011 14:06:41 +0900 + +indicator (0.1.0-160) unstable; urgency=low + + * Fix Bug for display Bluetooth Icon + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-160 + + -- Junghyun Kim Mon, 17 Oct 2011 21:30:12 +0900 + +indicator (0.1.0-159) unstable; urgency=low + + * Change Indicator Icon and modify code(about resolution and launch app) + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-159 + + -- Junghyun Kim Mon, 17 Oct 2011 14:21:33 +0900 + +indicator (0.1.0-158) unstable; urgency=low + + * Change Indicator Color Value for Black Theme + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-158 + + -- Junghyun Kim Tue, 11 Oct 2011 13:18:00 +0900 + +indicator (0.1.0-157) unstable; urgency=low + + * Change Indicator Height for HD resolution + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-157 + + -- Junghyun Kim Mon, 10 Oct 2011 21:04:45 +0900 + +indicator (0.1.0-156) unstable; urgency=low + + * Fix H0100134001 and change code to enable quickpanel on lock-screen + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-156 + + -- Junghyun Kim Wed, 05 Oct 2011 14:32:23 +0900 + +indicator (0.1.0-155) unstable; urgency=low + + * Fix Event Icon bug and Remove quickpanel lib dependency + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-155 + + -- Junghyun Kim Fri, 16 Sep 2011 20:43:51 +0900 + +indicator (0.1.0-154) unstable; urgency=low + + * Change Battery Icon and Clock Color + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-154 + + -- Junghyun Kim Fri, 16 Sep 2011 13:34:10 +0900 + +indicator (0.1.0-153) unstable; urgency=low + + * Change Low Battery Icon and modify code for icon animation + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-153 + + -- Junghyun Kim Fri, 09 Sep 2011 17:04:01 +0900 + +indicator (0.1.0-152) unstable; urgency=low + + * Repackage for fix some bug + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-152 + + -- Junghyun Kim Fri, 09 Sep 2011 16:04:40 +0900 + +indicator (0.1.0-151) unstable; urgency=low + + * Fix H0100132876, code clean up + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-151 + + -- Junghyun Kim Fri, 26 Aug 2011 11:57:04 +0900 + +indicator (0.1.0-150) unstable; urgency=low + + * update for prevent report and add mobile hotspot module + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-150 + + -- Junghyun Kim Mon, 22 Aug 2011 17:31:03 +0900 + +indicator (0.1.0-149) unstable; urgency=low + + * Fix H0100132611, Add voice recorder module, Code clean up + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-149 + + -- Junghyun Kim Fri, 19 Aug 2011 11:22:47 +0900 + +indicator (0.1.0-148) unstable; urgency=low + + * Update for fix code of prevent reports and change checking code for battery status + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-148 + + -- Junghyun Kim Tue, 16 Aug 2011 13:45:12 +0900 + +indicator (0.1.0-147) unstable; urgency=low + + * Update for UX GUIDE and apply percentage battery status icon + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-147 + + -- Junghyun Kim Fri, 12 Aug 2011 14:16:09 +0900 + +indicator (0.1.0-146) unstable; urgency=low + + * Fix H0100129307 + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-146 + + -- Junghyun Kim Wed, 03 Aug 2011 11:46:02 +0900 + +indicator (0.1.0-145) unstable; urgency=low + + * change code by result of code review and fix rssi string bug in black theme + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-145 + + -- Junghyun Kim Thu, 28 Jul 2011 13:36:24 +0900 + +indicator (0.1.0-144) unstable; urgency=low + + * Code clean up + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-144 + + -- Junghyun Kim Wed, 27 Jul 2011 15:31:38 +0900 + +indicator (0.1.0-143) unstable; urgency=low + + * Change API for Elementary Migration + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-143 + + -- Junghyun Kim Thu, 21 Jul 2011 12:48:12 +0900 + +indicator (0.1.0-142) unstable; urgency=low + + * Change bool type to Eina_Bool for Ecore IMF header file + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-142 + + -- Junghyun Kim Tue, 19 Jul 2011 16:32:51 +0900 + +indicator (0.1.0-141) unstable; urgency=low + + * Repackage for apply changed boilerplate of each source file + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-141 + + -- Junghyun Kim Wed, 13 Jul 2011 14:36:48 +0900 + +indicator (0.1.0-140) lucid; urgency=low + + * Add code for display time when change time zone and fix code for display mute icon + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-140 + + -- Junghyun Kim Mon, 11 Jul 2011 18:38:59 +0900 + +indicator (0.1.0-139) unstable; urgency=low + + * Fix H0100129591 and display mmc issue + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-139 + + -- Junghyun Kim Wed, 06 Jul 2011 14:57:19 +0900 + +indicator (0.1.0-138) unstable; urgency=low + + * Fix Code for time change issue + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-138 + + -- Junghyun Kim Mon, 04 Jul 2011 10:16:50 +0900 + +indicator (0.1.0-137) unstable; urgency=low + + * Add call back function and modify code for apply Region Change event + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-137 + + -- jh1114.kim Tue, 28 Jun 2011 16:57:05 +0900 + +indicator (0.1.0-136) unstable; urgency=low + + * Change EDC code for black skin code and change clock string + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-136 + + -- Junghyun Kim Thu, 23 Jun 2011 15:54:53 +0900 + +indicator (0.1.0-135) unstable; urgency=low + + * Change EDC code for New Edje_cc Compiler + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-135 + + -- Junghyun Kim Fri, 10 Jun 2011 09:59:48 +0900 + +indicator (0.1.0-134) unstable; urgency=low + + * update po file + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-134 + + -- SaeNa Kim Thu, 19 May 2011 12:30:26 +0900 + +indicator (0.1.0-133) unstable; urgency=low + + * Enable to open quickpanel on rotated window + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-133 + + -- SaeNa Kim Thu, 12 May 2011 18:34:02 +0900 + +indicator (0.1.0-132) unstable; urgency=low + + * Apply Indicator GUI guide v0.3 + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-132 + + -- SaeNa Kim Mon, 25 Apr 2011 16:44:10 +0900 + +indicator (0.1.0-131) unstable; urgency=low + + * Change vconfkey for MMC icon + (VCONFKEY_FILEMANAGER_MMC_STATUS -> VCONFKEY_FILEMANAGER_DB_STATUS) + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-131 + + -- SaeNa Kim Tue, 19 Apr 2011 14:44:25 +0900 + +indicator (0.1.0-130) unstable; urgency=low + + * Crash fix - add NULL check routine when failed to get window name + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-130 + + -- SaeNa Kim Mon, 18 Apr 2011 18:32:10 +0900 + +indicator (0.1.0-129) unstable; urgency=low + + * Unset bg color on home screen + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-129 + + -- SaeNa Kim Mon, 18 Apr 2011 12:27:44 +0900 + +indicator (0.1.0-128) unstable; urgency=low + + * Apply Shape Input Mask + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-128 + + -- SaeNa Kim Fri, 15 Apr 2011 15:14:48 +0900 + +indicator (0.1.0-127) unstable; urgency=low + + * Skip bg color change effect + * when launching an application from menu_screen + * Fix package naming (deb.com.samsung.indicator -> com.samsung.indicator) + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: indicator_0.1.0-127 + + -- SaeNa Kim Mon, 11 Apr 2011 21:35:22 +0900 + +deb.com.samsung.indicator (0.1.0-126) unstable; urgency=low + + * Bugfix for H0100123915 : indicator window position problem + * when rotating target device + * Remove BEAT UX related codes and image files + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-126 + + -- SaeNa Kim Thu, 07 Apr 2011 11:47:08 +0900 + +deb.com.samsung.indicator (0.1.0-125) unstable; urgency=low + + * Display full indicator on quickpanel window + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-125 + + -- SaeNa Kim Mon, 04 Apr 2011 19:47:10 +0900 + +deb.com.samsung.indicator (0.1.0-124) unstable; urgency=low + + * Bugfix : resizing window at first boot up + * Delete arrow image + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-124 + + -- SaeNa Kim Sat, 02 Apr 2011 15:44:57 +0900 + +deb.com.samsung.indicator (0.1.0-123) unstable; urgency=low + + * Bugfix for crash when a new msg is arrived + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-123 + + -- SaeNa Kim Fri, 01 Apr 2011 11:00:02 +0900 + +deb.com.samsung.indicator (0.1.0-122) unstable; urgency=low + + * Delete animation when menu_screen is paused + * Add arrow image + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-122 + + -- SaeNa Kim Thu, 31 Mar 2011 17:34:36 +0900 + +deb.com.samsung.indicator (0.1.0-121) unstable; urgency=low + + * Hide bg color at clock view + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-121 + + -- SaeNa Kim Tue, 29 Mar 2011 23:30:25 +0900 + +deb.com.samsung.indicator (0.1.0-120) unstable; urgency=low + + * Update Event BG image + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-120 + + -- SaeNa Kim Mon, 28 Mar 2011 10:56:31 +0900 + +deb.com.samsung.indicator (0.1.0-119) unstable; urgency=low + + * Bugfix for indicator view on starter + * Apply NBEAT icons + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-119 + + -- SaeNa Kim Fri, 25 Mar 2011 15:56:18 +0900 + +deb.com.samsung.indicator (0.1.0-118) unstable; urgency=low + + * [NBEAT] Update resizing window related codes + * Delete message, im, missed_call and add noti module + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-118 + + -- SaeNa Kim Wed, 23 Mar 2011 20:10:25 +0900 + +deb.com.samsung.indicator (0.1.0-117) unstable; urgency=low + + * Updates for change of libquickpanel (0.1.0-31) + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-117 + + -- SaeNa Kim Tue, 15 Mar 2011 21:50:24 +0900 + +deb.com.samsung.indicator (0.1.0-116) unstable; urgency=low + + * Add application home directory + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-116 + + -- SaeNa Kim Thu, 10 Mar 2011 21:30:29 +0900 + +deb.com.samsung.indicator (0.1.0-115) unstable; urgency=low + + * Rollback NBEAT UX + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-115 + + -- SaeNa Kim Wed, 09 Mar 2011 17:47:31 +0900 + +deb.com.samsung.indicator (0.1.0-114) unstable; urgency=low + + * Bugfix for touch event + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-114 + + -- SaeNa Kim Thu, 03 Mar 2011 21:01:36 +0900 + +deb.com.samsung.indicator (0.1.0-113) unstable; urgency=low + + * update codes for registering modules + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-113 + + -- SaeNa Kim Thu, 03 Mar 2011 19:20:11 +0900 + +deb.com.samsung.indicator (0.1.0-112) unstable; urgency=low + + * Updates for change of battery operation + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-112 + + -- SaeNa Kim Thu, 03 Mar 2011 15:37:17 +0900 + +deb.com.samsung.indicator (0.1.0-111) unstable; urgency=low + + * Updates for NBEAT UX + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-111 + + -- SaeNa Kim Wed, 02 Mar 2011 23:35:18 +0900 + +deb.com.samsung.indicator (0.1.0-110) unstable; urgency=low + + * PNG optimization + * Add control-privilege + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-110 + + -- SaeNa Kim Mon, 21 Feb 2011 13:57:01 +0900 + +deb.com.samsung.indicator (0.1.0-109) unstable; urgency=low + + * Fix for uninspected bug reported by prevent tool + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-109 + + -- SaeNa Kim Wed, 16 Feb 2011 13:59:03 +0900 + +deb.com.samsung.indicator (0.1.0-108) unstable; urgency=low + + * Bugfix for quickpanel DB open error + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-108 + + -- SaeNa Kim Fri, 11 Feb 2011 17:59:37 +0900 + +deb.com.samsung.indicator (0.1.0-107) unstable; urgency=low + + * Change bettery level indicator + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-107 + + -- SaeNa Kim Thu, 10 Feb 2011 19:51:09 +0900 + +deb.com.samsung.indicator (0.1.0-106) unstable; urgency=low + + * Set background color as solid black + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-106 + + -- SaeNa Kim Wed, 09 Feb 2011 14:38:54 +0900 + +deb.com.samsung.indicator (0.1.0-105) unstable; urgency=low + + * Set nice value as 2 + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-105 + + -- SaeNa Kim Mon, 07 Feb 2011 14:57:32 +0900 + +deb.com.samsung.indicator (0.1.0-104) unstable; urgency=low + + * Remove transition effect for blinking animation + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-104 + + -- SaeNa Kim Mon, 24 Jan 2011 19:56:13 +0900 + +deb.com.samsung.indicator (0.1.0-103) unstable; urgency=low + + * Add system_wakeup heynoti handler for clock update + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-103 + + -- SaeNa Kim Wed, 19 Jan 2011 15:32:01 +0900 + +deb.com.samsung.indicator (0.1.0-102) unstable; urgency=low + + * Add hibernation booting script (S01indicator) + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-102 + + -- SaeNa Kim Wed, 19 Jan 2011 13:18:23 +0900 + +deb.com.samsung.indicator (0.1.0-101) unstable; urgency=low + + * Modifications for change of application directory structure + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-101 + + -- SaeNa Kim Mon, 17 Jan 2011 19:01:01 +0900 + +deb.com.samsung.indicator (0.1.0-100) unstable; urgency=low + + * elm_layout_theme_set -> elm_layout_file_set + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-100 + -- SaeNa Kim Wed, 12 Jan 2011 20:38:36 +0900 + +deb.com.samsung.indicator (0.1.0-99) unstable; urgency=low + + * Change rotation method (resize callback -> ecore_x_client message callback) + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-99 + + -- SaeNa Kim Fri, 07 Jan 2011 17:36:32 +0900 + +deb.com.samsung.indicator (0.1.0-98) unstable; urgency=low + + * Bugfix for icon_hide func + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-98 + + -- SaeNa Kim Wed, 05 Jan 2011 21:16:12 +0900 + +deb.com.samsung.indicator (0.1.0-97) unstable; urgency=low + + * Add RCSIM module + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-97 + + -- SaeNa Kim Wed, 05 Jan 2011 19:13:45 +0900 + +deb.com.samsung.indicator (0.1.0-96) unstable; urgency=low + + * Rollback connections.c file + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-96 + + -- SaeNa Kim Thu, 23 Dec 2010 10:29:44 +0900 + +deb.com.samsung.indicator (0.1.0-95) unstable; urgency=low + + * Modifications for method change for showing notification icons + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-95 + + -- SaeNa Kim Wed, 22 Dec 2010 19:47:24 +0900 + +deb.com.samsung.indicator (0.1.0-94) unstable; urgency=low + + * Add install option for vconftool + * Bugfix for DNET state + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-94 + + -- SaeNa Kim Fri, 17 Dec 2010 19:45:57 +0900 + +deb.com.samsung.indicator (0.1.0-93) unstable; urgency=low + + * Add postinst for vconf groupid + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-93 + + -- SaeNa Kim Fri, 17 Dec 2010 18:43:42 +0900 + +deb.com.samsung.indicator (0.1.0-91) unstable; urgency=low + + * Modifications for wifi, call_divert + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-91 + + -- SaeNa Kim Wed, 15 Dec 2010 20:48:47 +0900 + +deb.com.samsung.indicator (0.1.0-90) unstable; urgency=low + + * Bugfix for clock display + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-90 + + -- SaeNa Kim Fri, 03 Dec 2010 13:48:03 +0900 + + + -- SaeNa Kim Fri, 17 Dec 2010 18:43:46 +0900 + +deb.com.samsung.indicator (0.1.0-92) unstable; urgency=low + + * Bug fix for bluetooth + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-92 + * - + + -- SaeNa Kim Fri, 17 Dec 2010 18:43:42 +0900 + +deb.com.samsung.indicator (0.1.0-91) unstable; urgency=low + + * Modifications for wifi, call_divert + * Git: slp-source.sec.samsung.net:slp/pkgs/i/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-91 + + -- SaeNa Kim Wed, 15 Dec 2010 20:48:47 +0900 + +deb.com.samsung.indicator (0.1.0-90) unstable; urgency=low + + * Bugfix for clock display + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-90 + + -- SaeNa Kim Fri, 03 Dec 2010 13:48:03 +0900 + +deb.com.samsung.indicator (0.1.0-89) unstable; urgency=low + + * Bugfix for scalable UI + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-89 + + -- SaeNa Kim Fri, 26 Nov 2010 23:26:56 +0900 + +deb.com.samsung.indicator (0.1.0-88) unstable; urgency=low + + * Bugfix for scalable UI + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-88 + + -- SaeNa Kim Fri, 26 Nov 2010 21:01:17 +0900 + +deb.com.samsung.indicator (0.1.0-87) unstable; urgency=low + + * Change indicator background color + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-87 + + -- SaeNa Kim Wed, 24 Nov 2010 12:01:54 +0900 + +deb.com.samsung.indicator (0.1.0-86) unstable; urgency=low + + * Restore indicator desktop name + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-86 + + -- SaeNa Kim Tue, 23 Nov 2010 11:53:09 +0900 + +deb.com.samsung.indicator (0.1.0-85) unstable; urgency=low + + * unstripped package error is fixed + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-85 + + -- SaeNa Kim Mon, 22 Nov 2010 14:32:59 +0900 + +deb.com.samsung.indicator (0.1.0-84) unstable; urgency=low + + * Package name is changed + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: deb.com.samsung.indicator_0.1.0-84 + + -- SaeNa Kim Mon, 22 Nov 2010 11:58:45 +0900 + +indicator-win (0.1.0-83) unstable; urgency=low + + * tk.po -> tr.po + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-83 + + -- SaeNa Kim Thu, 18 Nov 2010 10:56:20 +0900 + +indicator-win (0.1.0-82) unstable; urgency=low + + * Block opening livepanel when idle_lock status + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-82 + + -- SaeNa Kim Tue, 16 Nov 2010 15:53:12 +0900 + +indicator-win (0.1.0-81) unstable; urgency=low + + * Bugfix for snprintf + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-81 + + -- SaeNa Kim Wed, 10 Nov 2010 11:11:30 +0900 + +indicator-win (0.1.0-80) unstable; urgency=low + + * Remove beat-font dependency + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-80 + + -- SaeNa Kim Tue, 09 Nov 2010 14:45:55 +0900 + +indicator-win (0.1.0-79) unstable; urgency=low + + * Bug fix for charging animation + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-79 + + -- SaeNa Kim Tue, 02 Nov 2010 13:39:05 +0900 + +indicator-win (0.1.0-78) unstable; urgency=low + + * Apply multi-language + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-78 + + -- SaeNa Kim Wed, 27 Oct 2010 19:44:21 +0900 + +indicator-win (0.1.0-77) unstable; urgency=low + + * Bugfix: label alignment (H0100111252) + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-77 + + -- SaeNa Kim Tue, 26 Oct 2010 14:19:23 +0900 + +indicator-win (0.1.0-76) unstable; urgency=low + + * Bugfix: label alignment and theme change + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-76 + + -- SaeNa Kim Mon, 25 Oct 2010 21:11:29 +0900 + +indicator-win (0.1.0-75) unstable; urgency=low + + * Fix bug: bluetooth headset icon + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-75 + + -- SaeNa Kim Wed, 20 Oct 2010 15:15:41 +0900 + +indicator-win (0.1.0-74) unstable; urgency=low + + * Bluetooth Module is modified + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-74 + + -- SaeNa Kim Sat, 16 Oct 2010 18:31:50 +0900 + +indicator-win (0.1.0-73) unstable; urgency=low + + * Apply icon theme + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-73 + + -- SaeNa Kim Mon, 11 Oct 2010 20:02:07 +0900 + +indicator-win (0.1.0-72) unstable; urgency=low + + * Bug fix for vconfkey notify register, after hibernation + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-72 + + -- SaeNa Kim Wed, 06 Oct 2010 14:25:30 +0900 + +indicator-win (0.1.0-71) unstable; urgency=low + + * Bug fix for label hint min/max set + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-71 + + -- SaeNa Kim Tue, 05 Oct 2010 11:08:34 +0900 + +indicator-win (0.1.0-70) unstable; urgency=low + + * Bug fix for label hint min/max set + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-70 + + -- SaeNa Kim Mon, 04 Oct 2010 23:39:23 +0900 + +indicator-win (0.1.0-69) unstable; urgency=low + + * Add charging animation + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-69 + + -- SaeNa Kim Mon, 04 Oct 2010 15:54:32 +0900 + +indicator-win (0.1.0-68) unstable; urgency=low + + * Apply system string + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-68 + + -- SaeNa Kim Fri, 01 Oct 2010 13:53:07 +0900 + +indicator-win (0.1.0-67) unstable; urgency=low + + * Bug fix for window rotation + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-67 + + -- SaeNa Kim Tue, 28 Sep 2010 22:07:50 +0900 + +indicator-win (0.1.0-66) unstable; urgency=low + + * add rotate-lock module + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-66 + + -- SaeNa Kim Tue, 28 Sep 2010 17:26:31 +0900 + +indicator-win (0.1.0-65) unstable; urgency=low + + * Block livepanel handle while idle lock state + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-65 + + -- SaeNa Kim Mon, 27 Sep 2010 23:12:28 +0900 + +indicator-win (0.1.0-64) unstable; urgency=low + + * Rotate livepanel handle icon when livepanel state is changed + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-64 + + -- SaeNa Kim Fri, 24 Sep 2010 17:57:43 +0900 + +indicator-win (0.1.0-63) unstable; urgency=low + + * Fix scale problem + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-63 + + -- SaeNa Kim Mon, 20 Sep 2010 17:43:33 +0900 + +indicator-win (0.1.0-62) unstable; urgency=low + + * Add hibernation callbacks for idle lock checking + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-62 + + -- SaeNa Kim Mon, 20 Sep 2010 12:55:54 +0900 + +indicator-win (0.1.0-61) unstable; urgency=low + + * Block livepanel handle while idle lock state + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-61 + + -- SaeNa Kim Sun, 19 Sep 2010 18:23:37 +0900 + +indicator-win (0.1.0-60) unstable; urgency=low + + * Modify clock width + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-60 + + -- SaeNa Kim Sun, 19 Sep 2010 16:34:33 +0900 + +indicator-win (0.1.0-59) unstable; urgency=low + + * Hide livepanel handle when landscape mode + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-59 + + -- SaeNa Kim Sat, 18 Sep 2010 23:05:35 +0900 + +indicator-win (0.1.0-58) unstable; urgency=low + + * Add livepanel handle image + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-58 + + -- SaeNa Kim Sat, 18 Sep 2010 14:19:03 +0900 + +indicator-win (0.1.0-57) unstable; urgency=low + + * Add lock-ui scenario + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-57 + + -- SaeNa Kim Fri, 17 Sep 2010 22:07:22 +0900 + +indicator-win (0.1.0-56) unstable; urgency=low + + * Bug fix for dual layout + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-56 + + -- SaeNa Kim Wed, 15 Sep 2010 16:07:32 +0900 + +indicator-win (0.1.0-55) unstable; urgency=low + + * Add MMC icon & enable touch event + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-55 + + -- SaeNa Kim Wed, 15 Sep 2010 15:27:29 +0900 + +indicator-win (0.1.0-54) unstable; urgency=low + + * For EFL Upgrade + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-54 + + -- SaeNa Kim Fri, 10 Sep 2010 23:41:12 +0900 + +indicator-win (0.1.0-53) unstable; urgency=low + + * Add browsing icon + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-53 + + -- SaeNa Kim Thu, 09 Sep 2010 14:09:10 +0900 + +indicator-win (0.1.0-52) unstable; urgency=low + + * Fix indicator height problem when rotation + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-52 + + -- SaeNa Kim Wed, 08 Sep 2010 21:43:39 +0900 + +indicator-win (0.1.0-51) unstable; urgency=low + + * Delete livepanel handle image + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-51 + + -- SaeNa Kim Wed, 08 Sep 2010 21:26:50 +0900 + +indicator-win (0.1.0-50) unstable; urgency=low + + * Add hibernation feature + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-50 + + -- SaeNa Kim Wed, 08 Sep 2010 15:13:17 +0900 + +indicator-win (0.1.0-49) unstable; urgency=low + + * Add 3G connected icon + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-49 + + -- SaeNa Kim Wed, 01 Sep 2010 22:43:30 +0900 + +indicator-win (0.1.0-48) unstable; urgency=low + + * Add APPCORE_EVENT_LOW_BATTERY event handler + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-48 + + -- SaeNa Kim Fri, 27 Aug 2010 16:42:08 +0900 + +indicator-win (0.1.0-47) unstable; urgency=low + + * Delete dlog-0 dependency + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-47 + + -- SaeNa Kim Thu, 26 Aug 2010 16:14:42 +0900 + +indicator-win (0.1.0-46) unstable; urgency=low + + * Modifications for Secure coding + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-46 + + -- SaeNa Kim Thu, 26 Aug 2010 11:03:42 +0900 + +indicator-win (0.1.0-45) unstable; urgency=low + + * Fix startup problem (install directory of desktop file) + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-45 + + -- SaeNa Kim Mon, 16 Aug 2010 10:19:49 +0900 + +indicator-win (0.1.0-44) unstable; urgency=low + + * Add FILE_DEBUG option + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-44 + + -- SaeNa Kim Fri, 13 Aug 2010 15:46:41 +0900 + +indicator-win (0.1.0-43) unstable; urgency=low + + * Add window rotation callback for indicator icon + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-43 + + -- SaeNa Kim Wed, 11 Aug 2010 19:48:12 +0900 + +indicator-win (0.1.0-42) unstable; urgency=low + + * Add MAX value for indicator size + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-42 + + -- SaeNa Kim Tue, 10 Aug 2010 21:55:22 +0900 + +indicator-win (0.1.0-41) unstable; urgency=low + + * Add Call / Sync / Call diverting icons + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-41 + + -- SaeNa Kim Tue, 10 Aug 2010 16:52:50 +0900 + +indicator-win (0.1.0-40) unstable; urgency=low + + * Remove Mousedown callback handler for Quickpanel + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-40 + + -- SaeNa Kim Tue, 10 Aug 2010 10:29:11 +0900 + +indicator-win (0.1.0-39) unstable; urgency=low + + * Update for package upload + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-39 + + -- SaeNa Kim Mon, 09 Aug 2010 17:00:34 +0900 + +indicator-win (0.1.0-38) unstable; urgency=low + + * Modification for change of appcore API + * Git: 165.213.180.234:/git/slp/pkgs/indicator-win + * Tag: indicator-win_0.1.0-38 + + -- SaeNa Kim Mon, 09 Aug 2010 14:25:52 +0900 + +indicator-win (0.1.0-37) unstable; urgency=low + + * Maintainer information is changed (SaeNa Kim) + * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/indicator-0 + * Tag: indicator-win_0.1.0-37 + + -- SaeNa Kim Thu, 08 Jul 2010 15:20:40 +0900 + +indicator-win (0.1.0-36) unstable; urgency=low + + * dlog api changes + * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/indicator-0 + * Tag: indicator-win_0.1.0-36 + + -- Sohyun Kim Wed, 16 Jun 2010 11:55:02 +0900 + +indicator-win (0.1.0-35) unstable; urgency=low + + * EFL upgrade + * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/indicator-0 + * Tag: indicator-win_0.1.0-35 + + -- Sohyun Kim Fri, 11 Jun 2010 13:49:43 +0900 + +indicator-win (0.1.0-34) unstable; urgency=low + + * remove chown/chmod for indicator bin + * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/indicator-0 + * Tag: indicator-win_0.1.0-34 + + -- Sohyun Kim Thu, 03 Jun 2010 14:01:30 +0900 + +indicator-win (0.1.0-33) unstable; urgency=low + + * apply changed api(vconft, heynoti) + * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/indicator-0 + * Tag: indicator-win_0.1.0-33 + + -- Sohyun Kim Sun, 30 May 2010 15:36:52 +0900 + +indicator-win (0.1.0-32) unstable; urgency=low + + * block quickpanel launching when startup applicaation is running + * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/indicator-0 + * Tag: indicator-win_0.1.0-32 + + -- Sohyun Kim Tue, 25 May 2010 16:37:52 +0900 + +indicator-win (0.1.0-31) unstable; urgency=low + + * add privilege_control + * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/indicator-0 + * Tag: indicator-win_0.1.0-31 + + -- Sohyun Kim Wed, 19 May 2010 17:30:23 +0900 + +indicator-win (0.1.0-30) unstable; urgency=low + + * elementary update + * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/indicator-0 + * Tag: indicator-win_0.1.0-30 + + -- Sohyun Kim Mon, 17 May 2010 21:16:56 +0900 + +indicator-win (0.1.0-29) unstable; urgency=low + + * add filemanager mmc noti, add postinst file for security + * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/indicator-0 + * Tag: indicator-win_0.1.0-29 + + -- Sohyun Kim Tue, 20 Apr 2010 20:09:53 +0900 + +indicator-win (0.1.0-28) unstable; urgency=low + + * remove dlog_init, dlog_deinit functions + * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/indicator-0 + * Tag: indicator-win_0.1.0-28 + + -- Sohyun Kim Mon, 19 Apr 2010 11:00:38 +0900 + +indicator-win (0.1.0-27) unstable; urgency=low + + * add seven_email noti + + -- Sohyun Kim Wed, 14 Apr 2010 19:53:15 +0900 + +indicator-win (0.1.0-26) unstable; urgency=low + + * add hibernation_leave, hibernation_enter noti + * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/indicator-0 + * Tag: indicator-win_0.1.0-26 + + -- Sohyun Kim Fri, 02 Apr 2010 19:42:48 +0900 + +indicator-win (0.1.0-25) unstable; urgency=low + + * add landscape indicator + + -- Sohyun Kim Thu, 01 Apr 2010 20:46:16 +0900 + +indicator-win (0.1.0-24) unstable; urgency=low + + * add landscape indicator + + -- Sohyun Kim Thu, 01 Apr 2010 18:54:56 +0900 + +indicator-win (0.1.0-23) unstable; urgency=low + + * bug fix regarding flight mode and no sim + + -- Sohyun Kim Thu, 25 Mar 2010 12:19:20 +0900 + +indicator-win (0.1.0-22) unstable; urgency=low + + * bug fix regarding flight mode and cs no service + + -- Sohyun Kim Mon, 22 Mar 2010 17:59:38 +0900 + +indicator-win (0.1.0-21) unstable; urgency=low + + * bug fix about no sim mode + + -- Sohyun Kim Mon, 22 Mar 2010 17:02:17 +0900 + +indicator-win (0.1.0-20) unstable; urgency=low + + * add image_cache_flush + + -- Sohyun Kim Fri, 19 Mar 2010 19:02:15 +0900 + +indicator-win (0.1.0-19) unstable; urgency=low + + * GUI update + + -- Sohyun Kim Wed, 17 Mar 2010 11:22:14 +0900 + +indicator-win (0.1.0-18) unstable; urgency=low + + * manage BT and USB icon seperately + + -- Sohyun Kim Mon, 15 Mar 2010 19:31:12 +0900 + +indicator-win (0.1.0-17) unstable; urgency=low + + * upload pkg again + + -- Sohyun Kim Mon, 15 Mar 2010 14:41:40 +0900 + +indicator-win (0.1.0-16) unstable; urgency=low + + * add call diverting noti + + -- Sohyun Kim Tue, 09 Mar 2010 14:48:41 +0900 + +indicator-win (0.1.0-15) unstable; urgency=low + + * bug fix regarding zone + + -- Sohyun Kim Mon, 08 Mar 2010 13:18:41 +0900 + +indicator-win (0.1.0-14) unstable; urgency=low + + * add client event for quickpanel hiding + + -- Sohyun Kim Fri, 05 Mar 2010 19:50:24 +0900 + +indicator-win (0.1.0-13) unstable; urgency=low + + * remove browser noti. it will be changed to dnet noti + + -- Sohyun Kim Fri, 05 Mar 2010 14:54:41 +0900 + +indicator-win (0.1.0-12) unstable; urgency=low + + * bug fix about message blinking (manage count) + + -- Sohyun Kim Thu, 04 Mar 2010 18:14:24 +0900 + +indicator-win (0.1.0-11) unstable; urgency=low + + * calculate ELM_SCALE value + + -- Sohyun Kim Thu, 04 Mar 2010 16:48:48 +0900 + +indicator-win (0.1.0-10) unstable; urgency=low + + * icon duplicated problem + + -- Sohyun Kim Thu, 04 Mar 2010 15:08:00 +0900 + +indicator-win (0.1.0-9) unstable; urgency=low + + * merge indicator daemon + + -- Sohyun Kim Wed, 03 Mar 2010 15:28:58 +0900 + +indicator-win (0.1.0-8) unstable; urgency=low + + * add missed call icon + + -- Sohyun Kim Tue, 02 Mar 2010 19:20:35 +0900 + +indicator-win (0.1.0-7) unstable; urgency=low + + * add missed call + + -- Sohyun Kim Tue, 02 Mar 2010 19:11:25 +0900 + +indicator-win (0.1.0-6) unstable; urgency=low + + * add sns, video call, wifi transfer + + -- Sohyun Kim Tue, 02 Mar 2010 16:06:47 +0900 + +indicator-win (0.1.0-5) unstable; urgency=low + + * add im, low battery noti + + -- Sohyun Kim Tue, 23 Feb 2010 22:14:07 +0900 + +indicator-win (0.1.0-4) unstable; urgency=low + + * change indicator height + + -- Sohyun Kim Tue, 23 Feb 2010 20:16:20 +0900 + +indicator-win (0.1.0-3) unstable; urgency=low + + * add desktop file installation + + -- Sohyun Kim Tue, 23 Feb 2010 16:12:48 +0900 + +indicator-win (0.1.0-2) unstable; urgency=low + + * remove installation + + -- Sohyun Kim Tue, 23 Feb 2010 15:18:26 +0900 + +indicator-win (0.1.0-1) unstable; urgency=low + + * add indicator.desktop + + -- Sohyun Kim Tue, 23 Feb 2010 14:11:14 +0900 + +indicator-win (0.1.0) unstable; urgency=low + + * Initial Release. + + -- Sohyun Kim Sat, 14 Nov 2009 17:25:47 +0900 diff --git a/debian/compat b/debian/compat new file mode 100755 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100755 index 0000000..626bff5 --- /dev/null +++ b/debian/control @@ -0,0 +1,20 @@ +Source: indicator +Section: devel +Priority: extra +Maintainer: Jeonghoon Park , Youngjoo Park +Uploaders: Jeonghoon Park +Build-Depends: debhelper (>= 5), libappcore-efl-dev, libelm-dev, libdbus-1-dev, libheynoti-dev, libslp-setting-dev, dlog-dev, libprivilege-control-dev, libnotification-dev, libslp-utilx-dev, libstatus-dev +Standards-Version: 0.1.0 + +Package: org.tizen.indicator +Section: utils +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, libslp-setting-0 +Description: indicator window + +Package: org.tizen.indicator-dbg +Section: debug +Architecture: any +Depends: org.tizen.indicator (= ${Source-Version}) +Description: indicator window (unstripped) + diff --git a/debian/dirs b/debian/dirs new file mode 100755 index 0000000..ca882bb --- /dev/null +++ b/debian/dirs @@ -0,0 +1,2 @@ +usr/bin +usr/sbin diff --git a/debian/org.tizen.indicator.install.in b/debian/org.tizen.indicator.install.in new file mode 100755 index 0000000..d112ff8 --- /dev/null +++ b/debian/org.tizen.indicator.install.in @@ -0,0 +1,7 @@ +@PREFIX@/bin/* +@PREFIX@/res/locale/* +@PREFIX@/res/icons/* +@PREFIX@/res/edje/* +@PREFIX@/data +/usr/share/applications/* +/etc/init.d/* diff --git a/debian/org.tizen.indicator.postinst.in b/debian/org.tizen.indicator.postinst.in new file mode 100755 index 0000000..e64e395 --- /dev/null +++ b/debian/org.tizen.indicator.postinst.in @@ -0,0 +1,16 @@ +#!/bin/sh + +if [ ${USER} = "root" ] +then + vconftool set -t int memory/radio/state 0 -i -g 6518 + vconftool set -t int memory/music/state 0 -i -g 6518 + vconftool set -t int memory/private/@VENDOR@.@PROJECT_NAME@/home_pressed 0 -i -g 6518 + chown -R 5000:5000 @PREFIX@/data +fi + +chmod 755 /etc/init.d/indicator +mkdir -p /etc/rc.d/rc5.d/ +mkdir -p /etc/rc.d/rc3.d/ +ln -sf /etc/init.d/indicator /etc/rc.d/rc5.d/S01indicator +ln -sf /etc/init.d/indicator /etc/rc.d/rc3.d/S44indicator + diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..fd8fd39 --- /dev/null +++ b/debian/rules @@ -0,0 +1,123 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +CFLAGS ?= -Wall -g +CXXFLAGS ?= -Wall -g +LDFLAGS ?= +VENDOR ?= tizen +PROJECT_NAME ?= indicator +PREFIX ?= /usr/apps/org.$(VENDOR).$(PROJECT_NAME) +PREFIXRW ?= /opt/apps/org.$(VENDOR).$(PROJECT_NAME) +RESDIR ?= $(PREFIX)/res +DATADIR ?= $(PREFIXRW)/data + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 + CXXFLAGS += -O0 +else + CFLAGS += -O2 + CXXFLAGS += -O2 +endif + +LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed + +CMAKE_BUILD_DIR ?= $(CURDIR)/cmake_build_tmp + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + mkdir -p $(CMAKE_BUILD_DIR) && cd $(CMAKE_BUILD_DIR) && \ + CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX=$(PREFIX) -DCMAKE_INSTALL_PREFIXRW=$(PREFIXRW) + + touch configure-stamp + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commans to compile the package. + cd $(CMAKE_BUILD_DIR) && $(MAKE) + #docbook-to-man debian/wavplayer.sgml > wavplayer.1 + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + cat $$f > $${f%.in}; \ + sed -i -e "s#@VENDOR@#$(VENDOR)#g" $${f%.in}; \ + sed -i -e "s#@PROJECT_NAME@#$(PROJECT_NAME)#g" $${f%.in}; \ + sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \ + sed -i -e "s#@RESDIR@#$(RESDIR)#g" $${f%.in}; \ + sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \ + done + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + rm -rf $(CMAKE_BUILD_DIR) + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + rm -f $${f%.in}; \ + done + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/wavplayer. + cd $(CMAKE_BUILD_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs +# dh_installdocs + dh_installexamples + dh_install --sourcedir=debian/tmp +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link +# dh_strip + dh_strip --dbg-package=org.tizen.indicator-dbg + dh_compress + dh_fixperms +# dh_perl + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/modules/clock/clock.c b/modules/clock/clock.c new file mode 100755 index 0000000..2db5f43 --- /dev/null +++ b/modules/clock/clock.c @@ -0,0 +1,637 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "indicator_gui.h" +#include "indicator_icon_util.h" +#include "indicator_util.h" +#include "modules.h" + +#define SYSTEM_RESUME "system_wakeup" + +#define TIME_FONT_SIZE_24 40 +#define TIME_FONT_SIZE_12 36 +#define TIME_FONT_SIZE_BATTERY 32 +#define TIME_FONT_COLOR 200, 200, 200, 255 + +#define AMPM_FONT_SIZE 28 +#define AMPM_FONT_COLOR 200, 200, 200, 255 +#define LABEL_STRING "%s" \ + "" + +#define BATTERY_TIMER_INTERVAL 3 +#define BATTERY_TIMER_INTERVAL_CHARGING 30 + +#define CLOCK_STR_LEN 256 + +enum { + INDICATOR_CLOCK_MODE_12H = 0, + INDICATOR_CLOCK_MODE_24H, + INDICATOR_CLOCK_MODE_MAX +}; + +static int notifd; +static int clock_mode = INDICATOR_CLOCK_MODE_12H; +static int apm_length = 0; +static int apm_position = 0; +static Ecore_Timer *timer = NULL; +static Ecore_Timer *battery_timer = NULL; +static Ecore_Timer *battery_charging_timer = NULL; +static int battery_charging = 0; +static int battery_charging_first = 0; + +static int register_clock_module(void *data); +static int unregister_clock_module(void); +static int language_changed_cb(void *data); +static int region_changed_cb(void *data); +static int wake_up_cb(void *data); +static int register_clock_tts(void *data,int win_type); + + +#define ICON_PRIORITY INDICATOR_PRIORITY_FIXED6 +#define MODULE_NAME "clock" + +static void indicator_get_time_by_region(char* output, void* data); +static void ICU_set_timezone(const char *timezone); +static void indicator_clock_display_battery_percentage(void *data,int win_type ); + +Indicator_Icon_Object sysclock[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_TXT_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .init = register_clock_module, + .fini = unregister_clock_module, + .lang_changed = NULL, + .region_changed = region_changed_cb, + .lang_changed = language_changed_cb, + .wake_up = wake_up_cb, +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_TXT_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .init = register_clock_module, + .fini = unregister_clock_module, + .lang_changed = NULL, + .region_changed = region_changed_cb, + .lang_changed = language_changed_cb, + .wake_up = wake_up_cb, +} +}; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; itm_sec, (void *)indicator_clock_changed_cb, + data); + + indicator_get_time_by_region(icu_apm,data); + + if (clock_mode == INDICATOR_CLOCK_MODE_12H) { + char bf1[32] = { 0, }; + int hour; + + int bRegioncheck = 0; + char *lang1 = "it_IT"; + + const char *region = vconf_get_str(VCONFKEY_REGIONFORMAT); + if(strncmp(region,lang1,strlen(lang1))==0) + { + bRegioncheck = 1; + } + + if(apm_length>=4 || bRegioncheck==1) + { + if (ts->tm_hour >= 0 && ts->tm_hour < 12) + snprintf(ampm_buf, sizeof(ampm_buf), LABEL_STRING, AMPM_FONT_SIZE,"AM"); + else + snprintf(ampm_buf, sizeof(ampm_buf), LABEL_STRING, AMPM_FONT_SIZE,"PM"); + } + else + { + snprintf(ampm_buf, sizeof(ampm_buf),LABEL_STRING, AMPM_FONT_SIZE,icu_apm); + } + + strftime(bf1, sizeof(bf1), "%l", ts); + hour = atoi(bf1); + strftime(bf1, sizeof(bf1), ":%M", ts); + + snprintf(time_str, sizeof(time_str), "%d%s", hour, bf1); + font_size = TIME_FONT_SIZE_12; + + } + else{ + font_size = TIME_FONT_SIZE_24; + strftime(time_str, sizeof(time_str), "%H:%M", ts); + } + + snprintf(time_buf, sizeof(time_buf), LABEL_STRING, font_size, time_str); + + if(apm_position == 0) + len = snprintf(buf, sizeof(buf), "%s%s", ampm_buf, time_buf); + else + len = snprintf(buf, sizeof(buf), "%s%s", time_buf, ampm_buf); + + if (len < 0) { + ERR("Unexpected ERROR!"); + return; + } + + DBG("[CLOCK MODULE] Timer Status : %d Time: %s", timer, buf); + + indicator_part_text_emit(data,"elm.text.clock", buf); + + return; +} + +static void indicator_clock_format_changed_cb(keynode_t *node, void *data) +{ + retif(data == NULL, , "Invalid parameter!"); + + int r = -1; + + bool is_24hour_enabled = false; + + DBG("[Enter] indicator_clock_format_changed_cb"); + + r = runtime_info_get_value_bool( + RUNTIME_INFO_KEY_24HOUR_CLOCK_FORMAT_ENABLED, &is_24hour_enabled); + + if( r==RUNTIME_INFO_ERROR_NONE&&is_24hour_enabled==true) + { + clock_mode = INDICATOR_CLOCK_MODE_24H; + } + else + { + clock_mode = INDICATOR_CLOCK_MODE_12H; + } + + char *timezone = indicator_util_get_timezone_str(); + ICU_set_timezone(timezone); + indicator_clock_changed_cb(data); + if(timezone!=NULL) + free(timezone); +} + +static void indicator_clock_pm_state_change_cb(keynode_t *node, void *data) +{ + int status = 0; + + retif(data == NULL, , "Invalid parameter!"); + + vconf_get_int(VCONFKEY_PM_STATE, &status); + + switch(status) + { + case VCONFKEY_PM_STATE_LCDOFF: + if (timer != NULL) { + ecore_timer_del(timer); + timer = NULL; + } + + if (battery_timer != NULL) { + ecore_timer_del(battery_timer); + battery_timer = NULL; + } + + if (battery_charging_timer != NULL) { + ecore_timer_del(battery_charging_timer); + battery_charging_timer = NULL; + } + break; + default: + break; + } + +} + +static void indicator_clock_battery_display_cb(void *data) +{ + INFO("indicator_clock_battery_display_cb"); + + if (battery_timer != NULL) { + ecore_timer_del(battery_timer); + battery_timer = NULL; + } + + indicator_clock_changed_cb(data); +} + + +static void indicator_clock_battery_charging_stop_cb(void *data) +{ + + INFO("indicator_clock_battery_charging_stop_cb"); + + if (battery_charging_timer != NULL) { + ecore_timer_del(battery_charging_timer); + battery_charging_timer = NULL; + } + + indicator_clock_changed_cb(data); +} + +static void indicator_clock_charging_now_cb(keynode_t *node, void *data) +{ + int status = 0; + int lock_state = 0; + + retif(data == NULL, , "Invalid parameter!"); + + vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &lock_state); + + vconf_get_int(VCONFKEY_SYSMAN_CHARGER_STATUS, &status); + + battery_charging = status; + + +} + +static void indicator_clock_usb_cb(keynode_t *node, void *data) +{ + int status = 0; + + retif(data == NULL, , "Invalid parameter!"); + + vconf_get_int(VCONFKEY_SYSMAN_USB_STATUS, &status); + + DBG("indicator_clock_usb_cb(%d)",status); + + if(status==VCONFKEY_SYSMAN_USB_DISCONNECTED) + { + battery_charging_first = 0; + if (battery_charging_timer != NULL) + { + ecore_timer_del(battery_charging_timer); + battery_charging_timer = NULL; + } + indicator_clock_changed_cb(data); + } + +} + +static void indicator_clock_display_battery_percentage(void *data,int win_type ) +{ + int ret = FAIL; + int battery_capa = 0; + char buf[256] = {0,}; + char temp[256] = {0,}; + struct appdata *ad = (struct appdata *)data; + + ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CAPACITY, &battery_capa); + if (ret != OK) + { + return; + } + if (battery_capa < 0) + { + return; + } + + if (battery_capa > 100) + battery_capa = 100; + + snprintf(temp, sizeof(temp), "%d%%",battery_capa); + + snprintf(buf, sizeof(buf), LABEL_STRING, TIME_FONT_SIZE_BATTERY, temp); + + indicator_part_text_emit_by_win(&(ad->win[win_type]),"elm.text.clock", buf); + +} + + +static int language_changed_cb(void *data) +{ + const char *pa_lang = vconf_get_str(VCONFKEY_LANGSET); + DBG("language_changed_cb %s",pa_lang); + indicator_clock_changed_cb(data); + return OK; +} + +static int region_changed_cb(void *data) +{ + DBG("region_changed_cb"); + indicator_clock_format_changed_cb(NULL, data); + return OK; +} + +static int wake_up_cb(void *data) +{ + int status = 0; + int lock_type = 0; + + INFO("CLOCK wake_up_cb"); + + indicator_clock_changed_cb(data); + + return OK; +} + +static void time_changed(keynode_t *node, void *data) +{ + DBG("time_changed"); + indicator_clock_format_changed_cb(NULL,data); +} + +static void regionformat_changed(keynode_t *node, void *data) +{ + DBG("regionformat_changed"); + indicator_clock_format_changed_cb(NULL,data); +} + +static void timezone_int_changed(keynode_t *node, void *data) +{ + DBG("timezone_int_changed"); + indicator_clock_format_changed_cb(NULL,data); +} + +static void timezone_id_changed(keynode_t *node, void *data) +{ + char *szTimezone = NULL; + szTimezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID); + + DBG("timezone_id_changed %s",szTimezone); + indicator_clock_format_changed_cb(NULL,data); +} + + +static int register_clock_module(void *data) +{ + int r = 0, ret = -1; + + retif(data == NULL, FAIL, "Invalid parameter!"); + + set_app_state(data); + + ret = vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, + time_changed, data); + if (ret != OK) { + r = r | ret; + } + + ret = vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, + regionformat_changed, data); + if (ret != OK) { + r = r | ret; + } + + ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_TIMEZONE_INT, + timezone_int_changed, data); + if (ret != OK) { + r = r | ret; + } + + ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_TIMEZONE_ID, + timezone_id_changed, data); + if (ret != OK) { + r = r | ret; + } + + ret = vconf_notify_key_changed(VCONFKEY_REGIONFORMAT, + regionformat_changed, data); + if (ret != OK) { + r = r | ret; + } + + ret = vconf_notify_key_changed(VCONFKEY_PM_STATE, indicator_clock_pm_state_change_cb, (void *)data); + + if (ret != OK) { + r = r | ret; + } + + + indicator_clock_format_changed_cb(NULL, data); + indicator_clock_charging_now_cb(NULL,data); + + return r; +} + +static int unregister_clock_module(void) +{ + int ret; + + ret = vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, + time_changed); + + ret = vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, + regionformat_changed); + + ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_TIMEZONE_INT, + timezone_int_changed); + + ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_TIMEZONE_ID, + timezone_id_changed); + + ret = vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT, + regionformat_changed); + + ret = vconf_ignore_key_changed(VCONFKEY_PM_STATE, + indicator_clock_pm_state_change_cb); + + if (timer != NULL) { + ecore_timer_del(timer); + timer = NULL; + } + + if (battery_timer != NULL) { + ecore_timer_del(battery_timer); + battery_timer = NULL; + } + + if (battery_charging_timer != NULL) { + ecore_timer_del(battery_charging_timer); + battery_charging_timer = NULL; + } + + return OK; +} + +void indicator_get_time_by_region(char* output,void *data) +{ + retif(data == NULL, , "Data parameter is NULL"); + retif(output == NULL, , "output parameter is NULL"); + + + UChar customSkeleton[CLOCK_STR_LEN] = { 0, }; + UErrorCode status = U_ZERO_ERROR; + UDateFormat *formatter = NULL; + + UChar bestPattern[CLOCK_STR_LEN] = { 0, }; + UChar formatted[CLOCK_STR_LEN] = { 0, }; + + char bestPatternString[CLOCK_STR_LEN] = { 0, }; + char formattedString[CLOCK_STR_LEN] = { 0, }; + + UDateTimePatternGenerator *pattern_generator = NULL; + + char *time_skeleton = "hhmm"; + + char *locale = vconf_get_str(VCONFKEY_REGIONFORMAT); + if (locale == NULL) { + DBG("[Error] get value of fail."); + } + + u_uastrncpy(customSkeleton, time_skeleton, strlen(time_skeleton)); + + pattern_generator = udatpg_open(locale, &status); + + int32_t bestPatternCapacity = (int32_t) (sizeof(bestPattern) / sizeof((bestPattern)[0])); + (void)udatpg_getBestPattern(pattern_generator, customSkeleton, + u_strlen(customSkeleton), bestPattern, + bestPatternCapacity, &status); + + u_austrcpy(bestPatternString, bestPattern); + u_uastrcpy(bestPattern,"a"); + + DBG("BestPattern is %s", bestPatternString); + if(bestPatternString[0] == 'a') + { + apm_position = 0; + } + else + { + apm_position = 1; + } + + UDate date = ucal_getNow(); + formatter = udat_open(UDAT_IGNORE, UDAT_IGNORE, locale, NULL, -1, bestPattern, -1, &status); + int32_t formattedCapacity = (int32_t) (sizeof(formatted) / sizeof((formatted)[0])); + (void)udat_format(formatter, date, formatted, formattedCapacity, NULL, &status); + u_austrcpy(formattedString, formatted); + + DBG("DATE & TIME is %s %s %d %s", locale, formattedString, u_strlen(formatted), bestPatternString); + + apm_length = u_strlen(formatted); + + udatpg_close(pattern_generator); + + udat_close(formatter); + + if(strlen(formattedString) +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "modules.h" +#include "indicator_ui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_FIXED2 +#define MODULE_NAME "connection" +#define TIMER_INTERVAL 0.3 + +static int register_conn_module(void *data); +static int unregister_conn_module(void); +static int wake_up_cb(void *data); +extern void show_transfer_icon(void *data,int index,int type); +extern void hide_transfer_icon(int type); + + +Indicator_Icon_Object conn[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .area = INDICATOR_ICON_AREA_FIXED, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .init = register_conn_module, + .fini = unregister_conn_module, + .wake_up = wake_up_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .area = INDICATOR_ICON_AREA_FIXED, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .init = register_conn_module, + .fini = unregister_conn_module, + .wake_up = wake_up_cb +} +}; + +enum { + LEVEL_MIN = 0, + LEVEL_2G = LEVEL_MIN, + LEVEL_EDGE, + LEVEL_3G, + LEVEL_H, + LEVEL_H_PLUS, + LEVEL_3G_PLUS, + LEVEL_LTE, + LEVEL_4G, + LEVEL_MAX +}; + +static const char *icon_path[LEVEL_MAX] = { + [LEVEL_2G] = "Connection/B03_connection_G.png", + [LEVEL_EDGE] = "Connection/B03_connection_E.png", + [LEVEL_3G] = "Connection/B03_connection_3G.png", + [LEVEL_H] = "Connection/B03_connection_H.png", + [LEVEL_H_PLUS] = "Connection/B03_connection_H+.png", + [LEVEL_3G_PLUS] = "Connection/B03_connection_3G+.png", + [LEVEL_LTE] = "Connection/B03_connection_LTE.png", + [LEVEL_4G] = "Connection/B03_connection_4G.png", +}; + +static int updated_while_lcd_off = 0; +static int prevIndex = -1; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "modules.h" +#include "indicator_ui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_2 +#define MODULE_NAME "mobile_hotspot" + +static int register_mobile_hotspot_module(void *data); +static int unregister_mobile_hotspot_module(void); +static int wake_up_cb(void *data); + +Indicator_Icon_Object mobile_hotspot[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_mobile_hotspot_module, + .fini = unregister_mobile_hotspot_module, + .wake_up = wake_up_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_mobile_hotspot_module, + .fini = unregister_mobile_hotspot_module, + .wake_up = wake_up_cb +} + +}; + +enum { + MOBILEAP_ON_NOT_CONNECTED = 0, + MOBILEAP_CONNECTED_MIN = MOBILEAP_ON_NOT_CONNECTED, + MOBILEAP_CONNECTED1, + MOBILEAP_CONNECTED2, + MOBILEAP_CONNECTED3, + MOBILEAP_CONNECTED4, + MOBILEAP_CONNECTED5, + MOBILEAP_CONNECTED6, + MOBILEAP_CONNECTED7, + MOBILEAP_CONNECTED8, + MOBILEAP_CONNECTED9, + MOBILEAP_CONNECTED10, + MOBILEAP_CONNECTED11, + MOBILEAP_CONNECTED12, + MOBILEAP_CONNECTED13, + MOBILEAP_CONNECTED14, + MOBILEAP_CONNECTED15, + MOBILEAP_CONNECTED16, + MOBILEAP_CONNECTED17, + MOBILEAP_CONNECTED18, + MOBILEAP_MAX, +}; + +static const char *icon_path[MOBILEAP_MAX] = { + [MOBILEAP_ON_NOT_CONNECTED] = + "Connection/B03_MobileAP_on¬ connected.png", + [MOBILEAP_CONNECTED1] = "Connection/B03_MobileAP_connected_01.png", + [MOBILEAP_CONNECTED2] = "Connection/B03_MobileAP_connected_02.png", + [MOBILEAP_CONNECTED3] = "Connection/B03_MobileAP_connected_03.png", + [MOBILEAP_CONNECTED4] = "Connection/B03_MobileAP_connected_04.png", + [MOBILEAP_CONNECTED5] = "Connection/B03_MobileAP_connected_05.png", + [MOBILEAP_CONNECTED6] = "Connection/B03_MobileAP_connected_06.png", + [MOBILEAP_CONNECTED7] = "Connection/B03_MobileAP_connected_07.png", + [MOBILEAP_CONNECTED8] = "Connection/B03_MobileAP_connected_08.png", + [MOBILEAP_CONNECTED9] = "Connection/B03_MobileAP_connected_09.png", + [MOBILEAP_CONNECTED10] = "Connection/B03_MobileAP_connected_10.png", + [MOBILEAP_CONNECTED11] = "Connection/B03_MobileAP_connected_11.png", + [MOBILEAP_CONNECTED12] = "Connection/B03_MobileAP_connected_12.png", + [MOBILEAP_CONNECTED13] = "Connection/B03_MobileAP_connected_13.png", + [MOBILEAP_CONNECTED14] = "Connection/B03_MobileAP_connected_14.png", + [MOBILEAP_CONNECTED15] = "Connection/B03_MobileAP_connected_15.png", + [MOBILEAP_CONNECTED16] = "Connection/B03_MobileAP_connected_16.png", + [MOBILEAP_CONNECTED17] = "Connection/B03_MobileAP_connected_17.png", + [MOBILEAP_CONNECTED18] = "Connection/B03_MobileAP_connected_18.png", + /* "Connection/B03_MobileAP_connected.png", */ +}; +static int updated_while_lcd_off = 0; +static int prevIndex = -1; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i= MOBILEAP_MAX) { + ERR("unable to handle %d connected devices ", + connected_device); + icon_index = MOBILEAP_CONNECTED9; + } + show_image_icon(icon_index); + } + else + { + show_image_icon(MOBILEAP_ON_NOT_CONNECTED); + } + return; + } + else + { + hide_image_icon(); + return; + } + } + + hide_image_icon(); + return; +} + +static int wake_up_cb(void *data) +{ + if(updated_while_lcd_off==0) + { + return OK; + } + + indicator_mobile_hotspot_change_cb(NULL, data); + return OK; +} + +static int register_mobile_hotspot_module(void *data) +{ + int r = 0, ret = -1; + + retif(data == NULL, FAIL, "Invalid parameter!"); + + set_app_state(data); + + ret = vconf_notify_key_changed(VCONFKEY_MOBILE_HOTSPOT_MODE, + indicator_mobile_hotspot_change_cb, data); + if (ret != OK) { + r = r | ret; + } + + ret = vconf_notify_key_changed(VCONFKEY_MOBILE_HOTSPOT_CONNECTED_DEVICE, + indicator_mobile_hotspot_change_cb, data); + if (ret != OK) { + r = r | ret; + } + + indicator_mobile_hotspot_change_cb(NULL, data); + + return r; +} + +static int unregister_mobile_hotspot_module(void) +{ + int ret; + + ret = vconf_ignore_key_changed(VCONFKEY_MOBILE_HOTSPOT_MODE, + indicator_mobile_hotspot_change_cb); + + ret = vconf_ignore_key_changed(VCONFKEY_MOBILE_HOTSPOT_CONNECTED_DEVICE, + indicator_mobile_hotspot_change_cb); + + return OK; +} diff --git a/modules/connection/usb.c b/modules/connection/usb.c new file mode 100755 index 0000000..0d48b73 --- /dev/null +++ b/modules/connection/usb.c @@ -0,0 +1,181 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "modules.h" +#include "indicator_ui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_2 +#define MODULE_NAME "usb" +#define TIMER_INTERVAL 0.3 + +static int register_usb_module(void *data); +static int unregister_usb_module(void); + +Indicator_Icon_Object usb[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .init = register_usb_module, + .fini = unregister_usb_module +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .init = register_usb_module, + .fini = unregister_usb_module +} +}; + +static const char *icon_path[] = { + "USB tethering/B03_USB.png", + NULL +}; + +static int bShown = 0; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i= VCONFKEY_SYSMAN_USB_CONNECTED) { + DBG("indicator_usb_change_cb : CONNECTION USB Status: %d", status); + show_image_icon(); + return; + } + else + { + ret = vconf_get_int(VCONFKEY_SYSMAN_USB_HOST_STATUS, &status); + if (ret == OK) { + if (status >= VCONFKEY_SYSMAN_USB_HOST_CONNECTED) { + DBG("indicator_usb_change_cb : Host USB Status: %d", status); + show_image_icon(); + return; + } else + hide_image_icon(); + } + } + } + + return; +} + +static int register_usb_module(void *data) +{ + int r = 0, ret = -1; + + retif(data == NULL, FAIL, "Invalid parameter!"); + + set_app_state(data); + + ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_USB_STATUS, + indicator_usb_change_cb, data); + if (ret != OK) + { + r = ret; + } + + + ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_USB_HOST_STATUS, + indicator_usb_change_cb, data); + if (ret != OK) + { + r = r|ret; + } + + + indicator_usb_change_cb(NULL, data); + + return r; +} + +static int unregister_usb_module(void) +{ + int ret; + + ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_USB_STATUS, + indicator_usb_change_cb); + + ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_USB_HOST_STATUS, + indicator_usb_change_cb); + + return OK; +} diff --git a/modules/connection/wifi.c b/modules/connection/wifi.c new file mode 100755 index 0000000..af5755e --- /dev/null +++ b/modules/connection/wifi.c @@ -0,0 +1,290 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "modules.h" +#include "indicator_ui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_FIXED2 +#define MODULE_NAME "wifi" +#define TIMER_INTERVAL 0.3 + +static int register_wifi_module(void *data); +static int unregister_wifi_module(void); +static int wake_up_cb(void *data); +extern void show_transfer_icon(void *data,int index,int type); +extern void hide_transfer_icon(int type); + + +Indicator_Icon_Object wifi[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_FIXED, + .init = register_wifi_module, + .fini = unregister_wifi_module, + .wake_up = wake_up_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_FIXED, + .init = register_wifi_module, + .fini = unregister_wifi_module, + .wake_up = wake_up_cb +} +}; + +enum { + LEVEL_WIFI_01 = 0, + LEVEL_WIFI_02, + LEVEL_WIFI_03, + LEVEL_WIFI_04, + LEVEL_WIFI_MAX +}; + +static const char *icon_path[LEVEL_WIFI_MAX] = { + [LEVEL_WIFI_01] = "Connection/B03_data_downloading_Wifi_01.png", + [LEVEL_WIFI_02] = "Connection/B03_data_downloading_Wifi_02.png", + [LEVEL_WIFI_03] = "Connection/B03_data_downloading_Wifi_03.png", + [LEVEL_WIFI_04] = "Connection/B03_data_downloading_Wifi_04.png", +}; + +static Eina_Bool wifi_transferring = EINA_FALSE; +static int updated_while_lcd_off = 0; +static int prevIndex = -1; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i VCONFKEY_WIFI_STRENGTH_MAX) + { + strength = VCONFKEY_WIFI_STRENGTH_MAX; + } + } else + strength = VCONFKEY_WIFI_STRENGTH_MAX; + + if (strength <= 0) + strength = 1; + + ret = vconf_get_int(VCONFKEY_WIFI_STATE, &status); + if (ret == OK) + { + DBG("CONNECTION WiFi Status: %d", status); + switch(status) + { + case VCONFKEY_WIFI_CONNECTED: + show_wifi_transfer_icon(data); + show_image_icon(data,strength-1); + break; + default: + hide_image_icon(); + break; + } + } + return; +} + +static void indicator_wifi_state_change_cb(keynode_t *node, void *data) +{ + indicator_wifi_change_cb(node,data); +} + +static void indicator_wifi_strength_change_cb(keynode_t *node, void *data) +{ + indicator_wifi_change_cb(node,data); +} + +static void indicator_wifi_transfer_change_cb(keynode_t *node, void *data) +{ + indicator_wifi_change_cb(node,data); +} + +static int wake_up_cb(void *data) +{ + if(updated_while_lcd_off==0) + { + return OK; + } + + indicator_wifi_change_cb(NULL, data); + return OK; +} + +static int register_wifi_module(void *data) +{ + int r = 0, ret = -1; + + retif(data == NULL, FAIL, "Invalid parameter!"); + + set_app_state(data); + + ret = vconf_notify_key_changed(VCONFKEY_WIFI_STATE, + indicator_wifi_state_change_cb, data); + if (ret != OK) { + r = ret; + } + + ret = vconf_notify_key_changed(VCONFKEY_WIFI_STRENGTH, + indicator_wifi_strength_change_cb, data); + if (ret != OK) { + r = r | ret; + } + +/* ret = vconf_notify_key_changed(VCONFKEY_WIFI_TRANSFER_STATE, + indicator_wifi_transfer_change_cb, data); + if (ret != OK) { + r = ret; + } +*/ + indicator_wifi_change_cb(NULL, data); + + return r; +} + +static int unregister_wifi_module(void) +{ + int ret; + + ret = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE, + indicator_wifi_state_change_cb); + + ret = vconf_ignore_key_changed(VCONFKEY_WIFI_STRENGTH, + indicator_wifi_strength_change_cb); + +/* ret = vconf_ignore_key_changed(VCONFKEY_WIFI_TRANSFER_STATE, + indicator_wifi_transfer_change_cb);*/ + + if (wifi_transferring == EINA_TRUE) { + wifi_transferring = EINA_FALSE; + } + + return OK; +} diff --git a/modules/information/alarm.c b/modules/information/alarm.c new file mode 100755 index 0000000..876437c --- /dev/null +++ b/modules/information/alarm.c @@ -0,0 +1,159 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include +#include +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "modules.h" +#include "indicator_icon_util.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_SYSTEM_3 +#define MODULE_NAME "alarm" + +static int bShown = 0; +static int register_alarm_module(void *data); +static int unregister_alarm_module(void); + +Indicator_Icon_Object useralarm[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_SYSTEM, + .init = register_alarm_module, + .fini = unregister_alarm_module, +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_SYSTEM, + .init = register_alarm_module, + .fini = unregister_alarm_module, +} + +}; + +static char *icon_path[] = { + "Alarm/B03_Alarm.png", + NULL +}; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i 0) { + DBG("ALARM COUNT: %d", status); + show_image_icon(data); + return; + } + DBG("ALARM COUNT: %d", status); + hide_image_icon(); + return; + } + ERR("Failed to get alarm count!"); + return; +} + +static int register_alarm_module(void *data) +{ + int ret; + + retif(data == NULL, FAIL, "Invalid parameter!"); + + set_app_state(data); +// alarmdb_init(NULL); +// alarmdb_check_passed_alarm_list(); +// alarmdb_fini(); + + ret = vconf_notify_key_changed(VCONFKEY_ALARM_STATE, + indicator_alarm_change_cb, data); + + indicator_alarm_change_cb(NULL, data); + + return ret; +} + +static int unregister_alarm_module(void) +{ + int ret; + + ret = vconf_ignore_key_changed(VCONFKEY_ALARM_STATE, + indicator_alarm_change_cb); + + return OK; +} diff --git a/modules/information/earphone.c b/modules/information/earphone.c new file mode 100755 index 0000000..f0ae498 --- /dev/null +++ b/modules/information/earphone.c @@ -0,0 +1,184 @@ +/* + * indicator + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Junghyun Kim Kangwon Lee + * + * 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 +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "modules.h" +#include "indicator_icon_util.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_2 +#define MODULE_NAME "earphone" +#define TIMER_INTERVAL 0.3 + +static int register_earphone_module(void *data); +static int unregister_earphone_module(void); +static int wake_up_cb(void *data); + +Indicator_Icon_Object earphone[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_earphone_module, + .fini = unregister_earphone_module, + .wake_up = wake_up_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_earphone_module, + .fini = unregister_earphone_module, + .wake_up = wake_up_cb +} + +}; + +static const char *icon_path[] = { + "Earphone/B03_BT_Headset.png", + NULL +}; +static int updated_while_lcd_off = 0; +static int bShown = 0; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "modules.h" +#include "indicator_icon_util.h" +#include + +#define BUS_NAME "org.tizen.system.deviced" +#define PATH_NAME "/Org/Tizen/System/DeviceD/Lowmem" +#define INTERFACE_NAME BUS_NAME".lowmem" +#define MEMBER_NAME "ChangeState" + +E_DBus_Connection *edbus_conn=NULL; +E_DBus_Signal_Handler *edbus_handler=NULL; + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_2 +#define MODULE_NAME "lowmem" +#define TIMER_INTERVAL 0.3 + +static int register_lowmem_module(void *data); +static int unregister_lowmem_module(void); +static int wake_up_cb(void *data); + +Indicator_Icon_Object lowmem[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_lowmem_module, + .fini = unregister_lowmem_module, + .wake_up = wake_up_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_lowmem_module, + .fini = unregister_lowmem_module, + .wake_up = wake_up_cb +} + +}; + +static const char *icon_path[] = { + "Storage/B03_storage_memoryfull.png", + NULL +}; +static int updated_while_lcd_off = 0; +static int bShown = 0; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "modules.h" +#include "indicator_icon_util.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_2 +#define MODULE_NAME "mmc" +#define TIMER_INTERVAL 0.3 + +static int register_mmc_module(void *data); +static int unregister_mmc_module(void); +static int wake_up_cb(void *data); + +Indicator_Icon_Object mmc[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_mmc_module, + .fini = unregister_mmc_module, + .wake_up = wake_up_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_mmc_module, + .fini = unregister_mmc_module, + .wake_up = wake_up_cb +} + +}; + +static const char *icon_path[] = { + "Storage/B03_storage_t_flash.png", + NULL +}; +static int updated_while_lcd_off = 0; +static int bShown = 0; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "modules.h" +#include "indicator_ui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_1 +#define MODULE_NAME "MP3_PLAY" +#define MINICONTROL_NAME "[musicplayer-mini]" + +static int register_mp3_play_module(void *data); +static int unregister_mp3_play_module(void); +static int mctrl_monitor_cb(int action, const char *name, void *data); +static int wake_up_cb(void *data); + +static int mp_registerd = 0; +static int updated_while_lcd_off = 0; + + +Indicator_Icon_Object mp3_play[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_TRUE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_mp3_play_module, + .fini = unregister_mp3_play_module, + .minictrl_control = mctrl_monitor_cb, + .wake_up = wake_up_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_TRUE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_mp3_play_module, + .fini = unregister_mp3_play_module, + .minictrl_control = mctrl_monitor_cb, + .wake_up = wake_up_cb +} +}; + +enum { + MUSIC_PLAY, + MUSIC_PAUSED, +}; + +static char *icon_path[] = { + "Background playing/B03_Backgroundplaying_MP3playing.png", + "Background playing/B03_Backgroundplaying_Music_paused.png", + NULL +}; + +static int prevIndex = -1; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "indicator_ui.h" +#include "indicator_icon_list.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_2 +#define MODULE_NAME "notification" + +static int noti_ready = 0; +static int register_noti_module(void *data); +static int unregister_noti_module(void); + +Indicator_Icon_Object noti[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .exist_in_view = EINA_FALSE, + .init = register_noti_module, + .fini = unregister_noti_module +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .exist_in_view = EINA_FALSE, + .init = register_noti_module, + .fini = unregister_noti_module +} +}; + +struct noti_status { + notification_h noti; + int type; + int cnt; + Indicator_Icon_Object *icon[INDICATOR_WIN_MAX]; +}; + + +static Eina_List *status_list; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; iicon[i]->img_obj.data = strdup(icon_path); + indicator_util_icon_show(data->icon[i]); + } +} + +static void hide_image_icon(struct noti_status *data) +{ + int i = 0; + retif(data == NULL, , "Invalid parameter!"); + for(i=0 ; iicon[i]); + } +} + +static void free_image_icon(struct noti_status *data) +{ + int i = 0; + retif(data == NULL, , "Invalid parameter!"); + for(i=0 ; iicon[i]); + + if (data->icon[i]) + { + if (data->icon[i]->img_obj.data) + { + free(data->icon[i]->img_obj.data); + } + + if (data->icon[i]->name) + { + free(data->icon[i]->name); + } + + free(data->icon[i]); + } + + } + + if(data!=NULL) + { + free(data); + data = NULL; + } +} + +static void insert_icon_list(struct noti_status *data) +{ + int i = 0; + retif(data == NULL, , "Invalid parameter!"); + for(i=0 ; iicon[i]); + } +} + +char* __indicator_ui_get_pkginfo_icon(const char *pkgid) +{ + int ret = 0; + char *icon_path = NULL; + char *icon_ret = NULL; + retif(pkgid == NULL, NULL, "invalid parameter"); + + pkgmgrinfo_appinfo_h appinfo_h = NULL; + + ret = pkgmgrinfo_appinfo_get_appinfo(pkgid, &appinfo_h); + if (ret < 0) { + ERR("pkgmgrinfo_appinfo_get_appinfo is failed %d %s", ret,pkgid); + } + + ret = pkgmgrinfo_appinfo_get_icon(appinfo_h, &icon_path); + + if (ret < 0) { + ERR("pkgmgrinfo_appinfo_get_icon is failed %d", ret); + } + if(icon_path) { + icon_ret = (char*)strdup(icon_path); + } + if (appinfo_h) { + pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h); + } + + return icon_ret; +} + +static void show_image_icon(struct noti_status *data) +{ + retif(data == NULL, , "Invalid parameter!"); + + char* icon_path=NULL; + + notification_h noti = NULL; + + if (data->noti) { + noti = data->noti; + if (noti) { + notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_ICON_FOR_INDICATOR, &icon_path); + + if (icon_path == NULL||!ecore_file_exists(icon_path)) + { + if(icon_path != NULL&&indicator_util_check_noti_ani(icon_path)) + { + show_icon_with_path(data, icon_path); + } + else + { + notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, &icon_path); + + if (icon_path == NULL||!ecore_file_exists(icon_path)) + { + char* pkgname = NULL; + char* icon_path_second=NULL; + notification_get_pkgname(noti, &pkgname); + icon_path_second = __indicator_ui_get_pkginfo_icon(pkgname); + + if(icon_path_second==NULL || !ecore_file_exists(icon_path_second)) + { + int i = 0; + for(i=0 ; iicon[i]->img_obj.data = NULL; + } + } + else + { + show_icon_with_path(data, icon_path_second); + } + + if(icon_path_second!=NULL) + free(icon_path_second); + } + else + { + show_icon_with_path(data, icon_path); + } + } + } + else + { + show_icon_with_path(data, icon_path); + } + } + } + +} + +static void show_image_icon_all( void ) +{ + Eina_List *l; + struct noti_status *data; + + EINA_LIST_REVERSE_FOREACH(status_list, l, data) { + if (data) { + show_image_icon(data); + } + } +} + + +static void _icon_add(struct noti_status *noti_data, const char *name, void *data) +{ + int i = 0; + retif(noti_data == NULL || data == NULL, , "Invalid parameter!"); + + for (i=0 ; iwin_type = i; + obj->type = INDICATOR_IMG_ICON; + obj->name = strdup(name); + obj->priority = ICON_PRIORITY; + obj->always_top = EINA_FALSE; + obj->ad = data; + obj->area = INDICATOR_ICON_AREA_NOTI; + obj->exist_in_view = EINA_FALSE; + + noti_data->icon[i] = obj; + } + } + + return; +} + +static void _remove_all_noti(void) +{ + Eina_List *l; + struct noti_status *n_data; + EINA_LIST_FOREACH(status_list, l, n_data) { + hide_image_icon(n_data); + free_image_icon(n_data); + status_list = eina_list_remove_list(status_list, l); + } + eina_list_free(status_list); + +} + +static struct noti_status *_get_by_privid(notification_h noti) +{ + Eina_List *l; + struct noti_status *n_data; + int prev_id = -1; + char* pkgname = NULL; + char prev_id_str[256] = {0,}; + + retif(noti == NULL ,0 , "Invalid parameter!"); + + notification_get_pkgname(noti, &pkgname); + notification_get_id(noti,NULL,&prev_id); + + snprintf(prev_id_str,sizeof(prev_id_str),"%d",prev_id); + + EINA_LIST_FOREACH(status_list, l, n_data) { + + if (strcmp(n_data->icon[0]->name, prev_id_str)==0) + { + return n_data; + } + } + + return EINA_FALSE; +} + +static int _is_exist_by_privid(const char* privid) +{ + Eina_List *l; + struct noti_status *n_data; + retif(privid == NULL ,0 , "Invalid parameter!"); + + /* Clear List and objects in list */ + EINA_LIST_FOREACH(status_list, l, n_data) { + if (!strcmp(n_data->icon[0]->name, privid)) + { + return EINA_TRUE; + break; + } + } + return EINA_FALSE; +} + +static int _indicator_noti_display_check(notification_h noti) +{ + int applist = 0; + int noti_ret = 0; + + noti_ret = notification_get_display_applist(noti, &applist); + if (noti_ret != NOTIFICATION_ERROR_NONE) { + DBG("Cannot Get display app of notication! : %p %d",noti,noti_ret); + return 0; + } + + if (!(applist & NOTIFICATION_DISPLAY_APP_INDICATOR)) + { + DBG("no indicator notication! : %p %d",noti,applist); + return 0; + } + return 1; +} + +static void _remove_noti_by_privid(int priv_id) +{ + Eina_List *l; + struct noti_status *n_data; + char priv_id_str[256] = {0,}; + + snprintf(priv_id_str,sizeof(priv_id_str),"%d",priv_id); + + EINA_LIST_FOREACH(status_list, l, n_data) { + + if (strcmp(n_data->icon[0]->name, priv_id_str)==0) + { + DBG("remove %s", priv_id_str); + status_list = eina_list_remove(status_list, n_data); + hide_image_icon(n_data); + free_image_icon(n_data); + break; + } + } +} + +static void _insert_noti_by_privid(notification_h noti,void* data) +{ + int exist = 0; + struct noti_status *status = NULL; + int prev_id = -1; + char* pkgname = NULL; + char prev_id_str[256] = {0,}; + + retif(noti == NULL ,0 , "Invalid parameter!"); + + notification_get_pkgname(noti, &pkgname); + notification_get_id(noti,NULL,&prev_id); + + if(_indicator_noti_display_check(noti)==0) + { + return 0; + } + + snprintf(prev_id_str,sizeof(prev_id_str),"%d",prev_id); + + exist = _is_exist_by_privid(prev_id_str); + + if (exist != EINA_TRUE) { + DBG("Make New Event Icon : %s %s", pkgname,prev_id_str); + status = calloc(1, sizeof(struct noti_status)); + status->type = 0; + _icon_add(status,prev_id_str, data); + status->noti = noti; + insert_icon_list(status); + status_list = eina_list_append(status_list, status); + show_image_icon(status); + } + +} + +static void _update_noti_by_privid(notification_h noti) +{ + Eina_List *l; + struct noti_status *n_data; + int priv_id = -1; + char priv_id_str[256] = {0,}; + char* pkgname = NULL; + + retif(noti == NULL ,0 , "Invalid parameter!"); + + notification_get_pkgname(noti, &pkgname); + notification_get_id(noti,NULL,&priv_id); + + if(_indicator_noti_display_check(noti)==0) + { + return 0; + } + + snprintf(priv_id_str,sizeof(priv_id_str),"%d",priv_id); + + EINA_LIST_FOREACH(status_list, l, n_data) { + + if (strcmp(n_data->icon[0]->name, priv_id_str)==0) + { + DBG("Update Event Icon : %s %s", priv_id_str,pkgname); + char* icon_path = NULL; + notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_ICON_FOR_INDICATOR, &icon_path); + if(icon_path!=NULL) + { + if(strcmp(n_data->icon[0]->img_obj.data,icon_path)==0) + { + DBG("same icon with exsting noti"); + return; + } + } + n_data->noti = noti; + show_image_icon(n_data); + } + } + + +} + +static void _change_icon_status(void *data, notification_list_h noti_list) +{ + int new_cnt = 0; + Eina_List *l = NULL; + notification_h noti = NULL; + struct noti_status *n_data = NULL; + int noti_count = 0, ongoing_count = 0; + + notification_get_count(NOTIFICATION_TYPE_NOTI, NULL, + NOTIFICATION_GROUP_ID_NONE, NOTIFICATION_PRIV_ID_NONE, + ¬i_count); + notification_get_count(NOTIFICATION_TYPE_ONGOING, NULL, + NOTIFICATION_GROUP_ID_NONE, NOTIFICATION_PRIV_ID_NONE, + &ongoing_count); + + new_cnt = noti_count + ongoing_count; + + retif(noti_list == NULL, , "Invalid parameter!"); + + EINA_LIST_FOREACH(status_list, l, n_data) { + hide_image_icon(n_data); + free_image_icon(n_data); + status_list = eina_list_remove_list(status_list, l); + } + eina_list_free(status_list); + + while (noti_list != NULL) { + char *pkgname = NULL; + Eina_List *l = NULL; + struct noti_status *n_data = NULL; + struct noti_status *status = NULL; + Eina_Bool status_exist = EINA_FALSE; + notification_error_e noti_ret = NOTIFICATION_ERROR_NONE; + int applist; + int prev_id = -1; + char prev_id_str[256] = {0,}; + + noti = notification_list_get_data(noti_list); + noti_list = notification_list_get_next(noti_list); + + noti_ret = notification_get_display_applist(noti, &applist); + if (noti_ret != NOTIFICATION_ERROR_NONE) { + continue; + } + + if (!(applist & NOTIFICATION_DISPLAY_APP_INDICATOR)) + { + continue; + } + + noti_ret = notification_get_pkgname(noti, &pkgname); + noti_ret = notification_get_id(noti,NULL,&prev_id); + snprintf(prev_id_str,sizeof(prev_id_str),"%d",prev_id); + + if (noti_ret != NOTIFICATION_ERROR_NONE) + DBG("Cannot Get pkgname of notication! : %p %p",noti, pkgname); + else { + status_exist = _is_exist_by_privid(prev_id_str); + + if (status_exist != EINA_TRUE) { + status = calloc(1, sizeof(struct noti_status)); + status->type = 0; + status->cnt = new_cnt; + _icon_add(status,prev_id_str, data); + status->noti = noti; + insert_icon_list(status); + status_list = eina_list_append(status_list, status); + } + } + } + + show_image_icon_all(); +} + +void update_noti_module_new(void *data, notification_type_e type) +{ + notification_list_h list = NULL; + notification_list_h noti_list_head = NULL; + notification_error_e noti_err = NOTIFICATION_ERROR_NONE; + int get_event_count = indicator_util_max_visible_event_count(INDICATOR_WIN_LAND); + + retif(data == NULL, , "Invalid parameter!"); + + + noti_err = notification_get_list(NOTIFICATION_TYPE_NONE, + get_event_count, &list); + + noti_list_head = list; + + if (noti_err != NOTIFICATION_ERROR_NONE || list == NULL) { + DBG("update_noti_module_new %d %x", noti_err, list); + _remove_all_noti(); + notification_free_list(noti_list_head); + return; + } + + _change_icon_status(data, list); + + notification_free_list(noti_list_head); +} + + +static int _indicator_check_first_start(void) +{ + int status = 0; + int ret = 0; + + ret = vconf_get_bool(VCONFKEY_INDICATOR_STARTED, &status); + if (ret) { + ret = vconf_set_bool(VCONFKEY_INDICATOR_STARTED, 1); + } + + if (status) + return 0; + + return 1; +} + +static void _indicator_noti_delete_volatile_data(void) +{ + notification_list_h noti_list = NULL; + notification_list_h noti_list_head = NULL; + notification_h noti = NULL; + int property = 0; + + notification_get_grouping_list(NOTIFICATION_TYPE_NONE, -1, ¬i_list); + + noti_list_head = noti_list; + + while (noti_list != NULL) { + noti = notification_list_get_data(noti_list); + notification_get_property(noti, &property); + + if (property & NOTIFICATION_PROP_VOLATILE_DISPLAY) { + notification_set_property(noti, + property | + NOTIFICATION_PROP_DISABLE_UPDATE_ON_DELETE); + notification_delete(noti); + } + + noti_list = notification_list_get_next(noti_list); + } + + notification_free_list(noti_list_head); + + notification_update(NULL); +} + +static void _indicator_noti_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; + + notification_h noti_new = NULL; + for (i = 0; i < num_op; i++) + { + if(noti_ready==0) + { + notification_op_get_data(op_list + i, NOTIFICATION_OP_DATA_TYPE, &op_type); + if(op_type ==NOTIFICATION_OP_SERVICE_READY) + { + int is_first = 0; + is_first = _indicator_check_first_start(); + { + notifiation_clear(NOTIFICATION_TYPE_ONGOING); + _indicator_noti_delete_volatile_data(); + } + noti_ready = 1; + DBG("noti ready"); + update_noti_module_new(data,type); + } + } + else + { + 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, ¬i_new); + if(type!=-1) + { + switch(op_type) + { + case NOTIFICATION_OP_INSERT: + _insert_noti_by_privid(noti_new,data); + break; + case NOTIFICATION_OP_UPDATE: + _update_noti_by_privid(noti_new); + break; + case NOTIFICATION_OP_DELETE: + _remove_noti_by_privid(priv_id); + break; + default: + + break; + } + } + } + + } +} + +static void indicator_noti_sim_slot_cb(keynode_t *node, void *data) +{ + int status = 0; + int ret; + + retif(data == NULL, , "Invalid parameter!"); + + ret = vconf_get_int(VCONFKEY_TELEPHONY_SIM_SLOT, &status); + if (ret == OK) + { + DBG("sim slot %d", status); + update_noti_module_new(data,NOTIFICATION_TYPE_NONE); + } + return; +} + +static int register_noti_module(void *data) +{ + + retif(data == NULL, FAIL, "Invalid parameter!"); + notification_error_e ret = NOTIFICATION_ERROR_NONE; + static int bRegisterd = 0; + + set_app_state(data); + + if(bRegisterd==0) + { + notification_register_detailed_changed_cb(_indicator_noti_detailed_changed_cb, data); + bRegisterd = 1; + } + + vconf_notify_key_changed(VCONFKEY_TELEPHONY_SIM_SLOT, indicator_noti_sim_slot_cb, data); + + return OK; +} + +static int unregister_noti_module(void) +{ + Eina_List *l; + struct noti_status *data = NULL; + notification_error_e ret = NOTIFICATION_ERROR_NONE; + + notification_unregister_detailed_changed_cb(_indicator_noti_detailed_changed_cb, noti[0].ad); + + EINA_LIST_FOREACH(status_list, l, data) { + free_image_icon(data); + status_list = eina_list_remove_list(status_list, l); + } + vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SIM_SLOT, indicator_noti_sim_slot_cb); + + eina_list_free(status_list); + return OK; +} diff --git a/modules/information/voice_recorder.c b/modules/information/voice_recorder.c new file mode 100755 index 0000000..58112ac --- /dev/null +++ b/modules/information/voice_recorder.c @@ -0,0 +1,240 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include +#include +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "modules.h" +#include "indicator_ui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_1 +#define MODULE_NAME "VOICE_RECORDER" +#define MINICONTROL_NAME "[voicerecorder_mini_controller]" + + +static int register_voice_recorder_module(void *data); +static int unregister_voice_recorder_module(void); +static int mctrl_monitor_cb(int action, const char *name, void *data); +static int wake_up_cb(void *data); + +static int vr_registerd = 0; +static int updated_while_lcd_off = 0; +static int prevIndex = -1; + +Indicator_Icon_Object voice_recorder[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_TRUE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_voice_recorder_module, + .fini = unregister_voice_recorder_module, + .minictrl_control = mctrl_monitor_cb, + .wake_up = wake_up_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_TRUE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_voice_recorder_module, + .fini = unregister_voice_recorder_module, + .minictrl_control = mctrl_monitor_cb, + .wake_up = wake_up_cb +} + +}; + +enum { + VOICE_RECORDER_RECORDING, + VOICE_RECORDER_PAUSED, + VOICE_RECORDER_READY +}; + +static char *icon_path[] = { + "Background playing/B03_Backgroundplaying_voicerecorder_Recording.png", + "Background playing/B03_Backgroundplaying_voicerecorder_paused.png", + "Background playing/B03_Backgroundplaying_Voicerecording.png", + NULL +}; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; iad = data; + if (modules[j][i]->init) + { + modules[j][i]->init(data); + } + } + } +} + +void indicator_fini_modules(void *data) +{ + int i; + int j = 0; + + for(j=0;jfini) + modules[j][i]->fini(); + } + } + + indicator_icon_all_list_free(); +} + +void indicator_lang_changed_modules(void *data) +{ + int i; + int j = 0; + + for(j=0;jlang_changed) + modules[j][i]->lang_changed(data); + } + } +} + +void indicator_region_changed_modules(void *data) +{ + int i; + int j = 0; + + for(j=0;jregion_changed) + modules[j][i]->region_changed(data); + } + } +} + +void indicator_minictrl_control_modules(int action, const char* name, void *data) +{ + int i; + int j = 0; + + for(j=0;jminictrl_control) + modules[j][i]->minictrl_control(action, name, data); + } + } +} + +void indicator_wake_up_modules(void *data) +{ + int i; + int j = 0; + + for(j=0;jwake_up) + modules[j][i]->wake_up(data); + } + } +} + diff --git a/modules/modules.h b/modules/modules.h new file mode 100755 index 0000000..4f1c7e1 --- /dev/null +++ b/modules/modules.h @@ -0,0 +1,34 @@ +/* + * Copyright 2012 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. + */ + + +#ifndef __INDICATOR_MODULES_H__ +#define __INDICATOR_MODULES_H__ + +#include +#include "indicator_ui.h" +#include "indicator_icon_list.h" + +#define TIMER_STOP ECORE_CALLBACK_CANCEL +#define TIMER_CONTINUE ECORE_CALLBACK_RENEW + +void indicator_init_modules(void *data); +void indicator_fini_modules(void *data); +void indicator_lang_changed_modules(void *data); +void indicator_region_changed_modules(void *data); +void indicator_minictrl_control_modules(int action, const char* name, void *data); +void indicator_wake_up_modules(void *data); +#endif diff --git a/modules/network/roaming.c b/modules/network/roaming.c new file mode 100755 index 0000000..66f00b8 --- /dev/null +++ b/modules/network/roaming.c @@ -0,0 +1,167 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "modules.h" +#include "indicator_ui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_FIXED3 +#define MODULE_NAME "ROAMING" + +static int register_roaming_module(void *data); +static int unregister_roaming_module(void); + +Indicator_Icon_Object roaming[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .area = INDICATOR_ICON_AREA_FIXED, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .init = register_roaming_module, + .fini = unregister_roaming_module +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .area = INDICATOR_ICON_AREA_FIXED, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .init = register_roaming_module, + .fini = unregister_roaming_module +} +}; + +static const char *icon_path[] = { + "RSSI/B03_Roaming.png", + NULL +}; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "modules.h" +#include "indicator_ui.h" +#include "indicator_gui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_FIXED3 +#define MODULE_NAME "RSSI" + +#define ICON_NOSIM _("IDS_COM_BODY_NO_SIM") +#define ICON_SEARCH _("IDS_COM_BODY_SEARCHING") +#define ICON_NOSVC _("IDS_CALL_POP_NOSERVICE") + +static int register_rssi_module(void *data); +static int unregister_rssi_module(void); +static int language_changed_cb(void *data); +static int wake_up_cb(void *data); + +Indicator_Icon_Object rssi[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_FIXED, + .init = register_rssi_module, + .fini = unregister_rssi_module, + .lang_changed = language_changed_cb, + .wake_up = wake_up_cb, +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_FIXED, + .init = register_rssi_module, + .fini = unregister_rssi_module, + .lang_changed = language_changed_cb, + .wake_up = wake_up_cb, +} +}; + +enum { + LEVEL_RSSI_MIN = 0, + LEVEL_RSSI_0 = LEVEL_RSSI_MIN, + LEVEL_RSSI_1, + LEVEL_RSSI_2, + LEVEL_RSSI_3, + LEVEL_RSSI_4, + LEVEL_RSSI_MAX = LEVEL_RSSI_4, + LEVEL_FLIGHT, + LEVEL_NOSIM, + LEVEL_SEARCH, + LEVEL_NOSVC, + LEVEL_LIMITED, + LEVEL_MAX, +}; + +static int bRoaming = 0; +static int updated_while_lcd_off = 0; +static int prevIndex = -1; +static int prevRoam = -1; +static int bRssiShown = 0; +static const char *icon_path[LEVEL_MAX] = { + [LEVEL_RSSI_0] = "RSSI/B03_RSSI_Sim_00.png", + [LEVEL_RSSI_1] = "RSSI/B03_RSSI_Sim_01.png", + [LEVEL_RSSI_2] = "RSSI/B03_RSSI_Sim_02.png", + [LEVEL_RSSI_3] = "RSSI/B03_RSSI_Sim_03.png", + [LEVEL_RSSI_4] = "RSSI/B03_RSSI_Sim_04.png", + [LEVEL_FLIGHT] = "RSSI/B03_RSSI_Flightmode.png", + [LEVEL_NOSIM] = "RSSI/B03_RSSI_NoSim.png", + [LEVEL_SEARCH] = "RSSI/B03_RSSI_Searching.png", + [LEVEL_NOSVC] = "RSSI/B03_RSSI_NoService.png", + [LEVEL_LIMITED] = "RSSI/B03_Network_LimitedService.png", +}; + +static const char *roaming_icon_path[LEVEL_MAX] = { + [LEVEL_RSSI_0] = "RSSI/B03_RSSI_roaming_00.png", + [LEVEL_RSSI_1] = "RSSI/B03_RSSI_roaming_01.png", + [LEVEL_RSSI_2] = "RSSI/B03_RSSI_roaming_02.png", + [LEVEL_RSSI_3] = "RSSI/B03_RSSI_roaming_03.png", + [LEVEL_RSSI_4] = "RSSI/B03_RSSI_roaming_04.png", + [LEVEL_FLIGHT] = "RSSI/B03_RSSI_Flightmode.png", + [LEVEL_NOSIM] = "RSSI/B03_RSSI_NoSim.png", + [LEVEL_SEARCH] = "RSSI/B03_RSSI_Searching.png", + [LEVEL_NOSVC] = "RSSI/B03_RSSI_NoService.png", + [LEVEL_LIMITED] = "RSSI/B03_Network_LimitedService.png", +}; + + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i LEVEL_RSSI_MAX) { + *level = LEVEL_RSSI_MAX; + return 1; + } + return 0; +} + +static void show_image_icon(void *data, int index) +{ + int i = 0; + + if (index < LEVEL_RSSI_MIN) + index = LEVEL_RSSI_MIN; + else if (index >= LEVEL_MAX) + index = LEVEL_NOSVC; + + if(prevRoam == bRoaming && prevIndex == index) + { + return; + } + + for (i=0 ; i +#include +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "modules.h" +#include "indicator_icon_util.h" +#include "indicator_gui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_FIXED4 +#define MODULE_NAME "battery" +#define TIMER_INTERVAL 0.7 +#define BATTERY_TEXTWIDTH 62 +#define BATTERY_VALUE_FONT_SIZE 20 +#define BATTERY_PERCENT_FONT_SIZE 20 +#define BATTERY_PERCENT_FONT_STYLE "Bold" +#define TIME_FONT_SIZE_BATTERY 28 +#define TIME_FONT_SIZE_BATTERY_PERCENT 28 +#define LABEL_STRING "%s" \ + "" + + +static int register_battery_module(void *data); +static int unregister_battery_module(void); +static int wake_up_cb(void *data); +static void indicator_battery_display_percentage(void *data,int win_type ); + + +Indicator_Icon_Object battery[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .area = INDICATOR_ICON_AREA_FIXED, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,0,BATTERY_ICON_WIDTH,BATTERY_ICON_HEIGHT}, + .obj_exist = EINA_FALSE, + .init = register_battery_module, + .fini = unregister_battery_module, + .wake_up = wake_up_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .area = INDICATOR_ICON_AREA_FIXED, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,0,BATTERY_ICON_WIDTH,BATTERY_ICON_HEIGHT}, + .obj_exist = EINA_FALSE, + .init = register_battery_module, + .fini = unregister_battery_module, + .wake_up = wake_up_cb +} +}; + +enum { + INDICATOR_CLOCK_MODE_12H = 0, + INDICATOR_CLOCK_MODE_24H, + INDICATOR_CLOCK_MODE_MAX +}; + +static int clock_mode = INDICATOR_CLOCK_MODE_12H; + +enum { + BATTERY_ICON_WIDTH_12H, + BATTERY_ICON_WIDTH_24H, + BATTERY_ICON_WIDTH_NUM +}; + +enum { + BATTERY_LEVEL_7, + BATTERY_LEVEL_20, +}; + +enum { + LEVEL_MIN = 0, + LEVEL_0 = LEVEL_MIN, + LEVEL_1, + LEVEL_2, + LEVEL_3, + LEVEL_4, + LEVEL_5, + LEVEL_6, + LEVEL_7, + LEVEL_MAX = LEVEL_7, + LEVEL_NUM, + LEVEL_100 +}; + +enum { + BATTERY_ETC_STATE_FULL, + BATTERY_ETC_STATE_MAX, +}; + +static const char *icon_path[LEVEL_NUM] = { + [LEVEL_0] = "Power/B03_stat_sys_battery_0.png", + [LEVEL_1] = "Power/B03_stat_sys_battery_15.png", + [LEVEL_2] = "Power/B03_stat_sys_battery_28.png", + [LEVEL_3] = "Power/B03_stat_sys_battery_43.png", + [LEVEL_4] = "Power/B03_stat_sys_battery_57.png", + [LEVEL_5] = "Power/B03_stat_sys_battery_71.png", + [LEVEL_6] = "Power/B03_stat_sys_battery_85.png", + [LEVEL_7] = "Power/B03_stat_sys_battery_100.png", +}; + +static const char *charging_icon_path[LEVEL_NUM] = { + [LEVEL_0] = "Power/B03_stat_sys_battery_charge_anim0.png", + [LEVEL_1] = "Power/B03_stat_sys_battery_charge_anim15.png", + [LEVEL_2] = "Power/B03_stat_sys_battery_charge_anim28.png", + [LEVEL_3] = "Power/B03_stat_sys_battery_charge_anim43.png", + [LEVEL_4] = "Power/B03_stat_sys_battery_charge_anim57.png", + [LEVEL_5] = "Power/B03_stat_sys_battery_charge_anim71.png", + [LEVEL_6] = "Power/B03_stat_sys_battery_charge_anim85.png", + [LEVEL_7] = "Power/B03_stat_sys_battery_charge_anim100.png", +}; + +static const char *etc_icon_path[BATTERY_ETC_STATE_MAX] = { + [BATTERY_ETC_STATE_FULL] = "Power/B03_stat_sys_battery_full.png", +}; + +enum { + FUEL_GAUGE_LV_MIN = 0, + FUEL_GAUGE_LV_0 = FUEL_GAUGE_LV_MIN, + FUEL_GAUGE_LV_1, + FUEL_GAUGE_LV_2, + FUEL_GAUGE_LV_3, + FUEL_GAUGE_LV_4, + FUEL_GAUGE_LV_5, + FUEL_GAUGE_LV_6, + FUEL_GAUGE_LV_7, + FUEL_GAUGE_LV_8, + FUEL_GAUGE_LV_9, + FUEL_GAUGE_LV_10, + FUEL_GAUGE_LV_11, + FUEL_GAUGE_LV_12, + FUEL_GAUGE_LV_13, + FUEL_GAUGE_LV_14, + FUEL_GAUGE_LV_15, + FUEL_GAUGE_LV_16, + FUEL_GAUGE_LV_17, + FUEL_GAUGE_LV_18, + FUEL_GAUGE_LV_19, + FUEL_GAUGE_LV_20, + FUEL_GAUGE_LV_MAX = FUEL_GAUGE_LV_20, + FUEL_GAUGE_LV_NUM, +}; + + +struct battery_level_info { + int current_level; + int current_capa; + int min_level; + int max_level; +}; + +static struct battery_level_info _level; +static Ecore_Timer *timer; +static int battery_level_type = BATTERY_LEVEL_7; +static Eina_Bool battery_charging = EINA_FALSE; +static int aniIndex = -1; +static int prev_mode = -1; +static int prev_level = -1; +static int battery_percentage = -1; + + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i= 100) + level = FUEL_GAUGE_LV_MAX; + else if (capacity < 3) + level = FUEL_GAUGE_LV_0; + else + level = (int)((capacity + 2) / 5); + } else { + if (capacity >= 100) + level = LEVEL_100; + else if (capacity >= 86) + level = LEVEL_7; + else if (capacity >= 72) + level = LEVEL_6; + else if (capacity >= 58) + level = LEVEL_5; + else if (capacity >= 44) + level = LEVEL_4; + else if (capacity >= 29) + level = LEVEL_3; + else if (capacity >= 16) + level = LEVEL_2; + else if (capacity >= 1) + level = LEVEL_1; + else + level = LEVEL_0; + } + + return level; +} + +static void show_battery_icon(int mode, int level) +{ + int i = 0; + + if(prev_mode==mode&&prev_level == level) + { + return; + } + + for(i=0 ; itype = INDICATOR_TXT_WITH_IMG_ICON; + temp_buf = eina_strbuf_new(); + percent_buf = eina_strbuf_new(); + + eina_strbuf_append_printf(temp_buf, "%d", value); + temp_str = eina_strbuf_string_steal(temp_buf); + eina_strbuf_append_printf(percent_buf, "%s", + indicator_util_icon_label_set + (temp_str, NULL, NULL, + BATTERY_VALUE_FONT_SIZE, + data)); + free(temp_str); + + eina_strbuf_append_printf(temp_buf, "%%"); + temp_str = eina_strbuf_string_steal(temp_buf); + eina_strbuf_append_printf(percent_buf, "%s", + indicator_util_icon_label_set + (temp_str, NULL, + BATTERY_PERCENT_FONT_STYLE, + BATTERY_PERCENT_FONT_SIZE, + data)); + free(temp_str); + + if (icon->txt_obj.data != NULL) + free(icon->txt_obj.data); + + icon->txt_obj.data = eina_strbuf_string_steal(percent_buf); + + if (temp_buf != NULL) + eina_strbuf_free(temp_buf); + + if (percent_buf != NULL) + eina_strbuf_free(percent_buf); + +} + +static Eina_Bool indicator_battery_charging_ani_cb(void *data) +{ + + retif(data == NULL, FAIL, "Invalid parameter!"); + + if (_level.current_level == _level.max_level) { + aniIndex = _level.max_level; + show_battery_icon(battery_charging,aniIndex); + timer = NULL; + return TIMER_STOP; + } + + if (aniIndex >= _level.max_level || aniIndex < 0) + aniIndex = _level.current_level; + else + aniIndex++; + + show_battery_icon(battery_charging,aniIndex); + + return TIMER_CONTINUE; +} + +static int indicator_change_battery_image_level(void *data, int level) +{ + retif(data == NULL, FAIL, "Invalid parameter!"); + + if (battery_level_type == BATTERY_LEVEL_20) { + if (level < FUEL_GAUGE_LV_MIN) + level = FUEL_GAUGE_LV_MIN; + else if (level > FUEL_GAUGE_LV_MAX) + level = FUEL_GAUGE_LV_MAX; + } else { + if (level < LEVEL_MIN) + level = LEVEL_MIN; + } + + show_battery_icon(battery_charging,level); + return OK; +} + +static void indicator_bttery_update_by_charging_state(void *data) +{ + if (battery_charging == EINA_TRUE) { + if (!timer) { + timer = ecore_timer_add(TIMER_INTERVAL, + indicator_battery_charging_ani_cb, + data); + } + } else { + aniIndex = -1; + delete_timer(); + indicator_change_battery_image_level(data, + _level.current_level); + } +} + +static void indicator_battery_resize_percengate(void* data) +{ + int battery_option = 0; + vconf_get_bool(VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL, &battery_option); + if(battery_option==0) + { + return; + } + + indicator_signal_emit(data,"indicator.battery.percentage.show","indicator.prog"); + +} + +static void indicator_battery_update_display(void *data) +{ + int battery_capa = 0; + int ret; + int level = 0; + + retif(data == NULL, , "Invalid parameter!"); + + if(indicator_util_get_update_flag()==0) + { + return; + } + + ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CAPACITY, &battery_capa); + if (ret != OK) + { + return; + } + + if (battery_capa < 0) + { + ERR("Invalid Battery Capacity: %d", battery_capa); + return; + } + + + if (battery_capa > 100) + battery_capa = 100; + + battery_percentage = battery_capa; + + _level.current_capa = battery_capa; + + + level = __battery_capa_to_level(battery_capa); + _level.current_level = level; + + indicator_battery_display_percentage(data,0); + indicator_battery_display_percentage(data,1); + indicator_battery_resize_percengate(data); + indicator_bttery_update_by_charging_state(data); + +} + + +static void indicator_battery_check_charging(void *data) +{ + int ret = -1; + int status = 0; + + ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, &status); + + DBG("Battery charge Status: %d", status); + + battery_charging = status; + + indicator_battery_update_display(data); +} + +static void indicator_battery_charging_cb(keynode_t *node, void *data) +{ + indicator_battery_check_charging(data); +} + +static void indicator_battery_change_cb(keynode_t *node, void *data) +{ + indicator_battery_update_display(data); +} + +static void indicator_battery_clock_format_changed_cb(keynode_t *node, void *data) +{ + retif(data == NULL, , "Invalid parameter!"); + + DBG("[Enter] indicator_battery_clock_format_changed_cb"); + + indicator_battery_get_time_format(); + + indicator_battery_update_display(data); +} + +static void indicator_battery_pm_state_change_cb(keynode_t *node, void *data) +{ + int status = 0; + retif(data == NULL, , "Invalid parameter!"); + + vconf_get_int(VCONFKEY_PM_STATE, &status); + + if(status == VCONFKEY_PM_STATE_LCDOFF) + { + delete_timer(); + } +} + +static void indicator_battery_display_percentage(void *data,int win_type ) +{ + int ret = FAIL; + int battery_capa = 0; + char buf[256] = {0,}; + char buf2[256] = {0,}; + char buf3[256] = {0,}; + char temp[256] = {0,}; + struct appdata *ad = (struct appdata *)data; + int battery_option = 0; + + vconf_get_bool(VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL, &battery_option); + if(battery_option==0) + { + return; + } + + ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CAPACITY, &battery_capa); + if (ret != OK) + { + ERR("Fail to get vconf"); + return; + } + if (battery_capa < 0) + { + ERR("Invalid Battery Capacity: %d", battery_capa); + return; + } + + + if (battery_capa > 100) + battery_capa = 100; + + snprintf(buf2, sizeof(buf2), LABEL_STRING, TIME_FONT_SIZE_BATTERY_PERCENT, "%"); + + snprintf(temp, sizeof(temp), "%d",battery_capa); + + snprintf(buf, sizeof(buf), LABEL_STRING, TIME_FONT_SIZE_BATTERY, temp); + + snprintf(buf3, sizeof(buf3), "%s%s", buf, buf2); + + indicator_part_text_emit_by_win(&(ad->win[win_type]),"elm.text.percentage", buf3); + +} + +static void indicator_battery_batt_percentage_cb(keynode_t *node, void *data) +{ + int status = 0; + retif(data == NULL, , "Invalid parameter!"); + + vconf_get_bool(VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL, &status); + + DBG("status : %d",status); + + if(status == 1) + { + indicator_battery_update_display(data); + indicator_util_reset_icon_list(0); + indicator_util_reset_icon_list(1); + } + else + { + indicator_battery_update_display(data); + indicator_signal_emit(data,"indicator.battery.percentage.hide","indicator.prog"); + indicator_part_text_emit(data,"elm.text.percentage", ""); + indicator_util_reset_icon_list(0); + indicator_util_reset_icon_list(1); + } +} + +static int wake_up_cb(void *data) +{ + indicator_battery_clock_format_changed_cb(NULL, data); + return OK; +} + +static int register_battery_module(void *data) +{ + int r = 0, ret = -1; + + retif(data == NULL, FAIL, "Invalid parameter!"); + + set_app_state(data); + indicator_battery_level_init(); + + ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_CAPACITY, + indicator_battery_change_cb, data); + if (ret != OK) { + r = ret; + } + + ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, + indicator_battery_change_cb, data); + if (ret != OK) { + r = r | ret; + } + + ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, + indicator_battery_charging_cb, data); + if (ret != OK) { + r = r | ret; + } + + ret = vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, + indicator_battery_clock_format_changed_cb, data); + if (ret != OK) { + r = r | ret; + } + ret = vconf_notify_key_changed(VCONFKEY_PM_STATE, + indicator_battery_pm_state_change_cb, data); + if (ret != OK) { + r = r | ret; + } + ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL, + indicator_battery_batt_percentage_cb, data); + if (ret != OK) { + r = r | ret; + } + indicator_battery_batt_percentage_cb(NULL,data); + indicator_battery_check_charging(data); + + return r; +} + +static int unregister_battery_module(void) +{ + int ret; + int i = 0; + + ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_CAPACITY, + indicator_battery_change_cb); + + ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, + indicator_battery_change_cb); + + ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, + indicator_battery_charging_cb); + + ret = vconf_ignore_key_changed(VCONFKEY_PM_STATE, + indicator_battery_pm_state_change_cb); + + ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL, + indicator_battery_batt_percentage_cb); + + delete_timer(); + + for(i=0 ; i +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "modules.h" +#include "indicator_icon_util.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_2 +#define MODULE_NAME "active_sync" +#define TIMER_INTERVAL 0.5 +#define SYNC_ICON_NUM 4 + +static int register_active_sync_module(void *data); +static int unregister_active_sync_module(void); +static int wake_up_cb(void *data); + +Indicator_Icon_Object active_sync[INDICATOR_WIN_MAX] = { +{ + .type = INDICATOR_IMG_ICON, + .win_type = INDICATOR_WIN_PORT, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_active_sync_module, + .fini = unregister_active_sync_module, + .wake_up = wake_up_cb +}, +{ + .type = INDICATOR_IMG_ICON, + .win_type = INDICATOR_WIN_LAND, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_active_sync_module, + .fini = unregister_active_sync_module, + .wake_up = wake_up_cb +} +}; + +static const char *icon_path[] = { + "Processing/B03_Processing_Syncing_01.png", + "Processing/B03_Processing_Syncing_02.png", + "Processing/B03_Processing_Syncing_03.png", + "Processing/B03_Processing_Syncing_04.png", + NULL +}; + +static Ecore_Timer *timer; +static int icon_index = 0; +static int updated_while_lcd_off = 0; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "modules.h" +#include "indicator_icon_util.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_1 +#define MODULE_NAME "call" +#define MINICONTROL_VOICE_NAME "[voicecall-quickpanel]" +#define MINICONTROL_VIDEO_NAME "[videocall-quickpanel]" + +static int register_call_module(void *data); +static int unregister_call_module(void); +static int mctrl_monitor_cb(int action, const char *name, void *data); + +static int bShown = 0; +static int bMiniCall = 0; + +Indicator_Icon_Object call[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_TRUE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_call_module, + .fini = unregister_call_module, + .minictrl_control = mctrl_monitor_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_TRUE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_call_module, + .fini = unregister_call_module, + .minictrl_control = mctrl_monitor_cb +} +}; + +static const char *icon_path[] = { + "Call/B03_Call_Duringcall.png", + NULL +}; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "modules.h" +#include "indicator_icon_util.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_SYSTEM_5 +#define MODULE_NAME "call_divert" + +static int register_call_divert_module(void *data); +static int unregister_call_divert_module(void); + +Indicator_Icon_Object call_divert[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .init = register_call_divert_module, + .fini = unregister_call_divert_module, + .area = INDICATOR_ICON_AREA_SYSTEM, +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .init = register_call_divert_module, + .fini = unregister_call_divert_module, + .area = INDICATOR_ICON_AREA_SYSTEM, +} + +}; + +static int bShown = 0; + +static const char *icon_path[] = { + "Processing/B03_Processing_calldivert.png", + NULL +}; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "modules.h" +#include "indicator_icon_util.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_2 +#define MODULE_NAME "sos" + +static int register_sos_module(void *data); +static int unregister_sos_module(void); +static int wake_up_cb(void *data); + + +Indicator_Icon_Object sos[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_TRUE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_sos_module, + .fini = unregister_sos_module, + .wake_up = wake_up_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_TRUE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_sos_module, + .fini = unregister_sos_module, + .wake_up = wake_up_cb +} +}; + +static const char *icon_path[] = { + "Call/B03_Call_SOSmessge_active.png", + NULL +}; +static int updated_while_lcd_off = 0; +static int bShown = 0; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include +#include "common.h" +#include "indicator_ui.h" +#include "modules.h" +#include "indicator_icon_util.h" + + +#define ICON_PRIORITY INDICATOR_PRIORITY_FIXED6 +#define MODULE_NAME "transfer" +#define TIMER_INTERVAL 0.03 + +static int register_transfer_module(void *data); +static int unregister_transfer_module(void); + +static int transfer_type = -1; + +static const char *icon_path[TRANSFER_MAX] = { + [TRANSFER_NONE] = "Connection/B03_not_conection_UPdownload.png", + [TRANSFER_UP] = "Connection/B03_connection_UPload.png", + [TRANSFER_DOWN] = "Connection/B03_connection_download.png", + [TRANSFER_UPDOWN] = "Connection/B03_conection_UPdownload.png" +}; + +Indicator_Icon_Object transfer[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .area = INDICATOR_ICON_AREA_FIXED, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .init = register_transfer_module, + .fini = unregister_transfer_module +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .area = INDICATOR_ICON_AREA_FIXED, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .init = register_transfer_module, + .fini = unregister_transfer_module +} +}; + +static int prevIndex = -1; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "modules.h" +#include "indicator_ui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_SYSTEM_4 +#define MODULE_NAME "bluetooth" +#define TIMER_INTERVAL 0.5 + +static int register_bluetooth_module(void *data); +static int unregister_bluetooth_module(void); +static int wake_up_cb(void *data); + +Indicator_Icon_Object bluetooth[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_SYSTEM, + .init = register_bluetooth_module, + .fini = unregister_bluetooth_module, + .wake_up = wake_up_cb, +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_SYSTEM, + .init = register_bluetooth_module, + .fini = unregister_bluetooth_module, + .wake_up = wake_up_cb, +} + +}; + +enum { + LEVEL_MIN = 0, + LEVEL_BT_NOT_CONNECTED = LEVEL_MIN, + LEVEL_BT_CONNECTED, + LEVEL_BT_HEADSET, + LEVEL_MAX +}; + +static const char *icon_path[LEVEL_MAX] = { + [LEVEL_BT_NOT_CONNECTED] = + "Bluetooth, NFC, GPS/B03_BT_On&Connected.png", + [LEVEL_BT_CONNECTED] = "Bluetooth, NFC, GPS/B03-4_BT_activated_on.png", + [LEVEL_BT_HEADSET] = + "Bluetooth, NFC, GPS/B03_BT_On&Connected&headset.png", +}; + +static int updated_while_lcd_off = 0; +static int prevIndex = -1; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i= LEVEL_MAX) + index = LEVEL_MIN; + + if(prevIndex == index) + { + return; + } + + for (i=0 ; i +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "modules.h" +#include "indicator_ui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_NOTI_2 +#define MODULE_NAME "gps" +#define TIMER_INTERVAL 0.3 + +static int register_gps_module(void *data); +static int unregister_gps_module(void); +static int wake_up_cb(void *data); + +Indicator_Icon_Object gps[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_gps_module, + .fini = unregister_gps_module, + .wake_up = wake_up_cb +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_NOTI, + .init = register_gps_module, + .fini = unregister_gps_module, + .wake_up = wake_up_cb +} +}; + +enum { + LEVEL_MIN = 0, + LEVEL_GPS_ON = LEVEL_MIN, + LEVEL_GPS_SEARCHING, + LEVEL_MAX +}; + +enum { + IND_POSITION_STATE_OFF = 0, + IND_POSITION_STATE_SEARCHING, + IND_POSITION_STATE_CONNECTED +}; + +static const char *icon_path[LEVEL_MAX] = { + [LEVEL_GPS_ON] = "Bluetooth, NFC, GPS/B03_GPS_On.png", + [LEVEL_GPS_SEARCHING] = "Bluetooth, NFC, GPS/B03_GPS_Searching.png", +}; +static int updated_while_lcd_off = 0; +static int prevIndex = -1; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i= LEVEL_MAX) + index = LEVEL_GPS_SEARCHING; + + if(prevIndex == index) + { + return; + } + + for (i=0 ; i +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_ui.h" +#include "modules.h" +#include "indicator_icon_util.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_SYSTEM_1 +#define MODULE_NAME "silent" + +static int register_silent_module(void *data); +static int unregister_silent_module(void); + + +Indicator_Icon_Object silent[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_SYSTEM, + .init = register_silent_module, + .fini = unregister_silent_module, +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_SYSTEM, + .init = register_silent_module, + .fini = unregister_silent_module, +} +}; + +enum { + PROFILE_MUTE, + PROFILE_VIBRATION, + PROFILE_NUM, +}; + +static const char *icon_path[PROFILE_NUM] = { + [PROFILE_MUTE] = "Profile/B03_Profile_Mute.png", + [PROFILE_VIBRATION] = "Profile/B03_Profile_Vibration.png", +}; + +static int prevIndex = -1; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i +#include +#include +#include "common.h" +#include "indicator.h" +#include "indicator_icon_util.h" +#include "modules.h" +#include "indicator_ui.h" + +#define ICON_PRIORITY INDICATOR_PRIORITY_SYSTEM_3 +#define MODULE_NAME "wifi_direct" + +static int register_wifi_direct_module(void *data); +static int unregister_wifi_direct_module(void); +static int wake_up_cb(void *data); + +Indicator_Icon_Object wifi_direct[INDICATOR_WIN_MAX] = { +{ + .win_type = INDICATOR_WIN_PORT, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_SYSTEM, + .init = register_wifi_direct_module, + .fini = unregister_wifi_direct_module, + .wake_up = wake_up_cb, +}, +{ + .win_type = INDICATOR_WIN_LAND, + .type = INDICATOR_IMG_ICON, + .name = MODULE_NAME, + .priority = ICON_PRIORITY, + .always_top = EINA_FALSE, + .exist_in_view = EINA_FALSE, + .txt_obj = {0,}, + .img_obj = {0,}, + .obj_exist = EINA_FALSE, + .area = INDICATOR_ICON_AREA_SYSTEM, + .init = register_wifi_direct_module, + .fini = unregister_wifi_direct_module, + .wake_up = wake_up_cb, +} + +}; + +static Eina_Bool wifi_direct_transferring = EINA_FALSE; +static int updated_while_lcd_off = 0; +static int prevIndex = -1; + +enum { + WIFI_DIRECT_CONNECTED = 0, + WIFI_DIRECT_MAX, +}; + +#define WIFI_D_ICON_CONNECTED \ + "Bluetooth, NFC, GPS/B03_Wi-fi_direct On_connected.png" + +static const char *icon_path[WIFI_DIRECT_MAX] = { + [WIFI_DIRECT_CONNECTED] = WIFI_D_ICON_CONNECTED +}; + +static void set_app_state(void* data) +{ + int i = 0; + + for (i=0 ; i= WIFI_DIRECT_MAX) + index = WIFI_DIRECT_CONNECTED; + + if(prevIndex == index) + { + return; + } + + for (i=0 ; i + + + + + + + + + + + + \ No newline at end of file diff --git a/org.tizen.indicator.rule b/org.tizen.indicator.rule new file mode 100755 index 0000000..734f432 --- /dev/null +++ b/org.tizen.indicator.rule @@ -0,0 +1,43 @@ +org.tizen.indicator system::vconf arwxt +org.tizen.indicator system::homedir arwxt +org.tizen.indicator system::use_internet r +org.tizen.indicator system::media rwxat +org.tizen.indicator system::share rwxat +org.tizen.indicator sys-assert::core rwxat +org.tizen.indicator org.tizen.pwlock rwx +org.tizen.indicator org.tizen.oma-dm rx +org.tizen.indicator pulseaudio rwxat +org.tizen.indicator ail::db rw +org.tizen.indicator notification::db rw +org.tizen.indicator dbus rwx +org.tizen.indicator immvibed rw +org.tizen.indicator svi-data rx +org.tizen.indicator sound_server w +org.tizen.indicator email-service x +org.tizen.indicator xorg rw +org.tizen.indicator isf rx +org.tizen.indicator stest-service w +org.tizen.indicator libslp-alarm::db rw +org.tizen.indicator data-provider-master::notification rw +org.tizen.indicator data-provider-master::notification.client w +org.tizen.indicator data-provider-master rw +e17 org.tizen.indicator rw +stest-service org.tizen.indicator rx +dbus org.tizen.indicator rwx +org.tizen.indicator eas-engine::vconf r +org.tizen.indicator system::vconf_inhouse rwx +org.tizen.indicator system::vconf_misc rw +org.tizen.indicator system::vconf_setting r +org.tizen.indicator system::vconf_network r +org.tizen.indicator system::vconf_multimedia r +org.tizen.indicator system::vconf_system rw +org.tizen.indicator system::vconf_deviced r +org.tizen.indicator location_fw::vconf rwx +org.tizen.indicator starter::vconf r +org.tizen.indicator _ rw +org.tizen.indicator device::app_logging w +org.tizen.indicator device::sys_logging w +org.tizen.indicator e17 rw +org.tizen.indicator org.tizen.download-manager::vconf_public r +org.tizen.indicator download-provider::vconf_public r +org.tizen.indicator pkgmgr::db rw diff --git a/packaging/indicator.service b/packaging/indicator.service new file mode 100644 index 0000000..b1b53ab --- /dev/null +++ b/packaging/indicator.service @@ -0,0 +1,11 @@ +[Unit] +Description=Start the indicator +Before=core-efl.target +After=xorg.target starter.service e17.service + +[Service] +ExecStart=/usr/apps/org.tizen.indicator/bin/indicator + +[Install] +WantedBy=core-efl.target + diff --git a/packaging/org.tizen.indicator.spec b/packaging/org.tizen.indicator.spec new file mode 100755 index 0000000..11c07f7 --- /dev/null +++ b/packaging/org.tizen.indicator.spec @@ -0,0 +1,96 @@ +%define PREFIX /usr/apps/%{name} +%define RESDIR %{PREFIX}/res +%define PREFIXRW /opt/apps/%{name} + +Name: org.tizen.indicator +Summary: indicator window +Version: 0.2.16 +Release: 1 +Group: utils +License: Flora Software License +Source0: %{name}-%{version}.tar.gz +Source101: indicator.service + +BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(capi-appfw-app-manager) +BuildRequires: pkgconfig(capi-system-runtime-info) +BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(ecore) +BuildRequires: pkgconfig(ecore-x) +BuildRequires: pkgconfig(ecore-evas) +BuildRequires: pkgconfig(edje) +BuildRequires: pkgconfig(evas) +BuildRequires: pkgconfig(eina) +BuildRequires: pkgconfig(vconf) +BuildRequires: pkgconfig(libprivilege-control) +BuildRequires: pkgconfig(notification) +BuildRequires: pkgconfig(utilX) +BuildRequires: pkgconfig(minicontrol-monitor) +BuildRequires: pkgconfig(icu-io) +BuildRequires: pkgconfig(feedback) +BuildRequires: pkgconfig(alarm-engine) +BuildRequires: pkgconfig(pkgmgr-info) +BuildRequires: pkgconfig(edbus) + +BuildRequires: cmake +BuildRequires: edje-tools +BuildRequires: gettext-tools + +Requires(post): /usr/bin/vconftool +%description +indicator window. + +%prep +%setup -q + +%build +LDFLAGS+="-Wl,--rpath=%{PREFIX}/lib -Wl,--as-needed";export LDFLAGS +CFLAGS+=" -fvisibility=hidden -fvisibility-inlines-hidden"; export CFLAGS +CXXFLAGS+=" -fvisibility=hidden -fvisibility-inlines-hidden"; export CXXFLAGS +FFLAGS+=" -fvisibility=hidden -fvisibility-inlines-hidden"; export FFLAGS + +cmake . -DCMAKE_INSTALL_PREFIX=%{PREFIX} -DCMAKE_INSTALL_PREFIXRW=%{PREFIXRW} +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +%make_install + +mkdir -p %{buildroot}/usr/share/license +cp -f LICENSE.Flora %{buildroot}/usr/share/license/%{name} + +mkdir -p %{buildroot}/%{_sysconfdir}/rc.d/rc5.d/ +mkdir -p %{buildroot}/%{_sysconfdir}/rc.d/rc3.d/ +ln -s ../../init.d/indicator %{buildroot}/%{_sysconfdir}/rc.d/rc5.d/S01indicator +ln -s ../../init.d/indicator %{buildroot}/%{_sysconfdir}/rc.d/rc3.d/S44indicator + +install -d %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants +install -m0644 %{SOURCE101} %{buildroot}%{_libdir}/systemd/user/ +ln -sf ../indicator.service %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants/indicator.service + +%clean +rm -rf %{buildroot} + +%post +vconftool set -t bool memory/private/%{name}/started 0 -i -u 5000 -f -s %{name} +vconftool set -t int memory/private/%{name}/battery_disp 0 -i -u 5000 -f -s %{name} + +%postun -p /sbin/ldconfig + +%files +%manifest org.tizen.indicator.manifest +%defattr(-,root,root,-) +%{PREFIX}/bin/* +%{RESDIR}/locale/* +%{RESDIR}/icons/* +%{RESDIR}/edje/* +/usr/share/packages/%{name}.xml +%attr(775,app,app) %{PREFIXRW}/data +%attr(755,-,-) %{_sysconfdir}/init.d/indicator +%{_sysconfdir}/rc.d/rc5.d/S01indicator +%{_sysconfdir}/rc.d/rc3.d/S44indicator +%{_libdir}/systemd/user/core-efl.target.wants/indicator.service +%{_libdir}/systemd/user/indicator.service +/usr/share/license/%{name} +/etc/smack/accesses.d/%{name}.rule diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100755 index 0000000..27fa394 --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1,28 @@ +# for i18n + +SET(POFILES et.po is.po hy.po hu.po hr.po hi.po nb.po ga.po fr_FR.po fr_CA.po fi.po +eu.po it_IT.po es_MX.po es_ES.po en_US.po en_PH.po en.po el_GR.po de_DE.po da.po +ca.po bg.po az.po ar.po ja_JP.po zh_TW.po zh_SG.po zh_HK.po zh_CN.po uz.po cs.po +uk.po tr_TR.po sv.po sr.po sl.po sk.po ru_RU.po ka.po pt_PT.po pt_BR.po pl.po +nl_NL.po gl.po mk.po lv.po lt.po ko_KR.po kk.po ro.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/po/POTFILES.in b/po/POTFILES.in new file mode 100755 index 0000000..fdc8a12 --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,3 @@ +# List of source files containing translatable strings. +modules/clock/clock.c +modules/network/rssi.c diff --git a/po/ar.po b/po/ar.po new file mode 100755 index 0000000..498272f --- /dev/null +++ b/po/ar.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "ص" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "م" + diff --git a/po/az.po b/po/az.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/az.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/bg.po b/po/bg.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/bg.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/ca.po b/po/ca.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/ca.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/cs.po b/po/cs.po new file mode 100755 index 0000000..a9dc82e --- /dev/null +++ b/po/cs.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "do" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "od" + diff --git a/po/da.po b/po/da.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/da.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/de_DE.po b/po/de_DE.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/de_DE.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/el_GR.po b/po/el_GR.po new file mode 100755 index 0000000..342ac9f --- /dev/null +++ b/po/el_GR.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "ΠΜ" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "ΜΜ" + diff --git a/po/en.po b/po/en.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/en.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/en_PH.po b/po/en_PH.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/en_PH.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/en_US.po b/po/en_US.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/en_US.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/es_ES.po b/po/es_ES.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/es_ES.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/es_MX.po b/po/es_MX.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/es_MX.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/et.po b/po/et.po new file mode 100755 index 0000000..ba93463 --- /dev/null +++ b/po/et.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "EL" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PL" + diff --git a/po/eu.po b/po/eu.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/eu.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/fi.po b/po/fi.po new file mode 100755 index 0000000..90c805c --- /dev/null +++ b/po/fi.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AP" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "IP" + diff --git a/po/fr_CA.po b/po/fr_CA.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/fr_CA.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/fr_FR.po b/po/fr_FR.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/fr_FR.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/ga.po b/po/ga.po new file mode 100755 index 0000000..aadf147 --- /dev/null +++ b/po/ga.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "RN" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "IN" + diff --git a/po/gl.po b/po/gl.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/gl.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/hi.po b/po/hi.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/hi.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/hr.po b/po/hr.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/hr.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/hu.po b/po/hu.po new file mode 100755 index 0000000..b937886 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "de" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "du" + diff --git a/po/hy.po b/po/hy.po new file mode 100755 index 0000000..8ebd451 --- /dev/null +++ b/po/hy.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "ԿՀ" + diff --git a/po/is.po b/po/is.po new file mode 100755 index 0000000..849288c --- /dev/null +++ b/po/is.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "fh" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "eh" + diff --git a/po/it_IT.po b/po/it_IT.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/it_IT.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/ja_JP.po b/po/ja_JP.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/ja_JP.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/ka.po b/po/ka.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/ka.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/kk.po b/po/kk.po new file mode 100755 index 0000000..9b84a4d --- /dev/null +++ b/po/kk.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "ТД" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "TK" + diff --git a/po/ko_KR.po b/po/ko_KR.po new file mode 100755 index 0000000..c51fdc6 --- /dev/null +++ b/po/ko_KR.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "오전" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "오후" + diff --git a/po/lt.po b/po/lt.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/lt.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/lv.po b/po/lv.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/lv.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/mk.po b/po/mk.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/mk.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/nb.po b/po/nb.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/nb.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/nl_NL.po b/po/nl_NL.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/nl_NL.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/pl.po b/po/pl.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/pl.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/pt_PT.po b/po/pt_PT.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/pt_PT.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/ro.po b/po/ro.po new file mode 100755 index 0000000..593edd5 --- /dev/null +++ b/po/ro.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "am" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "pm" + diff --git a/po/ru_RU.po b/po/ru_RU.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/ru_RU.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/sk.po b/po/sk.po new file mode 100755 index 0000000..791be72 --- /dev/null +++ b/po/sk.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "dp" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "pp" + diff --git a/po/sl.po b/po/sl.po new file mode 100755 index 0000000..3bb5455 --- /dev/null +++ b/po/sl.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "do" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "po" + diff --git a/po/sr.po b/po/sr.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/sr.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/sv.po b/po/sv.po new file mode 100755 index 0000000..abd5e84 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "FM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "EM" + diff --git a/po/tr_TR.po b/po/tr_TR.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/tr_TR.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/uk.po b/po/uk.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/uk.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/update-po.sh b/po/update-po.sh new file mode 100755 index 0000000..773bc5c --- /dev/null +++ b/po/update-po.sh @@ -0,0 +1,57 @@ +#!/bin/sh + +PACKAGE=indicator +SRCROOT=.. +POTFILES=POTFILES.in + +#ALL_LINGUAS= am az be ca cs da de el en_CA en_GB es et fi fr hr hu it ja ko lv mk ml ms nb ne nl pa pl pt pt_BR ru rw sk sl sr sr@Latn sv ta tr uk vi zh_CN zh_TW +ALL_LINGUAS="en_US en_GB ja ko zh_CN" + +XGETTEXT=/usr/bin/xgettext +MSGMERGE=/usr/bin/msgmerge + +echo -n "Make ${PACKAGE}.pot " +if [ ! -e $POTFILES ] ; then + echo "$POTFILES not found" + exit 1 +fi + +$XGETTEXT --default-domain=${PACKAGE} --directory=${SRCROOT} \ + --add-comments --keyword=_ --keyword=N_ --files-from=$POTFILES \ +&& test ! -f ${PACKAGE}.po \ + || (rm -f ${PACKAGE}.pot && mv ${PACKAGE}.po ${PACKAGE}.pot) + +if [ $? -ne 0 ]; then + echo "error" + exit 1 +else + echo "done" +fi + +for LANG in $ALL_LINGUAS; do + echo "$LANG : " + + if [ ! -e $LANG.po ] ; then + sed 's/CHARSET/UTF-8/g' ${PACKAGE}.pot > ${LANG}.po + echo "${LANG}.po created" + else + if $MSGMERGE ${LANG}.po ${PACKAGE}.pot -o ${LANG}.new.po ; then + if cmp ${LANG}.po ${LANG}.new.po > /dev/null 2>&1; then + rm -f ${LANG}.new.po + else + if mv -f ${LANG}.new.po ${LANG}.po; then + echo "" + else + echo "msgmerge for $LANG.po failed: cannot move $LANG.new.po to $LANG.po" 1>&2 + rm -f ${LANG}.new.po + exit 1 + fi + fi + else + echo "msgmerge for $LANG failed!" + rm -f ${LANG}.new.po + fi + fi + echo "" +done + diff --git a/po/uz.po b/po/uz.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/uz.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100755 index 0000000..2a80bfb --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "AM" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "PM" + diff --git a/po/zh_HK.po b/po/zh_HK.po new file mode 100755 index 0000000..3dc5933 --- /dev/null +++ b/po/zh_HK.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "上午" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "下午" + diff --git a/po/zh_SG.po b/po/zh_SG.po new file mode 100755 index 0000000..3dc5933 --- /dev/null +++ b/po/zh_SG.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "上午" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "下午" + diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100755 index 0000000..3dc5933 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_OPT_AM_ABB" +msgstr "上午" + +msgid "IDS_IDLE_OPT_PM_ABB" +msgstr "下午" + diff --git a/test/indicator_debug_util.c b/test/indicator_debug_util.c new file mode 100755 index 0000000..f03b8ab --- /dev/null +++ b/test/indicator_debug_util.c @@ -0,0 +1,83 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef LOGFILE +#define LOGFILE DATADIR"/indicator.log" +#endif + +#define MAXSIZE (1 << 17) + +static char buf[512]; + +void debug_printf(const char *msg, ...) +{ + int fd; + va_list arg_list; + int len; + struct tm timeDate = { 0, }; + time_t ctime; + int status; + struct stat buffer; + + ctime = time(NULL); + + if (localtime_r(&ctime, &timeDate)) { + snprintf(buf, 63, "[%04d/%02d/%02d %02d:%02d:%02d] ", + timeDate.tm_year + 1900, timeDate.tm_mon + 1, + timeDate.tm_mday, timeDate.tm_hour, timeDate.tm_min, + timeDate.tm_sec); + } + + len = strlen(buf); + + va_start(arg_list, msg); + + fd = open(LOGFILE, O_WRONLY | O_CREAT | O_APPEND, + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + if (fd == -1) { + fprintf(stderr, msg, arg_list); + goto __CATCH; + } + status = fstat(fd, &buffer); + + if (!status && (buffer.st_size > MAXSIZE)) { + ftruncate(fd, 0); + } + + if (len < 0) { + goto __CATCH; + } + + len += vsnprintf(&buf[len], sizeof(buf), msg, arg_list); + + write(fd, buf, strlen(buf)); + +__CATCH: + if(fd != -1) + { + close(fd); + } + va_end(arg_list); +} diff --git a/test/indicator_debug_util.h b/test/indicator_debug_util.h new file mode 100755 index 0000000..9221fb4 --- /dev/null +++ b/test/indicator_debug_util.h @@ -0,0 +1,22 @@ +/* + * Copyright 2012 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. + */ + +#ifndef __INDICATOR_DEBUG_UTIL_H_ +#define __INDICATOR_DEBUG_UTIL_H_ + +extern void debug_printf(const char *msg, ...); + +#endif diff --git a/test/indicator_test_util.c b/test/indicator_test_util.c new file mode 100755 index 0000000..59cda0f --- /dev/null +++ b/test/indicator_test_util.c @@ -0,0 +1,53 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include "common.h" +#include "indicator_icon_util.h" +#include "indicator_icon_list.h" +#include "indicator_ui.h" +#include "indicator_test_util.h" + +int print_indicator_icon_object(Indicator_Icon_Object *obj) +{ +#ifdef DEBUG_MODE + retif(cond, ret, str, args...)(obj == NULL, FAIL, "Invalid parameter!"); + + INFO(str, args...)(%s : priority(%d) obj(%x), obj->name, obj->priority, + (unsigned int)obj->obj); +#endif + return OK; +} + +int print_indicator_icon_list(Eina_List *list) +{ +#ifdef DEBUG_MODE + Eina_List *l; + void *data; + + retif(list == NULL, FAIL, "Invalid parameter!"); + + INFO("*******Indicator_Icon List(%x) *******", (unsigned int)list); + EINA_LIST_FOREACH(list, l, data) { + if (data) { + print_indicator_icon_object(data); + } + } +#endif + return OK; +} diff --git a/test/indicator_test_util.h b/test/indicator_test_util.h new file mode 100755 index 0000000..414148a --- /dev/null +++ b/test/indicator_test_util.h @@ -0,0 +1,23 @@ +/* + * Copyright 2012 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. + */ + +#ifndef __INDICATOR_TEST_UTIL_H__ +#define __INDICATOR_TEST_UTIL_H__ + +extern int print_indicator_icon_object(Indicator_Icon_Object *obj); +extern int print_indicator_icon_list(Eina_List *list); + +#endif -- 2.7.4