From c93ef578c5de9b91e365cdb549f2e080f60191f8 Mon Sep 17 00:00:00 2001 From: "jk7744.park" Date: Tue, 8 Sep 2015 21:41:11 +0900 Subject: tizen 2.3.1 release --- CMakeLists.txt | 5 + LICENSE.flora | 206 ++ NOTICE | 1 + home/CMakeLists.txt | 221 ++ home/data/500.w-home.patch.sh | 15 + home/data/CMakeLists.txt | 12 + home/data/dump_w-home.sh | 5 + home/data/home_reset.sh | 19 + home/data/org.tizen.w-home.efl | 82 + home/data/org.tizen.w-home.xml.in | 22 + home/data/org.tizen.w-home_ChangeableColorInfo.xml | 353 ++ home/data/org.tizen.w-home_ChangeableFontInfo.xml | 36 + .../org.tizen.w-home_apps_ChangeableColorInfo.xml | 161 + .../org.tizen.w-home_apps_ChangeableFontInfo.xml | 29 + home/include/add-viewer.h | 49 + home/include/add-viewer_debug.h | 88 + home/include/add-viewer_package.h | 74 + home/include/add-viewer_pkgmgr.h | 41 + home/include/add-viewer_ucol.h | 44 + home/include/add-viewer_util.h | 26 + home/include/apps/apps_conf.h | 133 + home/include/apps/apps_main.h | 99 + home/include/apps/bg.h | 26 + home/include/apps/db.h | 59 + home/include/apps/effect.h | 34 + home/include/apps/grid.h | 37 + home/include/apps/item.h | 42 + home/include/apps/item_badge.h | 41 + home/include/apps/item_info.h | 75 + home/include/apps/lang.h | 33 + home/include/apps/layout.h | 43 + home/include/apps/list.h | 42 + home/include/apps/page.h | 73 + home/include/apps/page_info.h | 38 + home/include/apps/pkgmgr.h | 41 + home/include/apps/scroller.h | 71 + home/include/apps/scroller_info.h | 41 + home/include/apps/xml.h | 26 + home/include/bg.h | 29 + home/include/clock_service.h | 257 ++ home/include/conf.h | 142 + home/include/critical_log.h | 31 + home/include/db.h | 60 + home/include/dbus.h | 96 + home/include/edit.h | 60 + home/include/edit_info.h | 31 + home/include/effect.h | 32 + home/include/gesture.h | 49 + home/include/index.h | 34 + home/include/index_info.h | 33 + home/include/item_info.h | 58 + home/include/key.h | 48 + home/include/lang.h | 29 + home/include/layout.h | 40 + home/include/layout_info.h | 37 + home/include/log.h | 154 + home/include/main.h | 65 + home/include/mapbuf.h | 38 + home/include/minictrl.h | 85 + home/include/noti_broker.h | 46 + home/include/notification/detail.h | 67 + home/include/notification/notification.h | 28 + home/include/notification/simple.h | 30 + home/include/notification/summary.h | 33 + home/include/notification/time.h | 25 + home/include/page.h | 75 + home/include/page_info.h | 88 + home/include/pkgmgr.h | 42 + home/include/popup.h | 25 + home/include/power_mode.h | 42 + home/include/scroller.h | 134 + home/include/scroller_info.h | 60 + home/include/tutorial.h | 41 + home/include/tutorial_info.h | 32 + home/include/util.h | 265 ++ home/include/virtual_canvas.h | 28 + home/include/widget.h | 34 + home/include/win.h | 24 + home/include/wms.h | 37 + home/include/xml.h | 24 + home/org.tizen.w-home.manifest | 8 + home/res/CMakeLists.txt | 6 + home/res/edje/CMakeLists.txt | 1 + home/res/edje/circle/CMakeLists.txt | 16 + home/res/edje/circle/apps_box.edc | 412 +++ home/res/edje/circle/apps_button.edc | 126 + home/res/edje/circle/apps_conf.edc | 1 + home/res/edje/circle/apps_grid.edc | 198 + home/res/edje/circle/apps_item.edc | 428 +++ home/res/edje/circle/apps_layout.edc | 229 ++ home/res/edje/circle/apps_page.edc | 139 + home/res/edje/circle/box_layout.edc | 50 + home/res/edje/circle/clock_shortcut.edc | 160 + home/res/edje/circle/conf.edc | 1 + home/res/edje/circle/dynamicbox.edc | 429 +++ home/res/edje/circle/edit.edc | 170 + home/res/edje/circle/index.edc | 357 ++ home/res/edje/circle/layout.edc | 668 ++++ home/res/edje/circle/noti.edc | 514 +++ home/res/edje/circle/page.edc | 1036 ++++++ home/res/edje/circle/page_clock.edc | 1803 +++++++++ home/res/edje/circle/popup.edc | 146 + home/res/edje/circle/preview.edc | 547 +++ home/res/edje/color_classes.edc | 683 ++++ home/res/edje/images/Arrow_S_00015.png | Bin 0 -> 1415 bytes home/res/edje/images/Arrow_S_00016.png | Bin 0 -> 1814 bytes home/res/edje/images/Arrow_S_00017.png | Bin 0 -> 2025 bytes home/res/edje/images/Arrow_S_00018.png | Bin 0 -> 2109 bytes home/res/edje/images/Arrow_S_00019.png | Bin 0 -> 2201 bytes home/res/edje/images/Arrow_S_00020.png | Bin 0 -> 2149 bytes home/res/edje/images/Arrow_S_00021.png | Bin 0 -> 2152 bytes home/res/edje/images/Arrow_S_00022.png | Bin 0 -> 2029 bytes home/res/edje/images/Arrow_S_00023.png | Bin 0 -> 2579 bytes home/res/edje/images/Arrow_S_00024.png | Bin 0 -> 2974 bytes home/res/edje/images/Arrow_S_00025.png | Bin 0 -> 1971 bytes home/res/edje/images/Arrow_S_00026.png | Bin 0 -> 2034 bytes home/res/edje/images/Arrow_S_00027.png | Bin 0 -> 2189 bytes home/res/edje/images/Arrow_S_00028.png | Bin 0 -> 2230 bytes home/res/edje/images/Arrow_S_00029.png | Bin 0 -> 2139 bytes home/res/edje/images/Arrow_S_00030.png | Bin 0 -> 2088 bytes home/res/edje/images/Arrow_S_00031.png | Bin 0 -> 1930 bytes home/res/edje/images/Arrow_S_00032.png | Bin 0 -> 1821 bytes home/res/edje/images/Arrow_S_00033.png | Bin 0 -> 1547 bytes home/res/edje/images/B3_Data.png | Bin 0 -> 7321 bytes home/res/edje/images/b_favorite_app_line.png | Bin 0 -> 1001 bytes .../images/b_home_screen_add_widget_line.#.png | Bin 0 -> 981 bytes .../edje/images/b_home_screen_badge_large_bg.#.png | Bin 0 -> 15675 bytes .../images/b_home_screen_badge_large_line.#.png | Bin 0 -> 16199 bytes .../images/b_home_screen_badge_large_shadow.#.png | Bin 0 -> 1889 bytes .../edje/images/b_home_screen_block_btn_bg.#.png | Bin 0 -> 1966 bytes .../res/edje/images/b_home_screen_block_btn_bg.png | Bin 0 -> 2023 bytes .../edje/images/b_home_screen_block_btn_bg02.#.png | Bin 0 -> 2135 bytes .../res/edje/images/b_home_screen_block_btn_ic.png | Bin 0 -> 1921 bytes .../edje/images/b_home_screen_block_btn_line.#.png | Bin 0 -> 2214 bytes .../edje/images/b_home_screen_block_btn_line.png | Bin 0 -> 2692 bytes .../images/b_home_screen_block_btn_line02.#.png | Bin 0 -> 2570 bytes .../images/b_home_screen_block_text_btn_bg.#.png | Bin 0 -> 1966 bytes .../images/b_home_screen_block_text_btn_line.#.png | Bin 0 -> 2214 bytes home/res/edje/images/b_home_screen_btn_bg.#.png | Bin 0 -> 16233 bytes home/res/edje/images/b_home_screen_btn_line.#.png | Bin 0 -> 16222 bytes home/res/edje/images/b_home_screen_clock_arrow.png | Bin 0 -> 1322 bytes .../edje/images/b_home_screen_clock_arrow_big.png | Bin 0 -> 2138 bytes .../images/b_home_screen_clock_arrow_big_ef.png | Bin 0 -> 3979 bytes .../edje/images/b_home_screen_clock_block_icon.png | Bin 0 -> 2147 bytes home/res/edje/images/b_home_screen_edit_cover.png | Bin 0 -> 1516 bytes .../edje/images/b_home_screen_edit_cover_ef.png | Bin 0 -> 2433 bytes .../images/b_home_screen_favorite_badge_bg.#.png | Bin 0 -> 15673 bytes .../images/b_home_screen_favorite_badge_line.#.png | Bin 0 -> 16439 bytes .../images/b_home_screen_favorite_edit_icon.png | Bin 0 -> 1415 bytes .../images/b_home_screen_favorite_more_icon.png | Bin 0 -> 1360 bytes .../res/edje/images/b_home_screen_network_auto.png | Bin 0 -> 2525 bytes home/res/edje/images/b_home_screen_network_off.png | Bin 0 -> 2642 bytes home/res/edje/images/b_home_screen_network_on.png | Bin 0 -> 2403 bytes .../b_home_screen_power_saving_block_icon.png | Bin 0 -> 1706 bytes home/res/edje/images/b_home_screen_recent_icon.png | Bin 0 -> 1396 bytes .../res/edje/images/b_home_screen_widget_check.png | Bin 0 -> 1324 bytes .../edje/images/b_home_screen_widget_check_ef.png | Bin 0 -> 1929 bytes .../edje/images/b_home_screen_widget_del_bg.png | Bin 0 -> 1720 bytes .../edje/images/b_home_screen_widget_del_icon.png | Bin 0 -> 1075 bytes .../edje/images/b_home_screen_widget_del_line.png | Bin 0 -> 1859 bytes .../edje/images/b_home_screen_widget_line.#.png | Bin 0 -> 987 bytes .../edje/images/b_home_screen_widget_line_ef.png | Bin 0 -> 2414 bytes home/res/edje/images/b_home_screen_widget_plus.png | Bin 0 -> 1374 bytes .../edje/images/b_home_screen_widget_plus_ef.png | Bin 0 -> 1762 bytes .../images/b_home_screen_widget_plus_origin.png | Bin 0 -> 1220 bytes home/res/edje/images/b_widget_favorite_bg.png | Bin 0 -> 2787 bytes home/res/edje/images/bouncing_bottom_edge.png | Bin 0 -> 1090 bytes home/res/edje/images/bouncing_bottom_glow.png | Bin 0 -> 5100 bytes home/res/edje/images/bouncing_left_edge.png | Bin 0 -> 1007 bytes home/res/edje/images/bouncing_left_glow.png | Bin 0 -> 6433 bytes home/res/edje/images/bouncing_right_edge.png | Bin 0 -> 1007 bytes home/res/edje/images/bouncing_right_glow.png | Bin 0 -> 6380 bytes home/res/edje/images/do_not_ic_disturb.png | Bin 0 -> 4280 bytes home/res/edje/images/do_not_ic_donot_now.png | Bin 0 -> 4680 bytes home/res/edje/images/favorite_contact_bg_cover.png | Bin 0 -> 2281 bytes .../res/edje/images/indicator_clock_on_focused.png | Bin 0 -> 1192 bytes .../edje/images/indicator_clock_on_focused_ef.png | Bin 0 -> 1368 bytes home/res/edje/images/indicator_clock_on_normal.png | Bin 0 -> 1175 bytes .../edje/images/indicator_clock_on_normal_ef.png | Bin 0 -> 1296 bytes home/res/edje/images/indicator_on_focused.png | Bin 0 -> 1095 bytes home/res/edje/images/indicator_on_focused_ef.png | Bin 0 -> 1202 bytes home/res/edje/images/indicator_on_normal.png | Bin 0 -> 1088 bytes home/res/edje/images/indicator_on_normal_ef.png | Bin 0 -> 1201 bytes .../res/edje/images/indicator_panel_on_focused.png | Bin 0 -> 1031 bytes .../edje/images/indicator_panel_on_focused_ef.png | Bin 0 -> 1124 bytes home/res/edje/images/indicator_panel_on_normal.png | Bin 0 -> 1028 bytes .../edje/images/indicator_panel_on_normal_ef.png | Bin 0 -> 1107 bytes home/res/edje/images/overlay000_image.png | Bin 0 -> 52547 bytes home/res/edje/images/overlay00_bg_cover.png | Bin 0 -> 2281 bytes home/res/edje/images/overlay01_bg_cover.png | Bin 0 -> 32702 bytes home/res/edje/images/overlay05_bg_cover.png | Bin 0 -> 29519 bytes home/res/edje/images/overlay06_bg_cover.png | Bin 0 -> 29529 bytes home/res/edje/images/overlay08_bg_cover.png | Bin 0 -> 26773 bytes home/res/edje/images/overlay_button.#.png | Bin 0 -> 3206 bytes home/res/edje/images/overlay_button_press.#.png | Bin 0 -> 3165 bytes home/res/edje/images/overlay_close.png | Bin 0 -> 2524 bytes home/res/edje/images/overlay_cue.png | Bin 0 -> 2302 bytes home/res/edje/images/overlay_start_button.png | Bin 0 -> 4605 bytes .../res/edje/images/overlay_start_button_press.png | Bin 0 -> 6992 bytes home/res/edje/images/overlay_swipe_down.png | Bin 0 -> 2469 bytes home/res/edje/images/overlay_swipe_left.png | Bin 0 -> 2806 bytes home/res/edje/images/overlay_swipe_right.png | Bin 0 -> 2815 bytes home/res/edje/images/overlay_swipe_up.png | Bin 0 -> 2465 bytes home/res/edje/images/w_cover_view_ic_delete.png | Bin 0 -> 1211 bytes home/res/edje/images/widget_circle_bg.png | Bin 0 -> 4505 bytes home/res/edje/images/widget_circle_bg_ef.png | Bin 0 -> 3905 bytes home/res/edje/images/widget_circle_bg_stroke.png | Bin 0 -> 6293 bytes .../edje/images/widget_music_player_bg_cover.png | Bin 0 -> 2782 bytes home/res/edje/rectangle/CMakeLists.txt | 16 + home/res/edje/rectangle/apps_box.edc | 414 +++ home/res/edje/rectangle/apps_button.edc | 126 + home/res/edje/rectangle/apps_conf.edc | 1 + home/res/edje/rectangle/apps_grid.edc | 198 + home/res/edje/rectangle/apps_item.edc | 430 +++ home/res/edje/rectangle/apps_layout.edc | 229 ++ home/res/edje/rectangle/apps_page.edc | 144 + home/res/edje/rectangle/box_layout.edc | 50 + home/res/edje/rectangle/clock_shortcut.edc | 160 + home/res/edje/rectangle/conf.edc | 1 + home/res/edje/rectangle/dynamicbox.edc | 429 +++ home/res/edje/rectangle/edit.edc | 170 + home/res/edje/rectangle/index.edc | 357 ++ home/res/edje/rectangle/layout.edc | 668 ++++ home/res/edje/rectangle/noti.edc | 514 +++ home/res/edje/rectangle/page.edc | 1150 ++++++ home/res/edje/rectangle/page_clock.edc | 1803 +++++++++ home/res/edje/rectangle/popup.edc | 139 + home/res/edje/rectangle/preview.edc | 547 +++ home/res/edje/rectangle/tutorial.edc | 1183 ++++++ home/res/icon/CMakeLists.txt | 3 + home/res/icon/org.tizen.w-home.png | Bin 0 -> 2765 bytes home/res/icon/org.tizen.w-home.small.png | Bin 0 -> 2481 bytes home/res/image/CMakeLists.txt | 6 + home/res/image/b_home_screen_widget_line.png | Bin 0 -> 2828 bytes home/res/image/unknown.png | Bin 0 -> 19568 bytes home/res/image/widget_circle_bg_stroke.png | Bin 0 -> 6293 bytes home/res/list/CMakeLists.txt | 2 + home/res/list/tts_black.list | 4 + home/res/list/tts_white.list | 3 + home/res/ordering/CMakeLists.txt | 15 + home/res/ordering/apps_default_items.xml | 99 + home/res/ordering/apps_default_items_ATT.xml | 105 + home/res/ordering/default_favorite_apps.xml | 17 + .../ordering/default_favorite_apps_emergency.xml | 38 + .../ordering/default_favorite_apps_emulator.xml | 24 + .../default_favorite_apps_without_camera.xml | 108 + .../default_favorite_apps_without_camera_sleep.xml | 115 + .../ordering/default_favorite_apps_without_hr.xml | 108 + .../default_favorite_apps_without_sleep.xml | 122 + home/res/ordering/default_items.xml | 31 + home/res/ordering/default_items_tts.xml | 24 + home/res/ordering/settings.xml | 13 + home/res/po/CMakeLists.txt | 34 + home/res/po/ar.po | 284 ++ home/res/po/as.po | 284 ++ home/res/po/az.po | 284 ++ home/res/po/bg.po | 284 ++ home/res/po/bn.po | 284 ++ home/res/po/ca.po | 284 ++ home/res/po/cs.po | 284 ++ home/res/po/da.po | 284 ++ home/res/po/de.po | 284 ++ home/res/po/el_GR.po | 284 ++ home/res/po/en.po | 284 ++ home/res/po/en_PH.po | 284 ++ home/res/po/en_US.po | 284 ++ home/res/po/es_ES.po | 284 ++ home/res/po/es_US.po | 284 ++ home/res/po/et.po | 284 ++ home/res/po/eu.po | 284 ++ home/res/po/fa.po | 284 ++ home/res/po/fi.po | 284 ++ home/res/po/fr.po | 284 ++ home/res/po/fr_CA.po | 284 ++ home/res/po/ga.po | 284 ++ home/res/po/gl.po | 284 ++ home/res/po/gu.po | 284 ++ home/res/po/he.po | 284 ++ home/res/po/hi.po | 284 ++ home/res/po/hr.po | 284 ++ home/res/po/hu.po | 284 ++ home/res/po/hy.po | 284 ++ home/res/po/id.po | 284 ++ home/res/po/is.po | 284 ++ home/res/po/it_IT.po | 284 ++ home/res/po/ja_JP.po | 284 ++ home/res/po/ka.po | 284 ++ home/res/po/kk.po | 284 ++ home/res/po/km.po | 284 ++ home/res/po/kn.po | 284 ++ home/res/po/ko_KR.po | 284 ++ home/res/po/ky_KG.po | 284 ++ home/res/po/lo.po | 284 ++ home/res/po/lt.po | 284 ++ home/res/po/lv.po | 284 ++ home/res/po/mk.po | 284 ++ home/res/po/ml.po | 284 ++ home/res/po/mn_MN.po | 284 ++ home/res/po/mr.po | 284 ++ home/res/po/ms.po | 284 ++ home/res/po/my.po | 284 ++ home/res/po/nb.po | 284 ++ home/res/po/ne.po | 284 ++ home/res/po/nl.po | 284 ++ home/res/po/or.po | 284 ++ home/res/po/pa.po | 284 ++ home/res/po/pl.po | 284 ++ home/res/po/pt_BR.po | 284 ++ home/res/po/pt_PT.po | 284 ++ home/res/po/ro.po | 284 ++ home/res/po/ru_RU.po | 284 ++ home/res/po/si.po | 284 ++ home/res/po/sk.po | 284 ++ home/res/po/sl.po | 284 ++ home/res/po/sq.po | 284 ++ home/res/po/sr.po | 284 ++ home/res/po/sv.po | 284 ++ home/res/po/ta.po | 284 ++ home/res/po/te.po | 284 ++ home/res/po/tg_TJ.po | 284 ++ home/res/po/th.po | 284 ++ home/res/po/tk_TM.po | 284 ++ home/res/po/tl.po | 284 ++ home/res/po/tr_TR.po | 284 ++ home/res/po/uk.po | 284 ++ home/res/po/update-po.sh | 60 + home/res/po/ur.po | 284 ++ home/res/po/uz.po | 284 ++ home/res/po/vi.po | 284 ++ home/res/po/zh_CN.po | 284 ++ home/res/po/zh_HK.po | 284 ++ home/res/po/zh_TW.po | 284 ++ home/src/add-viewer.c | 1118 ++++++ home/src/add-viewer_package.c | 898 +++++ home/src/add-viewer_pkgmgr.c | 639 ++++ home/src/add-viewer_ucol.c | 785 ++++ home/src/add-viewer_util.c | 391 ++ home/src/apps/apps_main.c | 931 +++++ home/src/apps/bg.c | 217 ++ home/src/apps/db.c | 836 +++++ home/src/apps/effect.c | 103 + home/src/apps/grid.c | 408 +++ home/src/apps/item.c | 1095 ++++++ home/src/apps/item_badge.c | 311 ++ home/src/apps/item_info.c | 483 +++ home/src/apps/lang.c | 150 + home/src/apps/layout.c | 695 ++++ home/src/apps/list.c | 229 ++ home/src/apps/page.c | 600 +++ home/src/apps/pkgmgr.c | 747 ++++ home/src/apps/scroller.c | 1490 ++++++++ home/src/apps/xml.c | 323 ++ home/src/bg.c | 210 ++ home/src/clock_event.c | 522 +++ home/src/clock_inf_minictrl.c | 355 ++ home/src/clock_inf_widget.c | 558 +++ home/src/clock_manager.c | 303 ++ home/src/clock_service.c | 817 +++++ home/src/clock_shortcut.c | 591 +++ home/src/clock_util.c | 252 ++ home/src/clock_view.c | 944 +++++ home/src/clock_view_cue.c | 90 + home/src/clock_view_hidden.c | 338 ++ home/src/clock_view_indicator.c | 368 ++ home/src/critical_log.c | 233 ++ home/src/db.c | 718 ++++ home/src/dbus.c | 387 ++ home/src/dbus_util.c | 330 ++ home/src/edit.c | 3842 ++++++++++++++++++++ home/src/effect.c | 121 + home/src/gesture.c | 225 ++ home/src/index.c | 438 +++ home/src/item_info.c | 94 + home/src/key.c | 228 ++ home/src/lang.c | 145 + home/src/layout.c | 974 +++++ home/src/main.c | 1430 ++++++++ home/src/mapbuf.c | 250 ++ home/src/minictrl.c | 145 + home/src/minictrl_manager.c | 216 ++ home/src/minictrl_util.c | 153 + home/src/noti_broker.c | 665 ++++ home/src/notification/detail.c | 583 +++ home/src/notification/notification.c | 238 ++ home/src/notification/simple.c | 191 + home/src/notification/summary.c | 277 ++ home/src/notification/time.c | 705 ++++ home/src/page.c | 1046 ++++++ home/src/page_info.c | 139 + home/src/pkgmgr.c | 760 ++++ home/src/popup.c | 69 + home/src/power_mode.c | 412 +++ home/src/scroller.c | 2985 +++++++++++++++ home/src/tutorial.c | 1573 ++++++++ home/src/util.c | 1169 ++++++ home/src/virtual_canvas.c | 204 ++ home/src/widget.c | 1103 ++++++ home/src/win.c | 146 + home/src/wms.c | 258 ++ home/src/xml.c | 375 ++ packaging/org.tizen.w-home.spec | 194 + 401 files changed, 85789 insertions(+) create mode 100755 CMakeLists.txt create mode 100755 LICENSE.flora create mode 100644 NOTICE create mode 100755 home/CMakeLists.txt create mode 100644 home/data/500.w-home.patch.sh create mode 100755 home/data/CMakeLists.txt create mode 100755 home/data/dump_w-home.sh create mode 100755 home/data/home_reset.sh create mode 100644 home/data/org.tizen.w-home.efl create mode 100755 home/data/org.tizen.w-home.xml.in create mode 100755 home/data/org.tizen.w-home_ChangeableColorInfo.xml create mode 100755 home/data/org.tizen.w-home_ChangeableFontInfo.xml create mode 100755 home/data/org.tizen.w-home_apps_ChangeableColorInfo.xml create mode 100755 home/data/org.tizen.w-home_apps_ChangeableFontInfo.xml create mode 100644 home/include/add-viewer.h create mode 100755 home/include/add-viewer_debug.h create mode 100755 home/include/add-viewer_package.h create mode 100755 home/include/add-viewer_pkgmgr.h create mode 100755 home/include/add-viewer_ucol.h create mode 100755 home/include/add-viewer_util.h create mode 100755 home/include/apps/apps_conf.h create mode 100755 home/include/apps/apps_main.h create mode 100755 home/include/apps/bg.h create mode 100755 home/include/apps/db.h create mode 100755 home/include/apps/effect.h create mode 100755 home/include/apps/grid.h create mode 100755 home/include/apps/item.h create mode 100755 home/include/apps/item_badge.h create mode 100755 home/include/apps/item_info.h create mode 100755 home/include/apps/lang.h create mode 100755 home/include/apps/layout.h create mode 100644 home/include/apps/list.h create mode 100755 home/include/apps/page.h create mode 100755 home/include/apps/page_info.h create mode 100755 home/include/apps/pkgmgr.h create mode 100755 home/include/apps/scroller.h create mode 100755 home/include/apps/scroller_info.h create mode 100755 home/include/apps/xml.h create mode 100755 home/include/bg.h create mode 100755 home/include/clock_service.h create mode 100755 home/include/conf.h create mode 100755 home/include/critical_log.h create mode 100755 home/include/db.h create mode 100755 home/include/dbus.h create mode 100755 home/include/edit.h create mode 100755 home/include/edit_info.h create mode 100755 home/include/effect.h create mode 100755 home/include/gesture.h create mode 100755 home/include/index.h create mode 100755 home/include/index_info.h create mode 100755 home/include/item_info.h create mode 100755 home/include/key.h create mode 100755 home/include/lang.h create mode 100755 home/include/layout.h create mode 100755 home/include/layout_info.h create mode 100755 home/include/log.h create mode 100755 home/include/main.h create mode 100755 home/include/mapbuf.h create mode 100755 home/include/minictrl.h create mode 100755 home/include/noti_broker.h create mode 100644 home/include/notification/detail.h create mode 100644 home/include/notification/notification.h create mode 100644 home/include/notification/simple.h create mode 100644 home/include/notification/summary.h create mode 100644 home/include/notification/time.h create mode 100755 home/include/page.h create mode 100755 home/include/page_info.h create mode 100755 home/include/pkgmgr.h create mode 100755 home/include/popup.h create mode 100755 home/include/power_mode.h create mode 100755 home/include/scroller.h create mode 100755 home/include/scroller_info.h create mode 100755 home/include/tutorial.h create mode 100755 home/include/tutorial_info.h create mode 100755 home/include/util.h create mode 100755 home/include/virtual_canvas.h create mode 100644 home/include/widget.h create mode 100755 home/include/win.h create mode 100755 home/include/wms.h create mode 100755 home/include/xml.h create mode 100755 home/org.tizen.w-home.manifest create mode 100644 home/res/CMakeLists.txt create mode 100755 home/res/edje/CMakeLists.txt create mode 100755 home/res/edje/circle/CMakeLists.txt create mode 100755 home/res/edje/circle/apps_box.edc create mode 100755 home/res/edje/circle/apps_button.edc create mode 120000 home/res/edje/circle/apps_conf.edc create mode 100755 home/res/edje/circle/apps_grid.edc create mode 100755 home/res/edje/circle/apps_item.edc create mode 100755 home/res/edje/circle/apps_layout.edc create mode 100755 home/res/edje/circle/apps_page.edc create mode 100755 home/res/edje/circle/box_layout.edc create mode 100755 home/res/edje/circle/clock_shortcut.edc create mode 120000 home/res/edje/circle/conf.edc create mode 100644 home/res/edje/circle/dynamicbox.edc create mode 100755 home/res/edje/circle/edit.edc create mode 100755 home/res/edje/circle/index.edc create mode 100755 home/res/edje/circle/layout.edc create mode 100755 home/res/edje/circle/noti.edc create mode 100755 home/res/edje/circle/page.edc create mode 100755 home/res/edje/circle/page_clock.edc create mode 100644 home/res/edje/circle/popup.edc create mode 100755 home/res/edje/circle/preview.edc create mode 100644 home/res/edje/color_classes.edc create mode 100755 home/res/edje/images/Arrow_S_00015.png create mode 100755 home/res/edje/images/Arrow_S_00016.png create mode 100755 home/res/edje/images/Arrow_S_00017.png create mode 100755 home/res/edje/images/Arrow_S_00018.png create mode 100755 home/res/edje/images/Arrow_S_00019.png create mode 100755 home/res/edje/images/Arrow_S_00020.png create mode 100755 home/res/edje/images/Arrow_S_00021.png create mode 100755 home/res/edje/images/Arrow_S_00022.png create mode 100755 home/res/edje/images/Arrow_S_00023.png create mode 100755 home/res/edje/images/Arrow_S_00024.png create mode 100755 home/res/edje/images/Arrow_S_00025.png create mode 100755 home/res/edje/images/Arrow_S_00026.png create mode 100755 home/res/edje/images/Arrow_S_00027.png create mode 100755 home/res/edje/images/Arrow_S_00028.png create mode 100755 home/res/edje/images/Arrow_S_00029.png create mode 100755 home/res/edje/images/Arrow_S_00030.png create mode 100755 home/res/edje/images/Arrow_S_00031.png create mode 100755 home/res/edje/images/Arrow_S_00032.png create mode 100755 home/res/edje/images/Arrow_S_00033.png create mode 100755 home/res/edje/images/B3_Data.png create mode 100755 home/res/edje/images/b_favorite_app_line.png create mode 100755 home/res/edje/images/b_home_screen_add_widget_line.#.png create mode 100755 home/res/edje/images/b_home_screen_badge_large_bg.#.png create mode 100755 home/res/edje/images/b_home_screen_badge_large_line.#.png create mode 100755 home/res/edje/images/b_home_screen_badge_large_shadow.#.png create mode 100755 home/res/edje/images/b_home_screen_block_btn_bg.#.png create mode 100755 home/res/edje/images/b_home_screen_block_btn_bg.png create mode 100755 home/res/edje/images/b_home_screen_block_btn_bg02.#.png create mode 100755 home/res/edje/images/b_home_screen_block_btn_ic.png create mode 100755 home/res/edje/images/b_home_screen_block_btn_line.#.png create mode 100755 home/res/edje/images/b_home_screen_block_btn_line.png create mode 100755 home/res/edje/images/b_home_screen_block_btn_line02.#.png create mode 100755 home/res/edje/images/b_home_screen_block_text_btn_bg.#.png create mode 100755 home/res/edje/images/b_home_screen_block_text_btn_line.#.png create mode 100755 home/res/edje/images/b_home_screen_btn_bg.#.png create mode 100755 home/res/edje/images/b_home_screen_btn_line.#.png create mode 100755 home/res/edje/images/b_home_screen_clock_arrow.png create mode 100755 home/res/edje/images/b_home_screen_clock_arrow_big.png create mode 100755 home/res/edje/images/b_home_screen_clock_arrow_big_ef.png create mode 100755 home/res/edje/images/b_home_screen_clock_block_icon.png create mode 100755 home/res/edje/images/b_home_screen_edit_cover.png create mode 100755 home/res/edje/images/b_home_screen_edit_cover_ef.png create mode 100755 home/res/edje/images/b_home_screen_favorite_badge_bg.#.png create mode 100755 home/res/edje/images/b_home_screen_favorite_badge_line.#.png create mode 100755 home/res/edje/images/b_home_screen_favorite_edit_icon.png create mode 100755 home/res/edje/images/b_home_screen_favorite_more_icon.png create mode 100755 home/res/edje/images/b_home_screen_network_auto.png create mode 100755 home/res/edje/images/b_home_screen_network_off.png create mode 100755 home/res/edje/images/b_home_screen_network_on.png create mode 100755 home/res/edje/images/b_home_screen_power_saving_block_icon.png create mode 100755 home/res/edje/images/b_home_screen_recent_icon.png create mode 100755 home/res/edje/images/b_home_screen_widget_check.png create mode 100755 home/res/edje/images/b_home_screen_widget_check_ef.png create mode 100755 home/res/edje/images/b_home_screen_widget_del_bg.png create mode 100755 home/res/edje/images/b_home_screen_widget_del_icon.png create mode 100755 home/res/edje/images/b_home_screen_widget_del_line.png create mode 100755 home/res/edje/images/b_home_screen_widget_line.#.png create mode 100755 home/res/edje/images/b_home_screen_widget_line_ef.png create mode 100755 home/res/edje/images/b_home_screen_widget_plus.png create mode 100755 home/res/edje/images/b_home_screen_widget_plus_ef.png create mode 100755 home/res/edje/images/b_home_screen_widget_plus_origin.png create mode 100755 home/res/edje/images/b_widget_favorite_bg.png create mode 100755 home/res/edje/images/bouncing_bottom_edge.png create mode 100755 home/res/edje/images/bouncing_bottom_glow.png create mode 100755 home/res/edje/images/bouncing_left_edge.png create mode 100755 home/res/edje/images/bouncing_left_glow.png create mode 100755 home/res/edje/images/bouncing_right_edge.png create mode 100755 home/res/edje/images/bouncing_right_glow.png create mode 100755 home/res/edje/images/do_not_ic_disturb.png create mode 100755 home/res/edje/images/do_not_ic_donot_now.png create mode 100755 home/res/edje/images/favorite_contact_bg_cover.png create mode 100755 home/res/edje/images/indicator_clock_on_focused.png create mode 100755 home/res/edje/images/indicator_clock_on_focused_ef.png create mode 100755 home/res/edje/images/indicator_clock_on_normal.png create mode 100755 home/res/edje/images/indicator_clock_on_normal_ef.png create mode 100755 home/res/edje/images/indicator_on_focused.png create mode 100755 home/res/edje/images/indicator_on_focused_ef.png create mode 100755 home/res/edje/images/indicator_on_normal.png create mode 100755 home/res/edje/images/indicator_on_normal_ef.png create mode 100755 home/res/edje/images/indicator_panel_on_focused.png create mode 100755 home/res/edje/images/indicator_panel_on_focused_ef.png create mode 100755 home/res/edje/images/indicator_panel_on_normal.png create mode 100755 home/res/edje/images/indicator_panel_on_normal_ef.png create mode 100755 home/res/edje/images/overlay000_image.png create mode 100755 home/res/edje/images/overlay00_bg_cover.png create mode 100755 home/res/edje/images/overlay01_bg_cover.png create mode 100755 home/res/edje/images/overlay05_bg_cover.png create mode 100755 home/res/edje/images/overlay06_bg_cover.png create mode 100755 home/res/edje/images/overlay08_bg_cover.png create mode 100755 home/res/edje/images/overlay_button.#.png create mode 100755 home/res/edje/images/overlay_button_press.#.png create mode 100755 home/res/edje/images/overlay_close.png create mode 100755 home/res/edje/images/overlay_cue.png create mode 100755 home/res/edje/images/overlay_start_button.png create mode 100755 home/res/edje/images/overlay_start_button_press.png create mode 100755 home/res/edje/images/overlay_swipe_down.png create mode 100755 home/res/edje/images/overlay_swipe_left.png create mode 100755 home/res/edje/images/overlay_swipe_right.png create mode 100755 home/res/edje/images/overlay_swipe_up.png create mode 100755 home/res/edje/images/w_cover_view_ic_delete.png create mode 100755 home/res/edje/images/widget_circle_bg.png create mode 100755 home/res/edje/images/widget_circle_bg_ef.png create mode 100755 home/res/edje/images/widget_circle_bg_stroke.png create mode 100755 home/res/edje/images/widget_music_player_bg_cover.png create mode 100755 home/res/edje/rectangle/CMakeLists.txt create mode 100755 home/res/edje/rectangle/apps_box.edc create mode 100755 home/res/edje/rectangle/apps_button.edc create mode 120000 home/res/edje/rectangle/apps_conf.edc create mode 100755 home/res/edje/rectangle/apps_grid.edc create mode 100755 home/res/edje/rectangle/apps_item.edc create mode 100755 home/res/edje/rectangle/apps_layout.edc create mode 100755 home/res/edje/rectangle/apps_page.edc create mode 100755 home/res/edje/rectangle/box_layout.edc create mode 100755 home/res/edje/rectangle/clock_shortcut.edc create mode 120000 home/res/edje/rectangle/conf.edc create mode 100644 home/res/edje/rectangle/dynamicbox.edc create mode 100755 home/res/edje/rectangle/edit.edc create mode 100755 home/res/edje/rectangle/index.edc create mode 100755 home/res/edje/rectangle/layout.edc create mode 100755 home/res/edje/rectangle/noti.edc create mode 100755 home/res/edje/rectangle/page.edc create mode 100755 home/res/edje/rectangle/page_clock.edc create mode 100644 home/res/edje/rectangle/popup.edc create mode 100755 home/res/edje/rectangle/preview.edc create mode 100755 home/res/edje/rectangle/tutorial.edc create mode 100755 home/res/icon/CMakeLists.txt create mode 100755 home/res/icon/org.tizen.w-home.png create mode 100755 home/res/icon/org.tizen.w-home.small.png create mode 100644 home/res/image/CMakeLists.txt create mode 100755 home/res/image/b_home_screen_widget_line.png create mode 100755 home/res/image/unknown.png create mode 100755 home/res/image/widget_circle_bg_stroke.png create mode 100755 home/res/list/CMakeLists.txt create mode 100644 home/res/list/tts_black.list create mode 100644 home/res/list/tts_white.list create mode 100755 home/res/ordering/CMakeLists.txt create mode 100755 home/res/ordering/apps_default_items.xml create mode 100755 home/res/ordering/apps_default_items_ATT.xml create mode 100755 home/res/ordering/default_favorite_apps.xml create mode 100755 home/res/ordering/default_favorite_apps_emergency.xml create mode 100755 home/res/ordering/default_favorite_apps_emulator.xml create mode 100755 home/res/ordering/default_favorite_apps_without_camera.xml create mode 100755 home/res/ordering/default_favorite_apps_without_camera_sleep.xml create mode 100755 home/res/ordering/default_favorite_apps_without_hr.xml create mode 100755 home/res/ordering/default_favorite_apps_without_sleep.xml create mode 100755 home/res/ordering/default_items.xml create mode 100755 home/res/ordering/default_items_tts.xml create mode 100755 home/res/ordering/settings.xml create mode 100755 home/res/po/CMakeLists.txt create mode 100755 home/res/po/ar.po create mode 100755 home/res/po/as.po create mode 100755 home/res/po/az.po create mode 100755 home/res/po/bg.po create mode 100755 home/res/po/bn.po create mode 100755 home/res/po/ca.po create mode 100755 home/res/po/cs.po create mode 100755 home/res/po/da.po create mode 100755 home/res/po/de.po create mode 100755 home/res/po/el_GR.po create mode 100755 home/res/po/en.po create mode 100755 home/res/po/en_PH.po create mode 100755 home/res/po/en_US.po create mode 100755 home/res/po/es_ES.po create mode 100755 home/res/po/es_US.po create mode 100755 home/res/po/et.po create mode 100755 home/res/po/eu.po create mode 100755 home/res/po/fa.po create mode 100755 home/res/po/fi.po create mode 100755 home/res/po/fr.po create mode 100755 home/res/po/fr_CA.po create mode 100755 home/res/po/ga.po create mode 100755 home/res/po/gl.po create mode 100755 home/res/po/gu.po create mode 100755 home/res/po/he.po create mode 100755 home/res/po/hi.po create mode 100755 home/res/po/hr.po create mode 100755 home/res/po/hu.po create mode 100755 home/res/po/hy.po create mode 100755 home/res/po/id.po create mode 100755 home/res/po/is.po create mode 100755 home/res/po/it_IT.po create mode 100755 home/res/po/ja_JP.po create mode 100755 home/res/po/ka.po create mode 100755 home/res/po/kk.po create mode 100755 home/res/po/km.po create mode 100755 home/res/po/kn.po create mode 100755 home/res/po/ko_KR.po create mode 100755 home/res/po/ky_KG.po create mode 100755 home/res/po/lo.po create mode 100755 home/res/po/lt.po create mode 100755 home/res/po/lv.po create mode 100755 home/res/po/mk.po create mode 100755 home/res/po/ml.po create mode 100755 home/res/po/mn_MN.po create mode 100755 home/res/po/mr.po create mode 100755 home/res/po/ms.po create mode 100755 home/res/po/my.po create mode 100755 home/res/po/nb.po create mode 100755 home/res/po/ne.po create mode 100755 home/res/po/nl.po create mode 100755 home/res/po/or.po create mode 100755 home/res/po/pa.po create mode 100755 home/res/po/pl.po create mode 100755 home/res/po/pt_BR.po create mode 100755 home/res/po/pt_PT.po create mode 100755 home/res/po/ro.po create mode 100755 home/res/po/ru_RU.po create mode 100755 home/res/po/si.po create mode 100755 home/res/po/sk.po create mode 100755 home/res/po/sl.po create mode 100755 home/res/po/sq.po create mode 100755 home/res/po/sr.po create mode 100755 home/res/po/sv.po create mode 100755 home/res/po/ta.po create mode 100755 home/res/po/te.po create mode 100755 home/res/po/tg_TJ.po create mode 100755 home/res/po/th.po create mode 100755 home/res/po/tk_TM.po create mode 100755 home/res/po/tl.po create mode 100755 home/res/po/tr_TR.po create mode 100755 home/res/po/uk.po create mode 100755 home/res/po/update-po.sh create mode 100755 home/res/po/ur.po create mode 100755 home/res/po/uz.po create mode 100755 home/res/po/vi.po create mode 100755 home/res/po/zh_CN.po create mode 100755 home/res/po/zh_HK.po create mode 100755 home/res/po/zh_TW.po create mode 100644 home/src/add-viewer.c create mode 100644 home/src/add-viewer_package.c create mode 100755 home/src/add-viewer_pkgmgr.c create mode 100755 home/src/add-viewer_ucol.c create mode 100755 home/src/add-viewer_util.c create mode 100755 home/src/apps/apps_main.c create mode 100755 home/src/apps/bg.c create mode 100755 home/src/apps/db.c create mode 100755 home/src/apps/effect.c create mode 100755 home/src/apps/grid.c create mode 100755 home/src/apps/item.c create mode 100755 home/src/apps/item_badge.c create mode 100755 home/src/apps/item_info.c create mode 100755 home/src/apps/lang.c create mode 100755 home/src/apps/layout.c create mode 100644 home/src/apps/list.c create mode 100755 home/src/apps/page.c create mode 100755 home/src/apps/pkgmgr.c create mode 100755 home/src/apps/scroller.c create mode 100755 home/src/apps/xml.c create mode 100755 home/src/bg.c create mode 100755 home/src/clock_event.c create mode 100755 home/src/clock_inf_minictrl.c create mode 100644 home/src/clock_inf_widget.c create mode 100755 home/src/clock_manager.c create mode 100755 home/src/clock_service.c create mode 100755 home/src/clock_shortcut.c create mode 100755 home/src/clock_util.c create mode 100755 home/src/clock_view.c create mode 100644 home/src/clock_view_cue.c create mode 100755 home/src/clock_view_hidden.c create mode 100644 home/src/clock_view_indicator.c create mode 100755 home/src/critical_log.c create mode 100644 home/src/db.c create mode 100755 home/src/dbus.c create mode 100755 home/src/dbus_util.c create mode 100755 home/src/edit.c create mode 100755 home/src/effect.c create mode 100755 home/src/gesture.c create mode 100644 home/src/index.c create mode 100755 home/src/item_info.c create mode 100755 home/src/key.c create mode 100755 home/src/lang.c create mode 100755 home/src/layout.c create mode 100755 home/src/main.c create mode 100755 home/src/mapbuf.c create mode 100755 home/src/minictrl.c create mode 100755 home/src/minictrl_manager.c create mode 100755 home/src/minictrl_util.c create mode 100755 home/src/noti_broker.c create mode 100644 home/src/notification/detail.c create mode 100644 home/src/notification/notification.c create mode 100644 home/src/notification/simple.c create mode 100644 home/src/notification/summary.c create mode 100644 home/src/notification/time.c create mode 100644 home/src/page.c create mode 100644 home/src/page_info.c create mode 100644 home/src/pkgmgr.c create mode 100755 home/src/popup.c create mode 100755 home/src/power_mode.c create mode 100755 home/src/scroller.c create mode 100755 home/src/tutorial.c create mode 100755 home/src/util.c create mode 100755 home/src/virtual_canvas.c create mode 100644 home/src/widget.c create mode 100755 home/src/win.c create mode 100755 home/src/wms.c create mode 100755 home/src/xml.c create mode 100755 packaging/org.tizen.w-home.spec diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..3a169fb --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,5 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +ADD_SUBDIRECTORY(home) + +# End of a file 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 100644 index 0000000..b2e5019 --- /dev/null +++ b/NOTICE @@ -0,0 +1 @@ +Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. diff --git a/home/CMakeLists.txt b/home/CMakeLists.txt new file mode 100755 index 0000000..7fcb49e --- /dev/null +++ b/home/CMakeLists.txt @@ -0,0 +1,221 @@ +PROJECT(w-home C) + +IF("${ARCH}" STREQUAL "arm") + OPTION(RUN_ON_DEVICE "Run on device" ON) + ADD_DEFINITIONS("-DRUN_ON_DEVICE") +ELSE() + OPTION(RUN_ON_EMULATOR "Run on emulator" ON) + ADD_DEFINITIONS("-DRUN_ON_EMULATOR") +ENDIF() +MESSAGE("ARCH: ${ARCH}") + +INCLUDE(FindPkgConfig) +pkg_check_modules(PKGS REQUIRED + ail + appcore-efl + aul + badge + bundle + capi-appfw-application + capi-base-utils-i18n + capi-media-player + capi-media-sound-manager + capi-appfw-preference + capi-system-runtime-info + capi-system-device + deviced + dlog + ecore + ecore-x + ecore-evas + ecore-file + ecore-imf + ecore-input + edje + eet + efl-assist + efl-extension + elementary + eina + evas + feedback + libxml-2.0 + widget_viewer_evas + widget_service + minicontrol-viewer + minicontrol-monitor + pkgmgr + pkgmgr-info + syspopup-caller + rua + utilX + vconf + appsvc + capi-system-system-settings + capi-media-image-util + notification + capi-message-port +) + +IF(RUN_ON_DEVICE) +pkg_check_modules(PKGS_ARM REQUIRED + dbus-1 + dbus-glib-1 + glib-2.0 + json + journal + tapi +) +ENDIF() + +IF("${CIRCLE}" STREQUAL "circle") + ADD_DEFINITIONS("-DCIRCLE_TYPE=1") + SET(CIRCLE_TYPE "1") +ELSE() + ADD_DEFINITIONS("-DCIRCLE_TYPE=0") + SET(CIRCLE_TYPE "0") +ENDIF() + +MESSAGE("circle_type : ${CIRCLE}") + +SET(PACKAGE_NAME "org.tizen.${PROJECT_NAME}") +SET(PREFIX "/usr/apps/${PACKAGE_NAME}") +SET(BINDIR "${PREFIX}/bin") +SET(RESDIR "${PREFIX}/res") +SET(DATADIR "/opt${PREFIX}/data") +SET(LOCALEDIR "${RESDIR}/locale") +SET(IMAGEDIR "${RESDIR}/images") +SET(EDJEDIR "${RESDIR}/edje/${CIRCLE}") +SET(ICONDIR "/usr/share/icons/default/small") + +REMOVE_DEFINITIONS("-DLOG_TAG") +ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") +ADD_DEFINITIONS("-DPROJECT=\"${PROJECT_NAME}\"") +ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE_NAME}\"") +ADD_DEFINITIONS("-DVERSION=\"${VERSION}\"") +ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"") +ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"") +ADD_DEFINITIONS("-DIMAGEDIR=\"${IMAGEDIR}\"") +ADD_DEFINITIONS("-DEDJEDIR=\"${EDJEDIR}\"") +ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"") +ADD_DEFINITIONS("-DWIDGET_EVAS_RESOURCE_EDJ=\"${EDJEDIR}/widget.edj\"") +ADD_DEFINITIONS("-DWIDGET_EVAS_RESOURCE_PD=\"gbar\"") +ADD_DEFINITIONS("-DWIDGET_EVAS_RESOURCE_LB=\"widget\"") +ADD_DEFINITIONS("-DWIDGET_EVAS_RESOURCE_IMG=\"widget,image\"") +ADD_DEFINITIONS("-DENABLE_INDICATOR_BRIEFING_VIEW") + +IF("${CMAKE_BUILD_TYPE}" STREQUAL "") + SET(CMAKE_BUILD_TYPE "Release") +ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "") +MESSAGE("Build type: ${CMAKE_BUILD_TYPE}") + +FOREACH(flag ${PKGS_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) +FOREACH(flag ${PKGS_ARM_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(PRIVATE_C_FLAGS "-I${CMAKE_CURRENT_SOURCE_DIR}/include") +SET(CMAKE_C_FLAGS " ${PRIVATE_C_FLAGS} ${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIE ${ADD_VIEWER_CFLAGS}") +SET(CMAKE_C_FLAGS_PROFILING "-O0 -g -pg -fPIE") +SET(CMAKE_CXX_FLAGS_PROFILING "-O0 -std=c++0x -g -pg -fPIE") +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -fPIE") +SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -std=c++0x -g -fPIE") +SET(CMAKE_C_FLAGS_RELEASE "-O2 -g -fPIE") +SET(CMAKE_CXX_FLAGS_RELEASE "-O2 -std=c++0x -g -fPIE") +SET(CMAKE_C_FLAGS_CCOV "-O2 -g --coverage -fPIE") +SET(CMAKE_CXX_FLAGS_CCOV "-O2 -std=c++0x -g --coverage -fPIE") + +SET(EXTRA_LDFLAGS "-ldl") +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${PREFIX}/lib -pie") + +FIND_PROGRAM(UNAME NAMES uname) +EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH") + +#INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) + +ADD_EXECUTABLE(${PROJECT_NAME} + src/bg.c + src/clock_shortcut.c + src/clock_service.c + src/clock_event.c + src/clock_manager.c + src/clock_inf_widget.c + src/clock_inf_minictrl.c + src/clock_manager.c + src/clock_util.c + src/clock_view.c + src/clock_view_cue.c + src/clock_view_hidden.c + src/clock_view_indicator.c + src/db.c + src/dbus.c + src/dbus_util.c + src/edit.c + src/effect.c + src/power_mode.c + src/gesture.c + src/index.c + src/item_info.c + src/key.c + src/lang.c + src/layout.c + src/widget.c + src/main.c + src/mapbuf.c + src/noti_broker.c + src/minictrl.c + src/minictrl_util.c + src/minictrl_manager.c + src/page.c + src/page_info.c + src/popup.c + src/scroller.c + src/tutorial.c + src/util.c + src/virtual_canvas.c + src/win.c + src/xml.c + src/pkgmgr.c + src/add-viewer.c + src/add-viewer_pkgmgr.c + src/add-viewer_ucol.c + src/add-viewer_util.c + src/add-viewer_package.c + src/wms.c + src/apps/bg.c + src/apps/db.c + src/apps/effect.c + src/apps/item.c + src/apps/item_badge.c + src/apps/item_info.c + src/apps/lang.c + src/apps/layout.c + src/apps/list.c + src/apps/apps_main.c + src/apps/page.c + src/apps/pkgmgr.c + src/apps/scroller.c + src/apps/xml.c + src/critical_log.c + src/notification/detail.c + src/notification/notification.c + src/notification/simple.c + src/notification/summary.c + src/notification/time.c +) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS} ${EXTRA_LDFLAGS} -lm -Wl,--hash-style=both -Wl,--as-needed -pie ) +IF(RUN_ON_DEVICE) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_ARM_LDFLAGS} -lm) +ENDIF() + +# Install +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR}) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE.flora DESTINATION /usr/share/license RENAME ${PACKAGE_NAME}) + +ADD_SUBDIRECTORY(data) +ADD_SUBDIRECTORY(res) + +# End of a file diff --git a/home/data/500.w-home.patch.sh b/home/data/500.w-home.patch.sh new file mode 100644 index 0000000..3d40bfc --- /dev/null +++ b/home/data/500.w-home.patch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +#-------------------------------------- +# W-Home +#-------------------------------------- + +# user data + +# vconf +/usr/bin/vconftool set -t int "db/private/org.tizen.w-home/apps_initial_popup" 1 -g 5000 -s org.tizen.w-home +/usr/bin/vconftool set -t string "memory/homescreen/music_status" ";" -i -g 5000 -f -s system::vconf_system + +# db + +# smack diff --git a/home/data/CMakeLists.txt b/home/data/CMakeLists.txt new file mode 100755 index 0000000..805c9da --- /dev/null +++ b/home/data/CMakeLists.txt @@ -0,0 +1,12 @@ +SET(CHANGEABLEDIR "${PREFIX}/shared/res/tables") + +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}.xml.in ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}.xml) +INSTALL(FILES ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}.xml DESTINATION /usr/share/packages) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}.efl DESTINATION /etc/smack/accesses.d) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_ChangeableColorInfo.xml DESTINATION ${CHANGEABLEDIR}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_ChangeableFontInfo.xml DESTINATION ${CHANGEABLEDIR}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_apps_ChangeableColorInfo.xml DESTINATION ${CHANGEABLEDIR}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_apps_ChangeableFontInfo.xml DESTINATION ${CHANGEABLEDIR}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dump_w-home.sh DESTINATION /opt/etc/dump.d/module.d/ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/home_reset.sh PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ DESTINATION ${RESDIR}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/500.w-home.patch.sh PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ DESTINATION /etc/opt/upgrade) diff --git a/home/data/dump_w-home.sh b/home/data/dump_w-home.sh new file mode 100755 index 0000000..453b478 --- /dev/null +++ b/home/data/dump_w-home.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +W_HOME_DEBUG=$1/w-home +mkdir -p ${W_HOME_DEBUG} +/bin/cp -r /tmp/.w-home_log ${W_HOME_DEBUG}/log diff --git a/home/data/home_reset.sh b/home/data/home_reset.sh new file mode 100755 index 0000000..a5cd320 --- /dev/null +++ b/home/data/home_reset.sh @@ -0,0 +1,19 @@ +#!/bin/sh +#--------------------------------------------- +# w3-home +#--------------------------------------------- + +# vconf reset +/usr/bin/vconftool set -t int "memory/private/org.tizen.w-home/tutorial" 0 -i -g 5000 -f -s org.tizen.w-home +/usr/bin/vconftool set -t int "db/private/org.tizen.w-home/enabled_tutorial" 1 -g 5000 -f -s org.tizen.w-home +/usr/bin/vconftool set -t int "db/private/org.tizen.w-home/apps_first_boot" 1 -g 5000 -f -s org.tizen.w-home +/usr/bin/vconftool set -t int "db/private/org.tizen.w-home/apps_flickup_count" 0 -g 5000 -f -s org.tizen.w-home +/usr/bin/vconftool set -t int "db/private/org.tizen.w-home/apps_initial_popup" 1 -g 5000 -f -s org.tizen.w-home +/usr/bin/vconftool set -t string "db/private/org.tizen.w-home/logging" ";" -g 5000 -f -s csystem::vconf_system +/usr/bin/vconftool set -t int "memory/homescreen/clock_visibility" 0 -i -g 5000 -f -s system::vconf_system +/usr/bin/vconftool set -t string "memory/homescreen/music_status" ";" -i -g 5000 -f -s system::vconf_system +/usr/bin/vconftool set -t int "memory/private/org.tizen.w-home/auto_feed" 1 -i -g 5000 -f -s org.tizen.w-home +/usr/bin/vconftool set -t int "memory/private/org.tizen.w-home/sensitive_move" 1 -i -g 5000 -f -s org.tizen.w-home + +#badge DB reset +/usr/bin/sqlite3 /opt/dbspace/.badge.db "delete from badge_data; delete from badge_option; VACUUM;" diff --git a/home/data/org.tizen.w-home.efl b/home/data/org.tizen.w-home.efl new file mode 100644 index 0000000..7655cb2 --- /dev/null +++ b/home/data/org.tizen.w-home.efl @@ -0,0 +1,82 @@ +org.tizen.w-home device::app_logging -w---- ------ +org.tizen.w-home system::use_internet r----- ------ +org.tizen.w-home net-config r----- ------ +org.tizen.w-home xorg rw---- ------ +org.tizen.w-home isf rwx--- ------ +org.tizen.w-home sound_server rw---- ------ +org.tizen.w-home syspopup::db rw---- ------ +org.tizen.w-home dbus rwx--- ------ +org.tizen.w-home pulseaudio rwxat- ------ +org.tizen.w-home ail::db rw---- ------ +org.tizen.w-home connman r----- ------ +org.tizen.w-home system rwx--- ------ +org.tizen.w-home immvibed rw---- ------ +org.tizen.w-home svi-data r-x--- ------ +org.tizen.w-home e17 r-x--- ------ +org.tizen.w-home system::vconf rwxat- ------ +org.tizen.w-home system::vconf_setting rwx--l ------ +org.tizen.w-home system::vconf_inhouse rw---- ------ +org.tizen.w-home system::vconf_system rwxat- ------ +org.tizen.w-home system::vconf_multimedia rw---- ------ +org.tizen.w-home system::vconf_network rwxat- ------ +org.tizen.w-home org.tizen.shealth::vconf rwxat- ------ +org.tizen.w-home deviced rwx--- ------ +org.tizen.w-home deviced::display rw---- ------ +org.tizen.w-home testmode::vconf r----- ------ +org.tizen.w-home data-provider-master::db rw---- ------ +org.tizen.w-home data-provider-master::share rwxat- ------ +org.tizen.w-home data-provider-master::client rw---- ------ +org.tizen.w-home data-provider-master::data r-x--- ------ +org.tizen.w-home data-provider-master rw---- ------ +org.tizen.w-home org.tizen.alarm rwx--- ------ +org.tizen.w-home org.tizen.message rwx--- ------ +org.tizen.w-home org.tizen.setting::system rwx--- ------ +org.tizen.w-home org.tizen.wfmd rwx--- ------ +org.tizen.w-home org.tizen.w-media-controller rwx--- ------ +org.tizen.w-home org.tizen.w-music-player rwx--- ------ +org.tizen.w-home org.tizen.wnotification2 rwx--- ------ +org.tizen.w-home pkgmgr::db rwx--l ------ +org.tizen.w-home pkgmgr-client r-x--- ------ +org.tizen.w-home pkgmgr::svc r-x--- ------ +org.tizen.w-home pkgmgr::info r----- ------ +org.tizen.w-home efreet rwx--- ------ +org.tizen.w-home org.tizen.shealth rwx--- ------ +org.tizen.w-home org.tizen.w-contacts2 rwx--- ------ +org.tizen.w-home org.tizen.dailybriefing-weather rwx--- ------ +org.tizen.w-home org.tizen.w-calendar2 rwx--- ------ +org.tizen.w-home org.tizen.clocksetting rwx--- ------ +org.tizen.w-home org.tizen.clocksetting::default-resources r-x--- ------ +org.tizen.w-home org.tizen.w-idle-clock-weather2 rwx--- ------ +org.tizen.w-home org.tizen.idle-clock-pedometer rwx--- ------ +org.tizen.w-home org.tizen.idle-clock-style01 rwx--- ------ +org.tizen.w-home org.tizen.idle-clock-style02 rwx--- ------ +org.tizen.w-home org.tizen.idle-clock-style03 rwx--- ------ +org.tizen.w-home org.tizen.idle-clock-style04 rwx--- ------ +org.tizen.w-home org.tizen.idle-clock-style05 rwx--- ------ +org.tizen.w-home org.tizen.idle-clock-style06 rwx--- ------ +org.tizen.w-home org.tizen.idle-clock-style07 rwx--- ------ +org.tizen.w-home org.tizen.idle-clock-style08 rwx--- ------ +org.tizen.w-home org.tizen.idle-clock-style09 rwx--- ------ +org.tizen.w-home org.tizen.idle-clock-style10 rwx--- ------ +org.tizen.w-home badge::db rw---- ------ +org.tizen.w-home data-provider-master::badge rw---- ------ +org.tizen.w-home data-provider-master::badge.client -w---- ------ +org.tizen.w-home aul::launch --x--- ------ +org.tizen.w-home aul::terminate --x--- ------ +org.tizen.w-home csc-feature r----- ------ +org.tizen.w-home web-card-daemon.cardview rwxat- ------ +org.tizen.w-home web-card-viewer.cardview rwxat- ------ +aul org.tizen.w-home r-x--- ------ +dbus org.tizen.w-home rwx--- ------ +system org.tizen.w-home -w---- ------ +org.tizen.w-home system::homedir rwxat- ------ +org.tizen.w-home system::media rwxat- ------ +org.tizen.w-home system::share rwxat- ------ +e17 org.tizen.w-home -w---- ------ +org.tizen.w-home sys-assert::core rwxat- ------ +stest-service org.tizen.w-home r-x--- ------ +org.tizen.w-home stest-service -w---- ------ +org.tizen.w-home privacy-manager::db r----l ------ +org.tizen.w-home system::vconf_privacy rw---- ------ +org.tizen.w-home system::vconf_misc rw---- ------ +org.tizen.w-home ecore::lock rwxat- ------ diff --git a/home/data/org.tizen.w-home.xml.in b/home/data/org.tizen.w-home.xml.in new file mode 100755 index 0000000..9d77fc5 --- /dev/null +++ b/home/data/org.tizen.w-home.xml.in @@ -0,0 +1,22 @@ + + + + Youngsub Ko + Jin Yoon + W-Home Application + + + org.tizen.w-home.png + org.tizen.w-home.small.png + + + + http://tizen.org/privilege/setting + http://tizen.org/privilege/power + http://tizen.org/privilege/notification + http://tizen.org/privilege/application.launch + http://tizen.org/privilege/messaging.read + http://tizen.org/privilege/messaging.write + http://tizen.org/privilege/contact.read + + diff --git a/home/data/org.tizen.w-home_ChangeableColorInfo.xml b/home/data/org.tizen.w-home_ChangeableColorInfo.xml new file mode 100755 index 0000000..01fba63 --- /dev/null +++ b/home/data/org.tizen.w-home_ChangeableColorInfo.xml @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/home/data/org.tizen.w-home_ChangeableFontInfo.xml b/home/data/org.tizen.w-home_ChangeableFontInfo.xml new file mode 100755 index 0000000..2fecf7a --- /dev/null +++ b/home/data/org.tizen.w-home_ChangeableFontInfo.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/home/data/org.tizen.w-home_apps_ChangeableColorInfo.xml b/home/data/org.tizen.w-home_apps_ChangeableColorInfo.xml new file mode 100755 index 0000000..6b91984 --- /dev/null +++ b/home/data/org.tizen.w-home_apps_ChangeableColorInfo.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/home/data/org.tizen.w-home_apps_ChangeableFontInfo.xml b/home/data/org.tizen.w-home_apps_ChangeableFontInfo.xml new file mode 100755 index 0000000..4a18b5b --- /dev/null +++ b/home/data/org.tizen.w-home_apps_ChangeableFontInfo.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/home/include/add-viewer.h b/home/include/add-viewer.h new file mode 100644 index 0000000..92fd53d --- /dev/null +++ b/home/include/add-viewer.h @@ -0,0 +1,49 @@ +/* + * Samsung API + * Copyright (c) 2013 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. + */ + +/** + * Smart callback + * "selected" + * "dnd" + */ + +struct add_viewer_event_info { + struct { + Evas_Object *obj; + } move; + + struct { + const char *widget_id; + const char *content; + int size_type; + int duplicated; + Evas_Object *image; + } pkg_info; +}; + +enum ADD_VIEWER_CONF_OPTION { + ADD_VIEWER_CONF_DND = 0x01 +}; + +extern void evas_object_add_viewer_init(void); +extern void evas_object_add_viewer_fini(void); +extern Evas_Object *evas_object_add_viewer_add(Evas_Object *parent); +extern void evas_object_add_viewer_conf_set(int type, int flag); +extern int evas_object_add_viewer_access_action(Evas_Object *obj, int type, void *info); +extern int evas_object_add_viewer_reload(void); + +/* End of a file */ diff --git a/home/include/add-viewer_debug.h b/home/include/add-viewer_debug.h new file mode 100755 index 0000000..968841a --- /dev/null +++ b/home/include/add-viewer_debug.h @@ -0,0 +1,88 @@ +/* + * Samsung API + * Copyright (c) 2013 Samsung Electronics Co., Ltd. + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if !defined(SECURE_LOGD) +#define SECURE_LOGD LOGD +#endif + +#if !defined(SECURE_LOGW) +#define SECURE_LOGW LOGW +#endif + +#if !defined(SECURE_LOGE) +#define SECURE_LOGE LOGE +#endif + +#if !defined(S_) +#define S_(str) dgettext("sys_string", str) +#endif + +#if !defined(T_) +#define T_(str) dgettext(PACKAGE, str) +#endif + +#if !defined(N_) +#define N_(str) (str) +#endif + +#if !defined(_) +#define _(str) gettext(str) +#endif + + +#if !defined(DbgPrint) +#define DbgPrint(format, arg...) SECURE_LOGD(format, ##arg) +#endif + +#if !defined(ErrPrint) +#define ErrPrint(format, arg...) SECURE_LOGE(format, ##arg) +#endif + +#if !defined(WarnPrint) +#define WarnPrint(format, arg...) SECURE_LOGW(format, ##arg) +#endif + +#define HAPI __attribute__((visibility("hidden"))) + +#if !defined(SERVICE_OPERATION_WIDGET_SETUP) +#define SERVICE_OPERATION_WIDGET_SETUP "http://tizen.org/appcontrol/operation/appwidget/configuration" +#endif + +#if !defined(SERVICE_OPERATION_SAMSUNG_WIDGET_SETUP_MULTIPLE) +#define SERVICE_OPERATION_SAMSUNG_WIDGET_SETUP_MULTIPLE "http://samsung.com/appcontrol/operation/appwidget/configuration_multiple" +#endif + +#if !defined(EXTRA_KEY_PROVIDER_NAME) +#define EXTRA_KEY_PROVIDER_NAME "http://tizen.org/appcontrol/data/provider_name" +#endif + +#if !defined(EXTRA_KEY_CONTENT_INFO) +#define EXTRA_KEY_CONTENT_INFO "http://tizen.org/appcontrol/data/user_info" +#endif + +#if !defined(EXTRA_KEY_CONTENT_INFO_LIST) +#define EXTRA_KEY_CONTENT_INFO_LIST "http://samsung.com/appcontrol/data/user_info_list" +#endif + +#if !defined(EXTRA_KEY_CONTENT_INFO_COUNT) +#define EXTRA_KEY_CONTENT_INFO_COUNT "http://samsung.com/appcontrol/data/max_items" +#endif + +#define EDJE_FILE EDJEDIR"/preview.edj" +#define UNKNOWN_ICON RESDIR"/images/unknown.png" + +/* End of a file */ diff --git a/home/include/add-viewer_package.h b/home/include/add-viewer_package.h new file mode 100755 index 0000000..d5c9cd6 --- /dev/null +++ b/home/include/add-viewer_package.h @@ -0,0 +1,74 @@ +/* + * Samsung API + * Copyright (c) 2013 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. + */ + +struct add_viewer_package; +struct add_viewer_preview; + +enum package_type { + PACKAGE_TYPE_APP, + PACKAGE_TYPE_SHORTCUT, + PACKAGE_TYPE_BOX, + PACKAGE_TYPE_UNKNOWN, +}; + +enum pkg_evt_type { + PACKAGE_LIST_EVENT_DEL, + PACKAGE_LIST_EVENT_UPDATE, + PACKAGE_LIST_EVENT_RELOAD, +}; + +extern int add_viewer_package_init(void); +extern int add_viewer_package_fini(void); +extern void *add_viewer_package_list_handle(void); +extern struct add_viewer_package *add_viewer_package_list_item(void *handle); +extern void *add_viewer_package_list_next(void *handle); +extern void *add_viewer_package_list_prev(void *handle); +extern void add_viewer_package_list_del(struct add_viewer_package *package); + +extern const char *add_viewer_package_list_name(struct add_viewer_package *package); +extern const char *add_viewer_package_list_pkgname(struct add_viewer_package *package); +extern const char *add_viewer_package_list_icon(struct add_viewer_package *package); +extern int add_viewer_package_list_type(struct add_viewer_package *package); +extern const char *add_viewer_package_list_extra_key(struct add_viewer_package *package); +extern const char *add_viewer_package_list_extra_data(struct add_viewer_package *package); + +extern int add_viewer_package_list_set_name(struct add_viewer_package *package, const char *name); +extern int add_viewer_package_list_set_pkgname(struct add_viewer_package *package, const char *pkgname); +extern int add_viewer_package_list_set_icon(struct add_viewer_package *package, const char *icon); +extern void *add_viewer_package_list_preview_list(struct add_viewer_package *package); +extern struct add_viewer_preview *package_list_preview(struct add_viewer_package *package, void *handle); +extern void *add_viewer_package_list_preview_next(struct add_viewer_package *package, void *handle); +extern void *add_viewer_package_list_preview_prev(struct add_viewer_package *package, void *handle); +extern int add_viewer_package_list_preview_size(struct add_viewer_preview *preview); +extern void *add_viewer_package_list_preview_data(struct add_viewer_preview *preview); +extern void add_viewer_package_list_preview_set_data(struct add_viewer_preview *preview, void *data); +extern int add_viewer_package_is_disabled(struct add_viewer_package *package); +extern void add_viewer_package_set_disabled(struct add_viewer_package *package, int flag); +extern void add_viewer_package_set_skip(struct add_viewer_package *package, int skip); +extern int add_viewer_package_is_skipped(struct add_viewer_package *package); + +extern void add_viewer_package_set_data(struct add_viewer_package *package, void *data); +extern void *add_viewer_package_data(struct add_viewer_package *package); + +extern int add_viewer_package_list_add_event_callback(struct add_viewer_package *package, int event, int (*cb)(struct add_viewer_package *package, void *data), void *data); +extern int add_viewer_package_list_del_event_callback(struct add_viewer_package *package, int event, int (*cb)(struct add_viewer_package *package, void *data), void *data); + +extern int add_viewer_package_is_valid(struct add_viewer_package *package); +extern struct add_viewer_package *add_viewer_package_find(const char *widget_id); +extern int add_viewer_package_reload_name(void); + +/* End of a file */ diff --git a/home/include/add-viewer_pkgmgr.h b/home/include/add-viewer_pkgmgr.h new file mode 100755 index 0000000..6665d5d --- /dev/null +++ b/home/include/add-viewer_pkgmgr.h @@ -0,0 +1,41 @@ +/* + * Samsung API + * Copyright (c) 2013 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. + */ + +enum pkgmgr_event_type { + PKGMGR_EVENT_DOWNLOAD, + PKGMGR_EVENT_INSTALL, + PKGMGR_EVENT_UPDATE, + PKGMGR_EVENT_UNINSTALL, + PKGMGR_EVENT_RECOVER +}; + +enum pkgmgr_status { + PKGMGR_STATUS_START, + PKGMGR_STATUS_PROCESSING, + PKGMGR_STATUS_COMMAND, + PKGMGR_STATUS_END, + PKGMGR_STATUS_ERROR +}; + +extern int add_viewer_pkgmgr_init(void); +extern int add_viewer_pkgmgr_fini(void); + +extern int add_viewer_pkgmgr_add_event_callback(enum pkgmgr_event_type type, int (*cb)(const char *pkgname, enum pkgmgr_status status, double value, void *data), void *data); + +extern void *add_viewer_pkgmgr_del_event_callback(enum pkgmgr_event_type type, int (*cb)(const char *pkgname, enum pkgmgr_status status, double value, void *data), void *data); + +/* End of a file */ diff --git a/home/include/add-viewer_ucol.h b/home/include/add-viewer_ucol.h new file mode 100755 index 0000000..ae24a97 --- /dev/null +++ b/home/include/add-viewer_ucol.h @@ -0,0 +1,44 @@ +/* + * Samsung API + * Copyright (c) 2013 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. + */ + +enum LANGUAGE { + LANG_ENGLISH, + LANG_KOREAN, + LANG_JAPANESS, + LANG_CHINESS, + LANG_UNKNOWN +}; + +extern int add_viewer_ucol_init(void); + +extern int add_viewer_ucol_compare(const char *src, const char *dest); +extern int add_viewer_ucol_case_compare(const char *src, const char *dest); + +extern int add_viewer_ucol_ncompare(const char *src, const char *dest, int len); +extern int add_viewer_ucol_case_ncompare(const char *src, const char *dest, int len); + +extern int add_viewer_ucol_search(const char *haystack, const char *needle); +extern int add_viewer_ucol_case_search(const char *haystack, const char *needle); + +extern int add_viewer_ucol_compare_first_letters(const char *src, const char *letters); +extern int add_viewer_ucol_detect_lang(int ch); +extern int add_viewer_ucol_fini(void); +extern const int add_viewer_ucol_current_lang(void); +extern int add_viewer_ucol_is_alpha(const char *name); + +/* End of a file */ + diff --git a/home/include/add-viewer_util.h b/home/include/add-viewer_util.h new file mode 100755 index 0000000..d16bc63 --- /dev/null +++ b/home/include/add-viewer_util.h @@ -0,0 +1,26 @@ +/* + * Samsung API + * Copyright (c) 2013 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. + */ + +extern int add_viewer_util_add_to_home(struct add_viewer_package *package, int size, int use_noti); +extern int add_viewer_util_init(void); +extern int add_viewer_util_fini(void); +extern int add_viewer_util_is_lcd_off(void); +extern char *add_viewer_util_highlight_keyword(const char *name, const char *filter); +extern int add_viewer_util_get_utf8_len(char ch); +extern void add_viewer_util_update_matched_color(void); + +/* End of a file */ diff --git a/home/include/apps/apps_conf.h b/home/include/apps/apps_conf.h new file mode 100755 index 0000000..40a5e82 --- /dev/null +++ b/home/include/apps/apps_conf.h @@ -0,0 +1,133 @@ +/* + * Samsung API + * Copyright (c) 2013 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 _APPS_CONF_H_ +#define _APPS_CONF_H_ + +/* Layout */ +#define BASE_WIDTH (360.0) +#if CIRCLE_TYPE +#define BASE_HEIGHT (360.0) +#else +#define BASE_HEIGHT (480.0) +#endif + +#define LAYOUT_PAGE_INDICATOR_HEIGHT 40 + +#define LAYOUT_TITLE_BG_HEIGHT 50 +#define LAYOUT_TITLE_BG_MIN 0 LAYOUT_TITLE_BG_HEIGHT + +#define LAYOUT_TITLE_HEIGHT 50 +#define LAYOUT_TITLE_MIN 0 LAYOUT_TITLE_HEIGHT + +#define BUTTON_HEIGHT (69) + +#define GRID_EDIT_HEIGHT (BASE_HEIGHT-LAYOUT_PAGE_INDICATOR_HEIGHT-LAYOUT_TITLE_HEIGHT-LAYOUT_PAD_AFTER_TITLE_HEIGHT-BUTTON_HEIGHT) +#define GRID_NORMAL_HEIGHT (BASE_HEIGHT-LAYOUT_PAGE_INDICATOR_HEIGHT-LAYOUT_TITLE_HEIGHT-LAYOUT_PAD_AFTER_TITLE_HEIGHT) + +#if CIRCLE_TYPE +#define CIRCLE 1 +#define ELM_SCROLLER_REGION_GET(scroller, x) elm_scroller_region_get(scroller, x, NULL, NULL, NULL) +#define ELM_SCROLLER_REGION_BRING_IN(scroller, x) elm_scroller_region_bring_in(scroller, x, 0, BASE_WIDTH, BASE_HEIGHT-1) +#define BOX_TOP_HEIGHT 10 +#define BOX_TOP_MENU_WIDTH 360 +#define BOX_TOP_MENU_HEIGHT 90 +#define BOX_EDIT_TOP_HEIGHT 12 +#define BOX_BOTTOM_HEIGHT 10 +#define BOX_BOTTOM_MENU_HEIGHT 61 + +#define APPS_PAD_W (40+16) +#define APPS_PAGE_PAD_W (16) +#define APPS_PAGE_PAD_H (16) +#define APPS_PAGE_WIDTH (360) +#define APPS_PAGE_HEIGHT (360) + +#define ITEM_WIDTH (216) +#define ITEM_HEIGHT (300) +#define ITEM_EDIT_WIDTH (3+23+95+23+3) +#define ITEM_EDIT_HEIGHT (95+58+7) + +#define ITEM_ICON_WIDTH (176) +#define ITEM_ICON_HEIGHT (176) + +#define SCROLLER_POLICY_VERTICAL ELM_SCROLLER_POLICY_OFF +#define SCROLLER_HORIZONTAL EINA_TRUE +#define SCROLL_DISTANCE BASE_WIDTH +#define SCROLL_PAD 0 +#define PAGE_IN_VIEW 1 +#define SCROLLER_PAGE_LIMIT_HORIZONTAL 1 +#define SCROLLER_PAGE_LIMIT_VERTICAL 0 +#else +#define CIRCLE 0 +#define ELM_SCROLLER_REGION_GET(scroller, y) elm_scroller_region_get(scroller, NULL, y, NULL, NULL) +#define ELM_SCROLLER_REGION_BRING_IN(scroller, y) elm_scroller_region_bring_in(scroller, 0, y, BASE_WIDTH, BASE_HEIGHT-1) +#define BOX_TOP_HEIGHT 5 +#define BOX_EDIT_TOP_HEIGHT 12 +#define BOX_BOTTOM_HEIGHT 18 +#define BOX_BOTTOM_MENU_HEIGHT 86 + +#define APPS_PAGE_WIDTH (300) +#define APPS_PAGE_HEIGHT (134) + +#define ITEM_WIDTH (29+85+29) +#define ITEM_HEIGHT (85+30+9) +#define ITEM_EDIT_WIDTH (3+23+95+23+3) +#define ITEM_EDIT_HEIGHT (95+58+7) + +#define ITEM_ICON_WIDTH (85) +#define ITEM_ICON_HEIGHT (85) + +#define SCROLLER_POLICY_VERTICAL ELM_SCROLLER_POLICY_AUTO +#define SCROLLER_HORIZONTAL EINA_FALSE +#define SCROLL_DISTANCE (174) +#define SCROLL_PAD 150 +#define SCROLLER_PAGE_LIMIT_HORIZONTAL 0 +#define SCROLLER_PAGE_LIMIT_VERTICAL 3 +#define PAGE_IN_VIEW 3 +#endif + +#define ITEM_SMALL_ICON_WIDTH (95) +#define ITEM_SMALL_ICON_HEIGHT (95) + +#define ITEM_ICON_Y (45) +#define ITEM_TEXT_Y (90) + +#define ITEM_BADGE_X (29+87) +#define ITEM_BADGE_Y (14) + +#define ITEM_BADGE_W 54 +#define ITEM_BADGE_H 59 +#define ITEM_BADGE_GAP 17 +#define ITEM_BADGE_2W (ITEM_BADGE_W+ITEM_BADGE_GAP) +#define ITEM_BADGE_3W (ITEM_BADGE_W+(ITEM_BADGE_GAP*2)) + +#define EDIT_BUTTON_SIZE_W (50) +#define EDIT_BUTTON_SIZE_H (50) + +#define CTXPOPUP_ICON_SIZE 49 + +/* Configuration */ +#if CIRCLE_TYPE +#define APPS_PER_PAGE 1 +#else +#define APPS_PER_PAGE 2 +#endif +#define LINE_SIZE 10 +#define LONGPRESS_TIME 0.5f + +#endif // _APPS_CONF_H_ +// End of file diff --git a/home/include/apps/apps_main.h b/home/include/apps/apps_main.h new file mode 100755 index 0000000..36854a5 --- /dev/null +++ b/home/include/apps/apps_main.h @@ -0,0 +1,99 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_MAIN_H__ +#define __APPS_MAIN_H__ + +#include +#include +#include +#include +#include +#include + +#include "util.h" + +typedef struct { + /* Multi-window : Every windows are written in the instance_list. */ + Eina_List *instance_list; + Elm_Theme *theme; + Ea_Theme_Color_Table *color_theme; + Eina_List *font_theme; + int first_boot; + int updated; + double scale; + int tts; + bool longpress_edit_disable; +} apps_main_s; + +typedef struct { + int state; + int root_w; + int root_h; + int booting_state; + int angle; + int is_rotated; + Eina_List *cbs_list[APPS_APP_STATE_MAX]; + Evas *e; + Ecore_Evas *ee; + Evas_Object *win; + Evas_Object *layout; + char *content; +} instance_info_s; + + +enum { + APPS_LAUNCH_INIT = 0, + APPS_LAUNCH_SHOW, + APPS_LAUNCH_EDIT, + APPS_LAUNCH_HIDE, + APPS_LAUNCH_MAX, +}; + +HAPI apps_main_s *apps_main_get_info(void); + +HAPI apps_error_e apps_main_register_cb( + instance_info_s *info, + int state, + apps_error_e (*result_cb)(void *), void *result_data); + +HAPI void apps_main_unregister_cb( + instance_info_s *info, + int state, + apps_error_e (*result_cb)(void *)); + +HAPI void apps_main_init(); +HAPI void apps_main_fini(); +HAPI void apps_main_launch(int launch_type); +HAPI void apps_main_pause(); +HAPI void apps_main_resume(); +HAPI void apps_main_language_chnage(); +HAPI void apps_main_theme_chnage(); +HAPI Eina_Bool apps_main_is_visible(); + +HAPI void apps_main_list_backup(); +HAPI void apps_main_list_restore(); +HAPI void apps_main_list_reset(); + +HAPI void apps_main_list_tts(int is_tts); + +HAPI void apps_main_show_count_add(void); +HAPI int apps_main_show_count_get(void); + +#endif //__APPS_MAIN_H__ + +// End of a file diff --git a/home/include/apps/bg.h b/home/include/apps/bg.h new file mode 100755 index 0000000..4b31496 --- /dev/null +++ b/home/include/apps/bg.h @@ -0,0 +1,26 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_BG_H__ +#define __APPS_BG_H__ + +#include + +extern Evas_Object *apps_bg_create(Evas_Object *win, int w, int h); +extern void apps_bg_destroy(Evas_Object *win); + +#endif /* __W_HOME_BG_H__ */ diff --git a/home/include/apps/db.h b/home/include/apps/db.h new file mode 100755 index 0000000..d3608a7 --- /dev/null +++ b/home/include/apps/db.h @@ -0,0 +1,59 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_DB_H__ +#define __APPS_DB_H__ + +#include + +#include "util.h" + +typedef struct stmt stmt_h; + +apps_error_e apps_db_open(const char *db_file); +stmt_h *apps_db_prepare(const char *query); +apps_error_e apps_db_bind_bool(stmt_h *handle, int idx, bool value); +apps_error_e apps_db_bind_int(stmt_h *handle, int idx, int value); +apps_error_e apps_db_bind_str(stmt_h *handle, int idx, const char *str); +apps_error_e apps_db_next(stmt_h *handle); +bool apps_db_get_bool(stmt_h *handle, int index); +int apps_db_get_int(stmt_h *handle, int index); +const char *apps_db_get_str(stmt_h *handle, int index); +apps_error_e apps_db_reset(stmt_h *handle); +apps_error_e apps_db_finalize(stmt_h *handle); +apps_error_e apps_db_exec(const char *query); +void apps_db_close(void); + +apps_error_e apps_db_begin_transaction(void); +apps_error_e apps_db_end_transaction(bool success); + +HAPI apps_error_e apps_db_init(void); +HAPI int apps_db_insert_item(const char *id, int ordering); +HAPI int apps_db_update_item(const char *id, int ordering); +HAPI int apps_db_remove_item(const char *id); +HAPI int apps_db_count_item(const char *id); +HAPI int apps_db_count_item_in(void); + +HAPI apps_error_e apps_db_read_list(Eina_List *item_info_list); +HAPI Eina_List *apps_db_write_list(void); +HAPI Eina_List *apps_db_write_list_by_name(void); + +HAPI apps_error_e apps_db_find_empty_position(int *pos); +HAPI apps_error_e apps_db_trim(void); +HAPI apps_error_e apps_db_sync(void); + +#endif // __APPS_DB_H__ diff --git a/home/include/apps/effect.h b/home/include/apps/effect.h new file mode 100755 index 0000000..b2fad28 --- /dev/null +++ b/home/include/apps/effect.h @@ -0,0 +1,34 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_EFFECT_H__ +#define __APPS_EFFECT_H__ + +#include "util.h" + +HAPI apps_error_e apps_effect_init(void); +HAPI void apps_effect_fini(void); + +HAPI void apps_effect_set_sound_status(int status); +HAPI int apps_effect_get_sound_status(void); + +HAPI void apps_effect_play_sound(void); +HAPI void apps_effect_play_vibration(void); + +#endif //__APPS_EFFECT_H__ + +// End of a file diff --git a/home/include/apps/grid.h b/home/include/apps/grid.h new file mode 100755 index 0000000..7303a49 --- /dev/null +++ b/home/include/apps/grid.h @@ -0,0 +1,37 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_GRID_H__ +#define __APPS_GRID_H__ + +#include + +#include "util.h" +#include "apps/list.h" + +HAPI void grid_destroy(Evas_Object *win, Evas_Object *grid); +HAPI Evas_Object *grid_create(Evas_Object *win, Evas_Object *parent); +HAPI void grid_refresh(Evas_Object *grid); + +HAPI void grid_show_top(Evas_Object *grid); + +HAPI void grid_append_list(Evas_Object *grid, Eina_List *list); +HAPI void grid_remove_list(Evas_Object *grid, Eina_List *list); + +#endif //__APPS_GRID_H__ + +// End of a file diff --git a/home/include/apps/item.h b/home/include/apps/item.h new file mode 100755 index 0000000..99f4c4a --- /dev/null +++ b/home/include/apps/item.h @@ -0,0 +1,42 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_ITEM_H__ +#define __APPS_ITEM_H__ + +#include +#include "apps/item_info.h" +#include "util.h" + +HAPI void item_destroy(Evas_Object *item); +HAPI Evas_Object *item_create(Evas_Object *scroller, item_info_s *info); + +HAPI Evas_Object *item_virtual_create(Evas_Object *scroller); +HAPI void item_virtual_destroy(Evas_Object *item); + +HAPI void item_change_language(Evas_Object *item); + +HAPI void item_edit(Evas_Object *item); +HAPI void item_unedit(Evas_Object *item); + +HAPI Evas_Object* item_get_press_item(Evas_Object *scroller); +HAPI int item_is_longpressed(Evas_Object *item); + +HAPI void item_is_pressed(Evas_Object *item); +HAPI void item_is_released(Evas_Object *item); + +#endif // __APPS_ITEM_H__ diff --git a/home/include/apps/item_badge.h b/home/include/apps/item_badge.h new file mode 100755 index 0000000..0574dde --- /dev/null +++ b/home/include/apps/item_badge.h @@ -0,0 +1,41 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_ITEM_BADGE_H__ +#define __APPS_ITEM_BADGE_H__ + +#include + +#include "util.h" + +HAPI int item_badge_count(Evas_Object *item); + +HAPI int item_badge_is_registered(const char *appid); +HAPI apps_error_e item_badge_init(Evas_Object *item); +HAPI void item_badge_destroy(Evas_Object *item); + +HAPI void item_badge_register_changed_cb(Evas_Object *layout); +HAPI void item_badge_unregister_changed_cb(void); + +HAPI void item_badge_show(Evas_Object *item, int count); +HAPI void item_badge_hide(Evas_Object *item); +HAPI void item_badge_change_language(Evas_Object *item); +HAPI void item_badge_remove(const char *pkgid); + +#endif //__APPS_ITEM_BADGE_H__ + +// End of a file diff --git a/home/include/apps/item_info.h b/home/include/apps/item_info.h new file mode 100755 index 0000000..04fdae9 --- /dev/null +++ b/home/include/apps/item_info.h @@ -0,0 +1,75 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_ITEM_INFO_H__ +#define __APPS_ITEM_INFO_H__ + +#include +#include + +#include "apps/apps_main.h" +#include "util.h" + +typedef struct { + /* innate features */ + char *pkgid; + char *appid; + char *name; + char *icon; + char *type; + + int ordering; + int open_app; + int tts; + + /* acquired features */ + Evas_Object *win; + Evas_Object *layout; + instance_info_s *instance_info; + + Evas_Object *scroller; + Evas_Object *box; + Evas_Object *page; + + Evas_Object *item; + Evas_Object *item_inner; + Evas_Object *center; +} item_info_s; + +typedef enum { + ITEM_INFO_LIST_TYPE_INVALID = 0, + ITEM_INFO_LIST_TYPE_ALL, + ITEM_INFO_LIST_TYPE_FACTORY_BINARY, + ITEM_INFO_LIST_TYPE_XML, + ITEM_INFO_LIST_TYPE_MAX, +} item_info_list_type_e; + +HAPI void apps_item_info_destroy(item_info_s *item_info); +HAPI item_info_s *apps_item_info_create(const char *appid); +HAPI item_info_s *apps_item_info_get(Evas_Object *win, const char *appid); + +HAPI Eina_List *apps_item_info_list_create(item_info_list_type_e list_type); +HAPI void apps_item_info_list_destroy(Eina_List *item_info_list); + +HAPI Evas_Object *apps_item_info_list_get_item(Eina_List *item_info_list, const char *appid); +HAPI int apps_item_info_list_get_ordering(Eina_List *item_info_list, const char *appid); + +HAPI void apps_item_info_list_change_language(Eina_List *item_info_list); + +HAPI int apps_item_info_is_support_tts(const char *appid); + +#endif // __APPS_ITEM_INFO_H__ diff --git a/home/include/apps/lang.h b/home/include/apps/lang.h new file mode 100755 index 0000000..32d708f --- /dev/null +++ b/home/include/apps/lang.h @@ -0,0 +1,33 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_LANG_H__ +#define __APPS_LANG_H__ + +#include + +#include "util.h" + +HAPI apps_error_e apps_lang_add_id(Evas_Object *obj, const char *group, const char *id, int domain); +HAPI void apps_lang_remove_id(Evas_Object *obj, const char *group); + +HAPI apps_error_e apps_lang_register_cb(apps_error_e (*result_cb)(void *), void *result_data); +HAPI void apps_lang_unregister_cb(apps_error_e (*result_cb)(void *)); + +HAPI void apps_lang_refresh_ids(void); + +#endif /* __APPS_LANG_H__ */ diff --git a/home/include/apps/layout.h b/home/include/apps/layout.h new file mode 100755 index 0000000..d34496b --- /dev/null +++ b/home/include/apps/layout.h @@ -0,0 +1,43 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_LAYOUT_H__ +#define __APPS_LAYOUT_H__ + +#include +#include "util.h" + +HAPI Evas_Object *apps_layout_create(Evas_Object *win, const char *file, const char *group); +HAPI void apps_layout_destroy(Evas_Object *layout); + +HAPI apps_error_e apps_layout_show(Evas_Object *win, Eina_Bool show); + +HAPI Evas_Object* apps_layout_load_edj(Evas_Object *parent, const char *edjname, const char *grpname); +HAPI void apps_layout_unload_edj(Evas_Object *layout); + +HAPI void apps_layout_rotate(Evas_Object *layout, int is_rotated); + +HAPI void apps_layout_block(Evas_Object *layout); +HAPI void apps_layout_unblock(Evas_Object *layout); + +HAPI int apps_layout_is_edited(Evas_Object *layout); +HAPI void apps_layout_edit(Evas_Object *layout); +HAPI void apps_layout_unedit(Evas_Object *layout); + +#endif //__APPS_LAYOUT_H__ + +// End of a file diff --git a/home/include/apps/list.h b/home/include/apps/list.h new file mode 100644 index 0000000..422a2fe --- /dev/null +++ b/home/include/apps/list.h @@ -0,0 +1,42 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_LIST_H__ +#define __APPS_LIST_H__ + +#include +#include + +#include "apps/item_info.h" +#include "util.h" + +typedef struct _app_list { + Eina_List *list; + unsigned int cur_idx; +} app_list; + +HAPI bool list_is_included(const char *id); + +HAPI app_list *list_create(void); +HAPI app_list *list_create_by_appid(void); +HAPI void list_destroy(app_list *list); + +HAPI void list_change_language(app_list *list); + +#endif //__APPS_LIST_H__ + +// End of a file diff --git a/home/include/apps/page.h b/home/include/apps/page.h new file mode 100755 index 0000000..451b910 --- /dev/null +++ b/home/include/apps/page.h @@ -0,0 +1,73 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_PAGE_H__ +#define __APPS_PAGE_H__ + +#include +#include "util.h" + +HAPI void apps_page_destroy(Evas_Object *page); +HAPI Evas_Object *apps_page_create(Evas_Object *scroller, Evas_Object *prev_page, Evas_Object *next_page); + +HAPI apps_error_e apps_page_pack_item(Evas_Object *page, Evas_Object *item); +HAPI apps_error_e apps_page_unpack_item(Evas_Object *page, Evas_Object *item); + +HAPI int apps_page_count_item(Evas_Object *page); + +HAPI Evas_Object *apps_page_get_item_at(Evas_Object *page, int position); + +HAPI apps_error_e apps_page_pack_nth(Evas_Object *page, Evas_Object *item, int position); +HAPI Evas_Object *apps_page_unpack_nth(Evas_Object *page, int position); + +HAPI void apps_page_change_language(Evas_Object *page); + +HAPI int apps_page_has_item(Evas_Object *page, Evas_Object *item); + +/* + * origin order : + * --------------------------------------------------------------------------- + * | from_item | from_item + 1 | ... | to_item - 1 | to_item | + * --------------------------------------------------------------------------- + * changed order : from_item will be returned. + * --------------------------------------------------------------------------- + * | from_item + 1 | from_item + 2 | ... | to_item | append_item | + * --------------------------------------------------------------------------- + */ +HAPI Evas_Object *apps_page_move_item_prev(Evas_Object *page, Evas_Object *from_item, Evas_Object *to_item, Evas_Object *append_item); + +/* + * origin order : + * --------------------------------------------------------------------------- + * | from_item | from_item + 1 | ... | to_item - 1 | to_item | + * --------------------------------------------------------------------------- + * changed order : to_item will be returned. + * --------------------------------------------------------------------------- + * | insert_item | from_item | ... | ... | to_item - 1 | + * --------------------------------------------------------------------------- + */ +HAPI Evas_Object *apps_page_move_item_next(Evas_Object *page, Evas_Object *from_item, Evas_Object *to_item, Evas_Object *insert_item); + +HAPI int apps_page_seek_item_position(Evas_Object *page, Evas_Object *item); +HAPI void apps_page_print_item(Evas_Object *page); + +HAPI void apps_page_edit(Evas_Object *page); +HAPI void apps_page_unedit(Evas_Object *page); + +#endif //__APPS_PAGE_H__ + +// End of a file diff --git a/home/include/apps/page_info.h b/home/include/apps/page_info.h new file mode 100755 index 0000000..680ab6c --- /dev/null +++ b/home/include/apps/page_info.h @@ -0,0 +1,38 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_PAGE_INFO_H__ +#define __APPS_PAGE_INFO_H__ + +#include +#include "apps/apps_main.h" + +typedef struct { + Evas_Object *win; + instance_info_s *instance_info; + + Evas_Object *scroller; + Evas_Object *page_rect; + + Evas_Object *prev_page; + Evas_Object *page; + Evas_Object *next_page; +} page_info_s; + +#endif //__APPS_PAGE_INFO_H__ + +// End of a file diff --git a/home/include/apps/pkgmgr.h b/home/include/apps/pkgmgr.h new file mode 100755 index 0000000..fd137ca --- /dev/null +++ b/home/include/apps/pkgmgr.h @@ -0,0 +1,41 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_PKGMGR_H__ +#define __APPS_PKGMGR_H__ + +#include + +#include "apps/list.h" +#include "util.h" + + + +HAPI apps_error_e apps_pkgmgr_init(void); +HAPI void apps_pkgmgr_fini(void); + +HAPI apps_error_e apps_pkgmgr_item_list_append_item(const char *pkgid, const char *app_id, Evas_Object *item); +HAPI apps_error_e apps_pkgmgr_item_list_remove_item(const char *pkgid, const char *app_id, Evas_Object *item); +HAPI void apps_pkgmgr_item_list_affect_pkgid(const char *pkgid, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data); +HAPI void apps_pkgmgr_item_list_affect_appid(const char *app_id, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data); + +HAPI apps_error_e apps_pkgmgr_item_list_enable_mounted_item(void); +HAPI apps_error_e apps_pkgmgr_item_list_disable_unmounted_item(void); + +#endif //__APPS_PKGMGR_H__ + +// End of a file diff --git a/home/include/apps/scroller.h b/home/include/apps/scroller.h new file mode 100755 index 0000000..5dd717e --- /dev/null +++ b/home/include/apps/scroller.h @@ -0,0 +1,71 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_SCROLLER_H__ +#define __APPS_SCROLLER_H__ + +#include + +#include "apps/apps_main.h" +#include "util.h" + +HAPI void apps_scroller_destroy(Evas_Object *layout); +HAPI Evas_Object *apps_scroller_create(Evas_Object *layout); + +HAPI int apps_scroller_count_page(Evas_Object *scroller); +HAPI int apps_scroller_count_item(Evas_Object *scroller); +HAPI Eina_Bool apps_scroller_is_scrolling(Evas_Object *scroller); + +HAPI void apps_scroller_freeze(Evas_Object *scroller); +HAPI void apps_scroller_unfreeze(Evas_Object *scroller); + +HAPI void apps_scroller_bring_in(Evas_Object *scroller, int page_no); +HAPI void apps_scroller_bring_in_page(Evas_Object *scroller, Evas_Object *page); + +HAPI void apps_scroller_region_show(Evas_Object *scroller, int x, int y); + +HAPI void apps_scroller_append_item(Evas_Object *scroller, Evas_Object *item); +HAPI void apps_scroller_remove_item(Evas_Object *scroller, Evas_Object *item); + +HAPI void apps_scroller_append_list(Evas_Object *scroller, Eina_List *list); +HAPI void apps_scroller_remove_list(Evas_Object *scroller, Eina_List *list); + +HAPI void apps_scroller_trim(Evas_Object *scroller); + +HAPI void apps_scroller_change_language(Evas_Object *scroller); + +/* return a page that has the item */ +HAPI Evas_Object *apps_scroller_has_item(Evas_Object *scroller, Evas_Object *item); + +HAPI Evas_Object *apps_scroller_move_item_prev(Evas_Object *scroller, Evas_Object *from_item, Evas_Object *to_item, Evas_Object *append_item); +HAPI Evas_Object *apps_scroller_move_item_next(Evas_Object *scroller, Evas_Object *from_item, Evas_Object *to_item, Evas_Object *insert_item); + +HAPI int apps_scroller_seek_item_position(Evas_Object *scroller, Evas_Object *item); +HAPI void apps_scroller_bring_in_region_by_vector(Evas_Object *scroller, int vector); + +HAPI apps_error_e apps_scroller_read_list(Evas_Object *scroller, Eina_List *item_info_list); +HAPI void apps_scroller_write_list(Evas_Object *scroller); + +HAPI Evas_Object *apps_scroller_get_item_by_pkgid(Evas_Object *scroller, const char *pkgid); +HAPI Evas_Object *apps_scroller_get_item_by_appid(Evas_Object *scroller, const char *appid); + +HAPI void apps_scroller_edit(Evas_Object *scroller); +HAPI void apps_scroller_unedit(Evas_Object *scroller); + +#endif //__APPS_SCROLLER_H__ + +// End of a file diff --git a/home/include/apps/scroller_info.h b/home/include/apps/scroller_info.h new file mode 100755 index 0000000..f97233a --- /dev/null +++ b/home/include/apps/scroller_info.h @@ -0,0 +1,41 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_SCROLLER_INFO_H__ +#define __APPS_SCROLLER_INFO_H__ + +#include +#include "apps/apps_main.h" + +typedef struct { + Evas_Object *win; + instance_info_s *instance_info; + + Evas_Object *layout; + Evas_Object *box_layout; + Evas_Object *box; + Evas_Object *layout_focus; + Evas_Object *top_focus; + Evas_Object *bottom_focus; + + Eina_List *list; + int list_index; +} scroller_info_s; + +#endif //__APPS_SCROLLER_INFO_H__ + +// End of a file diff --git a/home/include/apps/xml.h b/home/include/apps/xml.h new file mode 100755 index 0000000..848ef26 --- /dev/null +++ b/home/include/apps/xml.h @@ -0,0 +1,26 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APPS_XML_H__ +#define __APPS_XML_H__ + +#include "util.h" + +HAPI apps_error_e apps_xml_read_list(const char *xml_file, Eina_List *item_info_list); +HAPI Eina_List *apps_xml_write_list(const char *xml_file); + +#endif // __APPS_XML_H__ diff --git a/home/include/bg.h b/home/include/bg.h new file mode 100755 index 0000000..0d218eb --- /dev/null +++ b/home/include/bg.h @@ -0,0 +1,29 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_BG_H__ +#define __W_HOME_BG_H__ + +extern Evas_Object *bg_create(Evas_Object *win); +extern void bg_destroy(Evas_Object *win); + +extern void bg_get_rgb(int *r, int *g, int *b); +extern void bg_set_rgb(Evas_Object *bg, const char *buf); + +extern void bg_register_object(Evas_Object *obj); + +#endif /* __W_HOME_BG_H__ */ diff --git a/home/include/clock_service.h b/home/include/clock_service.h new file mode 100755 index 0000000..03aa790 --- /dev/null +++ b/home/include/clock_service.h @@ -0,0 +1,257 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __CLOCK_SERVICE_H +#define __CLOCK_SERVICE_H + +#define PAGE_CLOCK_EDJE_FILE EDJEDIR"/page_clock.edj" + +#define CLOCK_RET_OK 0 +#define CLOCK_RET_FAIL 1 +#define CLOCK_RET_ASYNC 2 +#define CLOCK_RET_NEED_DESTROY_PREVIOUS 4 + +#define CLOCK_SERVICE_MODE_NORMAL 1 +#define CLOCK_SERVICE_MODE_NORMAL_RECOVERY 2 +#define CLOCK_SERVICE_MODE_RECOVERY 3 +#define CLOCK_SERVICE_MODE_EMERGENCY 4 +#define CLOCK_SERVICE_MODE_COOLDOWN 5 + +#define CLOCK_APP_TYPE_NATIVE 1 +#define CLOCK_APP_TYPE_WEBAPP 2 +#define CLOCK_APP_FACTORY_DEFAULT "org.tizen.w-idle-clock-weather2" +#define CLOCK_APP_RECOVERY "org.tizen.idle-clock-digital" +#define CLOCK_APP_EMERGENCY "org.tizen.idle-clock-ups" +#define CLOCK_APP_COOLDOWN "org.tizen.idle-clock-emergency" + +#define CLOCK_STATE_IDLE 0 +#define CLOCK_STATE_WAITING 1 +#define CLOCK_STATE_RUNNING 2 + +/* + * Events + */ +#define CLOCK_EVENT_MAP(SOURCE, TYPE) ((SOURCE << 16) | TYPE) + +/* + * instant events + */ +#define CLOCK_EVENT_VIEW 0x0000 +#define CLOCK_EVENT_VIEW_READY CLOCK_EVENT_MAP(CLOCK_EVENT_VIEW, 0x0) +#define CLOCK_EVENT_VIEW_RESIZED CLOCK_EVENT_MAP(CLOCK_EVENT_VIEW, 0x1) +#define CLOCK_EVENT_VIEW_HIDDEN_SHOW CLOCK_EVENT_MAP(CLOCK_EVENT_VIEW, 0x2) +#define CLOCK_EVENT_VIEW_HIDDEN_HIDE CLOCK_EVENT_MAP(CLOCK_EVENT_VIEW, 0x4) +#define CLOCK_EVENT_APP 0x0001 +#define CLOCK_EVENT_APP_PROVIDER_ERROR CLOCK_EVENT_MAP(CLOCK_EVENT_APP, 0x0) +#define CLOCK_EVENT_APP_PROVIDER_ERROR_FATAL CLOCK_EVENT_MAP(CLOCK_EVENT_APP, 0x1) +#define CLOCK_EVENT_APP_PAUSE CLOCK_EVENT_MAP(CLOCK_EVENT_APP, 0x2) +#define CLOCK_EVENT_APP_RESUME CLOCK_EVENT_MAP(CLOCK_EVENT_APP, 0x4) +#define CLOCK_EVENT_APP_LANGUAGE_CHANGED CLOCK_EVENT_MAP(CLOCK_EVENT_APP, 0x8) +#define CLOCK_EVENT_DEVICE 0x0002 +#define CLOCK_EVENT_DEVICE_BACK_KEY CLOCK_EVENT_MAP(CLOCK_EVENT_DEVICE, 0x0) +#define CLOCK_EVENT_DEVICE_LCD 0x0004 +#define CLOCK_EVENT_DEVICE_LCD_ON CLOCK_EVENT_MAP(CLOCK_EVENT_DEVICE_LCD, 0x0) +#define CLOCK_EVENT_DEVICE_LCD_OFF CLOCK_EVENT_MAP(CLOCK_EVENT_DEVICE_LCD, 0x1) + +/* + * ongoing events + */ +#define CLOCK_EVENT_SCREEN_READER 0x0008 +#define CLOCK_EVENT_SCREEN_READER_ON CLOCK_EVENT_MAP(CLOCK_EVENT_SCREEN_READER, 0x0) +#define CLOCK_EVENT_SCREEN_READER_OFF CLOCK_EVENT_MAP(CLOCK_EVENT_SCREEN_READER, 0x1) +#define CLOCK_EVENT_SAP 0x0020 +#define CLOCK_EVENT_SAP_ON CLOCK_EVENT_MAP(CLOCK_EVENT_SAP, 0x0) +#define CLOCK_EVENT_SAP_OFF CLOCK_EVENT_MAP(CLOCK_EVENT_SAP, 0x1) +#define CLOCK_EVENT_MODEM 0x0040 +#define CLOCK_EVENT_MODEM_ON CLOCK_EVENT_MAP(CLOCK_EVENT_MODEM, 0x0) +#define CLOCK_EVENT_MODEM_OFF CLOCK_EVENT_MAP(CLOCK_EVENT_MODEM, 0x1) +#define CLOCK_EVENT_DND 0x0080 +#define CLOCK_EVENT_DND_ON CLOCK_EVENT_MAP(CLOCK_EVENT_DND, 0x0) +#define CLOCK_EVENT_DND_OFF CLOCK_EVENT_MAP(CLOCK_EVENT_DND, 0x1) +#define CLOCK_EVENT_SCROLLER 0x0100 +#define CLOCK_EVENT_SCROLLER_FREEZE_ON CLOCK_EVENT_MAP(CLOCK_EVENT_SCROLLER, 0x0) +#define CLOCK_EVENT_SCROLLER_FREEZE_OFF CLOCK_EVENT_MAP(CLOCK_EVENT_SCROLLER, 0x1) +#define CLOCK_EVENT_POWER 0x0200 +#define CLOCK_EVENT_POWER_ENHANCED_MODE_ON CLOCK_EVENT_MAP(CLOCK_EVENT_POWER, 0x0) +#define CLOCK_EVENT_POWER_ENHANCED_MODE_OFF CLOCK_EVENT_MAP(CLOCK_EVENT_POWER, 0x1) +#define CLOCK_EVENT_SIM 0x0400 +#define CLOCK_EVENT_SIM_INSERTED CLOCK_EVENT_MAP(CLOCK_EVENT_SIM, 0x0) +#define CLOCK_EVENT_SIM_NOT_INSERTED CLOCK_EVENT_MAP(CLOCK_EVENT_SIM, 0x1) +#define CLOCK_EVENT_CFWD 0x0800 + +#define CLOCK_EVENT_CATEGORY(X) CLOCK_EVENT_MAP(X, 0x0) + +#define CLOCK_SMART_SIGNAL_PAUSE "clock,paused" +#define CLOCK_SMART_SIGNAL_RESUME "clock,resume" +#define CLOCK_SMART_SIGNAL_VIEW_REQUEST "clock,view,request" + +#define CLOCK_VIEW_REQUEST_DRAWER_HIDE 1 +#define CLOCK_VIEW_REQUEST_DRAWER_SHOW 2 + +#define CLOCK_ATTACHED 1 +#define CLOCK_CANDIDATE 2 + +#define CLOCK_INF_MINICONTROL 1 +#define CLOCK_INF_WIDGET 2 + +#define CLOCK_CONF_NONE 0 +#define CLOCK_CONF_WIN_ACTIVATION 1 +#define CLOCK_CONF_CLOCK_CONFIGURATION 2 + +#define CLOCK_VIEW_TYPE_DRAWER 1 + +#define VCONFKEY_MUSIC_STATUS "memory/homescreen/music_status" + +enum { + INDICATOR_HIDE_WITH_EFFECT, + INDICATOR_HIDE, + INDICATOR_SHOW, + INDICATOR_SHOW_WITH_EFFECT, +}; + +typedef struct { + int configure; + int interface; + int app_type; + int async; + int state; + int use_dead_monitor; + int pid; + int need_event_relay; + char *view_id; + char *appid; + char *pkgname; + void *view; + int w; + int h; +} clock_s; +typedef clock_s * clock_h; + +typedef struct _clock_inf_s { + int async; + int use_dead_monitor; + int (*prepare) (clock_h); + int (*config) (clock_h, int); + int (*create) (clock_h); + int (*attached_cb) (clock_h); + int (*destroy) (clock_h); +} clock_inf_s; + +/*! + * Clock Service + */ +extern void clock_service_init(void); +extern void clock_service_fini(void); + +extern void clock_service_mode_set(int mode); +extern int clock_service_mode_get(void); +extern char *clock_service_clock_pkgname_get(void); +extern void clock_service_request(int mode); +extern void clock_service_pause(void); +extern void clock_service_resume(void); +extern void clock_service_app_dead_cb(int pid); +extern void clock_service_event_handler(clock_h clock, int event); +extern int clock_service_clock_selector_launch(void); +extern void clock_service_scroller_freezed_set(int is_freeze); +extern int clock_service_scroller_freezed_get(void); +extern const int const clock_service_get_retry_count(void); + +/*! + * Clock Event + */ +extern void clock_service_event_register(void); +extern void clock_service_event_deregister(void); +extern int clock_service_event_state_get(int event_source); +extern void clock_service_event_app_dead_cb(int pid); + +/*! + * Clock manager + */ +extern clock_h clock_new(const char *pkgname); +extern void clock_del(clock_h clock); + +extern int clock_manager_view_prepare(clock_h clock); +extern int clock_manager_view_configure(clock_h clock, int type); +extern int clock_manager_view_create(clock_h clock); +extern int clock_manager_view_destroy(clock_h clock); +extern int clock_manager_view_attach(clock_h clock); +extern int clock_manager_view_deattach(clock_h clock); +extern int clock_manager_view_exchange(clock_h clock, void *view); + +extern int clock_manager_clock_inf_type_get(const char *pkgname); +extern clock_h clock_manager_clock_get(int type); +extern void clock_manager_clock_set(int type, clock_h clock); +extern int clock_manager_view_state_get(int view_type); + +/*! + * Clock View + */ +extern void clock_view_indicator_show(int is_show); +extern Evas_Object *clock_view_add(Evas_Object *parent, Evas_Object *item); +extern int clock_view_attach(Evas_Object *page); +extern int clock_view_deattach(Evas_Object *page); +extern void clock_view_show(Evas_Object *page); +extern void clock_view_event_handler(clock_h clock, int event, int need_relay); +extern Evas_Object *clock_view_empty_add(void); +extern int clock_view_display_state_get(Evas_Object *page, int view_type); +extern Evas_Object *clock_view_get_item(Evas_Object *view); + +/*! + * Clock Hidden view + */ +extern Evas_Object *clock_view_hidden_add(Evas_Object *page); +extern void clock_view_hidden_event_handler(Evas_Object *page, int event); + +/*! + * Clock Visual Cue + */ +extern Evas_Object *clock_view_cue_add(Evas_Object *page); +extern void clock_view_cue_display_set(Evas_Object *page, int is_display, int is_need_vi); + +/*! + * Clock Shortcut + */ +extern void clock_shortcut_init(void); +extern void clock_shortcut_fini(void); +extern void clock_shortcut_view_add(Evas_Object *page); +extern void clock_shortcut_app_dead_cb(int pid); + +/*! + * Clock indicator + */ +extern void clock_view_indicator_add(Evas_Object *page); +extern void clock_view_indicator_event_handler(Evas_Object *page, int event); + +/*! + * Clock Uitility + */ +extern char *clock_util_wms_configuration_get(void); +extern int clock_util_wms_configuration_set(const char *pkgname); +extern int clock_util_provider_launch(const char *clock_pkgname, int *pid_a, int configure); +extern void clock_util_terminate_clock_by_pid(int pid); +extern int clock_util_screen_reader_enabled_get(void); +extern int clock_util_setting_conf_get(void); +extern void clock_util_setting_conf_set(int value); +extern void clock_util_setting_conf_bundle_add(bundle *b, int type); +extern const char *clock_util_setting_conf_content(int type); + +/*! + * Clock interface::minicontrol + */ +extern void clock_inf_minictrl_event_hooker(int action, int pid, const char *minictrl_id, int is_realized, int width, int height); + +#endif diff --git a/home/include/conf.h b/home/include/conf.h new file mode 100755 index 0000000..5fa520a --- /dev/null +++ b/home/include/conf.h @@ -0,0 +1,142 @@ +/* + * Samsung API + * Copyright (c) 2013 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 _W_HOME_CONF_H_ +#define _W_HOME_CONF_H_ + +/* Layout */ +#define BASE_WIDTH (360.0) +#if CIRCLE_TYPE +#define BASE_HEIGHT (360.0) +#else +#define BASE_HEIGHT (480.0) +#endif + +#define SCROLLER_NORMAL_HEIGHT BASE_HEIGHT +#define SCROLLER_EDIT_HEIGHT BASE_HEIGHT + +#define NOTIFICATION_ICON_WIDTH ELM_SCALE_SIZE(60) +#define NOTIFICATION_ICON_HEIGHT ELM_SCALE_SIZE(60) + +#if CIRCLE_TYPE +#define INDICATOR_START_X (90.0) +#define INDICATOR_WIDTH (180.0) +#define INDICATOR_START_Y (25.0) +#define INDICATOR_HEIGHT (20.0) + +#define INDEX_THUMBNAIL_HOME_BG_SIZE 20 20 +#define INDEX_THUMBNAIL_HOME_IND_SIZE 20 20 + +#define PAGE_EDIT_PAD_WIDTH (5.0) +#define PAGE_EDIT_SIDE_PAD_WIDTH (40+16) + +#define ITEM_EDIT_EF_WIDTH 234 +#define ITEM_EDIT_EF_HEIGHT 234 +#define PAGE_EDIT_WIDTH (PAGE_EDIT_PAD_WIDTH+234.0+PAGE_EDIT_PAD_WIDTH) +#define PAGE_EDIT_HEIGHT (234.0) + +#define ITEM_EDIT_WIDTH (206.0) +#define ITEM_EDIT_HEIGHT (206.0) +#define ITEM_EDIT_EF_MIN 234 234 + +#define ITEM_EDIT_LINE_WIDTH (234.0) +#define ITEM_EDIT_LINE_HEIGHT (234.0) + +#define POPUP_TEXT_MAX_WIDTH (200.0) +#define POPUP_TEXT_MAX_HEIGHT (360.0) + +#else +#define INDICATOR_START_X (0.0) +#define INDICATOR_WIDTH (180.0) +#define INDICATOR_START_Y (9.0) +#define INDICATOR_HEIGHT (15.0) + +#define INDEX_THUMBNAIL_HOME_BG_SIZE 20 15 +#define INDEX_THUMBNAIL_HOME_IND_SIZE 15 15 + +#define PAGE_EDIT_PAD_WIDTH (16.0) +#define PAGE_EDIT_SIDE_PAD_WIDTH (40+16) + +#define PAGE_EDIT_WIDTH (PAGE_EDIT_PAD_WIDTH+216.0+PAGE_EDIT_PAD_WIDTH) +#define PAGE_EDIT_HEIGHT (25.0+29.0+265.0) + +#define ITEM_EDIT_WIDTH (216.0) +#define ITEM_EDIT_HEIGHT (288.0) +#define ITEM_EDIT_EF_WIDTH (242.0) +#define ITEM_EDIT_EF_HEIGHT (314.0) + +#define ITEM_EDIT_LINE_WIDTH (ITEM_EDIT_WIDTH+4) +#define ITEM_EDIT_LINE_HEIGHT (ITEM_EDIT_HEIGHT+4) + +#define POPUP_TEXT_MAX_WIDTH (-1) +#define POPUP_TEXT_MAX_HEIGHT (377.0) + +#define CLOSE_BUTTON_X 316.0 +#define CLOSE_BUTTON_Y 41.0 + +#define IMAGE_Y 112.0 +#endif + +#define ADD_WIDGET_BUTTON_HEIGHT (24+37+24) +#define BUTTON_HEIGHT_REL (0.15) +#define ADD_WIDGET_BUTTON_TEXT_MIN 328 86 +#define ADD_VIEWER_PREVIEW_WIDTH 216 +#if CIRCLE_TYPE +#define ADD_VIEWER_PREVIEW_HEIGHT 216 +#else +#define ADD_VIEWER_PREVIEW_HEIGHT 288 +#endif +#define ADD_VIEWER_PREVIEW_LINE_WIDTH (ADD_VIEWER_PREVIEW_WIDTH+4) +#define ADD_VIEWER_PREVIEW_LINE_HEIGHT (ADD_VIEWER_PREVIEW_HEIGHT+4) +#define ADD_VIEWER_TEXT_HEIGHT 74 +#define ADD_VIEWER_PAGE_WIDTH 360 +#define ADD_VIEWER_PAGE_HEIGHT 377 +#define ADD_VIEWER_PREVIEW_PAD_LEFT 72 +#define ADD_VIEWER_PREVIEW_PAD_TOP 7 +#define ADD_VIEWER_PAD 8 + +#define CLOCK_SHORTCUT_AREA_W 90 +#define CLOCK_SHORTCUT_AREA_H 90 + +#define BEZEL_MOVE_THRESHOLD 80 + +#define BUTTON_LOCATION 411.5 +#define BUTTON_PRESSED_LOCATION 150 +#define BUTTON_PRESSED_HEIGHT 165 + +/* Configuration */ +#define BOOTING_STATE_DONE 1 +#define MAX_WIDGET 5 +#define LONGPRESS_THRESHOLD 15 +#define LONGPRESS_TIME 0.5f +#define INDEX_UPDATE_TIME 0.1f + +#define DEFAULT_XML_FILE RESDIR"/default_items.xml" +#define TTS_XML_FILE RESDIR"/default_items_tts.xml" + +#if CIRCLE_TYPE +#define POPUP_STYLE_DEFAULT "circle" +#define POPUP_STYLE_TOAST "toast/circle" +#define BUTTON_STYLE_POPUP "popup/circle" +#else +#define POPUP_STYLE_DEFAULT "default" +#define POPUP_STYLE_TOAST "toast" +#define BUTTON_STYLE_POPUP "popup" +#endif + +#endif // _W_HOME_CONF_H_ +// End of file diff --git a/home/include/critical_log.h b/home/include/critical_log.h new file mode 100755 index 0000000..b01df8d --- /dev/null +++ b/home/include/critical_log.h @@ -0,0 +1,31 @@ +/* + * Copyright 2013 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. + */ + +extern int critical_log(const char *func, int line, const char *fmt, ...); +extern int critical_log_init(const char *tag); +extern void critical_log_fini(void); + +#if defined(ENABLE_CRITICAL_LOG) +#define CRITICAL_LOG(args...) critical_log(__func__, __LINE__, args) +#define CRITICAL_LOG_INIT(a) critical_log_init(a) +#define CRITICAL_LOG_FINI() critical_log_fini() +#else +#define CRITICAL_LOG(args...) +#define CRITICAL_LOG_INIT(a) (0) +#define CRITICAL_LOG_FINI() +#endif + +/* End of a file */ diff --git a/home/include/db.h b/home/include/db.h new file mode 100755 index 0000000..7c63e73 --- /dev/null +++ b/home/include/db.h @@ -0,0 +1,60 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_DB_H__ +#define __W_HOME_DB_H__ + +typedef struct stmt stmt_h; +typedef enum { + DB_FILE_INVALID = 0, + DB_FILE_NORMAL, + DB_FILE_TTS, + DB_FILE_MAX +} db_file_e; + +extern w_home_error_e db_init(db_file_e db_file); +extern w_home_error_e db_open(const char *db_file); +extern stmt_h *db_prepare(const char *query); +extern w_home_error_e db_bind_bool(stmt_h *handle, int idx, bool value); +extern w_home_error_e db_bind_int(stmt_h *handle, int idx, int value); +extern w_home_error_e db_bind_str(stmt_h *handle, int idx, const char *str); +extern w_home_error_e db_next(stmt_h *handle); +extern bool db_get_bool(stmt_h *handle, int index); +extern int db_get_int(stmt_h *handle, int index); +extern const char *db_get_str(stmt_h *handle, int index); +extern w_home_error_e db_reset(stmt_h *handle); +extern w_home_error_e db_finalize(stmt_h *handle); +extern w_home_error_e db_exec(const char *query); +extern void db_close(void); + +extern w_home_error_e db_begin_transaction(void); +extern w_home_error_e db_end_transaction(bool success); + +extern int db_insert_item(const char *id, const char *subid, int ordering); +extern int db_update_item(const char *id, const char *subid, int ordering); +extern int db_update_item_by_ordering(const char *id, const char *subid, int ordering); +extern int db_remove_item(const char *id, const char *subid); +extern int db_remove_item_after_max(int max); +extern int db_remove_all_item(void); + +extern int db_count_item(const char *id, const char *subid); +extern int db_count_ordering(int ordering); + +extern w_home_error_e db_read_list(Eina_List *page_info_list); +extern Eina_List *db_write_list(void); + +#endif // __W_HOME_DB_H__ diff --git a/home/include/dbus.h b/home/include/dbus.h new file mode 100755 index 0000000..563714b --- /dev/null +++ b/home/include/dbus.h @@ -0,0 +1,96 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_DBUS_H__ +#define __W_HOME_DBUS_H__ + +typedef enum { + DBUS_EVENT_COOLDOWN_STATE_CHANGED = 0, + DBUS_EVENT_ALPM_MANAGER_STATE_CHANGED = 1, + DBUS_EVENT_LCD_ON = 2, + DBUS_EVENT_LCD_OFF = 3, + DBUS_EVENT_MAX, +} dbus_event_type_e; + +/*! + * DBUS interfaces and signals + */ +#define DBUS_ALPM_MANAGER_PATH "/Org/Tizen/System/AlpmMgr" +#define DBUS_ALPM_MANAGER_INTERFACE "org.tizen.system.alpmmgr" +#define DBUS_ALPM_MANAGER_MEMBER_STATUS "ALPMStatus" + +#define DBUS_WAKEUP_GESTURE_PATH "/org/tizen/sensor/context/gesture" +#define DBUS_WAKEUP_GESTURE_INTERFACE "org.tizen.sensor.context.gesture" +#define DBUS_WAKEUP_GESTURE_MEMBER_WAKEUP "wakeup" + +#define DBUS_LOW_BATTERY_PATH "/Org/Tizen/System/Popup/Lowbat" +#define DBUS_LOW_BATTERY_INTERFACE "org.tizen.system.popup.Lowbat" +#define DBUS_LOW_BATTERY_MEMBER_EXTREME_LEVEL "Extreme" + +#define DBUS_HOME_BUS_NAME "org.tizen.coreapps.home" +#define DBUS_HOME_RAISE_PATH "/Org/Tizen/Coreapps/home/raise" +#define DBUS_HOME_RAISE_INTERFACE DBUS_HOME_BUS_NAME".raise" +#define DBUS_HOME_RAISE_MEMBER "homeraise" + +#define DBUS_PROCSWEEP_PATH "/Org/Tizen/ResourceD/Process" +#define DBUS_PROCSWEEP_INTERFACE "org.tizen.resourced.process" +#define DBUS_PROCSWEEP_METHOD "ProcSweep" + +#define DBUS_DEVICED_BUS_NAME "org.tizen.system.deviced" +#define DBUS_DEVICED_PATH "/Org/Tizen/System/DeviceD" +#define DBUS_DEVICED_INTERFACE DBUS_DEVICED_BUS_NAME +// deviced::display +#define DBUS_DEVICED_DISPLAY_PATH DBUS_DEVICED_PATH"/Display" +#define DBUS_DEVICED_DISPLAY_INTERFACE DBUS_DEVICED_INTERFACE".display" +#define DBUS_DEVICED_DISPLAY_MEMBER_LCD_ON "LCDOn" +#define DBUS_DEVICED_DISPLAY_MEMBER_LCD_OFF "LCDOff" +#define DBUS_DEVICED_DISPLAY_MEMBER_LCD_ON_BY_POWERKEY "LCDOnByPowerkey" +#define DBUS_DEVICED_DISPLAY_METHOD_LCD_OFF "PowerKeyLCDOff" +#define DBUS_DEVICED_DISPLAY_METHOD_CHANGE_STATE "changestate" +#define DBUS_DEVICED_DISPLAY_METHOD_CUSTOM_LCD_ON "CustomLCDOn" +#define DBUS_DEVICED_DISPLAY_COMMAND_LCD_ON "lcdon" +// deviced::cooldown mode +#define DBUS_DEVICED_SYSNOTI_PATH DBUS_DEVICED_PATH"/SysNoti" +#define DBUS_DEVICED_SYSNOTI_INTERFACE DBUS_DEVICED_INTERFACE".SysNoti" +#define DBUS_DEVICED_SYSNOTI_MEMBER_COOLDOWN_CHANGED "CoolDownChanged" +#define DBUS_DEVICED_SYSNOTI_METHOD_COOLDOWN_STATUS "GetCoolDownStatus" +// deviced::cpu booster +#define DBUS_DEVICED_CPU_BOOSTER_PATH DBUS_DEVICED_PATH"/PmQos" +#define DBUS_DEVICED_CPU_BOOSTER_INTERFACE DBUS_DEVICED_INTERFACE".PmQos" +#define DBUS_DEVICED_CPU_BOOSTER_METHOD_HOME "HomeScreen" +#define DBUS_DEVICED_CPU_BOOSTER_METHOD_HOME_LAUNCH "AppLaunchHome" + +/*! + * DBUS main functions + */ +extern void *home_dbus_connection_get(void); +extern void home_dbus_init(void *data); +extern void home_dbus_fini(void *data); +extern int home_dbus_register_cb(int type, void (*result_cb)(void *, void *), void *result_data); +extern void home_dbus_unregister_cb(int type, void (*result_cb)(void *, void *)); +/*! + * DBUS utility functions + */ +extern void home_dbus_lcd_on_signal_send(Eina_Bool lcd_on); +extern void home_dbus_lcd_off_signal_send(void); +extern void home_dbus_procsweep_signal_send(void); +extern void home_dbus_home_raise_signal_send(void); +extern void home_dbus_cpu_booster_signal_send(void); +extern void home_dbus_scroll_booster_signal_send(int sec); +extern char *home_dbus_cooldown_status_get(void); + +#endif diff --git a/home/include/edit.h b/home/include/edit.h new file mode 100755 index 0000000..86c9f42 --- /dev/null +++ b/home/include/edit.h @@ -0,0 +1,60 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_EDIT_H__ +#define __W_HOME_EDIT_H__ + +#include "page.h" + +typedef enum { + EDIT_MODE_INVALID = 0, + EDIT_MODE_LEFT, + EDIT_MODE_CENTER, + EDIT_MODE_RIGHT, + EDIT_MODE_MAX, +} edit_mode_e; + +extern Evas_Object *edit_create_layout(Evas_Object *layout, edit_mode_e edit_mode); +extern void edit_destroy_layout(void *layout); + +extern Evas_Object *edit_create_proxy_page(Evas_Object *edit_scroller, Evas_Object *real_page, page_changeable_bg_e changable_color); +extern void edit_destroy_proxy_page(Evas_Object *proxy_page); + +extern Evas_Object *edit_create_add_viewer(Evas_Object *layout); +extern void edit_destroy_add_viewer(Evas_Object *layout); + +extern void edit_change_focus(Evas_Object *edit_scroller, Evas_Object *page_current); + +extern w_home_error_e edit_push_page_before(Evas_Object *scroller + , Evas_Object *page + , Evas_Object *before); +extern w_home_error_e edit_push_page_after(Evas_Object *scroller + , Evas_Object *page + , Evas_Object *after); + +extern void edit_minify_effect_page(void *effect_page); +extern Evas_Object *edit_create_minify_effect_page(Evas_Object *page); +extern void edit_destroy_minify_effect_page(Evas_Object *effect_page); + +extern void edit_enlarge_effect_page(void *effect_page); +extern Evas_Object *edit_create_enlarge_effect_page(Evas_Object *page); +extern void edit_destroy_enlarge_effect_page(Evas_Object *effect_page); + +extern void edit_arrange_plus_page(Evas_Object *edit); +extern char *edit_get_count_str_from_icu(int count); + +#endif /* __W_HOME_EDIT_H__ */ diff --git a/home/include/edit_info.h b/home/include/edit_info.h new file mode 100755 index 0000000..3803556 --- /dev/null +++ b/home/include/edit_info.h @@ -0,0 +1,31 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_EDIT_INFO_H__ +#define __W_HOME_EDIT_INFO_H__ + +typedef struct { + Evas_Object *layout; + Evas_Object *scroller; + + Evas_Object *center_page; + Evas_Object *plus_page; + + int is_max; +} edit_info_s; + +#endif /* __W_HOME_EDIT_INFO_H__ */ diff --git a/home/include/effect.h b/home/include/effect.h new file mode 100755 index 0000000..d1372a7 --- /dev/null +++ b/home/include/effect.h @@ -0,0 +1,32 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_EFFECT_H__ +#define __W_HOME_EFFECT_H__ + +extern w_home_error_e effect_init(void); +extern void effect_fini(void); + +extern void effect_set_sound_status(bool status); +extern int effect_get_sound_status(void); + +extern void effect_play_sound(void); +extern void effect_play_vibration(void); + +#endif //__W_HOME_EFFECT_H__ + +// End of a file diff --git a/home/include/gesture.h b/home/include/gesture.h new file mode 100755 index 0000000..8bf0964 --- /dev/null +++ b/home/include/gesture.h @@ -0,0 +1,49 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_GESTURE_H__ +#define __W_HOME_GESTURE_H__ + +#define HOME_GESTURE_WRISTUP_OFF 0 +#define HOME_GESTURE_WRISTUP_CLOCK 1 +#define HOME_GESTURE_WRISTUP_LASTVIEW 2 + +#define ALPM_MANAGER_STATUS_SHOW "show" +#define ALPM_MANAGER_STATUS_ALPM_HIDE "ALPMHide" +#define ALPM_MANAGER_STATUS_SIMPLE_HIDE "SimpleHide" + +typedef enum { + BEZEL_UP = 0, + BEZEL_DOWN, +} gesture_type_e; + +extern void home_gesture_init(void); +extern void home_gesture_fini(void); + +extern void gesture_home_window_effect_set(int is_enable); + +extern void gesture_execute_cbs(int mode); + +extern w_home_error_e gesture_register_cb( + int mode, + void (*result_cb)(void *), void *result_data); + +extern void gesture_unregister_cb( + int mode, + void (*result_cb)(void *)); + +#endif // __W_HOME_GESTURE_H__ diff --git a/home/include/index.h b/home/include/index.h new file mode 100755 index 0000000..f3ad6f2 --- /dev/null +++ b/home/include/index.h @@ -0,0 +1,34 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_INDEX_H__ +#define __W_HOME_INDEX_H__ + +#include "page.h" + +typedef enum { + INDEX_BRING_IN_NONE = 0, + INDEX_BRING_IN_AFTER, +} index_bring_in_e; + +extern void index_bring_in_page(Evas_Object *index, Evas_Object *page); + +extern Evas_Object *index_create(Evas_Object *layout, Evas_Object *scroller, page_direction_e direction); +extern void index_destroy(Evas_Object *index); +extern void index_update(Evas_Object *index, Evas_Object *scroller, index_bring_in_e after); + +#endif /* __W_HOME_INDEX_H__ */ diff --git a/home/include/index_info.h b/home/include/index_info.h new file mode 100755 index 0000000..f4fef80 --- /dev/null +++ b/home/include/index_info.h @@ -0,0 +1,33 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_INDEX_INFO_H__ +#define __W_HOME_INDEX_INFO_H__ + +typedef struct { + /* innate features; */ + int count; + int current_no; + page_direction_e direction; + + /* acquired features */ + Evas_Object *layout; + Evas_Object *scroller; + Eina_List *page_index_list; +} index_info_s; + +#endif // __W_HOME_INDEX_INFO_H__ diff --git a/home/include/item_info.h b/home/include/item_info.h new file mode 100755 index 0000000..30a25ab --- /dev/null +++ b/home/include/item_info.h @@ -0,0 +1,58 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_ITEM_INFO_H__ +#define __W_HOME_ITEM_INFO_H__ + +typedef enum { + ITEM_TYPE_IDLE_CLOCK = 0, + ITEM_TYPE_APP, + ITEM_TYPE_WIDGET, + ITEM_TYPE_MORE_APPS, + ITEM_TYPE_NXN_PAGE, + ITEM_TYPE_MAX, +} item_type_e; + +typedef enum { + ITEM_ORDERING_ALL = 0, + ITEM_ORDERING_FIRST_TO_CENTER_LEFT, + ITEM_ORDERING_FIRST_TO_CENTER, + ITEM_ORDERING_CENTER_TO_LAST, + ITEM_ORDERING_CENTER_RIGHT_TO_LAST, + ITEM_ORDERING_MAX, +} item_ordering_e; + +typedef struct { + /* innate features */ + char *id; + char *subid; + item_type_e category; + int ordering; + + /* acquired features */ + Evas_Object *page; + Evas_Object *item; + int removable; +} item_info_s; + +extern item_info_s *item_info_create(const char *id, const char *subid); +extern void item_info_destroy(item_info_s *item_info); +extern void item_info_list_destroy(Eina_List *page_info_list); + +extern int item_info_is_removable(const char *id); + +#endif // __W_HOME_ITEM_INFO_H__ diff --git a/home/include/key.h b/home/include/key.h new file mode 100755 index 0000000..555fa05 --- /dev/null +++ b/home/include/key.h @@ -0,0 +1,48 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_KEY_H__ +#define __W_HOME_KEY_H__ + +typedef enum { + KEY_CB_RET_CONTINUE = 0, + KEY_CB_RET_STOP, +} key_cb_ret_e; + +typedef enum { + KEY_TYPE_BACK = 0, + KEY_TYPE_HOME, + KEY_TYPE_BEZEL_UP, + KEY_TYPE_MAX, +} key_type_e; + +/* Key callbacks are managed as a stack[LIFO] */ +extern w_home_error_e key_register_cb( + int type, + key_cb_ret_e (*result_cb)(void *), void *result_data); + +extern void key_unregister_cb( + int type, + key_cb_ret_e (*result_cb)(void *)); + +extern void key_register(void); +extern void key_unregister(void); +extern void key_cb_execute(int type); + +#endif //__W_HOME_KEY_H__ + +// End of a file diff --git a/home/include/lang.h b/home/include/lang.h new file mode 100755 index 0000000..6280e39 --- /dev/null +++ b/home/include/lang.h @@ -0,0 +1,29 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APP_TRAY_LANG_H__ +#define __APP_TRAY_LANG_H__ + +extern w_home_error_e lang_add_id(Evas_Object *obj, const char *group, const char *id, int domain); +extern void lang_remove_id(Evas_Object *obj, const char *group); + +extern w_home_error_e lang_register_cb(w_home_error_e (*result_cb)(void *), void *result_data); +extern void lang_unregister_cb(w_home_error_e (*result_cb)(void *)); + +extern void lang_refresh_ids(void); + +#endif /* __APP_TRAY_LANG_H__ */ diff --git a/home/include/layout.h b/home/include/layout.h new file mode 100755 index 0000000..4463fad --- /dev/null +++ b/home/include/layout.h @@ -0,0 +1,40 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_LAYOUT_H__ +#define __W_HOME_LAYOUT_H__ + +#define LAYOUT_SMART_SIGNAL_EDIT_ON "edit,on" +#define LAYOUT_SMART_SIGNAL_EDIT_OFF "edit,off" +#define LAYOUT_SMART_SIGNAL_FLICK_UP "flick,up" + +extern Evas_Object *layout_create(Evas_Object *win); +extern void layout_destroy(Evas_Object *win); + +extern void layout_add_mouse_cb(Evas_Object *layout); +extern void layout_del_mouse_cb(Evas_Object *layout); + +extern void layout_show_left_index(Evas_Object *layout); +extern void layout_show_right_index(Evas_Object *layout); +extern void layout_hide_index(Evas_Object *layout); + +extern int layout_is_edit_mode(Evas_Object *layout); + +extern void layout_set_idle(Evas_Object *layout); +extern int layout_is_idle(Evas_Object *layout); + +#endif /* __W_HOME_LAYOUT_H__ */ diff --git a/home/include/layout_info.h b/home/include/layout_info.h new file mode 100755 index 0000000..bdb2d16 --- /dev/null +++ b/home/include/layout_info.h @@ -0,0 +1,37 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_LAYOUT_INFO_H__ +#define __W_HOME_LAYOUT_INFO_H__ + + + +typedef struct { + /* innate features */ + Evas_Object *win; + Evas_Object *scroller; + Evas_Object *index; + Evas_Object *gestuer_layer; + Evas_Object *tutorial; + + /* acquired features */ + Evas_Object *edit; + Evas_Object *pressed_page; + Evas_Object *pressed_item; +} layout_info_s; + +#endif // __W_HOME_LAYOUT_INFO_H__ diff --git a/home/include/log.h b/home/include/log.h new file mode 100755 index 0000000..8896fa1 --- /dev/null +++ b/home/include/log.h @@ -0,0 +1,154 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_LOG_H__ +#define __W_HOME_LOG_H__ + +#include +#include + +#undef LOG_TAG +#define LOG_TAG "W_HOME" + +#if !defined(_D) +#define _D(fmt, arg...) LOGD(fmt"\n", ##arg) +#endif + +#if !defined(_W) +#define _W(fmt, arg...) LOGW(fmt"\n", ##arg) +#endif + +#if !defined(_E) +#define _E(fmt, arg...) LOGE(fmt"\n", ##arg) +#endif + +#if !defined(_SD) +#define _SD(fmt, arg...) SECURE_LOGD(fmt"\n", ##arg) +#endif + +#if !defined(_SW) +#define _SW(fmt, arg...) SECURE_LOGW(fmt"\n", ##arg) +#endif + +#if !defined(_SE) +#define _SE(fmt, arg...) SECURE_LOGE(fmt"\n", ##arg) +#endif + +#if !defined(_T) +#define _T(package) SECURE_LOG(LOG_DEBUG, "LAUNCH", "[%s:Menuscreen:launch:done]", package); +#endif + +/* Apps Debug message */ +#define LOG_TAG_APPS "APPS" + +#if !defined(_APPS_D) +#define _APPS_D(fmt, arg...) LOG(LOG_DEBUG, LOG_TAG_APPS, " "fmt, ##arg) +#endif + +#if !defined(_APPS_W) +#define _APPS_W(fmt, arg...) LOG(LOG_WARN, LOG_TAG_APPS, " "fmt, ##arg) +#endif + +#if !defined(_APPS_E) +#define _APPS_E(fmt, arg...) LOG(LOG_ERROR, LOG_TAG_APPS, " "fmt, ##arg) +#endif + +#if !defined(_APPS_SD) +#define _APPS_SD(fmt, arg...) SECURE_LOG(LOG_DEBUG, LOG_TAG_APPS, " "fmt, ##arg) +#endif + +#if !defined(_APPS_SW) +#define _APPS_SW(fmt, arg...) SECURE_LOG(LOG_WARN, LOG_TAG_APPS, " "fmt, ##arg) +#endif + +#if !defined(_APPS_SE) +#define _APPS_SE(fmt, arg...) SECURE_LOG(LOG_ERROR, LOG_TAG_APPS, " "fmt, ##arg) +#endif + +#ifdef ADD_FILE_LOG +#define _F(fmt, arg...) do { \ + FILE *fp;\ + fp = fopen("/opt/usr/apps/org.tizen.w-home/data/logs", "a+");\ + if (NULL == fp) break;\ + fprintf(fp, "[%s:%d] "fmt"\n", __func__, __LINE__, ##arg); \ + fclose(fp);\ +} while (0) +#else +#define _F(fmt, arg...) ; +#endif + +#define retvm_if_timer(timer, expr, val, fmt, arg...) do { \ + if (expr) { \ + _E(fmt, ##arg); \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + timer = NULL; \ + return (val); \ + } \ +} while (0) + +#define retvm_if(expr, val, fmt, arg...) do { \ + if(expr) { \ + _E(fmt, ##arg); \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return val; \ + } \ +} while (0) + +#define retv_if(expr, val) do { \ + if(expr) { \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return (val); \ + } \ +} while (0) + +#define retm_if(expr, fmt, arg...) do { \ + if(expr) { \ + _E(fmt, ##arg); \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return; \ + } \ +} while (0) + +#define ret_if(expr) do { \ + if(expr) { \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return; \ + } \ +} while (0) + +#define goto_if(expr, val) do { \ + if(expr) { \ + _E("(%s) -> goto", #expr); \ + goto val; \ + } \ +} while (0) + +#define break_if(expr) { \ + if(expr) { \ + _E("(%s) -> break", #expr); \ + break; \ + } \ +} + +#define continue_if(expr) { \ + if(expr) { \ + _E("(%s) -> continue", #expr); \ + continue; \ + } \ +} + +#endif /* __W_HOME_LOG_H__ */ diff --git a/home/include/main.h b/home/include/main.h new file mode 100755 index 0000000..78134b4 --- /dev/null +++ b/home/include/main.h @@ -0,0 +1,65 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_MAIN_H__ +#define __W_HOME_MAIN_H__ + +typedef struct { + Evas_Object *win; + Evas *e; + Evas_Object *layout; + Ecore_Event_Handler *handler; + Eina_List *font_theme; + Elm_Theme *theme; + + int first_boot; + int state; + int root_w; + int root_h; + int booting_state; + int is_mapbuf; + int is_rotated; + int angle; + int apps_pid; + int is_tts; + int panning_sensitivity; + int setup_wizard; + int is_alpm_clock_enabled; + int is_lcd_on; + int is_win_visible; + int is_wide_character; + + Eina_List *cbs_list[APP_STATE_MAX]; + + Ecore_Timer *safety_init_timer; + int is_service_initialized; +} main_s; + +extern main_s *main_get_info(void); + +extern void main_inc_booting_state(void); +extern void main_dec_booting_state(void); +extern int main_get_booting_state(void); + +extern w_home_error_e main_register_cb( + int state, + w_home_error_e (*result_cb)(void *), void *result_data); +extern void main_unregister_cb( + int state, + w_home_error_e (*result_cb)(void *)); + +#endif /* __W_HOME_MAIN_H__ */ diff --git a/home/include/mapbuf.h b/home/include/mapbuf.h new file mode 100755 index 0000000..1e79b95 --- /dev/null +++ b/home/include/mapbuf.h @@ -0,0 +1,38 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APP_TRAY_MAPBUF_H__ +#define __APP_TRAY_MAPBUF_H__ + +extern void mapbuf_set_color(Evas_Object *obj, int a); +extern w_home_error_e mapbuf_enable(Evas_Object *obj, int force); +extern int mapbuf_disable(Evas_Object *obj, int force); + +extern Evas_Object *mapbuf_bind(Evas_Object *box, Evas_Object *page); +extern Evas_Object *mapbuf_unbind(Evas_Object *obj); + +extern Evas_Object *mapbuf_get_mapbuf(Evas_Object *obj); +extern Evas_Object *mapbuf_get_page(Evas_Object *obj); + +extern int mapbuf_is_enabled(Evas_Object *obj); +extern int mapbuf_can_be_made(Evas_Object *obj); +extern int mapbuf_can_be_on(Evas_Object *obj); + + +#endif //__APP_TRAY_MAPBUF_H__ + +// End of a file diff --git a/home/include/minictrl.h b/home/include/minictrl.h new file mode 100755 index 0000000..1f97c26 --- /dev/null +++ b/home/include/minictrl.h @@ -0,0 +1,85 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_MINICTRL_H__ +#define __W_MINICTRL_H__ + +#define MINICONTROL_MAGIC 0xCAFEDEAD + +#define _MINICTRL_VIEW(obj) (page_get_item(obj)) +#define _MINICTRL_PLUG_OBJ(obj) (elm_object_part_content_get(_MINICTRL_VIEW(obj), "item")) + +#define MC_CATEGORY_CLOCK 1 +#define MC_CATEGORY_NOTIFICATION 2 +#define MC_CATEGORY_DASHBOARD 3 + +#define MINICTRL_DATA_KEY_MAGIC "mc_magic" +#define MINICTRL_DATA_KEY_PID "mc_pid" +#define MINICTRL_DATA_KEY_VISIBILITY "mc_vis" +#define MINICTRL_DATA_KEY_CATEGORY "mc_cat" +#define MINICTRL_DATA_KEY_NAME "mc_name" + +#define MINICTRL_EVENT_APP_RESUME "mc_resume" +#define MINICTRL_EVENT_APP_PAUSE "mc_pause" +#define MINICTRL_EVENT_VIEW_REMOVED "mc_removed" + +typedef struct _Minictrl_Entry { + int category; + char *name; + char *service_name; + Evas_Object *view; +} Minictrl_Entry; + +typedef void (*Minictrl_Entry_Foreach_Cb)(Minictrl_Entry *entry, void *user_data); + +/*! + * Main functions + */ +extern void minicontrol_init(void); +extern void minicontrol_fini(void); +extern void minicontrol_resume(void); +extern void minicontrol_pause(void); + +/*! + * Object manager functions + */ +extern void minictrl_manager_entry_add_with_data(const char *name, const char *service_name, int category, Evas_Object *view); +extern Evas_Object *minictrl_manager_view_get_by_category(int category); +extern Evas_Object *minictrl_manager_view_get_by_name(const char *name); +extern Minictrl_Entry *minictrl_manager_entry_get_by_category(int category); +extern Minictrl_Entry *minictrl_manager_entry_get_by_name(const char *name); +extern int minictrl_manager_entry_del_by_category(int category); +extern int minictrl_manager_entry_del_by_name(const char *name); +extern void minictrl_manager_entry_foreach(Minictrl_Entry_Foreach_Cb cb, void *user_data); + +/*! + * Utility functions + */ +extern int minicontrol_message_send(Evas_Object *obj, char *message); +extern void minicontrol_visibility_set(Evas_Object *obj, int visibility); +extern int minicontrol_visibility_get(Evas_Object *obj); +extern void minicontrol_magic_set(Evas_Object *obj); +extern int minicontrol_magic_get(Evas_Object *obj); +extern void minicontrol_name_set(Evas_Object *obj, const char *name); +extern char *minicontrol_name_get(Evas_Object *obj); +extern void minicontrol_category_set(Evas_Object *obj, int category); +extern int minicontrol_category_get(Evas_Object *obj); +extern void minicontrol_pid_set(Evas_Object *obj, int pid); +extern int minicontrol_pid_get(Evas_Object *obj); +extern char *minicontrol_appid_get_by_pid(int pid); + +#endif diff --git a/home/include/noti_broker.h b/home/include/noti_broker.h new file mode 100755 index 0000000..e336897 --- /dev/null +++ b/home/include/noti_broker.h @@ -0,0 +1,46 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_NOTI_BROKER_H__ +#define __W_HOME_NOTI_BROKER_H__ + +extern const int EVENT_SOURCE_SCROLLER; +extern const int EVENT_SOURCE_VIEW; +extern const int EVENT_SOURCE_EDITING; + +extern const int EVENT_TYPE_ANIM_START; +extern const int EVENT_TYPE_ANIM_STOP; +extern const int EVENT_TYPE_DRAG_START; +extern const int EVENT_TYPE_DRAG_STOP; +extern const int EVENT_TYPE_EDGE_LEFT; +extern const int EVENT_TYPE_EDGE_RIGHT; +extern const int EVENT_TYPE_EDIT_START; +extern const int EVENT_TYPE_EDIT_STOP; +extern const int EVENT_TYPE_NOTI_DELETE; +extern const int EVENT_TYPE_NOTI_DELETE_ALL; +extern const int EVENT_TYPE_MOUSE_DOWN; +extern const int EVENT_TYPE_MOUSE_UP; +extern const int EVENT_TYPE_SCROLLING; +extern const int EVENT_TYPE_APPS_SHOW; +extern const int EVENT_TYPE_APPS_HIDE; + +extern void noti_broker_load(void); +extern void noti_broker_init(void); +extern void noti_broker_fini(void); +extern int noti_broker_event_fire_to_plugin(int source, int event, void *data); + +#endif /* __W_HOME_NOTI_BROKER_H__ */ diff --git a/home/include/notification/detail.h b/home/include/notification/detail.h new file mode 100644 index 0000000..adf4598 --- /dev/null +++ b/home/include/notification/detail.h @@ -0,0 +1,67 @@ +/* + * Samsung API + * Copyright (c) 2013 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 _W_HOME_NOTIFICATION_DETAIL_H_ +#define _W_HOME_NOTIFICATION_DETAIL_H_ + +#include + +typedef struct { + /* Innate features */ + char *pkgname; + char *icon; + char *title; + char *content; + time_t time; + int priv_id; + + /* Acquire features */ + Evas_Object *item; +} detail_item_s; + + + +enum { + DETAIL_EVENT_REMOVE_ITEM = 0, +}; + + + +extern int detail_register_event_cb(int type, void (*event_cb)(void *, void *), void *data); +extern void detail_unregister_event_cb(int type, void (*event_cb)(void *, void *)); + +extern detail_item_s *detail_list_append_info(int priv_id, const char *pkgname, const char *icon, const char *title, const char *content, time_t time); +extern detail_item_s *detail_list_remove_list(int priv_id); +extern void detail_list_remove_info(int priv_id); +extern void detail_list_remove_pkgname(const char *pkgname); +extern detail_item_s *detail_list_get_info(int priv_id); + +extern int detail_list_count_pkgname(const char *pkgname); +extern detail_item_s *detail_list_get_latest_info(const char *pkgname); + +extern void detail_destroy_item(detail_item_s *detail_item_info); +extern Evas_Object *detail_create_item(Evas_Object *parent, detail_item_s *detail_item_info); + +extern void detail_destroy_scroller(Evas_Object *scroller); +extern Evas_Object *detail_create_scroller(Evas_Object *win, const char *pkgname); + +extern void detail_destroy_win(Evas_Object *win); +extern Evas_Object *detail_create_win(const char *pkgname); + + +#endif // _W_HOME_NOTIFICATION_DETAIL_H_ +// End of file diff --git a/home/include/notification/notification.h b/home/include/notification/notification.h new file mode 100644 index 0000000..98d35a2 --- /dev/null +++ b/home/include/notification/notification.h @@ -0,0 +1,28 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_NOTIFICATION_H__ +#define __W_HOME_NOTIFICATION_H__ + + + +extern int notification_init(Evas_Object *scroller); +extern void notification_fini(Evas_Object *scroller); + + + +#endif /* __W_HOME_NOTIFICATION_H__ */ diff --git a/home/include/notification/simple.h b/home/include/notification/simple.h new file mode 100644 index 0000000..02b153d --- /dev/null +++ b/home/include/notification/simple.h @@ -0,0 +1,30 @@ +/* + * Samsung API + * Copyright (c) 2013 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 _W_HOME_NOTIFICATION_SIMPLE_H_ +#define _W_HOME_NOTIFICATION_SIMPLE_H_ + +#include + +extern Evas_Object *simple_create_item(Evas_Object *win, const char *icon_path, const char *title); +extern void simple_destroy_item(Evas_Object *item); + +extern void simple_destroy_win(Evas_Object *win); +extern Evas_Object *simple_create_win(const char *icon_path, const char *title); + +#endif // _W_HOME_NOTIFICATION_SIMPLE_H_ +// End of file diff --git a/home/include/notification/summary.h b/home/include/notification/summary.h new file mode 100644 index 0000000..a3b5efe --- /dev/null +++ b/home/include/notification/summary.h @@ -0,0 +1,33 @@ +/* + * Samsung API + * Copyright (c) 2013 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 _W_HOME_NOTIFICATION_SUMMARY_H_ +#define _W_HOME_NOTIFICATION_SUMMARY_H_ + +#include + +extern Evas_Object *summary_get_page(Evas_Object *scroller, const char *pkgname); + +extern void summary_destroy_item(Evas_Object *item); +extern Evas_Object *summary_create_item(Evas_Object *page, const char *pkgname, const char *icon_path, const char *title, const char *content, int count, time_t *time); + +extern Evas_Object *summary_create_page(Evas_Object *parent, const char *pkgname, const char *icon_path, const char *title, const char *content, int count, time_t *time); +extern void summary_destroy_page(Evas_Object *page); + + +#endif // _W_HOME_NOTIFICATION_SUMMARY_H_ +// End of file diff --git a/home/include/notification/time.h b/home/include/notification/time.h new file mode 100644 index 0000000..016b3ab --- /dev/null +++ b/home/include/notification/time.h @@ -0,0 +1,25 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_NOTIFICATION_TIME_H__ +#define __W_HOME_NOTIFICATION_TIME_H__ + +extern w_home_error_e notification_time_to_string(time_t *time, char *string, int len); +extern void notification_time_init(void); +extern void notification_time_fini(void); + +#endif /* __W_HOME_NOTIFICATION_TIME_H__ */ diff --git a/home/include/page.h b/home/include/page.h new file mode 100755 index 0000000..cf42637 --- /dev/null +++ b/home/include/page.h @@ -0,0 +1,75 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_PAGE_H__ +#define __W_HOME_PAGE_H__ + +#include +#include "page_info.h" +#include "util.h" + +typedef enum { + PAGE_CHANGEABLE_BG_OFF = 0, + PAGE_CHANGEABLE_BG_ON, +} page_changeable_bg_e; + +typedef enum { + PAGE_EFFECT_TYPE_LEFT = 0, + PAGE_EFFECT_TYPE_RIGHT, +} page_effect_type_e; + +extern void page_destroy(Evas_Object *page); +extern Evas_Object *page_create(Evas_Object *scroller + , Evas_Object *item + , const char *id + , const char *subid + , int width, int height + , page_changeable_bg_e changeable_bg + , page_removable_e removable); + +/* page_set_item returns the old item. You have to delete the old item */ +extern Evas_Object *page_set_item(Evas_Object *page, Evas_Object *item); +extern Evas_Object *page_get_item(Evas_Object *page); + +extern Evas_Object *page_create_plus_page(Evas_Object *scroller); +extern void page_destroy_plus_page(Evas_Object *scroller); +extern void page_arrange_plus_page(Evas_Object *scroller, int toast_popup); + +extern void page_focus(Evas_Object *page); +extern void page_unfocus(Evas_Object *page); +extern char *page_read_title(Evas_Object *page); + +extern void page_set_effect(Evas_Object *page, void (*left_effect)(Evas_Object *), void (*right_effect)(Evas_Object *)); +extern void page_unset_effect(Evas_Object *page); +extern void *page_get_effect(Evas_Object *page, page_effect_type_e effect_type); +extern void page_clean_effect(Evas_Object *scroller); + +extern void page_effect_none(Evas_Object *page); + +extern void page_backup_inner_focus(Evas_Object *page, Evas_Object *prev_page, Evas_Object *next_page); +extern void page_restore_inner_focus(Evas_Object *page); + +extern void page_set_title(Evas_Object *page, const char *title); +extern const char *page_get_title(Evas_Object *page); + +extern void page_highlight(Evas_Object *page); +extern void page_unhighlight(Evas_Object *page); + +extern int page_is_appended(Evas_Object *page); + + +#endif /* __W_HOME_PAGE_H__ */ diff --git a/home/include/page_info.h b/home/include/page_info.h new file mode 100755 index 0000000..4b9f0b4 --- /dev/null +++ b/home/include/page_info.h @@ -0,0 +1,88 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_PAGE_INFO_H__ +#define __W_HOME_PAGE_INFO_H__ + +typedef enum { + PAGE_DIRECTION_LEFT = 0, + PAGE_DIRECTION_CENTER, + PAGE_DIRECTION_RIGHT, + PAGE_DIRECTION_ANY, /* This direction is only for scroller_pop_pages, never use this in the push functions */ + PAGE_DIRECTION_MAX, +} page_direction_e; + +typedef enum { + PAGE_CATEGORY_IDLE_CLOCK = 0, + PAGE_CATEGORY_APP, + PAGE_CATEGORY_WIDGET, + PAGE_CATEGORY_MORE_APPS, + PAGE_CATEGORY_NXN_PAGE, + PAGE_CATEGORY_MAX, +} page_category_e; + +typedef enum { + PAGE_REMOVABLE_OFF = 0, + PAGE_REMOVABLE_ON, +} page_removable_e; + +typedef struct { + /* innate features */ + char *id; + char *subid; + char *title; + double period; + int width; + int height; + page_direction_e direction; + page_category_e category; + page_removable_e removable; + + /* acquired features */ + Evas_Object *layout; + Evas_Object *scroller; + Evas_Object *page; + Evas_Object *page_rect; + Evas_Object *page_inner; + Evas_Object *page_inner_area; + Evas_Object *page_inner_bg; + Evas_Object *focus; + Evas_Object *remove_focus; + Evas_Object *item; + Evas_Object *focus_prev; + Evas_Object *focus_next; + + int ordering; + int layout_longpress; + int highlighted; + int drag_threshold_page; + Eina_Bool need_to_unhighlight; + Eina_Bool highlight_changed; + Eina_Bool is_scrolled_object; + Eina_Bool appended; + Eina_Bool need_to_read; + void *faulted_hl_timer; +} page_info_s; + +extern page_info_s *page_info_create(const char *id, const char *subid, double period); +extern void page_info_destroy(page_info_s *page_info); +extern page_info_s *page_info_dup(page_info_s *page_info); + +extern void page_info_list_destroy(Eina_List *page_info_list); +extern int page_info_is_removable(const char *id); + +#endif // __W_HOME_PAGE_INFO_H__ diff --git a/home/include/pkgmgr.h b/home/include/pkgmgr.h new file mode 100755 index 0000000..cd586b0 --- /dev/null +++ b/home/include/pkgmgr.h @@ -0,0 +1,42 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_PKGMGR_H__ +#define __W_HOME_PKGMGR_H__ + +extern void pkgmgr_hold_event(void); +extern void pkgmgr_unhold_event(void); + +extern w_home_error_e pkgmgr_init(void); +extern void pkgmgr_fini(void); + +extern w_home_error_e pkgmgr_uninstall(const char *appid); + +extern w_home_error_e pkgmgr_item_list_append_item(const char *pkg_id, const char *app_id, Evas_Object *item); +extern w_home_error_e pkgmgr_item_list_remove_item(const char *pkg_id, const char *app_id, Evas_Object *item); + +extern void pkgmgr_item_list_affect_pkgid(const char *pkg_id, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data); +extern void pkgmgr_item_list_affect_appid(const char *app_id, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data); + +extern w_home_error_e pkgmgr_reserve_list_push_request(const char *package, const char *key, const char *val); +extern w_home_error_e pkgmgr_reserve_list_pop_request(void); + +extern int pkgmgr_exist(char *appid); + +#endif //__W_HOME_PKGMGR_H__ + +// End of a file diff --git a/home/include/popup.h b/home/include/popup.h new file mode 100755 index 0000000..1a00dc1 --- /dev/null +++ b/home/include/popup.h @@ -0,0 +1,25 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_POPUP_H__ +#define __W_HOME_POPUP_H__ + +#define POPUP_STAGE_AFTER_TUTORIAL 1 + +extern void popup_show(int stage); + +#endif diff --git a/home/include/power_mode.h b/home/include/power_mode.h new file mode 100755 index 0000000..3a86355 --- /dev/null +++ b/home/include/power_mode.h @@ -0,0 +1,42 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __POWER_MODE_H +#define __POWER_MODE_H + +typedef enum { + POWER_MODE_COOLDOWN_ON, + POWER_MODE_COOLDOWN_OFF, + POWER_MODE_ENHANCED_ON, + POWER_MODE_ENHANCED_OFF, + POWER_MODE_EVENT_MAX, +} power_mode_event_type_e; + +#define COOLDOWN_MODE_RELEASE 1 +#define COOLDOWN_MODE_LIMITATION 2 +#define COOLDOWN_MODE_WARNING 3 + +extern int power_mode_register_cb(int type, void (*result_cb)(void *, void *), void *result_data); +extern void power_mode_unregister_cb(int type, void (*result_cb)(void *, void *)); +extern void power_mode_init(void); +extern void power_mode_ui_init(void); +extern void power_mode_fini(void); +extern int emergency_mode_enabled_get(void); +extern int cooldown_mode_enabled_get(void); +extern int cooldown_mode_warning_get(void); + +#endif diff --git a/home/include/scroller.h b/home/include/scroller.h new file mode 100755 index 0000000..74c5e27 --- /dev/null +++ b/home/include/scroller.h @@ -0,0 +1,134 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_SCROLLER_H__ +#define __W_HOME_SCROLLER_H__ + +/* + * FIRST - ... - CENTER_LEFT - CENTER_NEIGHBOR_LEFT - CENTER - CENTER_NEIGHBOR_RIGHT - CENTER_RIGHT - ... - LAST + * If there is no center page, + * then put the CENTER_LEFT & CENTER & CREATE_RIGHT page to LAST. + * The scroller has only one CENTER, CENTER_NEIGHBOR_LEFT and CENTER_NEIGHBOR_RIGHT page each. + * If there are already the CENTER & CENTER_NEIGHBOR pages, the scroller replaces them. + */ +typedef enum { + SCROLLER_PUSH_TYPE_INVALID = 0, + SCROLLER_PUSH_TYPE_FIRST, + SCROLLER_PUSH_TYPE_CENTER_LEFT, + SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_LEFT, + SCROLLER_PUSH_TYPE_CENTER, + SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_RIGHT, + SCROLLER_PUSH_TYPE_CENTER_RIGHT, + SCROLLER_PUSH_TYPE_LAST, + SCROLLER_PUSH_TYPE_MAX, +} scroller_push_type_e; + +typedef enum { + SCROLLER_FREEZE_OFF = 0, + SCROLLER_FREEZE_ON, + SCROLLER_FREEZE_MAX, +} scroller_freeze_e; + +typedef enum { + SCROLLER_BRING_TYPE_INVALID = 0, + SCROLLER_BRING_TYPE_INSTANT, + SCROLLER_BRING_TYPE_INSTANT_SHOW, + SCROLLER_BRING_TYPE_ANIMATOR, + SCROLLER_BRING_TYPE_JOB, + SCROLLER_BRING_TYPE_MAX, +} scroller_bring_type_e; + +extern Evas_Object *scroller_get_focused_page(Evas_Object *scroller); +extern void scroller_destroy(Evas_Object *layout); +extern Evas_Object *scroller_create(Evas_Object *layout, Evas_Object *parent, int page_width, int page_height, scroller_index_e index); + +extern w_home_error_e scroller_push_page(Evas_Object *scroller, Evas_Object *page, scroller_push_type_e scroller_type); +extern Evas_Object *scroller_pop_page(Evas_Object *scroller, Evas_Object *page); + +extern w_home_error_e scroller_push_pages(Evas_Object *scroller, Eina_List *page_info_list, void (*after_func)(void *), void *data); +extern void scroller_pop_pages(Evas_Object *scroller, page_direction_e direction); + +extern w_home_error_e scroller_push_page_before(Evas_Object *scroller + , Evas_Object *page + , Evas_Object *before); +extern w_home_error_e scroller_push_page_after(Evas_Object *scroller + , Evas_Object *page + , Evas_Object *after); + +extern int scroller_count(Evas_Object *scroller); +extern int scroller_count_direction(Evas_Object *scroller, page_direction_e direction); + +extern Eina_Bool scroller_is_scrolling(Evas_Object *scroller); + +extern void scroller_freeze(Evas_Object *scroller); +extern void scroller_unfreeze(Evas_Object *scroller); + +extern void scroller_bring_in(Evas_Object *scroller, int i, scroller_freeze_e freeze, scroller_bring_type_e bring_type); +extern void scroller_bring_in_page(Evas_Object *scroller, Evas_Object *page, scroller_freeze_e freeze, scroller_bring_type_e bring_type); +extern void scroller_bring_in_by_push_type(Evas_Object *scroller, scroller_push_type_e push_type, scroller_freeze_e freeze, scroller_bring_type_e bring_type); +extern void scroller_bring_in_center_of(Evas_Object *scroller + , Evas_Object *page + , scroller_freeze_e freeze + , void (*before_func)(void *), void *before_data + , void (*after_func)(void *), void *after_data); + +extern void scroller_region_show_page(Evas_Object *scroller, Evas_Object *page, scroller_freeze_e freeze, scroller_bring_type_e bring_type); +extern void scroller_region_show_by_push_type(Evas_Object *scroller, scroller_push_type_e push_type, scroller_freeze_e freeze, scroller_bring_type_e bring_type); +extern void scroller_region_show_center_of(Evas_Object *scroller + , Evas_Object *page + , scroller_freeze_e freeze + , void (*before_func)(void *), void *before_data + , void (*after_func)(void *), void *after_data); +extern void scroller_region_show_page_without_timer(Evas_Object *scroller, Evas_Object *page); + +extern void scroller_read_favorites_list(Evas_Object *scroller, Eina_List *page_info_list); +extern void scroller_read_list(Evas_Object *scroller, Eina_List *page_info_list); +extern Eina_List *scroller_write_list(Evas_Object *scroller); + +extern Evas_Object *scroller_move_page_prev(Evas_Object *scroller, Evas_Object *from_page, Evas_Object *to_page, Evas_Object *append_page); +extern Evas_Object *scroller_move_page_next(Evas_Object *scroller, Evas_Object *from_page, Evas_Object *to_page, Evas_Object *insert_page); +extern int scroller_seek_page_position(Evas_Object *scroller, Evas_Object *page); + +extern Evas_Object *scroller_get_page_at(Evas_Object *scroller, int idx); + +extern int scroller_get_current_page_direction(Evas_Object *scroller); +extern Evas_Object *scroller_get_left_page(Evas_Object *scroller, Evas_Object *page); +extern Evas_Object *scroller_get_right_page(Evas_Object *scroller, Evas_Object *page); + +extern void scroller_focus(Evas_Object *scroller); + +extern void scroller_highlight(Evas_Object *scroller); +extern void scroller_unhighlight(Evas_Object *scroller); + +extern void scroller_enable_focus_on_scroll(Evas_Object *scroller); +extern void scroller_disable_focus_on_scroll(Evas_Object *scroller); + +extern void scroller_enable_index_on_scroll(Evas_Object *scroller); +extern void scroller_disable_index_on_scroll(Evas_Object *scroller); + +extern void scroller_enable_effect_on_scroll(Evas_Object *scroller); +extern void scroller_disable_effect_on_scroll(Evas_Object *scroller); + +extern void scroller_enable_cover_on_scroll(Evas_Object *scroller); +extern void scroller_disable_cover_on_scroll(Evas_Object *scroller); + +extern void scroller_backup_inner_focus(Evas_Object *scroller); +extern void scroller_restore_inner_focus(Evas_Object *scroller); + +extern void scroller_reorder_with_list(Evas_Object *scroller, Eina_List *list, page_direction_e page_direction); + +#endif /* __W_HOME_SCROLLER_H__ */ diff --git a/home/include/scroller_info.h b/home/include/scroller_info.h new file mode 100755 index 0000000..ebca79b --- /dev/null +++ b/home/include/scroller_info.h @@ -0,0 +1,60 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_SCROLLER_INFO_H__ +#define __W_HOME_SCROLLER_INFO_H__ + +typedef enum { + SCROLLER_INDEX_INVALID = 0, + SCROLLER_INDEX_SINGULAR, + SCROLLER_INDEX_PLURAL, + SCROLLER_INDEX_MAX, +} scroller_index_e; + +typedef struct { + /* innate features; */ + int root_width; + int root_height; + int page_width; + int page_height; + int max_page; + scroller_index_e index_number; + + /* acquired features */ + int scroll_focus; + int scroll_index; + int scroll_effect; + int scroll_cover; + int scrolling; + int unpack_page_inners_on_scroll; + int enable_highlight; + int mouse_down; + + Evas_Object *layout; + Evas_Object *parent; + Evas_Object *box_layout; + Evas_Object *box; + Evas_Object *center_neighbor_left; + Evas_Object *center; + Evas_Object *center_neighbor_right; + Evas_Object *plus_page; + Evas_Object *index[PAGE_DIRECTION_MAX]; + Ecore_Timer *index_update_timer; + Eina_List *effect_page_list; +} scroller_info_s; + +#endif // __W_HOME_SCROLLER_INFO_H__ diff --git a/home/include/tutorial.h b/home/include/tutorial.h new file mode 100755 index 0000000..4c5e34d --- /dev/null +++ b/home/include/tutorial.h @@ -0,0 +1,41 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_TUTORIAL_H__ +#define __W_HOME_TUTORIAL_H__ + +enum { + TUTORIAL_STEP_INIT = 0, + TUTORIAL_STEP_ONE, + TUTORIAL_STEP_TWO, + TUTORIAL_STEP_THREE, + TUTORIAL_STEP_FOUR, + TUTORIAL_STEP_FIVE, + TUTORIAL_STEP_SIX, + TUTORIAL_STEP_SEVEN, + TUTORIAL_STEP_MAX, +}; + +extern void tutorial_set_transient_for(Ecore_X_Window xwin); +extern int tutorial_is_first_boot(void); +extern int tutorial_is_exist(void); +extern Evas_Object *tutorial_create(Evas_Object *layout); +extern void tutorial_destroy(Evas_Object *tutorial); +extern int tutorial_is_apps(Ecore_X_Window xwin); +extern int tutorial_is_indicator(Ecore_X_Window xwin); + +#endif /* __W_HOME_TUTORIAL_H__ */ diff --git a/home/include/tutorial_info.h b/home/include/tutorial_info.h new file mode 100755 index 0000000..71c425a --- /dev/null +++ b/home/include/tutorial_info.h @@ -0,0 +1,32 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_TUTORIAL_INFO_H__ +#define __W_HOME_TUTORIAL_INFO_H__ + +typedef struct { + Evas_Object *win; + Evas_Object *tutorial; + Evas_Object *bg; + Evas_Object *layout_focus; + Evas_Object *text_focus; + Evas_Object *layout; // layout of home + Evas_Object *scroller; // scroller of home + scroller_info_s *scroller_info; //scroller_info of home +} tutorial_info_s; + +#endif /* __W_HOME_TUTORIAL_INFO_H__ */ diff --git a/home/include/util.h b/home/include/util.h new file mode 100755 index 0000000..2028d83 --- /dev/null +++ b/home/include/util.h @@ -0,0 +1,265 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_UTIL_H__ +#define __W_HOME_UTIL_H__ + +#include +#include + +/* Key */ +#define DATA_KEY_ADD_VIEWER "av" +#define DATA_KEY_BG "bg" +#define DATA_KEY_CHECK "ch" +#define DATA_KEY_CHECK_POPUP "ch_pp" +#define DATA_KEY_CONFORMANT "cf" +#define DATA_KEY_EDIT_INFO "ed_if" +#define DATA_KEY_EDIT_MODE "ed_md" +#define DATA_KEY_EFFECT_PAGE "ef_pg" +#define DATA_KEY_EVENT_UPPER_IS_ON "ev_io" +#define DATA_KEY_EVENT_UPPER_PAGE "ev_up" +#define DATA_KEY_EVENT_UPPER_TIMER "ev_ut" +#define DATA_KEY_INDEX "id" +#define DATA_KEY_INDEX_INFO "id_if" +#define DATA_KEY_IS_LONGPRESS "is_lp" +#define DATA_KEY_ITEM_INFO "it_if" +#define DATA_KEY_LAYOUT "ly" +#define DATA_KEY_LAYOUT_INFO "ly_if" +#define DATA_KEY_MAPBUF "mb" +#define DATA_KEY_MAPBUF_DISABLED_PAGE "mb_dis" +#define DATA_KEY_PAGE "pg" +#define DATA_KEY_PAGE_INFO "pg_i" +#define DATA_KEY_PAGE_ONHOLD_COUNT "pg_ohc" +#define DATA_KEY_PROXY_PAGE "pr_p" +#define DATA_KEY_REAL_PAGE "rp" +#define DATA_KEY_SCROLLER "sc" +#define DATA_KEY_SCROLLER_INFO "sc_i" +#define DATA_KEY_WIN "win" + + +//Apps +#define DATA_KEY_BG "bg" +#define DATA_KEY_BOX "bx" +#define DATA_KEY_BUTTON "bt" +#define DATA_KEY_CURRENT_ITEM "cu_item" +#define DATA_KEY_EDJE_OBJECT "ej_o" +#define DATA_KEY_EVAS_OBJECT "ev_o" +#define DATA_KEY_EVENT_UPPER_ITEM "eu_it" +#define DATA_KEY_FUNC_DELETE_PACKAGE "fn_del_pkg" +#define DATA_KEY_FUNC_DESTROY_POPUP "fn_dr_pp" +#define DATA_KEY_FUNC_DISABLE_ITEM "fn_dis_it" +#define DATA_KEY_FUNC_ENABLE_ITEM "fn_en_it" +#define DATA_KEY_FUNC_HIDE_POPUP "fn_hd_pp" +#define DATA_KEY_FUNC_ROTATE_POPUP "fn_rt_pp" +#define DATA_KEY_FUNC_SHOW_POPUP "fn_sh_pp" +#define DATA_KEY_GIC "gic" +#define DATA_KEY_GRID "gr" +#define DATA_KEY_HIDE_TRAY_TIMER "htt" +#define DATA_KEY_HISTORY_LIST "hi_l" +#define DATA_KEY_IDLE_TIMER "idle_timer" +#define DATA_KEY_INSTANCE_INFO "ii" +#define DATA_KEY_ITEM "it" +#define DATA_KEY_ITEM_ICON_HEIGHT "it_ic_h" +#define DATA_KEY_ITEM_ICON_WIDTH "it_ic_w" +#define DATA_KEY_ITEM_HEIGHT "it_h" +#define DATA_KEY_ITEM_WIDTH "it_w" +#define DATA_KEY_LAYOUT "ly" +#define DATA_KEY_LAYOUT_IS_PAUSED "ly_is_ps" +#define DATA_KEY_LAYOUT_FOCUS_ON "ly_fcs_on" +#define DATA_KEY_LAYOUT_HIDE_TIMER "ly_hd_tm" +#define DATA_KEY_LIST "ls" +#define DATA_KEY_LIST_INDEX "ls_ix" +#define DATA_KEY_POPUP "pp" +#define DATA_KEY_SCROLLER "sc" +#define DATA_KEY_TIMER "timer" +#define DATA_KEY_WIN "win" +#define DATA_KEY_IS_VIRTUAL_ITEM "vit" +#define DATA_KEY_IS_ORDER_CHANGE "ioc" +#define DATA_KEY_ITEM_UNINSTALL_RESERVED "i_u_r" + +#define STR_SIGNAL_EMIT_SIGNAL_ROTATE "rotate" +#define STR_SIGNAL_EMIT_SIGNAL_UNROTATE "unrotate" + + + +/* Strings */ +#define APPID_W_HOME "org.tizen.w-home" +#define APPID_APPS "org.tizen.apps-dbox" +#define FILE_W_HOME_DB DATADIR"/.w_home.db" +#define STR_SIGNAL_EMIT_SIGNAL_ROTATE "rotate" +#define STR_SIGNAL_EMIT_SIGNAL_UNROTATE "unrotate" + + + +/* Multi-language */ +#if !defined(_) +#define _(str) gettext(str) +#endif +#define gettext_noop(str) (str) +#define N_(str) gettext_noop(str) +#define D_(str) dgettext("sys_string", str) + + + +/* Accessibility */ +#define ACCESS_BUTTON "button" +#define ACCESS_EDIT "IDS_AT_POP_EDIT" + + + +/* SIZE */ +#define NAME_LEN 256 +#define TEXT_LEN 256 +#define LOCALE_LEN 32 +#define BUFSZE 1024 +#define SPARE_LEN 128 +#define INDEX_COUNT_LEN 3 +#define PART_NAME_SIZE 128 + + +/* VCONF */ +#define VCONF_KEY_WMS_APPS_ORDER "memory/wms/apps_order" +#define VCONF_KEY_WMS_FAVORITES_ORDER "memory/wms/favorites_order" +#define VCONF_KEY_HOME_LOGGING "db/private/org.tizen.w-home/logging" +#define VCONF_KEY_HOME_IS_TUTORIAL "memory/private/org.tizen.w-home/tutorial" +#define VCONF_KEY_HOME_IS_TUTORIAL_ENABLED_TO_RUN "db/private/org.tizen.w-home/enabled_tutorial" +#define VCONFKEY_APPS_IS_INITIAL_POPUP "db/private/org.tizen.w-home/apps_initial_popup" + + +/* Build */ +#define HAPI __attribute__((visibility("hidden"))) + +/* Packaging */ +#define DEFAULT_ICON IMAGEDIR"/unknown.png" + + +/* Enum */ +typedef enum { + W_HOME_ERROR_NONE = 0, + W_HOME_ERROR_FAIL = -1, + W_HOME_ERROR_DB_FAILED = -2, + W_HOME_ERROR_OUT_OF_MEMORY = -3, + W_HOME_ERROR_INVALID_PARAMETER = -4, + W_HOME_ERROR_NO_DATA = -5, +} w_home_error_e; + + + +typedef enum { + APP_STATE_CREATE = 0, + APP_STATE_PAUSE, + APP_STATE_RESET, + APP_STATE_RESUME, + APP_STATE_LANGUAGE_CHANGED, + APP_STATE_TERMINATE, + APP_STATE_POWER_OFF, + APP_STATE_MAX, +} app_state_e; + + + +typedef enum { + FEATURE_CLOCK_SELECTOR = 0x0001, + FEATURE_CLOCK_CHANGE = 0x0002, + FEATURE_CLOCK_VISUAL_CUE = 0x0004, + FEATURE_CLOCK_HIDDEN_BUTTON = 0x0008, + FEATURE_APPS_BY_BEZEL_UP = 0x0010, + FEATURE_APPS = 0x0020, + FEATURE_TUTORIAL = 0x0040, + FEATURE_MAX, +} feature_e; + + +typedef enum { + APPS_ERROR_NONE = 0, + APPS_ERROR_FAIL = -1, + APPS_ERROR_DB_FAILED = -2, + APPS_ERROR_OUT_OF_MEMORY = -3, + APPS_ERROR_INVALID_PARAMETER = -4, + APPS_ERROR_NO_DATA = -5, +} apps_error_e; + +enum { + APPS_APP_STATE_CREATE = 0, + APPS_APP_STATE_PAUSE, + APPS_APP_STATE_RESET, + APPS_APP_STATE_RESUME, + APPS_APP_STATE_TERMINATE, + APPS_APP_STATE_POWER_OFF, + APPS_APP_STATE_MAX, +}; + + + +enum { + APPS_ROTATE_PORTRAIT = 0, + APPS_ROTATE_LANDSCAPE, +}; + + + +enum { + APP_TYPE_NATIVE = 0, + APP_TYPE_WEB, + APP_TYPE_WIDGET, +}; + + + +#if !defined(_EDJ) +#define _EDJ(a) elm_layout_edje_get(a) +#endif + +/* Functions */ +extern void _evas_object_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +extern void _evas_object_event_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +extern void _evas_object_event_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +extern void _evas_object_event_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +extern void _evas_object_event_hide_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +extern void _evas_object_event_changed_size_hints_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); + +extern void util_post_message_for_launch_fail(const char *name); +extern void util_launch(const char *package, const char *name); +extern void util_launch_with_arg(const char *app_id, const char *arg, const char *name); +extern void util_launch_with_bundle(const char *app_id, bundle *b, const char *name); +extern void util_notify_to_home(int pid); + +extern int util_launch_app(const char *appid, const char *key, const char *value); +extern int util_feature_enabled_get(int feature); + +extern int util_find_top_visible_window(char **command); + +//apps +extern void apps_util_launch(Evas_Object *win, const char *package, const char *name); +extern void apps_util_launch_main_operation(Evas_Object *win, const char *app_id, const char *name); +extern void apps_util_launch_with_arg(Evas_Object *win, const char *app_id, const char *arg, const char *name); +extern void apps_util_launch_with_bundle(Evas_Object *win, const char *app_id, bundle *b, const char *name); + +extern void apps_util_post_message_for_launch_fail(const char *name); +extern void apps_util_notify_to_home(int pid); + +extern int util_create_toast_popup(Evas_Object *parent, const char* text); +extern int util_create_check_popup(Evas_Object *parent, const char* text, void _clicked_cb(void *, Evas_Object *, void *)); + +extern int util_get_app_type(const char *appid); +extern char *util_get_appid_by_pkgname(const char *pkgname); + +extern const char *util_basename(const char *name); +extern double util_timestamp(void); + +extern void util_activate_home_window(void); +#endif /* __W_HOME_UTIL_H__ */ diff --git a/home/include/virtual_canvas.h b/home/include/virtual_canvas.h new file mode 100755 index 0000000..097c27c --- /dev/null +++ b/home/include/virtual_canvas.h @@ -0,0 +1,28 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __APP_TRAY_VIRTUAL_CANVAS_H__ +#define __APP_TRAY_VIRTUAL_CANVAS_H__ + +extern Evas *virtual_canvas_create(int w, int h); +extern bool virtual_canvas_flush_to_file(Evas *e, const char *filename, int w, int h); +extern void *virtual_canvas_load_file_to_data(Evas *e, const char *file, int w, int h); +extern bool virtual_canvas_destroy(Evas *e); + +#endif //__APP_TRAY_VIRTUAL_CANVAS_H__ + +// End of a file diff --git a/home/include/widget.h b/home/include/widget.h new file mode 100644 index 0000000..90df434 --- /dev/null +++ b/home/include/widget.h @@ -0,0 +1,34 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_WIDGET_H__ +#define __W_HOME_WIDGET_H__ + + +extern Evas_Object *widget_create(Evas_Object *parent, const char *id, const char *subid, double period); +extern void widget_destroy(Evas_Object *widget); + +extern void widget_add_callback(Evas_Object *widget, Evas_Object *page); +extern void widget_del_callback(Evas_Object *widget); + +extern void widget_set_update_callback(Evas_Object *obj, int (*updated)(Evas_Object *obj)); +extern void widget_set_scroll_callback(Evas_Object *obj, int (*scroll)(Evas_Object *obj, int hold)); + +extern void widget_init(Evas_Object *win); +extern void widget_fini(void); + +#endif /* __W_HOME_WIDGET_H__ */ diff --git a/home/include/win.h b/home/include/win.h new file mode 100755 index 0000000..75a0ab2 --- /dev/null +++ b/home/include/win.h @@ -0,0 +1,24 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_WIN_H__ +#define __W_HOME_WIN_H__ + +extern Evas_Object *win_create(const char *name); +extern void win_destroy(Evas_Object *win); + +#endif /* __W_HOME_WIN_H__ */ diff --git a/home/include/wms.h b/home/include/wms.h new file mode 100755 index 0000000..04e2625 --- /dev/null +++ b/home/include/wms.h @@ -0,0 +1,37 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_WMS_H__ +#define __W_HOME_WMS_H__ + +// 0 : init, 1 : backup request, 2 : restore request, 3: write done +enum { + W_HOME_WMS_INIT = 0, + W_HOME_WMS_BACKUP, + W_HOME_WMS_RESOTRE, + W_HOME_WMS_DONE, +}; + +extern void wms_change_apps_order(int value); +extern void wms_change_favorite_order(int value); + +extern void wms_register_setup_wizard_vconf(); +extern void wms_unregister_setup_wizard_vconf(); + +extern void wms_launch_gear_manager(Evas_Object *parent, char *link); + +#endif /* __W_HOME_MAIN_H__ */ diff --git a/home/include/xml.h b/home/include/xml.h new file mode 100755 index 0000000..cb474cc --- /dev/null +++ b/home/include/xml.h @@ -0,0 +1,24 @@ +/* + * Samsung API + * Copyright (c) 2013 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 __W_HOME_XML_H__ +#define __W_HOME_XML_H__ + +extern w_home_error_e xml_read_list(const char *xml_file, Eina_List *page_info_list); +extern Eina_List *xml_write_list(const char *xml_file); + +#endif // __W_HOME_XML_H__ diff --git a/home/org.tizen.w-home.manifest b/home/org.tizen.w-home.manifest new file mode 100755 index 0000000..318ff94 --- /dev/null +++ b/home/org.tizen.w-home.manifest @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/home/res/CMakeLists.txt b/home/res/CMakeLists.txt new file mode 100644 index 0000000..bf453d7 --- /dev/null +++ b/home/res/CMakeLists.txt @@ -0,0 +1,6 @@ +ADD_SUBDIRECTORY(edje) +ADD_SUBDIRECTORY(icon) +ADD_SUBDIRECTORY(image) +ADD_SUBDIRECTORY(ordering) +ADD_SUBDIRECTORY(list) +ADD_SUBDIRECTORY(po) diff --git a/home/res/edje/CMakeLists.txt b/home/res/edje/CMakeLists.txt new file mode 100755 index 0000000..124f892 --- /dev/null +++ b/home/res/edje/CMakeLists.txt @@ -0,0 +1 @@ +ADD_SUBDIRECTORY(${CIRCLE}) diff --git a/home/res/edje/circle/CMakeLists.txt b/home/res/edje/circle/CMakeLists.txt new file mode 100755 index 0000000..2f8149a --- /dev/null +++ b/home/res/edje/circle/CMakeLists.txt @@ -0,0 +1,16 @@ +FILE(GLOB edc_files ${CMAKE_CURRENT_SOURCE_DIR}/*.edc) +FOREACH(edc_file ${edc_files}) + GET_FILENAME_COMPONENT( FName ${edc_file} NAME_WE ) + MESSAGE("${FName}") + ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${FName}.edj + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/../images + -DCIRCLE_TYPE=${CIRCLE_TYPE} + ${CMAKE_CURRENT_SOURCE_DIR}/${FName}.edc ${FName}.edj ${EDJE_CFLAGS} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FName}.edc + ) + ADD_CUSTOM_TARGET(${FName}.edj DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FName}.edj) + ADD_DEPENDENCIES(${PROJECT_NAME} ${FName}.edj) +ENDFOREACH(edc_file) + +# install edc files +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ DESTINATION ${EDJEDIR} FILES_MATCHING PATTERN "*.edj") diff --git a/home/res/edje/circle/apps_box.edc b/home/res/edje/circle/apps_box.edc new file mode 100755 index 0000000..914bb94 --- /dev/null +++ b/home/res/edje/circle/apps_box.edc @@ -0,0 +1,412 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + +images { + image: "b_home_screen_recent_icon.png" COMP; +} + + +styles { + style { + name: "button_text_style"; + base: "font=TIZEN:style=Regular text_class=AT014 font_size="32" color_class=AT014 text_class=AT014 align=middle color=#FFFFFF ellipsis=1 wrap=mixed"; + } + style { + name: "button_text_style,pressed"; + base: "font=TIZEN:style=Regular text_class=AT014P font_size="32" color_class=AT014P text_class=AT014P align=middle color=#FFFFFF ellipsis=1 wrap=mixed"; + } +} + +collections { + group { + name: "box"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "top_area"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 0.0; to, "bg"; } + align: 0.0 0.0; + fixed: 1 1; + visible: 0; + /* Do not need buttons */ + //min: 0 BOX_TOP_MENU_HEIGHT; + min: 0 BOX_TOP_HEIGHT; + } + } + part { + name: "top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 0.0; to, "bg"; } + align: 0.0 0.0; + fixed: 1 1; + color: 0 0 0 0; + visible: 0; + min: 0 BOX_TOP_HEIGHT; + } + } +#if 0 /* Do not need buttons */ + part { + name: "top_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "top_area"; } + rel2 { relative: 1.0 1.0; to, "top_area"; } + visible: 1; + } + } +#endif + part { + name: "box"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + visible: 1; + } + } + part { + name: "bottom"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + align: 0.0 1.0; + fixed: 1 1; + color: 0 0 0 0; + visible: 0; + min: 0 BOX_BOTTOM_HEIGHT; + } + } +#if 0 /* Do not need buttons */ + part { + name: "bottom_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 BOX_BOTTOM_HEIGHT/BOX_BOTTOM_MENU_HEIGHT; to, "bottom"; } + rel2 { relative: 1.0 1.0; to, "bottom"; } + visible: 1; + } + } +#endif + } + } + +#if 0 /* Do not need bottom button */ + group { + name: "bottom_button"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: 0 BOX_BOTTOM_MENU_HEIGHT; + fixed: 1 1; + } + } + part { + name: "button,line"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to: "bg"; } + color_class: "AO0152"; + min: 0 1; + align: 0.5 0.0; + fixed: 1 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO0152P"; + } + } + part { + name: "button,body"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color_class: "AO0151"; + fixed: 1 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO0151P"; + } + } + part { + name: "button,txt"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "button,body"; offset: 16 5; } + rel2 { relative: 1.0 1.0; to: "button,body"; offset: -16 -5; } + color_class: "AT014"; + text { + style: "button_text_style"; + align: 0.0 0.5; + } + align: 0.5 0.5; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AT014P"; + text { + style: "button_text_style,pressed"; + align: 0.0 0.5; + } + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + + programs { + program { + signal: "mouse,down,1"; + source: "focus"; + action: STATE_SET "pressed" 0.0; + target: "button,line"; + target: "button,body"; + target: "button,txt"; + } + program { + signal: "mouse,up,1"; + source: "focus"; + action: STATE_SET "default" 0.0; + target: "button,line"; + target: "button,body"; + target: "button,txt"; + } + program { + signal: "mouse,out"; + source: "focus"; + action: STATE_SET "default" 0.0; + target: "button,line"; + target: "button,body"; + target: "button,txt"; + } + } + } //button group + + + group { + name: "top_button"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + fixed: 1 1; + } + } + part { + name: "button,bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 0.5 0.0; + min: BOX_TOP_MENU_WIDTH BOX_TOP_MENU_HEIGHT; + max: BOX_TOP_MENU_WIDTH BOX_TOP_MENU_HEIGHT; + fixed: 1 1; + visible: 0; + } + } + part { + name: "button,txt"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "button,bg"; } + rel2 { relative: 0.5 0.5; to: "button,bg"; } + align: 0.5 0.5; + visible: 1; + fixed: 1 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "button,bg"; } + rel2 { relative: 1.0 1.0; to: "button,bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + } //button group + + group { + name: "top_button_text"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + fixed: 1 1; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.5; to: "bg"; } + rel2 { relative: 0.0 0.5; to: "bg"; } + align: 0.0 0.5; + min: 55 37; + image { + normal: "b_home_screen_recent_icon.png"; + } + color_class: "AO017"; + fixed: 1 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO017P"; + } + } + part { + name: "txt"; + type: TEXT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to_x: "icon"; to_y: "bg"; offset: 3 0; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color_class: "AT014"; + text { + text_class: "AT014"; + align: 0.0 0.5; + min: 1 0; + } + align: 0.0 0.5; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AT014P"; + text { + text_class: "AT014P"; + align: 0.0 0.5; + min: 1 0; + } + } + } + } + + programs { + program { + signal: "press,button"; + source: "button"; + action: STATE_SET "pressed" 0.0; + target: "txt"; + target: "icon"; + } + program { + signal: "release,button"; + source: "button"; + action: STATE_SET "default" 0.0; + target: "txt"; + target: "icon"; + } + } + } //button group +#endif +} diff --git a/home/res/edje/circle/apps_button.edc b/home/res/edje/circle/apps_button.edc new file mode 100755 index 0000000..aa5da7e --- /dev/null +++ b/home/res/edje/circle/apps_button.edc @@ -0,0 +1,126 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + +collections { + group { + name : "button"; + images { + image: "b_home_screen_favorite_more_icon.png" COMP; + } + parts { + part { + name: "bg"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part { + name : "image"; + type: IMAGE; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.24 0.5; to, "bg"; } + rel2 { relative: 0.24 0.5; to, "bg"; } + image { + normal: "b_home_screen_favorite_more_icon.png"; + } + min: 37 37; + max: 37 37; + align: 0.5 0.5; + color_class: AO0351; + } + } + part { + name : "center_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to, "image"; } + rel2 { relative: 1.0 1.0; to, "image"; } + min: 13 69; + align: 0.0 0.5; + } + } + part { + name : "button_txt"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to, "center_padding"; } + rel2 { relative: 1.0 1.0; to, "center_padding"; } + color: 255 255 255 255; + text { + font: "Tizen:style=Bold"; + text_class: "tizen"; + size: 27; + align: 0.0 0.5; + ellipsis: 1; + } + min: 157 69; + align: 0.0 0.5; + visible: 1; + } + } + part { + name : "event"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + color : 0 0 0 0; + visible : 1; + } + description { + state: "pressed" 0.0; + inherit: "default"; + color : 255 255 255 50; + } + } + } + programs { + program { + signal: "pressed"; + source: "button"; + action: STATE_SET "pressed" 0.0; + target: "event"; + } + program { + signal: "unpressed"; + source: "button"; + action: STATE_SET "default" 0.0; + target: "event"; + } + } + } //group +} //collections + + + +// End of file diff --git a/home/res/edje/circle/apps_conf.edc b/home/res/edje/circle/apps_conf.edc new file mode 120000 index 0000000..d61af6c --- /dev/null +++ b/home/res/edje/circle/apps_conf.edc @@ -0,0 +1 @@ +../../../include/apps/apps_conf.h \ No newline at end of file diff --git a/home/res/edje/circle/apps_grid.edc b/home/res/edje/circle/apps_grid.edc new file mode 100755 index 0000000..a2d9824 --- /dev/null +++ b/home/res/edje/circle/apps_grid.edc @@ -0,0 +1,198 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + +#define STYLE(NAME, SIZE) style {\ + name: "style_name_"NAME;\ + base: "font=TIZEN:style=MEDIUM text_class=tizen font_size="SIZE" align=center valign=top color=#FFFFFF ellipsis=1 wrap=mixed";\ + tag: "br" "\n";\ + } + +styles { + STYLE("27", 27) +} + +collections { + group { + name: "elm/gengrid/item/recent-apps/default"; + /* content_get reads these data */ + data.item: "contents" "bg icon_image selected"; + data.item: "texts" "txt"; + + parts { + part { + name: "bg"; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + } + part { + name: "icon_bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 ITEM_ICON_Y/ITEM_HEIGHT; to, "bg"; } + rel2 { relative: 0.5 ITEM_ICON_Y/ITEM_HEIGHT; to, "bg"; } + } + } + part { + name: "selected"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to, "bg"; } + rel2 { relative: 0.5 0.5; to, "bg"; } + visible: 1; + } + } + part { + name: "icon_image"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to, "icon_bg"; } + rel2 { relative: 0.5 0.5; to, "icon_bg"; } + align: 0.5 0.5; + fixed: 1 1; + } + description { + state: "bigger" 0.0; + inherit: "default" 0.0; + } + } + part { + name: "txt_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 ITEM_TEXT_Y/ITEM_HEIGHT; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + } + } + part { + name: "txt"; + type: TEXTBLOCK; + effect: SOFT_SHADOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "txt_region"; } + rel2 { relative: 1.0 1.0; to: "txt_region"; } + color: 255 255 255 255; + color2: 0 0 0 35; + color3: 0 0 0 35; + text { + style: "style_name_27"; + align: 0.5 0.0; + } + visible: 1; + } + description + { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + color: 0 0 0 0; + } + } + part { + name: "icon_image_event"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + + programs { + program { + name: "item,down"; + signal: "mouse,down,1"; + source: "icon_image_event"; + action: SIGNAL_EMIT "item,down" "menu"; + } + program { + name: "item,up"; + signal: "mouse,up,1"; + source: "icon_image_event"; + action: SIGNAL_EMIT "item,up" "menu"; + } + + program { + name: "txt,single"; + signal: "txt,single"; + source: "txt"; + script { + set_state(PART:"txt", "default", 0.0); + } + } + program { + name: "txt,dual"; + signal: "txt,dual"; + source: "txt"; + script { + set_state(PART:"txt", "dual", 0.0); + } + } + program { + name: "txt,single,full"; + signal: "txt,single,full"; + source: "txt"; + script { + set_state(PART:"txt", "single_full", 0.0); + } + } + program { + name: "txt,hide"; + signal: "hide"; + source: "txt"; + action: STATE_SET "hide" 0.0; + target: "txt"; + } + program { + name: "txt,show"; + signal: "show"; + source: "txt"; + action: STATE_SET "default" 0.0; + target: "txt"; + } + } + } // group +} diff --git a/home/res/edje/circle/apps_item.edc b/home/res/edje/circle/apps_item.edc new file mode 100755 index 0000000..deae907 --- /dev/null +++ b/home/res/edje/circle/apps_item.edc @@ -0,0 +1,428 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + +styles { + style { + name: "name_style"; + base: "font=Tizen:style=Regular text_class=AT0121 font_size="28" align=middle color=#FFFFFF color_class=AT0121 ellipsis=1.0"; + } +} + +images { + image: "b_home_screen_badge_large_bg.#.png" COMP; + image: "b_home_screen_badge_large_line.#.png" COMP; + image: "b_home_screen_badge_large_shadow.#.png" COMP; +} + +collections { +group { + name: "item"; + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: ITEM_WIDTH ITEM_HEIGHT; + align: 0.0 0.0; + color: 0 0 0 0; + visible: 1; + } + description { + state: "edit" 0.0; + inherit: "default" 0.0; + min: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; + } + } + part { + name: "item_inner"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.4; to: "bg"; } + rel2 { relative: 0.5 0.4; to: "bg"; } + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + programs { + program { + signal: "unedit"; + source: "item"; + action: STATE_SET "default" 0.0; + target: "bg"; + } + program { + signal: "edit"; + source: "item"; + action: STATE_SET "edit" 0.0; + target: "bg"; + } + } +} + +group { + name: "item_inner"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: ITEM_WIDTH ITEM_HEIGHT; + fixed: 1 1; + } + description { + state: "edit" 0.0; + inherit: "default" 0.0; + min: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; + } + } + part { + name: "icon"; + type: SWALLOW; + scale: 1; + clip_to: "event,clip"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.55; to: "bg"; } + rel2 { relative: 0.5 0.55; to: "bg"; } + min: ITEM_ICON_WIDTH ITEM_ICON_HEIGHT; + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + description { + state: "edit" 0.0; + inherit: "default" 0.0; + min: ITEM_SMALL_ICON_WIDTH ITEM_SMALL_ICON_HEIGHT; + } + } + part { + name: "name"; + type: TEXTBLOCK; + scale: 1; + clip_to: "event,clip"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.15 1.0; to_x: "bg"; to_y: "icon"; } + rel2 { relative: 0.85 1.0; to: "bg"; } + text { + style: "name_style"; + min: 0 0; + align: 0.0 0.0; + } + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "badge_bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: (ITEM_BADGE_X/ITEM_WIDTH) (ITEM_BADGE_Y/ITEM_HEIGHT); to, "bg"; } + rel2 { relative: (ITEM_BADGE_X/ITEM_WIDTH) (ITEM_BADGE_Y/ITEM_HEIGHT); to, "bg"; } + } + } + part { + name: "badge_image"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "badge_txt"; offset: -1 -1; } + rel2 { relative: 1.0 1.0; to, "badge_txt"; offset: -1 -1; } + image { + normal: "b_home_screen_badge_large_bg.#.png"; + } + color_class: "AO013L1"; + min: ITEM_BADGE_W ITEM_BADGE_H; + fixed: 1 1; + visible: 0; + } + description { + state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + min: ITEM_BADGE_W ITEM_BADGE_H; + } + description { + state: "2" 0.0; + inherit: "1" 0.0; + rel1 { relative: 0.0 0.0; to, "badge_txt"; offset: 0 -1; } + rel2 { relative: 1.0 1.0; to, "badge_txt"; offset: 0 -1; } + min: ITEM_BADGE_2W ITEM_BADGE_H; + } + description { + state: "3" 0.0; + inherit: "1" 0.0; + rel1 { relative: 0.0 0.0; to, "badge_txt"; offset: 0 -1; } + rel2 { relative: 1.0 1.0; to, "badge_txt"; offset: 0 -1; } + min: ITEM_BADGE_3W ITEM_BADGE_H; + } + } + part { + name: "badge_line"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "badge_image"; } + rel2 { relative: 1.0 1.0; to, "badge_image"; } + image { + normal: "b_home_screen_badge_large_line.#.png"; + } + color_class: "AO013L2"; + fixed: 1 1; + visible: 0; + } + description { + state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "2" 0.0; + inherit: "1" 0.0; + } + description { + state: "3" 0.0; + inherit: "1" 0.0; + } + } + part { + name: "badge_shadow"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "badge_image"; } + rel2 { relative: 1.0 1.0; to, "badge_image"; } + image { + normal: "b_home_screen_badge_large_shadow.#.png"; + } + color_class: "AO061"; + fixed: 1 1; + visible: 0; + } + description { + state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "2" 0.0; + inherit: "1" 0.0; + } + description { + state: "3" 0.0; + inherit: "1" 0.0; + } + } + + part { + name: "badge_txt"; + type: TEXT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to, "badge_bg"; } + rel2 { relative: 0.5 0.5; to, "badge_bg"; } + align: 0.5 0.5; + color_class: "AT0132"; + text { + text_class: "AT0132"; + ellipsis: 0.0; + align: 0.5 0.5; + min: 1 1; + } + fixed: 1 1; + visible: 0; + } + description { + state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "2" 0.0; + inherit: "1" 0.0; + } + description { + state: "3" 0.0; + inherit: "1" 0.0; + } + } + part { + name: "event,clip"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + color: 255 255 255 255; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color: 255 255 255 127; + } + } + } + programs { + program { + signal: "item,pressed"; + source: "item_inner"; + action: STATE_SET "pressed" 0.0; + target: "event,clip"; + } + program { + signal: "item,released"; + source: "item_inner"; + action: STATE_SET "default" 0.0; + target: "event,clip"; + } + program { + signal: "name,show"; + source: "item_inner"; + action: STATE_SET "default" 0.0; + target: "name"; + } + program { + signal: "name,hide"; + source: "item_inner"; + action: STATE_SET "hide" 0.0; + target: "name"; + } + program { + signal: "unedit"; + source: "item_inner"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "icon"; + } + program { + signal: "edit"; + source: "item_inner"; + action: STATE_SET "edit" 0.0; + target: "bg"; + target: "icon"; + } + // Badge + program { + signal: "badge,on,1"; + source: "item"; + action: STATE_SET "1" 0.0; + target: "badge_image"; + target: "badge_line"; + target: "badge_txt"; + } + program { + signal: "badge,on,2"; + source: "item"; + action: STATE_SET "2" 0.0; + target: "badge_image"; + target: "badge_line"; + target: "badge_shadow"; + target: "badge_txt"; + } + program { + signal: "badge,on,3"; + source: "item"; + action: STATE_SET "3" 0.0; + target: "badge_image"; + target: "badge_line"; + target: "badge_shadow"; + target: "badge_txt"; + } + program { + signal: "badge,off"; + source: "item"; + action: STATE_SET "default" 0.0; + target: "badge_image"; + target: "badge_line"; + target: "badge_shadow"; + target: "badge_txt"; + } + } +} +group { + name: "center"; + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + color: 0 0 0 0; + visible: 1; + } + } + } +} + + +} diff --git a/home/res/edje/circle/apps_layout.edc b/home/res/edje/circle/apps_layout.edc new file mode 100755 index 0000000..535c751 --- /dev/null +++ b/home/res/edje/circle/apps_layout.edc @@ -0,0 +1,229 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + +collections { + group { + name: "layout"; + parts { + part { + name: "bg"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: 0 0; } + color: 0 0 0 0; + visible: 1; + perspective { + zplane: 0; + } + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + part { + name: "container"; + type: SWALLOW; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + visible: 1; + } + } + part { + name: "zoom"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + perspective { + zplane: -140; + } + } + } + part { + name: "scroller"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + align: 0.5 0.0; + visible: 1; + map { + on: 0; + } + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + map { + on: 1; + perspective: "bg"; + } + } + description { + state: "zoom" 0.0; + inherit: "on"; + map { + perspective: "zoom"; + } + } + } + part { + name: "top_checker"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.2; to: "bg"; } + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "bottom_checker"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.8; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + part { + name: "blocker"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 0; + } + description { + state: "enable" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { + name: "bg,down"; + signal: "mouse,down,1"; + source: "bg"; + action: SIGNAL_EMIT "bg,down" "bg"; + } + program { + name: "bg,up"; + signal: "mouse,up,1"; + source: "bg"; + action: SIGNAL_EMIT "bg,up" "bg"; + } + program { + signal: "show"; + source: "checker"; + action: STATE_SET "show" 0.0; + target: "top_checker"; + target: "bottom_checker"; + } + program { + signal: "hide"; + source: "checker"; + action: STATE_SET "default" 0.0; + target: "top_checker"; + target: "bottom_checker"; + } + program { + signal: "block"; + source: "layout"; + action: STATE_SET "enable" 0.0; + target: "blocker"; + } + program { + signal: "unblock"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "blocker"; + } + program { + signal: "show,zoom"; + source: "scroller"; + action: STATE_SET "on" 0.0; + target: "scroller"; + after: "show,zoom,after"; + } + program { + name: "show,zoom,after"; + action: STATE_SET "zoom" 0.0; + transition: SIN_FAC 0.2 0.90; + target: "scroller"; + } + program { + signal: "reset,zoom"; + source: "scroller"; + action: STATE_SET "on" 0.0; + transition: SIN_FAC 0.2 0.90; + target: "scroller"; + after: "reset,zoom,after"; + } + program { + name: "reset,zoom,after"; + action: STATE_SET "default" 0.0; + target: "scroller"; + } + } + } // layout group + +} // collections + + + +// End of file diff --git a/home/res/edje/circle/apps_page.edc b/home/res/edje/circle/apps_page.edc new file mode 100755 index 0000000..a8c4566 --- /dev/null +++ b/home/res/edje/circle/apps_page.edc @@ -0,0 +1,139 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + + + +#define ITEM_CENTER_PART(part_name, rel_x, rel_y, off_x, off_y, align_x, align_y) \ + part { \ + name: "item_center_"part_name; \ + type: SWALLOW; \ + mouse_events: 1; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (rel_x) (rel_y); offset: off_x off_y; to: "bg"; } \ + rel2 { relative: (rel_x) (rel_y); offset: off_x off_y; to: "bg"; } \ + align: align_x align_y; \ + min: ITEM_WIDTH ITEM_HEIGHT; \ + fixed: 1 1; \ + } \ + description { \ + state: "edit" 0.0; \ + inherit: "default" 0.0; \ + min: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; \ + } \ + } + +#define ITEM_CENTER_PROGRAM(part_name) \ + program { \ + signal: "unedit"; \ + source: "item_center_"part_name; \ + action: STATE_SET "default" 0.0; \ + target: "item_center_"part_name; \ + transition: DECELERATE 0.1; \ + } \ + program { \ + signal: "edit"; \ + source: "item_center_"part_name; \ + action: STATE_SET "edit" 0.0; \ + target: "item_center_"part_name; \ + transition: DECELERATE 0.1; \ + } + +#define ITEM_PART(part_name, pre_center, next_center) \ + part { \ + name: "item_"part_name; \ + type: SWALLOW; \ + scale: 1; \ + mouse_events: 1; \ + repeat_events: 1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + rel1 { relative: 0.5 0.5; to: "item_center_"part_name; } \ + rel2 { relative: 0.5 0.5; to: "item_center_"part_name; } \ + align: 0.5 0.5; \ + fixed: 1 1; \ + } \ + description { \ + state: "prev" 0.0; \ + inherit: "default" 0.0; \ + rel1 { relative: 0.5 0.5; to: "item_center_"pre_center; } \ + rel2 { relative: 0.5 0.5; to: "item_center_"pre_center; } \ + } \ + description { \ + state: "next" 0.0; \ + inherit: "default" 0.0; \ + rel1 { relative: 0.5 0.5; to: "item_center_"next_center; } \ + rel2 { relative: 0.5 0.5; to: "item_center_"next_center; } \ + } \ + } + +#define ITEM_PROGRAM(part_name) \ + program { \ + signal: "prev"; \ + source: "item_"part_name; \ + action: STATE_SET "prev" 0.0; \ + target: "item_"part_name; \ + } \ + program { \ + signal: "next"; \ + source: "item_"part_name; \ + action: STATE_SET "next" 0.0; \ + target: "item_"part_name; \ + } \ + program { \ + signal: "return"; \ + source: "item_"part_name; \ + action: STATE_SET "default" 0.0; \ + target: "item_"part_name; \ + transition: LINEAR 0.2; \ + } + +collections { + group { + name: "page"; + parts { + part { + name: "bg"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 0; + } + } + + ITEM_CENTER_PART("-1", -0.5, -0.5, 1, 0, 1.0, 0.5) + ITEM_CENTER_PART("0", 0.5, 0.5, 0, 0, 0.5, 0.5) + ITEM_CENTER_PART("1", 1.5, 1.5, 0, 0, 0.0, 0.5) + + ITEM_PART("0", "-1", "1") + } + programs { + ITEM_CENTER_PROGRAM("-1"); + ITEM_CENTER_PROGRAM("0"); + ITEM_CENTER_PROGRAM("1"); + + ITEM_PROGRAM("0") + } + } // group +} // collections diff --git a/home/res/edje/circle/box_layout.edc b/home/res/edje/circle/box_layout.edc new file mode 100755 index 0000000..d875381 --- /dev/null +++ b/home/res/edje/circle/box_layout.edc @@ -0,0 +1,50 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +collections { + group { + name: "box"; + parts { + part { + name: "bg"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "box"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel1.to: "bg"; + rel2.relative: 1.0 1.0; + rel2.to: "bg"; + visible: 1; + } + } + } + } +} diff --git a/home/res/edje/circle/clock_shortcut.edc b/home/res/edje/circle/clock_shortcut.edc new file mode 100755 index 0000000..6c0d3cc --- /dev/null +++ b/home/res/edje/circle/clock_shortcut.edc @@ -0,0 +1,160 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +#define CLOCK_SHORTCUT_W 65 +#define CLOCK_SHORTCUT_H 65 + +images { + image: "do_not_ic_donot_now.png" COMP; +} + +collections { +group { + name: "shortcut"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "shortcut,icon"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: CLOCK_SHORTCUT_W CLOCK_SHORTCUT_H; + max: CLOCK_SHORTCUT_W CLOCK_SHORTCUT_H; + rel1 { relative: 1.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to: "bg"; } + align: 1.0 0.0; + fixed: 1 1; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "block"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "focus"; + rel2.to: "focus"; + color: 0 0 0 0; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 0.0 0.0; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { + name: "icon,show"; + signal: "icon,show"; + source: "prog"; + action: STATE_SET "show" 0.0; + target: "shortcut,icon"; + target: "focus"; + target: "block"; + } + program { + name: "icon,hide"; + signal: "icon,hide"; + source: "prog"; + action: STATE_SET "default" 0.0; + target: "shortcut,icon"; + target: "focus"; + target: "block"; + } + } +} + +group { + name: "shortcut_default_icon"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "shortcut,icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "bg"; } + rel2 { relative: 0.5 0.5; to: "bg"; } + image { + normal: "do_not_ic_donot_now.png"; + } + min: CLOCK_SHORTCUT_W CLOCK_SHORTCUT_H; + max: CLOCK_SHORTCUT_W CLOCK_SHORTCUT_H; + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + } + } +} +} // collections + + + +// End of file diff --git a/home/res/edje/circle/conf.edc b/home/res/edje/circle/conf.edc new file mode 120000 index 0000000..f925e7c --- /dev/null +++ b/home/res/edje/circle/conf.edc @@ -0,0 +1 @@ +../../../include/conf.h \ No newline at end of file diff --git a/home/res/edje/circle/dynamicbox.edc b/home/res/edje/circle/dynamicbox.edc new file mode 100644 index 0000000..ccd5f09 --- /dev/null +++ b/home/res/edje/circle/dynamicbox.edc @@ -0,0 +1,429 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "../color_classes.edc" + +collections { + styles { + style { + name: "overlay,text"; + base: "font=Tizen text_class=tizen font_size=30 align=center color=#FFFFFF ellipsis=1.0 wrap=char"; + tag: "br" "\n"; + tag: "hilight" "+ font=Tizen:style=Bold"; + tag: "b" "+ font=Tizen:style=Bold"; + tag: "tab" "\t"; + } + } + + group + { + name: "overlay"; + parts + { + part { + name: "preview"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + + part { + name: "bg,img"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color: 100 100 100 100; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + part { + name: "text"; + type: TEXTBLOCK; + description { + state: "default" 0.0; + rel1 { relative: 0.5 200/320; } + rel2 { relative: 0.5 320/320; } + max: 280 -1; + fixed: 1 0; + text { + style: "overlay,text"; + min: 0 0; + } + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + } + + programs { + program { + name: "disable,text"; + signal: "disable"; + source: "text"; + action: STATE_SET "hide" 0.0; + target: "text"; + target: "bg,img"; + } + + program { + name: "enable,text"; + signal: "enable"; + source: "text"; + action: STATE_SET "default" 0.0; + target: "text"; + target: "bg,img"; + } + } + } + + group + { + name: "widget,image"; + parts + { + part { + name: "front"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + description { + state: "to,back" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + part { + name: "front,content"; + type: SWALLOW; + clip_to: "front"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + + part { + name: "back"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 0; + } + description { + state: "to,back" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + part { + name: "back,content"; + type: SWALLOW; + clip_to: "back"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + } + + programs + { + program { + name: "turn,to,back,front"; + signal: "to,back"; + source: "turn"; + action: STATE_SET "to,back" 0.0; + target: "front"; + target: "back"; + transition: LINEAR 0.5; + after: "play,end"; + } + + program { + name: "turn,to,front"; + signal: "to,front"; + source: "turn"; + action: STATE_SET "default" 0.0; + target: "front"; + target: "back"; + transition: LINEAR 0.5; + after: "play,end"; + } + + program { + name: "play,end"; + action: SIGNAL_EMIT "done" "turn"; + } + } + } + + group + { + name: "widget"; + parts + { + part { + name: "widget,content"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + map { + on: 0; + } + } + description { + state: "tilt" 0.0; + inherit: "default" 0.0; + map { + on: 1; + rotation { + x: 30.0; + } + } + } + description { + state: "move,down" 0.0; + inherit: "default" 0.0; + rel1 { relative: 0.0 0.2; } + rel2 { relative: 1.0 1.2; } + } + } + + part { + name: "scroller"; + mouse_events: 1; + repeat_events: 1; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + + part { + name: "overlay"; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color: 255 255 255 255; + visible: 1; + } + description { + state: "disable,overlay" 0.0; + inherit: "default" 0.0; + color: 0 0 0 0; + visible: 0; + } + } + + part { + name: "overlay,content"; + mouse_events: 1; + type: SWALLOW; + clip_to: "overlay"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + } + + programs + { + program { + name: "reset,overlay"; + signal: "reset"; + source: "overlay"; + action: STATE_SET "disable,overlay" 0.0; + target: "overlay"; + } + program { + name: "enable,overlay"; + signal: "enable"; + source: "overlay"; + action: STATE_SET "default" 0.0; + target: "overlay"; + transition: LINEAR 0.5; + after: "animation,done"; + } + + program { + name: "disable,overlay"; + signal: "disable"; + source: "overlay"; + action: STATE_SET "disable,overlay" 0.0; + target: "overlay"; + transition: LINEAR 0.5; + after: "animation,done"; + } + + program { + name: "tilt,start"; + signal: "tilt"; + source: "content"; + action: STATE_SET "tilt" 0.0; + target: "widget,content"; + transition: LINEAR 0.15; + after: "tilt,end"; + } + + program { + name: "tilt,end"; + action: STATE_SET "default" 0.0; + target: "widget,content"; + transition: LINEAR 0.15; + after: "animation,done"; + } + + program { + name: "move,down,start"; + signal: "move,down"; + source: "content"; + action: STATE_SET "move,down" 0.0; + target: "widget,content"; + transition: LINEAR 0.15; + after: "move,down,end"; + } + + program { + name: "move,down,end"; + action: STATE_SET "default" 0.0; + target: "widget,content"; + transition: LINEAR 0.15; + after: "animation,done"; + } + + program { + name: "animation,done"; + action: SIGNAL_EMIT "finished" "animation"; + } + } + } + + group + { + name: "gbar"; + parts + { + part { + name: "gbar,content"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + + part { + name: "overlay"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color: 255 255 255 255; + visible: 1; + } + description { + state: "disable,overlay" 0.0; + inherit: "default" 0.0; + color: 0 0 0 0; + visible: 0; + } + } + + part { + name: "overlay,content"; + type: SWALLOW; + clip_to: "overlay"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + } + + programs + { + program { + name: "reset,overlay"; + signal: "reset"; + source: "overlay"; + action: STATE_SET "disable,overlay" 0.0; + target: "overlay"; + } + program { + name: "enable,overlay"; + signal: "enable"; + source: "overlay"; + action: STATE_SET "default" 0.0; + target: "overlay"; + transition: LINEAR 0.15; + after: "animation,done"; + } + + program { + name: "disable,overlay"; + signal: "disable"; + source: "overlay"; + action: STATE_SET "disable,overlay" 0.0; + target: "overlay"; + transition: LINEAR 0.15; + after: "animation,done"; + } + + program { + name: "animation,done"; + action: SIGNAL_EMIT "finished" "animation"; + } + } + } +} + +/* End of a file */ diff --git a/home/res/edje/circle/edit.edc b/home/res/edje/circle/edit.edc new file mode 100755 index 0000000..a3919e4 --- /dev/null +++ b/home/res/edje/circle/edit.edc @@ -0,0 +1,170 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +#define PLUS_MIN 90 90 + +styles { + style { + name: "max_text_style"; + base: "font=TIZEN:style=Regular text_class=tizen style=shadow shadow_color=#0000004C font_size="25" color_class=AT0121 align=middle color=#FFFFFF ellipsis=1 wrap=mixed"; + } +} + +images { + image: "widget_circle_bg_stroke.png" COMP; + image: "widget_circle_bg.png" COMP; + image: "widget_circle_bg_ef.png" COMP; + image: "b_home_screen_widget_plus.png" COMP; + image: "b_home_screen_edit_cover.png" COMP; + image: "b_home_screen_edit_cover_ef.png" COMP; +} + +collections { +group { + name: "edit"; + parts { + part { + name: "bottom_bg"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part { + name: "bg"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color_class: "AO041"; + visible: 0; + } + } + part { + name: "scroller_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + } + } + part { + name: "scroller"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "scroller_region";} + rel2 { relative: 1.0 1.0; to, "scroller_region";} + visible: 1; + } + } + part { + name: "index_region"; + type: SPACER; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: INDICATOR_START_X/BASE_WIDTH INDICATOR_START_Y/BASE_HEIGHT; to, "bg"; } + rel2 { relative: (INDICATOR_START_X+INDICATOR_WIDTH)/BASE_WIDTH (INDICATOR_START_Y+INDICATOR_HEIGHT)/BASE_HEIGHT; to, "bg"; } + } + } + part { + name: "index_clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "index_region"; } + rel2 { relative: 1.0 1.0; to: "index_region"; } + color: 255 255 255 0; + visible: 1; + } + description { + state: "init" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "index"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + clip_to: "index_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "index_region";} + rel2 { relative: 1.0 1.0; to, "index_region";} + visible: 1; + } + } + } // parts + programs { + program { + signal: "init"; + source: "edit"; + action: STATE_SET "init" 0.0; + target: "index_clipper"; + transition: LINEAR 0.5; + } + program { + signal: "hide"; + source: "edit"; + action: STATE_SET "default" 0.0; + target: "index_clipper"; + } + } // programs +} // group + +group { + name: "proxy_item"; + parts { + part { + name: "proxy_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + min: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; + max: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; + visible: 1; + } + } + } +} // group +} // collections + + + +// End of file diff --git a/home/res/edje/circle/index.edc b/home/res/edje/circle/index.edc new file mode 100755 index 0000000..9eed13c --- /dev/null +++ b/home/res/edje/circle/index.edc @@ -0,0 +1,357 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +collections { + group { + name: "elm/index/item/vertical/clock/thumbnail"; + alias: "elm/index/item_odd/vertical/clock/thumbnail"; + alias: "elm/index/item/horizontal/clock/thumbnail"; + alias: "elm/index/item_odd/horizontal/clock/thumbnail"; + images { + image: "indicator_clock_on_normal.png" COMP; + image: "indicator_clock_on_focused.png" COMP; + image: "indicator_clock_on_normal_ef.png" COMP; + image: "indicator_clock_on_focused_ef.png" COMP; + } + parts { + part { name:"bg"; + type : RECT; + scale: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + min: INDEX_THUMBNAIL_HOME_BG_SIZE; + max: INDEX_THUMBNAIL_HOME_BG_SIZE; + visible: 0; + align: 0.5 0.5; + } + } + part { name: "indicator1_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_clock_on_normal_ef.png"; + color_class: "AO062"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator1"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_clock_on_normal.png"; + color_class: "AO032"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator2_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_clock_on_focused_ef.png"; + color_class: "AO062P"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "indicator2"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_clock_on_focused.png"; + color_class: "AO0321"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } //parts + programs { + program { name: "active"; + signal: "elm,state,active"; + source: "elm"; + action: STATE_SET "active" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + program { name: "inactive"; + signal: "elm,state,inactive"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + } //programs + } // group + group { + name: "elm/index/item/vertical/noti/thumbnail"; + alias: "elm/index/item_odd/vertical/noti/thumbnail"; + alias: "elm/index/item/horizontal/noti/thumbnail"; + alias: "elm/index/item_odd/horizontal/noti/thumbnail"; + images { + image: "indicator_panel_on_normal.png" COMP; + image: "indicator_panel_on_focused.png" COMP; + image: "indicator_panel_on_normal_ef.png" COMP; + image: "indicator_panel_on_focused_ef.png" COMP; + } + parts { + part { name:"bg"; + type : RECT; + scale: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + min: INDEX_THUMBNAIL_HOME_BG_SIZE; + max: INDEX_THUMBNAIL_HOME_BG_SIZE; + visible: 0; + align: 0.5 0.5; + } + } + part { name: "indicator1_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_panel_on_normal_ef.png"; + color_class: "AO062"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator1"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_panel_on_normal.png"; + color_class: "AO032"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator2_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_panel_on_focused_ef.png"; + color_class: "AO062P"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "indicator2"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_panel_on_focused.png"; + color_class: "AO0321"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } //parts + programs { + program { name: "active"; + signal: "elm,state,active"; + source: "elm"; + action: STATE_SET "active" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + program { name: "inactive"; + signal: "elm,state,inactive"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + } //programs + } // group + group { + name: "elm/index/item/vertical/page/thumbnail"; + alias: "elm/index/item_odd/vertical/page/thumbnail"; + alias: "elm/index/item/horizontal/page/thumbnail"; + alias: "elm/index/item_odd/horizontal/page/thumbnail"; + images { + image: "indicator_on_normal.png" COMP; + image: "indicator_on_focused.png" COMP; + image: "indicator_on_normal_ef.png" COMP; + image: "indicator_on_focused_ef.png" COMP; + } + parts { + part { name:"bg"; + type : RECT; + scale: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + min: INDEX_THUMBNAIL_HOME_BG_SIZE; + max: INDEX_THUMBNAIL_HOME_BG_SIZE; + visible: 0; + align: 0.5 0.5; + } + } + part { name: "indicator1_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_on_normal_ef.png"; + color_class: "AO062"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator1"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_on_normal.png"; + color_class: "AO032"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator2_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_on_focused_ef.png"; + color_class: "AO062P"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "indicator2"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_on_focused.png"; + color_class: "AO0321"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } //parts + programs { + program { name: "active"; + signal: "elm,state,active"; + source: "elm"; + action: STATE_SET "active" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + program { name: "inactive"; + signal: "elm,state,inactive"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + } // programs + } //group +} // collections + +/* End of a file */ diff --git a/home/res/edje/circle/layout.edc b/home/res/edje/circle/layout.edc new file mode 100755 index 0000000..d2557a3 --- /dev/null +++ b/home/res/edje/circle/layout.edc @@ -0,0 +1,668 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +images { + image: "bouncing_bottom_edge.png" COMP; + image: "bouncing_bottom_glow.png" COMP; + image: "bouncing_left_edge.png" COMP; + image: "bouncing_left_glow.png" COMP; + image: "bouncing_right_edge.png" COMP; + image: "bouncing_right_glow.png" COMP; +} + +collections { + group { + name: "layout"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part { + name: "opacity"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to: "bg"; } + rel2 { to: "bg"; } + color: 0 0 0 64; + visible: 0; + } + description { + state: "opacity" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "scroller,clip"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg";} + rel2 { relative: 1.0 1.0; to, "bg";} + color: 255 255 255 255; + visible: 1; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + } + } + part { + name: "scroller_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to, "bg"; } + rel2 { to, "bg"; } + } + } + part { + name: "scroller"; + type: SWALLOW; + clip_to: "scroller,clip"; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "scroller_region";} + rel2 { relative: 1.0 1.0; to, "scroller_region";} + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "index_region"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 INDICATOR_START_Y/BASE_HEIGHT; to, "bg"; } + rel2 { relative: 1.0 (INDICATOR_START_Y+INDICATOR_HEIGHT)/BASE_HEIGHT; to, "bg"; } + } + } + part { + name: "left_index,clip"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "index_region"; } + rel2 { relative: 1.0 1.0; to, "index_region"; } + color: 255 255 255 255; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + color: 0 0 0 0; + } + } + part { + name: "left_index"; + type: SWALLOW; + scale: 1; + clip_to: "left_index,clip"; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "index_region";} + rel2 { relative: 1.0 1.0; to, "index_region";} + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "right_index,clip"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "index_region"; } + rel2 { relative: 1.0 1.0; to, "index_region"; } + color: 255 255 255 255; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + } + } + part { + name: "right_index"; + type: SWALLOW; + scale: 1; + clip_to: "right_index,clip"; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "index_region";} + rel2 { relative: 1.0 1.0; to, "index_region";} + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "edit_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to, "bg"; } + rel2 { to, "bg"; } + } + } + part { + name: "edit"; + type: SWALLOW; + clip_to: "scroller,clip"; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "edit_region";} + rel2 { relative: 1.0 1.0; to, "edit_region";} + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "add_viewer_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to, "bg"; } + rel2 { to, "bg"; } + } + } + part { + name: "add_viewer,clip"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg";} + rel2 { relative: 1.0 1.0; to, "bg";} + color: 255 255 255 0; + visible: 1; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "add_viewer"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + clip_to: "add_viewer,clip"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "add_viewer_region";} + rel2 { relative: 1.0 1.0; to, "add_viewer_region";} + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "left_checker"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 0.2 1.0; to: "bg"; } + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "right_checker"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.8 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "blocker"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 0; + } + description { + state: "enable" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "bottom,clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "bouncing,bottom,edge"; } + rel2 { relative: 1.0 1.0; to: "bouncing,bottom,edge"; } + visible: 1; + } + description { + state: "show"; + inherit: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,bottom,glow"; } + rel2 { relative: 1.0 1.0; to: "bouncing,bottom,edge"; } + } + } + part { + name: "bouncing,bottom,edge"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "bottom,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + image { + normal: "bouncing_bottom_edge.png"; + } + color_class: "B019"; + min: 360 2; + fixed: 1 1; + align: 0.5 1.0; + visible: 1; + } + } + part { + name: "bouncing,bottom,glow"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "bottom,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,bottom,edge"; } + rel2 { relative: 1.0 0.0; to: "bouncing,bottom,edge"; } + image { + normal: "bouncing_bottom_glow.png"; + } + color_class: "B018E"; + min: 360 50; + fixed: 1 1; + align: 0.5 1.0; + visible: 1; + } + } + part { + name: "left,clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,left,edge"; } + rel2 { relative: 0.0 1.0; to: "bouncing,left,edge"; } + visible: 1; + } + description { + state: "show"; + inherit: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,left,edge"; } + rel2 { relative: 1.0 1.0; to: "bouncing,left,glow"; } + } + } + part { + name: "bouncing,left,edge"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "left,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 0.0 1.0; to: "bg"; } + image { + normal: "bouncing_left_edge.png"; + } + color_class: "B019"; + min: 1 480; + fixed: 1 1; + align: 0.0 0.5; + visible: 1; + } + } + part { + name: "bouncing,left,glow"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "left,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to: "bouncing,left,edge"; } + rel2 { relative: 1.0 1.0; to: "bouncing,left,edge"; } + image { + normal: "bouncing_left_glow.png"; + } + color_class: "B018E"; + min: 50 480; + fixed: 1 1; + align: 0.0 0.5; + visible: 1; + } + } + part { + name: "right,clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to: "bouncing,right,edge"; } + rel2 { relative: 1.0 1.0; to: "bouncing,right,edge"; } + visible: 1; + } + description { + state: "show"; + inherit: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,right,glow"; } + rel2 { relative: 1.0 1.0; to: "bouncing,right,edge"; offset: 1 0; } + } + } + + part { + name: "bouncing,right,edge"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "right,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + image { + normal: "bouncing_right_edge.png"; + } + color_class: "B019"; + min: 1 480; + fixed: 1 1; + align: 1.0 0.5; + visible: 1; + } + } + part { + name: "bouncing,right,glow"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "right,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,right,edge"; } + rel2 { relative: 0.0 1.0; to: "bouncing,right,edge"; } + image { + normal: "bouncing_right_glow.png"; + } + color_class: "B018E"; + min: 50 480; + fixed: 1 1; + align: 1.0 0.5; + visible: 1; + } + } + } + programs { + program { + signal: "opacity"; + source: "layout"; + action: STATE_SET "opacity" 0.0; + target: "opacity"; + } + program { + signal: "transparent"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "opacity"; + } + program { + signal: "show"; + source: "checker"; + action: STATE_SET "show" 0.0; + target: "left_checker"; + target: "right_checker"; + } + program { + signal: "hide"; + source: "checker"; + action: STATE_SET "default" 0.0; + target: "left_checker"; + target: "right_checker"; + } + program { + signal: "block"; + source: "layout"; + action: STATE_SET "enable" 0.0; + target: "blocker"; + } + program { + signal: "unblock"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "blocker"; + } + program { + signal: "show"; + source: "left_index"; + action: STATE_SET "default" 0.0; + target: "left_index,clip"; + } + program { + signal: "hide"; + source: "left_index"; + action: STATE_SET "hide" 0.0; + target: "left_index,clip"; + transition: LINEAR 0.2; + } + program { + signal: "show"; + source: "right_index"; + action: STATE_SET "default" 0.0; + target: "right_index,clip"; + } + program { + signal: "hide"; + source: "right_index"; + action: STATE_SET "hide" 0.0; + target: "right_index,clip"; + transition: LINEAR 0.2; + } + program { + signal: "show"; + source: "edit"; + action: STATE_SET "show" 0.0; + target: "edit"; + } + program { + signal: "hide"; + source: "edit"; + action: STATE_SET "default" 0.0; + target: "edit"; + } + program { + signal: "show"; + source: "scroller"; + action: STATE_SET "default" 0.0; + target: "scroller"; + target: "left_index"; + target: "right_index"; + } + program { + signal: "hide"; + source: "scroller"; + action: STATE_SET "hide" 0.0; + target: "scroller"; + target: "left_index"; + target: "right_index"; + } + program { + signal: "show"; + source: "add_viewer"; + action: STATE_SET "show" 0.0; + target: "add_viewer,clip"; + target: "add_viewer"; + target: "scroller,clip"; + transition: LINEAR 0.1; + } + program { + signal: "hide"; + source: "add_viewer"; + action: STATE_SET "default" 0.0; + target: "add_viewer,clip"; + target: "add_viewer"; + target: "scroller,clip"; + transition: LINEAR 0.1; + after: "hide,after"; + } + program { + signal: "hide,instant"; + source: "add_viewer"; + action: STATE_SET "default" 0.0; + target: "add_viewer,clip"; + target: "add_viewer"; + target: "scroller,clip"; + after: "hide,after"; + } + program { + name: "hide,after"; + source: "add_viewer"; + action: SIGNAL_EMIT "add_viewer,hide" "add_viewer"; + } + program { + name: "bottom,show"; + signal: "bottom,show"; + source: "layout"; + action: STATE_SET "show" 0.0; + target: "bottom,clipper"; + transition: LINEAR 0.2; + after: "bottom,hide"; + } + program { + name: "bottom,hide"; + signal: "bottom,hide"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "bottom,clipper"; + } + program { + name: "left,show"; + signal: "left,show"; + source: "layout"; + action: STATE_SET "show" 0.0; + target: "left,clipper"; + transition: LINEAR 0.2; + after: "left,hide"; + } + program { + name: "left,hide"; + signal: "left,hide"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "left,clipper"; + } + program { + name: "right,show"; + signal: "right,show"; + source: "layout"; + action: STATE_SET "show" 0.0; + target: "right,clipper"; + transition: LINEAR 0.2; + after: "right,hide"; + } + program { + name: "right,hide"; + signal: "right,hide"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "right,clipper"; + } + } + } // group +} // collections + + + +// End of file diff --git a/home/res/edje/circle/noti.edc b/home/res/edje/circle/noti.edc new file mode 100755 index 0000000..5ef931d --- /dev/null +++ b/home/res/edje/circle/noti.edc @@ -0,0 +1,514 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +styles { + style { + name: "summary_text_style"; + base: "font=Tizen:style=Regular text_class=tizen style=shadow shadow_color=#0000004C font_size=25 align=middle ellipsis=1 color=#FFFFFF wrap=mixed"; + } +} + +styles { + style { + name: "detail_text_style"; + base: "font=Tizen:style=Regular text_class=tizen style=shadow shadow_color=#0000004C font_size=25 align=middle color=#FFFFFF wrap=mixed"; + } +} + +images { + image: "w_cover_view_ic_delete.png" COMP; +} + +collections { + base_scale: 1.2; + group { + name: "summary"; + parts { + part { + name: "bg"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + } + part { + name: "bg,rect"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 255; + visible: 1; + } + } + part { + name: "icon"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; offset: 0 3; } + rel2 { relative: 0.5 0.0; to: "bg"; offset: 0 3; } + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "title"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.2 1.0; to_x: "bg"; to_y: "icon"; } + rel2 { relative: 0.8 1.0; to_x: "bg"; to_y: "icon"; } + align: 0.5 0.0; + min: 0 47; + color: 255 255 255 255; + text { + size: 30; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + } + part { + name: "time"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.1 1.0; to_x: "bg"; to_y: "title"; } + rel2 { relative: 0.9 1.0; to_x: "bg"; to_y: "title"; } + align: 0.5 0.0; + min: 0 32; + color: 255 255 255 255; + text { + size: 20; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + } + part { + name: "time,pad"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "time"; } + rel2 { relative: 1.0 1.0; to_y: "bg"; to_y: "time"; } + align: 0.5 0.0; + min: 0 16; + } + } + part { + name: "text"; + type: TEXTBLOCK; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.1 1.0; to_x: "bg"; to_y: "time,pad"; } + rel2 { relative: 0.9 0.0; to_x: "bg"; to_y: "count,up,pad"; } + align: 0.5 0.5; + min: 0 74; + text { + style: "summary_text_style"; + align: 0.5 0.5; + min: 0 1; + } + } + } + part { + name: "launch,btn"; + type: SWALLOW; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to_x: "bg"; to_y: "text"; } + align: 0.0 0.0; + visible: 1; + } + } + part { + name: "del,btn"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 1.0; to: "bg"; offset: 0 -5; } + rel2 { relative: 0.5 1.0; to: "bg"; offset: 0 -5; } + align: 0.5 1.0; + min: 52 52; + fixed: 1 1; + align: 0.5 0.5; + visible: 1; + } + } + part { + name: "del,btn,icon"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "del,btn"; } + rel2 { relative: 0.5 0.5; to: "del,btn"; } + image { + normal: "w_cover_view_ic_delete.png"; + } + align: 0.5 1.0; + min: 52 52; + fixed: 1 1; + visible: 1; + } + } + part { + name: "count,down,pad"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to_x: "bg"; to_y: "del,btn,icon"; } + rel2 { relative: 1.0 0.0; to_y: "bg"; to_y: "del,btn,icon"; } + align: 0.5 0.0; + min: 0 12; + } + } + part { + name: "count"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.1 0.0; to_x: "bg"; to_y: "count,down,pad"; } + rel2 { relative: 0.9 0.0; to_x: "bg"; to_y: "count,down,pad"; } + align: 0.5 1.0; + min: 0 32; + color: 255 255 255 255; + text { + size: 20; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + } + part { + name: "count,up,pad"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to_x: "bg"; to_y: "count"; } + rel2 { relative: 1.0 0.0; to_x: "bg"; to_y: "count"; } + align: 0.5 1.0; + min: 0 15; + } + } + } + } + group { + name: "detail"; + parts { + part { + name: "bg"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + } + part { + name: "bg,rect"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 10 10 10 255; + visible: 1; + } + } + part { + name: "icon"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; offset: 0 3; } + rel2 { relative: 0.5 0.0; to: "bg"; offset: 0 3; } + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "title,pad"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to: "bg"; } + align: 0.5 0.0; + min: 0 40; + color: 0 0 0 255; + visible: 1; + } + description { + state: "show,icon" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "title"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.2 1.0; to_x: "bg"; to_y: "title,pad"; } + rel2 { relative: 0.8 1.0; to_x: "bg"; to_y: "title,pad"; } + align: 0.5 0.0; + min: 0 47; + color: 255 255 255 255; + text { + size: 30; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + description { + state: "show,icon" 0.0; + inherit: "default" 0.0; + rel1 { relative: 0.2 1.0; to_x: "bg"; to_y: "icon"; } + rel2 { relative: 0.8 1.0; to_x: "bg"; to_y: "icon"; } + } + } + part { + name: "time"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.1 1.0; to_x: "bg"; to_y: "title"; } + rel2 { relative: 0.9 1.0; to_x: "bg"; to_y: "title"; } + align: 0.5 0.0; + min: 0 32; + color: 255 255 255 255; + text { + size: 20; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + } + part { + name: "time,pad"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "time"; } + rel2 { relative: 1.0 1.0; to_y: "bg"; to_y: "time"; } + align: 0.5 0.0; + min: 0 16; + } + } + part { + name: "text"; + type: TEXTBLOCK; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.1 1.0; to_x: "bg"; to_y: "time,pad"; } + rel2 { relative: 0.9 1.0; to_x: "bg"; to_y: "time,pad"; } + align: 0.5 0.0; + text { + style: "detail_text_style"; + align: 0.5 0.5; + min: 0 1; + } + } + } + part { + name: "del,btn"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 1.0; to: "bg"; offset: 0 -5; } + rel2 { relative: 0.5 1.0; to: "bg"; offset: 0 -5; } + align: 0.5 1.0; + min: 52 52; + fixed: 1 1; + align: 0.5 0.5; + visible: 1; + } + } + part { + name: "del,btn,icon"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "del,btn"; } + rel2 { relative: 0.5 0.5; to: "del,btn"; } + image { + normal: "w_cover_view_ic_delete.png"; + } + align: 0.5 1.0; + min: 52 52; + fixed: 1 1; + visible: 1; + } + } + } + programs { + program { + signal: "show,icon"; + source: "icon"; + action: STATE_SET "show,icon" 0.0; + target: "title,pad"; + target: "title"; + } + program { + signal: "hide,icon"; + source: "icon"; + action: STATE_SET "defualt" 0.0; + target: "title,pad"; + target: "title"; + } + } + } + group { + name: "simple"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part { + name: "bg,rect"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 100 100 100 255; + visible: 1; + } + } + part { + name: "icon"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg,rect"; offset: 0 8; } + rel2 { relative: 0.5 0.0; to: "bg,rect"; offset: 0 8; } + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "title"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 0.5 1.0; + min: 0 47; + color: 255 255 255 255; + text { + size: 24; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + } + } + } +} + + + +// End of file diff --git a/home/res/edje/circle/page.edc b/home/res/edje/circle/page.edc new file mode 100755 index 0000000..59d4fde --- /dev/null +++ b/home/res/edje/circle/page.edc @@ -0,0 +1,1036 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +#define DEL_IMAGE_MIN 54 54 +#define PLUS_IMAGE_MIN 90 90 +#define LINE_IMAGE_MIN (216+4) (288+4) +#define TEXT_MIN 300 420 + + + +styles { + style { + name: "max_text_style"; + base: "font=TIZEN:style=Regular text_class=tizen style=shadow shadow_color=#0000004C font_size="18" color_class=AT0121 align=middle color=#FFFFFF ellipsis=1 wrap=mixed"; + } +} + +images { + image: "widget_circle_bg_stroke.png" COMP; + image: "widget_circle_bg.png" COMP; + image: "widget_circle_bg_ef.png" COMP; + image: "b_home_screen_widget_plus.png" COMP; + image: "b_home_screen_widget_del_bg.png" COMP; + image: "b_home_screen_widget_del_line.png" COMP; + image: "b_home_screen_widget_del_icon.png" COMP; + image: "b_widget_favorite_bg.png" COMP; +} + +collections { + base_scale: 1.3; + +group { + name: "page"; + parts { + part { + name: "bg"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part { + name: "inner"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + fixed: 1 1; + visible: 1; + } + } + } +} +group { + name: "page_inner"; + parts { + part { + name: "focus"; + type: SWALLOW; + scale : 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "item"; } + rel2 { relative: 1.0 1.0; to: "item"; } + color: 0 0 0 0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "area"; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "normal"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + perspective { + zplane: 0; + } + } + } + part { + name: "zoom"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + perspective { + zplane: 120; + } + } + } + part { + name: "bg"; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "item"; } + rel2 { relative: 1.0 1.0; to: "item"; } + fixed: 1 1; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "gradient,bg"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "item"; } + rel2 { relative: 1.0 1.0; to: "item"; } + color_class: "AO031"; + image { + normal: "b_widget_favorite_bg.png"; + } + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "item"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "area"; } + rel2 { relative: 0.5 0.5; to: "area"; } + fixed: 1 1; + align: 0.5 0.5; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "cover_clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "cover_ef"; } + rel2 { relative: 1.0 1.0; to: "cover_ef"; } + color: 0 0 0 0; + visible: 1; + } + description { + state: "select" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "cover_ef"; + type: IMAGE; + clip_to: "cover_clipper"; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "item"; } + rel2 { relative: 0.5 0.5; to: "item"; } + image { + normal: "widget_circle_bg_ef.png"; + } + color_class: "AO063"; + /* This size is different from "item" */ + min: ITEM_EDIT_EF_WIDTH ITEM_EDIT_EF_HEIGHT; + fixed: 1 1; + align: 0.5 0.5; + visible: 0; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "select" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "disable" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "zoom" 0.0; + inherit: "select" 0.0; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + map { + on: 1; + } + } + } + part { + name: "line_clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "line_ef"; offset: -30 -30; } + rel2 { relative: 1.0 1.0; to: "line_ef"; offset: 30 30; } + color: 255 255 255 0; + visible: 1; + } + description { + state: "select" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "line,widget"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "item"; } + rel2 { relative: 0.5 0.5; to: "item"; } + image { + normal: "widget_circle_bg_stroke.png"; + } + /* this color class code is AO033 */ + //color_class: "AO033"; + color_class: "AO0481"; + min: 234 234; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "line_ef"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "line_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "cover_ef"; } + rel2 { relative: 1.0 1.0; to: "cover_ef"; } + image { + normal: "widget_circle_bg_ef.png"; + } + color_class: "AO063"; + align: 0.5 0.5; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "disable" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "zoom" 0.0; + inherit: "default" 0.0; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + map { + on: 1; + } + + } + } + part { + name: "line"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + clip_to: "line_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "item"; } + rel2 { relative: 0.5 0.5; to: "item"; } + color_class: "AO043"; + min: ITEM_EDIT_LINE_WIDTH ITEM_EDIT_LINE_HEIGHT; + align: 0.5 0.5; + visible: 1; + fixed: 1 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "disable" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "zoom" 0.0; + inherit: "default" 0.0; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + map { + on: 1; + } + } + } + part { + name: "item_event"; + type: RECT; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1.to: "item"; + rel2.to: "item"; + color: 0 0 0 0; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "del_clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "del_event_region"; } + rel2 { relative: 1.0 1.0; to: "del_event_region"; } + color: 255 255 255 0; + visible: 1; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "del_image_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to: "item"; offset: -37 24; } + rel2 { relative: 1.0 0.0; to: "item"; offset: -37 24; } + align: 0.5 0.5; + min: DEL_IMAGE_MIN; + fixed: 1 1; + } + } + /* This part blocks events */ + part { + name: "del_event_region"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: -0.5 -0.5; to: "del_image_region"; } + rel2 { relative: 1.5 1.5; to: "del_image_region"; } + color: 0 0 0 0; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "del_bg"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "del_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "del_image_region"; } + rel2 { relative: 0.5 0.5; to: "del_image_region"; } + image { + normal: "b_home_screen_widget_del_bg.png"; + } + color_class: "AO044L1"; + align: 0.5 0.5; + min: DEL_IMAGE_MIN; + fixed: 1 1; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "del_line"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "del_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "del_image_region"; } + rel2 { relative: 0.5 0.5; to: "del_image_region"; } + image { + normal: "b_home_screen_widget_del_line.png"; + } + color_class: "AO044L2"; + align: 0.5 0.5; + min: DEL_IMAGE_MIN; + fixed: 1 1; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "del_icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "del_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "del_image_region"; } + rel2 { relative: 0.5 0.5; to: "del_image_region"; } + image { + normal: "b_home_screen_widget_del_icon.png"; + } + color_class: "AO044L3"; + align: 0.5 0.5; + min: DEL_IMAGE_MIN; + fixed: 1 1; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "remove_focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "del_event_region"; } + rel2 { relative: 1.0 1.0; to: "del_event_region"; } + color: 0 0 0 0; + visible: 0; + } + description { + state: "show" 0.0; + rel1 { relative: 0.0 0.0; to: "del_event_region"; } + rel2 { relative: 1.0 1.0; to: "del_event_region"; } + visible: 1; + } + } + part { + name: "blocker"; + type: RECT; + mouse_events: 1; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "item"; } + rel2 { relative: 1.0 1.0; to: "item"; } + color: 0 0 0 0; + visible: 0; + } + description { + state: "enable" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { + signal: "show"; + source: "del"; + action: STATE_SET "show" 0.0; + target: "del_clipper"; + target: "del_event_region"; + target: "remove_focus"; + } + program { + signal: "hide"; + source: "del"; + action: STATE_SET "default" 0.0; + target: "del_clipper"; + target: "del_event_region"; + target: "remove_focus"; + } + program { + signal: "mouse,clicked,1"; + source: "focus"; + action: SIGNAL_EMIT "clicked" "page"; + } + program { + name: "enable,bg"; + signal: "enable"; + source: "gradient,bg"; + action: STATE_SET "show" 0.0; + target: "gradient,bg"; + } + program { + name: "disable,bg"; + signal: "disable"; + source: "gradient,bg"; + action: STATE_SET "default" 0.0; + target: "gradient,bg"; + } + program { + source: "blocker"; + signal: "enable"; + action: STATE_SET "enable" 0.0; + target: "blocker"; + } + program { + source: "blocker"; + signal: "disable"; + action: STATE_SET "default" 0.0; + target: "blocker"; + } + program { + signal: "deselect"; + source: "cover_clipper"; + action: STATE_SET "default" 0.0; + target: "cover_clipper"; + target: "cover_ef"; + } + program { + signal: "select"; + source: "cover_clipper"; + action: STATE_SET "select" 0.0; + target: "cover_clipper"; + target: "cover_ef"; + transition: LINEAR 0.5; + } + program { + signal: "disable"; + source: "line_ef"; + action: STATE_SET "disable" 0.0; + target: "cover_ef"; + target: "line_ef"; + target: "line"; + transition: LINEAR 0.5; + } + program { + signal: "deselect"; + source: "line"; + action: STATE_SET "default" 0.0; + target: "line_clipper"; + transition: LINEAR 0.5; + } + program{ + signal: "deselect,im"; + source: "line"; + action: STATE_SET "default" 0.0; + target: "line_clipper"; + } + program { + signal: "hide"; + source: "line,widget"; + action: STATE_SET "default" 0.0; + target: "line,widget"; + } + program { + signal: "show"; + source: "line,widget"; + action: STATE_SET "show" 0.0; + target: "line,widget"; + } + program { + signal: "select"; + source: "line"; + action: STATE_SET "select" 0.0; + target: "line_clipper"; + transition: LINEAR 0.5; + } + program { + signal: "on,zoom"; + source: "inner"; + action: STATE_SET "on" 0.0; + target: "item_event"; + target: "bg"; + target: "gradient,bg"; + target: "item"; + target: "del_bg"; + target: "del_line"; + target: "del_icon"; + target: "cover_ef"; + target: "line_ef"; + target: "line"; + after: "show,zoom"; + } + program { + name: "show,zoom"; + action: STATE_SET "zoom" 0.0; + transition: SIN_FAC 0.2 0.90; + target: "item_event"; + target: "bg"; + target: "gradient,bg"; + target: "item"; + target: "del_bg"; + target: "del_line"; + target: "del_icon"; + target: "cover_ef"; + target: "line_ef"; + target: "line"; + } + program { + signal: "reset,zoom"; + source: "inner"; + action: STATE_SET "on" 0.0; + transition: SIN_FAC 0.2 0.90; + target: "item_event"; + target: "bg"; + target: "gradient,bg"; + target: "item"; + target: "del_bg"; + target: "del_line"; + target: "del_icon"; + target: "cover_ef"; + target: "line_ef"; + target: "line"; + after: "off,zoom"; + } + program { + name: "off,zoom"; + action: STATE_SET "defalut" 0.0; + target: "item_event"; + target: "bg"; + target: "gradient,bg"; + target: "item"; + target: "del_bg"; + target: "del_line"; + target: "del_icon"; + after: "on,cover"; + } + program { + name: "on,cover"; + action: STATE_SET "select" 0.0; + target: "line_ef"; + target: "cover_ef"; + target: "cover_clipper"; + target: "line_clipper"; + } + } +} +group { + name: "plus_item"; + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + /* This size is different from "item" */ + min: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; + fixed: 1 1; + color: 0 0 0 0; + visible: 1; + } + } + part { + name: "add,bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "bg"; } + rel2 { relative: 0.5 0.5; to: "bg"; } + min: LINE_IMAGE_MIN; + fixed: 1 1; + color_class: "AO0111"; + visible: 1; + } + description { + state: "edit" 0.0; + inherit: "default" 0.0; + color_class: "AO0481"; + } + } + part { + name: "plus"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "add,bg"; } + rel2 { relative: 0.5 0.5; to: "add,bg"; } + image { + normal: "b_home_screen_widget_plus.png"; + } + color_class: "AO035"; + min: PLUS_IMAGE_MIN; + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + description { + state: "press" 0.0; + inherit: "default" 0.0; + color_class: "AO035P"; + } + description { + state: "edit" 0.0; + inherit: "default" 0.0; + color_class: "AO034"; + } + description { + state: "edit,press" 0.0; + inherit: "default" 0.0; + color_class: "AO034P"; + } + description { + state: "max" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "max_text"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.1 0.05; to: "bg"; } + rel2 { relative: 0.9 0.95; to: "bg"; } + fixed: 1 0; + text { + style: "max_text_style"; + } + visible: 0; + } + description { + state: "max" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { + name: "button,down"; + signal: "mouse,down,1"; + source: "bg"; + action: SIGNAL_EMIT "down" "plus_item"; + } + program { + source: "plus"; + signal: "press"; + action: STATE_SET "press" 0.0; + target: "plus"; + } + program { + name: "button,up"; + signal: "mouse,up,1"; + source: "bg"; + action: SIGNAL_EMIT "up" "plus_item"; + } + program { + name: "button,click"; + signal: "mouse,clicked,1"; + source: "bg"; + action: SIGNAL_EMIT "click" "plus_item"; + } + program { + source: "plus"; + signal: "release"; + action: STATE_SET "default" 0.0; + target: "plus"; + } + program { + source: "plus"; + signal: "edit,press"; + action: STATE_SET "edit,press" 0.0; + target: "plus"; + } + program { + source: "plus"; + signal: "edit,release"; + action: STATE_SET "edit" 0.0; + target: "plus"; + } + program { + name: "hide_plus"; + signal: "max"; + source: "plus_in_edit"; + action: STATE_SET "max" 0.0; + target: "max_text"; + target: "plus"; + } + program { + name: "show_plus"; + signal: "no_max"; + source: "plus_in_edit"; + action: STATE_SET "default" 0.0; + target: "max_text"; + after: "show,edit"; + } + program { + name: "show,widget"; + signal: "show,widget"; + source: "plus_item"; + action: STATE_SET "default" 0.0; + target: "add,bg"; + target: "plus"; + } + program { + name: "show,edit"; + signal: "show,edit"; + source: "plus_item"; + action: STATE_SET "edit" 0.0; + target: "add,bg"; + target: "plus"; + } + program { + name: "show,widget,ani"; + signal: "show,widget,ani"; + source: "plus_item"; + action: STATE_SET "edit" 0.0; + target: "add,bg"; + target: "plus"; + after: "show,widget,ani,2"; + } + program { + name: "show,widget,ani,2"; + action: STATE_SET "default" 0.0; + target: "add,bg"; + target: "plus"; + transition: LINEAR 0.5; + } + + } +}//end group +}//end collections diff --git a/home/res/edje/circle/page_clock.edc b/home/res/edje/circle/page_clock.edc new file mode 100755 index 0000000..9ba6749 --- /dev/null +++ b/home/res/edje/circle/page_clock.edc @@ -0,0 +1,1803 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +#define HIDDEN_AREA_H 256 +#define HIDDEN_QUICKBUTTON_W (29+90+29) +#define HIDDEN_QUICKBUTTON_H (90+7+33+33) +#define HIDDEN_BUTTON_TRANSIT_TIME 0.35 +#define CLOCK_INDICATOR_W 65 +#define CLOCK_INDICATOR_H 65 +#define CLOCK_INDICATOR_ICON_W 60 +#define CLOCK_INDICATOR_ICON_H 60 + +images { + image: "b_home_screen_clock_arrow_big.png" COMP; + image: "b_home_screen_clock_arrow_big_ef.png" COMP; + image: "Arrow_S_00015.png" COMP; + image: "Arrow_S_00016.png" COMP; + image: "Arrow_S_00017.png" COMP; + image: "Arrow_S_00018.png" COMP; + image: "Arrow_S_00019.png" COMP; + image: "Arrow_S_00020.png" COMP; + image: "Arrow_S_00021.png" COMP; + image: "Arrow_S_00022.png" COMP; + image: "Arrow_S_00023.png" COMP; + image: "Arrow_S_00024.png" COMP; + image: "Arrow_S_00025.png" COMP; + image: "Arrow_S_00026.png" COMP; + image: "Arrow_S_00027.png" COMP; + image: "Arrow_S_00028.png" COMP; + image: "Arrow_S_00029.png" COMP; + image: "Arrow_S_00030.png" COMP; + image: "Arrow_S_00031.png" COMP; + image: "Arrow_S_00032.png" COMP; + image: "Arrow_S_00033.png" COMP; + image: "B3_Data.png" COMP; + image: "do_not_ic_disturb.png" COMP; + image: "b_home_screen_block_btn_bg.png" COMP; + image: "b_home_screen_block_btn_line.png" COMP; + image: "b_home_screen_block_text_btn_bg.#.png" COMP; + image: "b_home_screen_block_text_btn_line.#.png" COMP; + image: "b_home_screen_block_btn_ic.png" COMP; + image: "b_home_screen_network_auto.png" COMP; + image: "b_home_screen_network_off.png" COMP; + image: "b_home_screen_network_on.png" COMP; +} + +collections { + + styles { + style { + name: "text,1,normal"; + base: "font=Tizen text_class=AT041 font_size=32 align=center color=#FFFFFF color_class=AT044 wrap=mixed"; # ellipsis=1.0 + } + style { + name: "text,1,pressed"; + base: "font=Tizen text_class=AT041S font_size=32 align=center color=#FFFFFF color_class=AT044P wrap=mixed"; # ellipsis=1.0 + } + style { + name: "name_style"; + base: "font=TIZEN:style=Regular text_class=tizen font_size="28" align=center color=#FFFFFF color_class=AT043 ellipsis=1 wrap=mixed"; + } + style { + name: "name_style_pressed"; + base: "font=TIZEN:style=Regular text_class=tizen font_size="28" align=center color=#FFFFFF color_class=AT043P ellipsis=1 wrap=mixed"; + } + } + group { + name: "clock_page"; + parts { + part { + name: "clock_bg"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + } + part { + name: "item"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "clock_bg";} + rel2 { relative: 0.5 0.5; to: "clock_bg";} + fixed: 1 1; + visible: 1; + align: 0.5 0.5; + } + } + part { + name: "hidden_region"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "clock_bg";} + rel2 { relative: 1.0 0.0; to: "clock_bg";} + min: 0 HIDDEN_AREA_H; + fixed: 1 1; + align: 0.0 1.0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + min: 0 HIDDEN_AREA_H; + max: -1 HIDDEN_AREA_H; + rel1 { relative: 0.0 0.0; to: "clock_bg";} + rel2 { relative: 1.0 0.0; to: "clock_bg";} + align: 0.0 0.0; + } + description { + state: "show.short" 0.0; + inherit: "default" 0.0; + min: 0 HIDDEN_AREA_H; + max: -1 HIDDEN_AREA_H; + rel1 { relative: 0.0 0.0; to: "clock_bg"; offset: 0 -99;} + rel2 { relative: 1.0 0.0; to: "clock_bg";} + align: 0.0 0.0; + } + } + part { + name: "bottom_cue"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + min: 75 75; + max: 75 75; + rel1 { relative: 0.5 1.0; to: "clock_bg"; } + rel2 { relative: 0.5 1.0; to: "clock_bg"; } + fixed: 1 1; + visible: 1; + align: 0.5 1.0; + } + } + part { + name: "bottom_cue_button_bg"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 106 53; + max: 106 53; + rel1 { relative: 0.5 1.0; to: "clock_bg"; offset: 0 -19;} + rel2 { relative: 0.5 1.0; to: "clock_bg"; offset: 0 -19;} + image { + normal: "b_home_screen_clock_arrow_big_ef.png"; + } + color_class: "AO064"; + fixed: 1 1; + visible: 0; + align: 0.5 1.0; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "bottom_cue_button"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 106 53; + max: 106 53; + rel1 { relative: 0.5 1.0; to: "clock_bg"; offset: 0 -19;} + rel2 { relative: 0.5 1.0; to: "clock_bg"; offset: 0 -19;} + image { + normal: "b_home_screen_clock_arrow_big.png"; + } + color_class: "AO014"; + fixed: 1 1; + visible: 0; + align: 0.5 1.0; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "clock_bg"; } + rel2 { relative: 1.0 1.0; to: "clock_bg"; } + align: 0.0 0.0; + visible: 0; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "shortcut"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + min: CLOCK_SHORTCUT_AREA_W CLOCK_SHORTCUT_AREA_W; + max: CLOCK_SHORTCUT_AREA_W CLOCK_SHORTCUT_AREA_W; + rel1 { relative: 1.0 0.0; to: "clock_bg"; } + rel2 { relative: 1.0 0.0; to: "clock_bg"; } + fixed: 1 1; + visible: 1; + align: 1.0 0.0; + } + } + part { + name: "indicator.1"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + min: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + max: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + rel1 { relative: 0.0 0.0; to: "clock_bg"; } + rel2 { relative: 0.0 0.0; to: "clock_bg"; } + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + } + part { + name: "indicator.2"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + min: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + max: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + rel1 { relative: 1.0 0.0; to_x: "indicator.1"; to_y: "clock_bg"; } + rel2 { relative: 1.0 0.0; to_x: "indicator.1"; to_y: "clock_bg"; } + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + } + part { + name: "hidden_item"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "hidden_region"; } + rel2 { relative: 1.0 1.0; to: "hidden_region"; } + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + } + part { + name: "focus.bottom.cue"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bottom_cue_button"; } + rel2 { relative: 1.0 1.0; to: "bottom_cue_button"; } + align: 0.0 0.0; + visible: 0; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "event_blocker"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "clock_bg"; } + rel2 { relative: 0.5 0.5; to: "clock_bg"; } + fixed: 1 1; + visible: 1; + align: 0.5 0.5; + } + } + + programs { + program { + signal: "hidden.show"; + source: "clock_bg"; + action: STATE_SET "show" 0.0; + target: "hidden_region"; + transition: SIN_FAC HIDDEN_BUTTON_TRANSIT_TIME 1.7; + after: "hidden.show,after"; + } + program { + signal: "hidden.show.short"; + source: "clock_bg"; + action: STATE_SET "show.short" 0.0; + target: "hidden_region"; + transition: SIN_FAC HIDDEN_BUTTON_TRANSIT_TIME 1.7; + after: "hidden.show,after"; + } + program { + name: "hidden.show,after"; + source: "clock_bg"; + action: SIGNAL_EMIT "drawer,displayed" "clock_bg"; + } + program { + signal: "hidden.hide"; + source: "clock_bg"; + action: STATE_SET "default" 0.0; + target: "hidden_region"; + transition: DECELERATE 0.2; + transition: SIN_FAC HIDDEN_BUTTON_TRANSIT_TIME 1.7; + after: "hidden.hide,after"; + } + program { + name: "hidden.hide,after"; + source: "clock_bg"; + action: SIGNAL_EMIT "drawer,hided" "clock_bg"; + } + program { + signal: "screenreader,on"; + source: "clock_bg"; + action: STATE_SET "enabled" 0.0; + target: "focus"; + } + program { + signal: "screenreader,off"; + source: "clock_bg"; + action: STATE_SET "default" 0.0; + target: "focus"; + } + program { + signal: "screenreader,apps,on"; + source: "clock_bg"; + action: STATE_SET "enabled" 0.0; + target: "focus.bottom.cue"; + target: "bottom_cue_button"; + } + program { + signal: "screenreader,apps,off"; + source: "clock_bg"; + action: STATE_SET "default" 0.0; + target: "focus.bottom.cue"; + target: "bottom_cue_button"; + } + } + } + } // end of group + + group { + name: "blockingmode"; + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + color_class: "AO053"; + fixed: 1 1; + visible: 1; + } + } + part { + name: "pad.top"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 0 53; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to: "bg"; } + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "line.1"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "pad.top"; } + rel2 { relative: 1.0 1.0; to: "pad.top"; } + min: 0 1; + max: -1 1; + fixed: 1 1; + align: 0.0 1.0; + color_class: "AO057"; + } + } + part { + name: "area.content"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "pad.top"; } + rel2 { relative: 1.0 1.0; to_x: "bg"; to_y: "bg"; } + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "area.button.1"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 0 99; + max: -1 99; + rel1 { relative: 0.0 0.0; to_x:"area.content"; to_y:"area.content";} + rel2 { relative: 1.0 0.0; to_x:"area.content"; to_y:"area.content";} + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "line.2"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "area.button.1"; } + rel2 { relative: 1.0 1.0; to: "area.button.1"; } + min: 0 1; + max: -1 1; + fixed: 1 1; + align: 0.0 1.0; + color_class: "AO057"; + } + } + part { + name: "line.3"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + min: 0 2; + max: -1 2; + fixed: 1 1; + align: 0.0 1.0; + color_class: "AO0531"; + } + } + part { + name: "area.button.2"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 0 100; + max: -1 100; + rel1 { relative: 0.0 1.0; to_x:"area.content"; to_y: "line.2";} + rel2 { relative: 1.0 1.0; to_x:"area.content"; to_y: "line.2";} + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "button.1"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "area.button.1";} + rel2 { relative: 1.0 1.0; to: "area.button.1";} + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "button.2"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "area.button.2";} + rel2 { relative: 1.0 1.0; to: "area.button.2";} + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + } + programs { + program { + signal: "button.1.show"; + source: "prog"; + script { + set_state(PART:"button.1", "default", 0.0); + } + } + program { + signal: "button.1.hide"; + source: "prog"; + script { + set_state(PART:"button.1", "hide", 0.0); + } + } + program { + signal: "button.2.hide"; + source: "prog"; + script { + set_state(PART:"button.2", "hide", 0.0); + } + } + } + } // end of group + group { + styles { + style { + name: "dnd,title,normal"; + base: "font=Tizen text_class=AT044 font_size=32 align=center color=#FFFFFF color_class=AT056 wrap=mixed"; # ellipsis=1.0 + } + style { + name: "dnd,title,pressed"; + base: "font=Tizen text_class=AT044 font_size=32 align=center color=#FFFFFF color_class=AT056P wrap=mixed"; # ellipsis=1.0 + } + style { + name: "dnd,title,enabled"; + base: "font=Tizen text_class=AT044 font_size=32 align=center color=#FFFFFF color_class=AT055 wrap=mixed"; # ellipsis=1.0 + } + style { + name: "dnd,title,enabled,pressed"; + base: "font=Tizen text_class=AT044 font_size=32 align=center color=#FFFFFF color_class=AT055P wrap=mixed"; # ellipsis=1.0 + } + } + name: "hidden_item_blocking_mode"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: 0 100; + max: -1 100; + fixed: 1 1; + } + } + part { + name: "pad.top"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 0 16; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to: "bg"; } + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "pad.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 14 0; + fixed: 1 1; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 0.0 1.0; to: "bg"; } + align: 0.0 0.0; + } + } + part { + name: "pad.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 14 0; + fixed: 1 1; + rel1 { relative: 1.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 1.0 0.0; + } + } + part { + name: "area.icon"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 332 69; + max: 332 69; + fixed: 1 1; + rel1 { relative: 1.0 1.0; to_x:"pad.left"; to_y: "pad.top";} + rel2 { relative: 0.0 1.0; to_x:"pad.right"; to_y: "pad.top";} + align: 0.0 0.0; + } + } + part { + name: "icon.bg"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to: "area.icon"; } + rel2 { to: "area.icon"; } + image { + normal: "b_home_screen_block_text_btn_bg.#.png"; + } + color_class: "AO084L1"; + fixed: 1 1; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO084L1P"; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + color_class: "AO083L1"; + } + description { + state: "enabled_pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO083L1P"; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to: "area.icon"; } + rel2 { to: "area.icon"; } + image { + normal: "b_home_screen_block_text_btn_line.#.png"; + } + color_class: "AO084L2"; + fixed: 1 1; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO084L2P"; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + color_class: "AO083L2"; + } + description { + state: "enabled_pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO083L2P"; + } + } + part { + name: "name"; + type: TEXTBLOCK; + scale: 1; + multiline: 1; + description { + state: "default" 0.0; + min: 300 38; + max: 300 38; + fixed: 1 1; + rel1 { relative: 0.5 0.5; to:"icon";} + rel2 { relative: 0.5 0.5; to:"icon";} + text { + style: "dnd,title,normal"; + align: 0.5 0.5; + } + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + text { style: "dnd,title,pressed"; } + visible: 1; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + text { style: "dnd,title,enabled"; } + visible: 1; + } + description { + state: "enabled_pressed" 0.0; + inherit: "default" 0.0; + text { style: "dnd,title,enabled,pressed"; } + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + programs { + script { + public g_icon_enabled; + public g_is_graytone; + } + program { + signal: "gray,enable"; + source: "prog"; + script { + set_int(g_is_graytone, 1); + } + } + program { + signal: "gray,disable"; + source: "prog"; + script { + set_int(g_is_graytone, 0); + } + } + program { + signal: "icon,enable"; + source: "prog"; + script { + set_int(g_icon_enabled, 1); + set_state(PART:"icon.bg", "enabled", 0.0); + set_state(PART:"icon", "enabled", 0.0); + set_state(PART:"name", "enabled", 0.0); + } + } + program { + signal: "icon,disable"; + source: "prog"; + script { + set_int(g_icon_enabled, 0); + set_state(PART:"icon.bg", "default", 0.0); + set_state(PART:"icon", "default", 0.0); + set_state(PART:"name", "default", 0.0); + } + } + program { + signal: "mouse,down,1"; + source: "focus"; + script { + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon.bg", "enabled_pressed", 0.0); + set_state(PART:"icon", "enabled_pressed", 0.0); + set_state(PART:"name", "enabled_pressed", 0.0); + } else { + set_state(PART:"icon.bg", "enabled_pressed", 0.0); + set_state(PART:"icon", "enabled_pressed", 0.0); + set_state(PART:"name", "enabled_pressed", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon.bg", "pressed", 0.0); + set_state(PART:"icon", "pressed", 0.0); + set_state(PART:"name", "pressed", 0.0); + } else { + set_state(PART:"icon.bg", "pressed", 0.0); + set_state(PART:"icon", "pressed", 0.0); + set_state(PART:"name", "pressed", 0.0); + } + } + } + } + program { + signal: "mouse,up,1"; + source: "focus"; + script { + if (get_int(g_is_graytone) == 1) { + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"icon.bg", "enabled", 0.0); + set_state(PART:"icon", "enabled", 0.0); + set_state(PART:"name", "enabled", 0.0); + } else { + set_state(PART:"icon.bg", "default", 0.0); + set_state(PART:"icon", "default", 0.0); + set_state(PART:"name", "default", 0.0); + } + } else { + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"icon.bg", "enabled", 0.0); + set_state(PART:"icon", "enabled", 0.0); + set_state(PART:"name", "enabled", 0.0); + } else { + set_state(PART:"icon.bg", "default", 0.0); + set_state(PART:"icon", "default", 0.0); + set_state(PART:"name", "default", 0.0); + } + } + } + } + program { + signal: "mouse,out"; + source: "focus"; + script { + if (get_int(g_is_graytone) == 1) { + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"icon.bg", "enabled", 0.0); + set_state(PART:"icon", "enabled", 0.0); + set_state(PART:"name", "enabled", 0.0); + } else { + set_state(PART:"icon.bg", "default", 0.0); + set_state(PART:"icon", "default", 0.0); + set_state(PART:"name", "default", 0.0); + } + } else { + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"icon.bg", "enabled", 0.0); + set_state(PART:"icon", "enabled", 0.0); + set_state(PART:"name", "enabled", 0.0); + } else { + set_state(PART:"icon.bg", "default", 0.0); + set_state(PART:"icon", "default", 0.0); + set_state(PART:"name", "default", 0.0); + } + } + } + } + } + } + + group { + name: "bottom_cue"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + fixed: 1 1; + } + } + part { + name: "cue_clip"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + align: 0.0 0.0; + color: 0 0 0 0; + visible: 1; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "cue"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "cue_clip"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + image { + normal: "Arrow_S_00033.png"; + } + fixed: 1 1; + visible: 0; + } + description { + state: "idle" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "work" 0.0; + inherit: "default" 0.0; + image { + normal: "Arrow_S_00033.png"; + tween: "Arrow_S_00015.png"; + tween: "Arrow_S_00016.png"; + tween: "Arrow_S_00017.png"; + tween: "Arrow_S_00018.png"; + tween: "Arrow_S_00019.png"; + tween: "Arrow_S_00020.png"; + tween: "Arrow_S_00021.png"; + tween: "Arrow_S_00022.png"; + tween: "Arrow_S_00023.png"; + tween: "Arrow_S_00024.png"; + tween: "Arrow_S_00025.png"; + tween: "Arrow_S_00026.png"; + tween: "Arrow_S_00027.png"; + tween: "Arrow_S_00028.png"; + tween: "Arrow_S_00029.png"; + tween: "Arrow_S_00030.png"; + tween: "Arrow_S_00031.png"; + tween: "Arrow_S_00032.png"; + tween: "Arrow_S_00033.png"; + } + visible: 1; + } + } + } + + programs { + script { + public g_is_enabled; + public g_anim_count; + } + program{ + name: "cue,enable"; + in: 1.0 0.0; + signal: "cue,enable"; + source: "prog"; + script { + if (get_int(g_is_enabled) == 0) { + set_int(g_is_enabled, 1); + set_int(g_anim_count, 0); + + stop_programs_on(PART:"cue"); + + run_program(PROGRAM:"anim,cue,fadeout"); + run_program(PROGRAM:"anim,cue,image"); + } else { + set_int(g_anim_count, 0); + } + } + } + program{ + name: "cue,disable"; + signal: "cue,disable"; + source: "prog"; + script { + set_int(g_is_enabled, 0); + set_int(g_anim_count, 0); + + stop_programs_on(PART:"cue"); + + run_program(PROGRAM:"anim,cue,fadein"); + } + } + program { + name: "anim,cue,fadeout"; + signal: "anim,cue,fadeout"; + action: STATE_SET "show" 0.0; + target: "cue_clip"; + } + program { + name: "anim,cue,fadein"; + signal: "anim,cue,fadein"; + action: STATE_SET "default" 0.0; + target: "cue_clip"; + } + program { + name: "anim,cue,image"; + action: STATE_SET "work" 0.0; + target: "cue"; + transition: DECELERATE 1.3; + after: "anim,cue,image,idle"; + } + program { + name: "anim,cue,image,idle"; + action: STATE_SET "idle" 0.0; + target: "cue"; + after: "anim,cue,image,restart"; + } + program { + name: "anim,cue,image,restart"; + in: 0.5 0.0; + script { + set_int(g_anim_count, get_int(g_anim_count) + 1); + + if (get_int(g_is_enabled) == 1) { + run_program(PROGRAM:"anim,cue,image"); + } + if (get_int(g_anim_count) >= 1) { + run_program(PROGRAM:"cue,disable"); + } + } + } + } + } // end of group + group { + name: "modem_off_icon"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "bg"; } + rel2 { relative: 0.5 0.5; to: "bg"; } + image { + normal: "B3_Data.png"; + } + //color_class: "AO013L2"; + color: 255 255 255 255; + min: CLOCK_INDICATOR_ICON_W CLOCK_INDICATOR_ICON_H; + max: CLOCK_INDICATOR_ICON_W CLOCK_INDICATOR_ICON_H; + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 0.0 0.0; + visible: 1; + } + } + } + } + group { + name: "dnd_icon"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "bg"; } + rel2 { relative: 0.5 0.5; to: "bg"; } + image { + normal: "do_not_ic_disturb.png"; + } + min: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + max: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 0.0 0.0; + visible: 1; + } + } + } + } + group { + name: "item_1"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: HIDDEN_QUICKBUTTON_W HIDDEN_QUICKBUTTON_H; + max: HIDDEN_QUICKBUTTON_W HIDDEN_QUICKBUTTON_H; + fixed: 1 1; + } + } + part { + name : "color_clip_icon"; + type : RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { + to: "icon"; + } + rel2 { + to: "icon"; + } + align: 0.5 0.5; + color_class: "AO056L4"; + } + description { + state: "off" 0.0; + inherit: "default" 0.0; + } + description { + state: "off_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4P"; + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + color_class: "AO056L3"; + } + description { + state: "on_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L3P"; + } + description { + state: "e_off" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4"; + } + description { + state: "e_off_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4P"; + } + description { + state: "e_on" 0.0; + inherit: "default" 0.0; + color_class: "AO056L5"; + } + description { + state: "e_on_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L5P"; + } + } + part { + name: "icon_bg_1"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_block_btn_bg.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + color_class: "AO056L1"; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO056L1P"; + } + } + part { + name: "icon_bg_2"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_block_btn_line.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + color_class: "AO056L2"; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO056L1P"; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + clip_to: "color_clip_icon"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_block_btn_ic.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "name"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: HIDDEN_QUICKBUTTON_W 70; + max: HIDDEN_QUICKBUTTON_W 70; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "icon"; offset: 0 7; } + rel2 { relative: 1.0 1.0; to: "bg"; } + text { + style: "name_style"; + align: 0.5 0.5; + } + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + text { + style: "name_style_pressed"; + align: 0.5 0.5; + } + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + programs { + script { + public g_icon_enabled; + public g_is_graytone; + } + program { + signal: "gray,enable"; + source: "prog"; + script { + set_int(g_is_graytone, 1); + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"color_clip_icon", "e_on", 0.0); + } else { + set_state(PART:"color_clip_icon", "e_off", 0.0); + } + } + } + program { + signal: "gray,disable"; + source: "prog"; + script { + set_int(g_is_graytone, 0); + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"color_clip_icon", "on", 0.0); + } else { + set_state(PART:"color_clip_icon", "off", 0.0); + } + } + } + program { + signal: "icon,enable"; + source: "prog"; + script { + set_int(g_icon_enabled, 1); + set_state(PART:"color_clip_icon", "on", 0.0); + } + } + program { + signal: "icon,disable"; + source: "prog"; + script { + set_int(g_icon_enabled, 0); + set_state(PART:"color_clip_icon", "off", 0.0); + } + } + program { + signal: "mouse,down,1"; + source: "focus"; + script { + set_state(PART:"name", "pressed", 0.0); + set_state(PART:"icon_bg_1", "pressed", 0.0); + set_state(PART:"icon_bg_2", "pressed", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on_p", 0.0); + } else { + set_state(PART:"icon_bg_2", "on_p", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off_p", 0.0); + } else { + set_state(PART:"icon_bg_2", "off_p", 0.0); + } + } + } + } + program { + signal: "mouse,up,1"; + source: "focus"; + script { + set_state(PART:"name", "default", 0.0); + set_state(PART:"icon_bg_1", "default", 0.0); + set_state(PART:"icon_bg_2", "default", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on", 0.0); + } else { + set_state(PART:"icon_bg_2", "on", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off", 0.0); + } else { + set_state(PART:"icon_bg_2", "off", 0.0); + } + } + } + } + program { + signal: "mouse,out"; + source: "focus"; + script { + set_state(PART:"name", "default", 0.0); + set_state(PART:"icon_bg_1", "default", 0.0); + set_state(PART:"icon_bg_2", "default", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on", 0.0); + } else { + set_state(PART:"icon_bg_2", "on", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off", 0.0); + } else { + set_state(PART:"icon_bg_2", "off", 0.0); + } + } + } + } + } + } + group { + name: "item_2"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: HIDDEN_QUICKBUTTON_W HIDDEN_QUICKBUTTON_H; + max: HIDDEN_QUICKBUTTON_W HIDDEN_QUICKBUTTON_H; + fixed: 1 1; + } + } + part { + name : "color_clip_icon"; + type : RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { + to: "icon"; + } + rel2 { + to: "icon"; + } + align: 0.5 0.5; + color_class: "AO056L4"; + } + description { + state: "off" 0.0; + inherit: "default" 0.0; + } + description { + state: "off_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4P"; + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + color_class: "AO056L3"; + } + description { + state: "on_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L3P"; + } + description { + state: "e_off" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4"; + } + description { + state: "e_off_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4P"; + } + description { + state: "e_on" 0.0; + inherit: "default" 0.0; + color_class: "AO056L5"; + } + description { + state: "e_on_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L5P"; + } + } + part { + name: "icon_bg_1"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_block_btn_bg.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + color_class: "AO056L1"; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO056L1P"; + } + } + part { + name: "icon_bg_2"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_block_btn_line.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + color_class: "AO056L2"; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO056L1P"; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + clip_to: "color_clip_icon"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_network_off.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + } + description { + state: "off" 0.0; + inherit: "default" 0.0; + image { + normal: "b_home_screen_network_off.png"; + } + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + image { + normal: "b_home_screen_network_on.png"; + } + } + description { + state: "auto" 0.0; + inherit: "default" 0.0; + image { + normal: "b_home_screen_network_auto.png"; + } + } + } + part { + name: "name"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: HIDDEN_QUICKBUTTON_W 70; + max: HIDDEN_QUICKBUTTON_W 70; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "icon"; offset: 0 7; } + rel2 { relative: 1.0 1.0; to: "bg"; } + text { + style: "name_style"; + align: 0.5 0.5; + } + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + text { + style: "name_style_pressed"; + align: 0.5 0.5; + } + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + programs { + script { + public g_icon_enabled; + public g_is_graytone; + } + program { + signal: "gray,enable"; + source: "prog"; + script { + set_int(g_is_graytone, 1); + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"color_clip_icon", "e_on", 0.0); + } else { + set_state(PART:"color_clip_icon", "e_off", 0.0); + } + } + } + program { + signal: "gray,disable"; + source: "prog"; + script { + set_int(g_is_graytone, 0); + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"color_clip_icon", "on", 0.0); + } else { + set_state(PART:"color_clip_icon", "off", 0.0); + } + } + } + program { + signal: "icon,enable"; + source: "prog"; + script { + set_int(g_icon_enabled, 1); + set_state(PART:"color_clip_icon", "on", 0.0); + } + } + program { + signal: "icon,disable"; + source: "prog"; + script { + set_int(g_icon_enabled, 0); + set_state(PART:"color_clip_icon", "off", 0.0); + } + } + program { + signal: "icon,set,off"; + source: "prog"; + script { + set_state(PART:"icon", "off", 0.0); + } + } + program { + signal: "icon,set,on"; + source: "prog"; + script { + set_state(PART:"icon", "on", 0.0); + } + } + program { + signal: "icon,set,auto"; + source: "prog"; + script { + set_state(PART:"icon", "auto", 0.0); + } + } + program { + signal: "mouse,down,1"; + source: "focus"; + script { + set_state(PART:"name", "pressed", 0.0); + set_state(PART:"icon_bg_1", "pressed", 0.0); + set_state(PART:"icon_bg_2", "pressed", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on_p", 0.0); + } else { + set_state(PART:"icon_bg_2", "on_p", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off_p", 0.0); + } else { + set_state(PART:"icon_bg_2", "off_p", 0.0); + } + } + } + } + program { + signal: "mouse,up,1"; + source: "focus"; + script { + set_state(PART:"name", "default", 0.0); + set_state(PART:"icon_bg_1", "default", 0.0); + set_state(PART:"icon_bg_2", "default", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on", 0.0); + } else { + set_state(PART:"icon_bg_2", "on", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off", 0.0); + } else { + set_state(PART:"icon_bg_2", "off", 0.0); + } + } + } + } + program { + signal: "mouse,out"; + source: "focus"; + script { + set_state(PART:"name", "default", 0.0); + set_state(PART:"icon_bg_1", "default", 0.0); + set_state(PART:"icon_bg_2", "default", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on", 0.0); + } else { + set_state(PART:"icon_bg_2", "on", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off", 0.0); + } else { + set_state(PART:"icon_bg_2", "off", 0.0); + } + } + } + } + } + } +} // end of collection diff --git a/home/res/edje/circle/popup.edc b/home/res/edje/circle/popup.edc new file mode 100644 index 0000000..d3ae477 --- /dev/null +++ b/home/res/edje/circle/popup.edc @@ -0,0 +1,146 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + + + +collections { + group { + name: "popup_checkview_internal"; + parts { + part { + name: "label"; + scale: 1; + type: SWALLOW; + description { + state: "default" 0.0; + fixed: 1 0; + rel1.relative: 1.0 0.15; + rel1.to_x: "left_pad"; + rel2 { + relative: 0.0 0.0; + to_x: "right_pad"; + to_y: "end_field"; + } + } + } + part { + name: "bottom_pad"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + align: 0.0 1.0; + min: 0 4; + fixed: 0 1; + rel1.relative: 0.0 1.0; + } + } + part { + name: "pad_b"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + align: 0.0 1.0; + min: 0 50; + fixed: 0 1; + rel1 { + relative: 0.0 0.0; + to: "bottom_pad"; + } + rel2 { + relative: 1.0 0.0; + to: "bottom_pad"; + } + } + } + part { + name: "left_pad"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min: 50 0; + rel1 { + relative: 0.0 0.0; + } + rel2 { + relative: 0.0 1.0; + } + } + } + part { + name: "right_pad"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min: 40 0; + rel1 { + relative: 1.0 0.0; + } + rel2 { + relative: 1.0 1.0; + } + } + } + part { + name: "end_field"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + align: 0.0 1.0; + min: 0 130; + max: 244 -1; + fixed: 0 1; + rel1 { + relative: 1.0 0.0; + to_x: "left_pad"; + to_y: "pad_b"; + } + rel2 { + relative: 0.0 0.0; + to_x: "right_pad"; + to_y: "pad_b"; + } + } + } + part { + name: "elm.swallow.end"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "end_field"; + rel2.to: "end_field"; + rel1 { + relative: 0.1 0.0; + } + rel2 { + relative: 1.0 1.0; + } + } + } + } + } //end group +} //end collections diff --git a/home/res/edje/circle/preview.edc b/home/res/edje/circle/preview.edc new file mode 100755 index 0000000..c08dc14 --- /dev/null +++ b/home/res/edje/circle/preview.edc @@ -0,0 +1,547 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +styles { + style { + name: "preview,title"; + base: "font=Tizen text_class=AT0311 style=shadow shadow_color=#0000004C font_size=40 align=center color=#FFFFFF color_class=AT0311 wrap=word"; # ellipsis=1.0 + tag: "br" "\n"; + tag: "hilight" "+ font=Tizen:style=Bold"; + tag: "b" "+ font=Tizen:style=Bold"; + tag: "tag" "\t"; + } +} +styles { + style { + name: "preview,title,dim"; + base: "font=Tizen text_class=AT0312 style=shadow shadow_color=#0000004C font_size=40 align=center color=#FFFFFF color_class=AT0312 wrap=word"; # ellipsis=1.0 + tag: "br" "\n"; + tag: "hilight" "+ font=Tizen:style=Bold"; + tag: "b" "+ font=Tizen:style=Bold"; + tag: "tag" "\t"; + } +} + +styles { + style { + name: "preview,title,press"; + base: "font=Tizen text_class=AT0312 style=shadow shadow_color=#0000004C font_size=40 align=center color=#FFFFFF color_class=AT0312 wrap=word"; # ellipsis=1.0 + tag: "br" "\n"; + tag: "hilight" "+ font=Tizen:style=Bold"; + tag: "b" "+ font=Tizen:style=Bold"; + tag: "tag" "\t"; + } +} + +images { + image: "b_widget_favorite_bg.png" COMP; + image: "b_home_screen_widget_line.#.png" COMP; + image: "b_home_screen_widget_line_ef.png" COMP; + image: "b_home_screen_edit_cover.png" COMP; + image: "b_home_screen_edit_cover_ef.png" COMP; + image: "b_home_screen_widget_check.png" COMP; + image: "b_home_screen_widget_check_ef.png" COMP; +} + +#define HEIGHT (ADD_VIEWER_TEXT_HEIGHT + ADD_VIEWER_PAD + ADD_VIEWER_PREVIEW_HEIGHT) + +collections { + group { + name: "bg"; + parts { + part { + name: "bg_bottom"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color: 0 0 0 0; + } + } + part { + name: "bg"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color_class: "AO041"; + visible: 0; + } + } + part { + name: "empty"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + text { + text_class: "AT0132"; + align: 0.5 0.5; + ellipsis: 0.0; + min: 1 1; + } + visible: 1; + } + } + } + } + + /* Icon group */ + group { + name: "default,1x1"; + } + group { + name: "default,2x2"; + } + + /* Preview group */ + group { + name: "preview,1x1"; + } + group { + name: "preview,2x2"; + script { + public g_focus = 0; + } + parts { + part { + name: "entire,bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + min: ADD_VIEWER_PREVIEW_WIDTH HEIGHT; + color: 0 0 0 0; + } + } + + part { + name: "title"; + type: TEXTBLOCK; + scale: 1; + multiline: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 ADD_VIEWER_TEXT_HEIGHT/HEIGHT; } + text { + style: "preview,title"; + align: 0.5 1.0; + min: 0 1; + } + min: 0 ADD_VIEWER_TEXT_HEIGHT; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + text { style: "preview,title,dim"; } + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + text { style: "preview,title,press"; } + } + } + + part { + name: "pad"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 ADD_VIEWER_TEXT_HEIGHT/HEIGHT; } + rel2 { relative: 1.0 (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD)/HEIGHT; } + min: 0 ADD_VIEWER_PAD; + } + } + + part { + name: "bg"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "preview"; } + rel2 { relative: 1.0 1.0; to, "preview"; } + } + } + + part { + name: "gradient,bg"; + type: IMAGE; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "preview"; } + rel2 { relative: 1.0 1.0; to, "preview"; } + image { normal: "b_widget_favorite_bg.png"; } + color_class: "AO031"; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + part { + name: "preview"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD)/HEIGHT; } + rel2 { relative: 1.0 1.0; } + min: ADD_VIEWER_PREVIEW_WIDTH ADD_VIEWER_PREVIEW_HEIGHT; // 216, 288 + } + description { + state: "pressed" 0.0; + rel1 { relative: 5/ADD_VIEWER_PREVIEW_WIDTH (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD+5)/HEIGHT; } + rel2 { relative: (ADD_VIEWER_PREVIEW_WIDTH-5)/ADD_VIEWER_PREVIEW_WIDTH (HEIGHT-5)/HEIGHT; } + min: (ADD_VIEWER_PREVIEW_WIDTH-10) (ADD_VIEWER_PREVIEW_HEIGHT-10); + } + } + part { + name: "check_ef"; + type: IMAGE; + description { + state: "default" 0.0; + rel1 { relative: (ADD_VIEWER_PREVIEW_WIDTH-54)/ADD_VIEWER_PREVIEW_WIDTH (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD)/HEIGHT; } + rel2 { relative: 1.0 (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD+54)/HEIGHT; } + image { + normal: "b_home_screen_widget_check_ef.png"; + } + color_class: "AO063"; + min: 54 54; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "check"; + type: IMAGE; + description { + state: "default" 0.0; + rel1 { relative: (ADD_VIEWER_PREVIEW_WIDTH-54)/ADD_VIEWER_PREVIEW_WIDTH (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD)/HEIGHT; } + rel2 { relative: 1.0 (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD+54)/HEIGHT; } + image { + normal: "b_home_screen_widget_check.png"; + } + color_class: "AO042"; + min: 54 54; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "cover_ef"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.to: "preview"; + rel2.to: "preview"; + image { + normal: "b_home_screen_edit_cover_ef.png"; + } + color_class: "AO065"; + fixed: 1 1; + min: ITEM_EDIT_EF_WIDTH ITEM_EDIT_EF_HEIGHT; + align: 0.5 0.5; + visible: 0; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "cover"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.to: "preview"; + rel2.to: "preview"; + image { + normal: "b_home_screen_edit_cover.png"; + } + color_class: "AO0482"; + min: ADD_VIEWER_PREVIEW_WIDTH ADD_VIEWER_PREVIEW_HEIGHT; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO0661"; + } + } + part { + name: "line_ef"; + type: IMAGE; + scale: 1; + mouse_events: 1; + clip_to: "line_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "preview"; } + rel2 { relative: 0.5 0.5; to: "preview"; } + image { + normal: "b_home_screen_widget_line_ef.png"; + } + color_class: "AO063"; + fixed: 1 1; + min: ITEM_EDIT_EF_WIDTH ITEM_EDIT_EF_HEIGHT; + align: 0.5 0.5; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO0663"; + } + } + part { + name: "line_clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.to: "line_ef"; + rel2.to: "line_ef"; + color: 255 255 255 255; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + } + } + part { + name: "line"; + type: IMAGE; + scale: 1; + mouse_events: 1; + clip_to: "line_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "preview"; } + rel2 { relative: 0.5 0.5; to: "preview"; } + image { + normal: "b_home_screen_widget_line.#.png"; + } + color_class: "AO043"; + min: ADD_VIEWER_PREVIEW_LINE_WIDTH ADD_VIEWER_PREVIEW_LINE_HEIGHT; + align: 0.5 0.5; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO0662"; + } + } + part { + name: "preview,dbg"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { to, "preview"; } + rel2 { to, "preview"; } + color: 0 0 0 0; + } + } + } // parts + + programs { + program { + name: "pressed"; + source: "preview,dbg"; + signal: "mouse,down,1"; + script { + if (get_int(g_focus) != 0) { + set_state(PART:"preview", "pressed", 0.0); + set_state(PART:"title", "pressed", 0.0); + set_state(PART:"cover", "pressed", 0.0); + set_state(PART:"line", "pressed", 0.0); + set_state(PART:"line_ef", "pressed", 0.0); + set_state(PART:"line_clipper", "default", 0.0); + set_state(PART:"cover_ef", "default", 0.0); + } else { + set_state(PART:"preview", "pressed", 0.0); + set_state(PART:"cover", "pressed", 0.0); + set_state(PART:"title", "hide", 0.0); + set_state(PART:"line", "pressed", 0.0); + set_state(PART:"line_ef", "pressed", 0.0); + set_state(PART:"line_clipper", "hide", 0.0); + set_state(PART:"cover_ef", "hide", 0.0); + } + } + } + program { + name: "released"; + source: "preview,dbg"; + signal: "mouse,up,1"; + script { + if (get_int(g_focus) != 0) { + set_state(PART:"preview", "default", 0.0); + set_state(PART:"title", "default", 0.0); + set_state(PART:"cover", "default", 0.0); + set_state(PART:"line", "default", 0.0); + set_state(PART:"line_ef", "default", 0.0); + set_state(PART:"line_clipper", "default", 0.0); + set_state(PART:"cover_ef", "default", 0.0); + } else { + set_state(PART:"preview", "default", 0.0); + set_state(PART:"cover", "default", 0.0); + set_state(PART:"line", "default", 0.0); + set_state(PART:"line_ef", "default", 0.0); + set_state(PART:"title", "hide", 0.0); + set_state(PART:"line_clipper", "hide", 0.0); + set_state(PART:"cover_ef", "hide", 0.0); + } + } + } + program { + name: "released,force"; + source: "preview,dbg"; + signal: "reset"; + action: STATE_SET "default" 0.0; + target: "preview"; + } + program { + name: "clicked"; + source: "preview,dbg"; + signal: "mouse,clicked,1"; + action: SIGNAL_EMIT "clicked" "preview"; + } + + program { + name: "enable,bg"; + source: "gradient,bg"; + signal: "enable"; + action: STATE_SET "show" 0.0; + target: "gradient,bg"; + } + program { + name: "disable,bg"; + source: "gradient,bg"; + signal: "disable"; + action: STATE_SET "default" 0.0; + target: "gradient,bg"; + } + program { + name: "show,line"; + signal: "show"; + source: "line"; + action: STATE_SET "default" 0.0; + target: "title"; + after: "show,after"; + } + program { + name: "show,after"; + script { + set_int(g_focus, 1); + } + after: "show,after,2"; + } + program { + name: "show,after,2"; + action: STATE_SET "default" 0.0; + target: "line_clipper"; + target: "cover_ef"; + transition: LINEAR 0.5; + } + program { + name: "hide,line"; + signal: "hide"; + source: "line"; + action: STATE_SET "hide" 0.0; + target: "title"; + after: "hide,after"; + } + program { + name: "hide,after"; + script { + set_int(g_focus, 0); + } + after: "hide,after,2"; + } + program { + name: "hide,after,2"; + action: STATE_SET "hide" 0.0; + target: "line_clipper"; + target: "cover_ef"; + transition: LINEAR 0.5; + } + program { + name: "hide,line,im"; + signal: "hide,im"; + source: "line"; + script { + set_int(g_focus, 0); + } + after: "hide,im,after"; + } + program { + name: "hide,im,after"; + action: STATE_SET "hide" 0.0; + target: "line_clipper"; + target: "title"; + target: "cover_ef"; + } + program { + name: "duplicated,mark,show"; + signal: "show"; + source: "duplicated"; + action: STATE_SET "show" 0.0; + target: "check_ef"; + target: "check"; + } + program { + name: "duplicated,mark,hide"; + signal: "hide"; + source: "duplicated"; + action: STATE_SET "default" 0.0; + target: "check_ef"; + target: "check"; + } + } // programs + } // group +} // collections + +/* End of a file */ diff --git a/home/res/edje/color_classes.edc b/home/res/edje/color_classes.edc new file mode 100644 index 0000000..bfa49c1 --- /dev/null +++ b/home/res/edje/color_classes.edc @@ -0,0 +1,683 @@ +/* + * Samsung API + * Copyright (c) 2013 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. + */ + +color_classes { + color_class { + name: "AO0111"; + color: 0 0 0 102; + } + color_class { + name: "AO0112"; + color: 0 0 0 165; + } + color_class { + name: "AO0121L1"; + color: 21 191 52 255; + } + color_class { + name: "AO0121L1P"; + color: 21 191 52 127; + } + color_class { + name: "AO0121L2"; + color: 8 181 224 255; + } + color_class { + name: "AO0121L2P"; + color: 8 181 224 127; + } + color_class { + name: "AO0121L3"; + color: 23 144 237 255; + } + color_class { + name: "AO0121L3P"; + color: 23 144 237 127; + } + color_class { + name: "AO0121L4"; + color: 255 161 0 255; + } + color_class { + name: "AO0121L4P"; + color: 255 161 0 127; + } + color_class { + name: "AO0121L5"; + color: 255 114 0 255; + } + color_class { + name: "AO0121L5P"; + color: 255 114 0 127; + } + color_class { + name: "AO0121L6"; + color: 255 59 0 255; + } + color_class { + name: "AO0121L6P"; + color: 255 59 0 127; + } + color_class { + name: "AO0121L7"; + color: 160 91 239 255; + } + color_class { + name: "AO0121L7P"; + color: 160 91 239 127; + } + color_class { + name: "AO0121L8"; + color: 0 0 0 255; + } + color_class { + name: "AO0121L8P"; + color: 0 0 0 127; + } + color_class { + name: "AO0122L1"; + color: 255 255 255 255; + } + color_class { + name: "AO0122L2"; + color: 61 61 61 255; + } + color_class { + name: "AO0123L1"; + color: 51 51 51 255; + } + color_class { + name: "AO0123L2"; + color: 160 160 160 255; + } + color_class { + name: "AO013L1"; + color: 255 106 0 255; + } + color_class { + name: "AO013L2"; + color: 0 0 0 255; + } + color_class { + name: "AO014"; + color: 0 0 0 255; + } + color_class { + name: "AO14P"; + color: 0 0 0 127; + } + color_class { + name: "AO014P"; + color: 249 249 249 127; + } + color_class { + name: "AO0151"; + color: 0 0 0 102; + } + color_class { + name: "AO0151P"; + color: 0 0 0 165; + } + color_class { + name: "AO0151D"; + color: 0 0 0 51; + } + color_class { + name: "AO0152"; + color: 0 0 0 76; + } + color_class { + name: "AO0152P"; + color: 0 0 0 38; + } + color_class { + name: "AO0152D"; + color: 0 0 0 25; + } + color_class { + name: "AO0161"; + color: 0 0 0 102; + } + color_class { + name: "AO0161P"; + color: 0 0 0 165; + } + color_class { + name: "AO0161D"; + color: 0 0 0 51; + } + color_class { + name: "AO0162"; + color: 212 213 214 76; + } + color_class { + name: "AO0162P"; + color: 212 213 214 76; + } + color_class { + name: "AO0162D"; + color: 212 213 214 76; + } + color_class { + name: "AO021"; + color: 127 127 127 255; + } + color_class { + name: "AO021S"; + color: 165 63 56 255; + } + color_class { + name: "AO022"; + color: 0 105 147 255; + } + color_class { + name: "AO023"; + color: 0 0 0 102; + } + color_class { + name: "AO024"; + color: 0 0 0 255; + } + color_class { + name: "AO024P"; + color: 0 0 0 127; + } + color_class { + name: "AO0251L1"; + color: 255 255 255 255; + } + color_class { + name: "AO0251L2"; + color: 61 61 61 255; + } + color_class { + name: "AO0252L1"; + color: 51 51 51 255; + } + color_class { + name: "AO0252L2"; + color: 160 160 160 255; + } + color_class { + name: "AO031"; + color: 0 0 0 127; + } + color_class { + name: "AO032"; + color: 0 0 0 127; + } + color_class { + name: "AO0321"; + color: 0 0 0 255; + } + color_class { + name: "AO032S"; + color: 0 0 0 127; + } + color_class { + name: "AO033"; + color: 0 0 0 51; + } + color_class { + name: "AO033P"; + color: 0 0 0 51; + } + color_class { + name: "AO034"; + color: 0 0 0 255; + } + color_class { + name: "AO034P"; + color: 0 0 0 127; + } + color_class { + name: "AO035"; + color: 201 221 220 255; + } + color_class { + name: "AO035P"; + color: 201 221 220 127; + } + color_class { + name: "AO041"; + color: 0 0 0 127; + } + color_class { + name: "AO042"; + color: 0 0 0 255; + } + color_class { + name: "AO043"; + color: 0 0 0 255; + } + color_class { + name: "AO044L1"; + color: 0 0 0 255; + } + color_class { + name: "AO044L2"; + color: 0 0 0 255; + } + color_class { + name: "AO044L3"; + color: 255 0 0 255; + } + color_class { + name: "AO045"; + color: 0 0 0 127; + } + color_class { + name: "AO046"; + color: 0 0 0 127; + } + color_class { + name: "AO047"; + color: 0 0 0 127; + } + color_class { + name: "AO0481"; + color: 0 0 0 51; + } + color_class { + name: "AO0482"; + color: 0 0 0 25; + } + color_class { + name: "AO051S"; + color: 155 234 18 229; + } + color_class { + name: "AO051"; + color: 0 0 0 229; + } + color_class { + name: "AO051D"; + color: 155 234 18 127; + } + color_class { + name: "AO052L1S"; + color: 0 0 0 255; + } + color_class { + name: "AO052L1"; + color: 0 0 0 255; + } + color_class { + name: "AO052L1D"; + color: 0 0 0 255; + } + color_class { + name: "AO052L2S"; + color: 160 141 56 255; + } + color_class { + name: "AO052L2"; + color: 45 45 45 255; + } + color_class { + name: "AO052L2D"; + color: 160 141 56 127; + } + color_class { + name: "AO053"; + color: 0 0 0 255; + } + color_class { + name: "AO0531"; + color: 54 77 84 255; + } + color_class { + name: "AO054L1S"; + color: 0 20 28 255; + } + color_class { + name: "AO054L1"; + color: 0 20 28 255; + } + color_class { + name: "AO054L1D"; + color: 0 20 28 127; + } + color_class { + name: "AO054L2S"; + color: 172 234 0 229; + } + color_class { + name: "AO054L2"; + color: 255 255 255 255; + } + color_class { + name: "AO054L2D"; + color: 255 255 255 127; + } + color_class { + name: "AO056L1"; + color: 25 25 25 255; + } + color_class { + name: "AO056L1P"; + color: 25 25 25 127; + } + color_class { + name: "AO056L2"; + color: 76 76 76 255; + } + color_class { + name: "AO056L2P"; + color: 76 76 76 127; + } + color_class { + name: "AO056L3"; + color: 186 255 0 255; + } + color_class { + name: "AO056L3P"; + color: 186 255 0 127; + } + color_class { + name: "AO056L4"; + color: 0 0 0 127; + } + color_class { + name: "AO056L4P"; + color: 0 0 0 63; + } + color_class { + name: "AO056L5"; + color: 0 0 0 255; + } + color_class { + name: "AO056L5P"; + color: 0 0 0 127; + } + color_class { + name: "AO057"; + color: 56 56 56 255; + } + color_class { + name: "AO058"; + color: 0 0 0 255; + } + color_class { + name: "AO058P"; + color: 0 0 0 127; + } + color_class { + name: "AO058D"; + color: 0 0 0 38; + } + color_class { + name: "AO061"; + color: 0 0 0 102; + } + color_class { + name: "AO062"; + color: 0 0 0 63; + } + color_class { + name: "AO062P"; + color: 0 0 0 127; + } + color_class { + name: "AO063"; + color: 0 0 0 127; + } + color_class { + name: "AO064"; + color: 0 0 0 255; + } + color_class { + name: "AO064P"; + color: 0 0 0 127; + } + color_class { + name: "AO065"; + color: 0 0 0 63; + } + color_class { + name: "AO0661"; + color: 0 0 0 25; + } + color_class { + name: "AO0662"; + color: 0 0 0 127; + } + color_class { + name: "AO0663"; + color: 0 0 0 63; + } + color_class { + name: "AO0664"; + color: 255 255 255 127; + } + color_class { + name: "AO081S"; + color: 178 255 0 76; + } + color_class { + name: "AO081"; + color: 212 213 214 76; + } + color_class { + name: "AO081D"; + color: 212 213 214 38; + } + color_class { + name: "AO082"; + color: 0 0 0 178; + } + color_class { + name: "AO082P"; + color: 0 0 0 255; + } + color_class { + name: "AO082D"; + color: 0 0 0 51; + } + color_class { + name: "AO083L1"; + color: 0 0 0 102; + } + color_class { + name: "AO083L1P"; + color: 0 0 0 102; + } + color_class { + name: "AO083L2"; + color: 186 255 0 255; + } + color_class { + name: "AO083L2P"; + color: 186 255 0 127; + } + color_class { + name: "AO084L1"; + color: 0 0 0 102; + } + color_class { + name: "AO084L1P"; + color: 0 0 0 102; + } + color_class { + name: "AO084L2"; + color: 158 158 158 178; + } + color_class { + name: "AO084L2P"; + color: 158 158 158 89; + } + color_class { + name: "AO085L1"; + color: 0 0 0 102; + } + color_class { + name: "AO085L2"; + color: 0 0 0 51; + } + color_class { + name: "AO086L1"; + color: 0 0 0 102; + } + color_class { + name: "AO086L1P"; + color: 0 0 0 102; + } + color_class { + name: "AO086L2"; + color: 0 0 0 178; + } + color_class { + name: "AO086L2P"; + color: 0 0 0 89; + } + color_class { + name: "AT0111"; + color: 0 0 0 255; + } + color_class { + name: "AT0112"; + color: 0 0 0 255; + } + color_class { + name: "AT0121"; + color: 0 0 0 255; + } + color_class { + name: "AT0121P"; + color: 0 0 0 127; + } + color_class { + name: "AT0122"; + color: 0 0 0 255; + } + color_class { + name: "AT0122P"; + color: 0 0 0 127; + } + color_class { + name: "AT0131"; + color: 0 0 0 255; + } + color_class { + name: "AT0132"; + color: 0 0 0 255; + } + color_class { + name: "AT0133"; + color: 0 0 0 255; + } + color_class { + name: "AT0134"; + color: 0 0 0 255; + } + color_class { + name: "AT014"; + color: 0 0 0 255; + } + color_class { + name: "AT014P"; + color: 0 0 0 127; + } + color_class { + name: "AT014D"; + color: 0 0 0 51; + } + color_class { + name: "AT021"; + color: 249 249 249 255; + } + color_class { + name: "AT0311"; + color: 0 0 0 255; + } + color_class { + name: "AT0312"; + color: 255 255 255 127; + } + color_class { + name: "AT041S"; + color: 178 255 0 255; + } + color_class { + name: "AT041"; + color: 0 0 0 153; + } + color_class { + name: "AT041D"; + color: 0 0 0 63; + } + color_class { + name: "AT043"; + color: 0 0 0 255; + } + color_class { + name: "AT043P"; + color: 0 0 0 127; + } + color_class { + name: "AT043D"; + color: 0 0 0 38; + } + color_class { + name: "AT045"; + color: 0 0 0 255; + } + color_class { + name: "AT045P"; + color: 0 0 0 255; + } + color_class { + name: "AT054"; + color: 0 0 0 127; + } + color_class { + name: "AT054P"; + color: 0 0 0 63; + } + color_class { + name: "AT054D"; + color: 0 0 0 20; + } + color_class { + name: "AT055"; + color: 186 255 0 255; + } + color_class { + name: "AT055P"; + color: 186 255 0 127; + } + color_class { + name: "AT056"; + color: 0 0 0 127; + } + color_class { + name: "AT056P"; + color: 0 0 0 63; + } + color_class { + name: "AT057"; + color: 0 0 0 63; + } + color_class { + name: "B018E"; + color: 165 63 56 178; + } + color_class { + name: "B019"; + color: 165 63 56 255; + } +} diff --git a/home/res/edje/images/Arrow_S_00015.png b/home/res/edje/images/Arrow_S_00015.png new file mode 100755 index 0000000..69f2485 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00015.png differ diff --git a/home/res/edje/images/Arrow_S_00016.png b/home/res/edje/images/Arrow_S_00016.png new file mode 100755 index 0000000..3031c31 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00016.png differ diff --git a/home/res/edje/images/Arrow_S_00017.png b/home/res/edje/images/Arrow_S_00017.png new file mode 100755 index 0000000..f5a79b8 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00017.png differ diff --git a/home/res/edje/images/Arrow_S_00018.png b/home/res/edje/images/Arrow_S_00018.png new file mode 100755 index 0000000..4c3d3b5 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00018.png differ diff --git a/home/res/edje/images/Arrow_S_00019.png b/home/res/edje/images/Arrow_S_00019.png new file mode 100755 index 0000000..1b26644 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00019.png differ diff --git a/home/res/edje/images/Arrow_S_00020.png b/home/res/edje/images/Arrow_S_00020.png new file mode 100755 index 0000000..1e977b6 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00020.png differ diff --git a/home/res/edje/images/Arrow_S_00021.png b/home/res/edje/images/Arrow_S_00021.png new file mode 100755 index 0000000..b547ea8 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00021.png differ diff --git a/home/res/edje/images/Arrow_S_00022.png b/home/res/edje/images/Arrow_S_00022.png new file mode 100755 index 0000000..658875f Binary files /dev/null and b/home/res/edje/images/Arrow_S_00022.png differ diff --git a/home/res/edje/images/Arrow_S_00023.png b/home/res/edje/images/Arrow_S_00023.png new file mode 100755 index 0000000..d372d7b Binary files /dev/null and b/home/res/edje/images/Arrow_S_00023.png differ diff --git a/home/res/edje/images/Arrow_S_00024.png b/home/res/edje/images/Arrow_S_00024.png new file mode 100755 index 0000000..c97b531 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00024.png differ diff --git a/home/res/edje/images/Arrow_S_00025.png b/home/res/edje/images/Arrow_S_00025.png new file mode 100755 index 0000000..c491f5a Binary files /dev/null and b/home/res/edje/images/Arrow_S_00025.png differ diff --git a/home/res/edje/images/Arrow_S_00026.png b/home/res/edje/images/Arrow_S_00026.png new file mode 100755 index 0000000..cf545b5 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00026.png differ diff --git a/home/res/edje/images/Arrow_S_00027.png b/home/res/edje/images/Arrow_S_00027.png new file mode 100755 index 0000000..4db14a9 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00027.png differ diff --git a/home/res/edje/images/Arrow_S_00028.png b/home/res/edje/images/Arrow_S_00028.png new file mode 100755 index 0000000..0c7a48f Binary files /dev/null and b/home/res/edje/images/Arrow_S_00028.png differ diff --git a/home/res/edje/images/Arrow_S_00029.png b/home/res/edje/images/Arrow_S_00029.png new file mode 100755 index 0000000..be5bd13 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00029.png differ diff --git a/home/res/edje/images/Arrow_S_00030.png b/home/res/edje/images/Arrow_S_00030.png new file mode 100755 index 0000000..5bd12d4 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00030.png differ diff --git a/home/res/edje/images/Arrow_S_00031.png b/home/res/edje/images/Arrow_S_00031.png new file mode 100755 index 0000000..1925c20 Binary files /dev/null and b/home/res/edje/images/Arrow_S_00031.png differ diff --git a/home/res/edje/images/Arrow_S_00032.png b/home/res/edje/images/Arrow_S_00032.png new file mode 100755 index 0000000..1de629f Binary files /dev/null and b/home/res/edje/images/Arrow_S_00032.png differ diff --git a/home/res/edje/images/Arrow_S_00033.png b/home/res/edje/images/Arrow_S_00033.png new file mode 100755 index 0000000..067c9ae Binary files /dev/null and b/home/res/edje/images/Arrow_S_00033.png differ diff --git a/home/res/edje/images/B3_Data.png b/home/res/edje/images/B3_Data.png new file mode 100755 index 0000000..f4afdb1 Binary files /dev/null and b/home/res/edje/images/B3_Data.png differ diff --git a/home/res/edje/images/b_favorite_app_line.png b/home/res/edje/images/b_favorite_app_line.png new file mode 100755 index 0000000..673cea1 Binary files /dev/null and b/home/res/edje/images/b_favorite_app_line.png differ diff --git a/home/res/edje/images/b_home_screen_add_widget_line.#.png b/home/res/edje/images/b_home_screen_add_widget_line.#.png new file mode 100755 index 0000000..55a0938 Binary files /dev/null and b/home/res/edje/images/b_home_screen_add_widget_line.#.png differ diff --git a/home/res/edje/images/b_home_screen_badge_large_bg.#.png b/home/res/edje/images/b_home_screen_badge_large_bg.#.png new file mode 100755 index 0000000..9aee496 Binary files /dev/null and b/home/res/edje/images/b_home_screen_badge_large_bg.#.png differ diff --git a/home/res/edje/images/b_home_screen_badge_large_line.#.png b/home/res/edje/images/b_home_screen_badge_large_line.#.png new file mode 100755 index 0000000..e06e33e Binary files /dev/null and b/home/res/edje/images/b_home_screen_badge_large_line.#.png differ diff --git a/home/res/edje/images/b_home_screen_badge_large_shadow.#.png b/home/res/edje/images/b_home_screen_badge_large_shadow.#.png new file mode 100755 index 0000000..0c3620c Binary files /dev/null and b/home/res/edje/images/b_home_screen_badge_large_shadow.#.png differ diff --git a/home/res/edje/images/b_home_screen_block_btn_bg.#.png b/home/res/edje/images/b_home_screen_block_btn_bg.#.png new file mode 100755 index 0000000..8b2f8da Binary files /dev/null and b/home/res/edje/images/b_home_screen_block_btn_bg.#.png differ diff --git a/home/res/edje/images/b_home_screen_block_btn_bg.png b/home/res/edje/images/b_home_screen_block_btn_bg.png new file mode 100755 index 0000000..68a418d Binary files /dev/null and b/home/res/edje/images/b_home_screen_block_btn_bg.png differ diff --git a/home/res/edje/images/b_home_screen_block_btn_bg02.#.png b/home/res/edje/images/b_home_screen_block_btn_bg02.#.png new file mode 100755 index 0000000..c459e1f Binary files /dev/null and b/home/res/edje/images/b_home_screen_block_btn_bg02.#.png differ diff --git a/home/res/edje/images/b_home_screen_block_btn_ic.png b/home/res/edje/images/b_home_screen_block_btn_ic.png new file mode 100755 index 0000000..07cf628 Binary files /dev/null and b/home/res/edje/images/b_home_screen_block_btn_ic.png differ diff --git a/home/res/edje/images/b_home_screen_block_btn_line.#.png b/home/res/edje/images/b_home_screen_block_btn_line.#.png new file mode 100755 index 0000000..c204d34 Binary files /dev/null and b/home/res/edje/images/b_home_screen_block_btn_line.#.png differ diff --git a/home/res/edje/images/b_home_screen_block_btn_line.png b/home/res/edje/images/b_home_screen_block_btn_line.png new file mode 100755 index 0000000..a7ffe2b Binary files /dev/null and b/home/res/edje/images/b_home_screen_block_btn_line.png differ diff --git a/home/res/edje/images/b_home_screen_block_btn_line02.#.png b/home/res/edje/images/b_home_screen_block_btn_line02.#.png new file mode 100755 index 0000000..7d90848 Binary files /dev/null and b/home/res/edje/images/b_home_screen_block_btn_line02.#.png differ diff --git a/home/res/edje/images/b_home_screen_block_text_btn_bg.#.png b/home/res/edje/images/b_home_screen_block_text_btn_bg.#.png new file mode 100755 index 0000000..8b2f8da Binary files /dev/null and b/home/res/edje/images/b_home_screen_block_text_btn_bg.#.png differ diff --git a/home/res/edje/images/b_home_screen_block_text_btn_line.#.png b/home/res/edje/images/b_home_screen_block_text_btn_line.#.png new file mode 100755 index 0000000..c204d34 Binary files /dev/null and b/home/res/edje/images/b_home_screen_block_text_btn_line.#.png differ diff --git a/home/res/edje/images/b_home_screen_btn_bg.#.png b/home/res/edje/images/b_home_screen_btn_bg.#.png new file mode 100755 index 0000000..14b3712 Binary files /dev/null and b/home/res/edje/images/b_home_screen_btn_bg.#.png differ diff --git a/home/res/edje/images/b_home_screen_btn_line.#.png b/home/res/edje/images/b_home_screen_btn_line.#.png new file mode 100755 index 0000000..97ea649 Binary files /dev/null and b/home/res/edje/images/b_home_screen_btn_line.#.png differ diff --git a/home/res/edje/images/b_home_screen_clock_arrow.png b/home/res/edje/images/b_home_screen_clock_arrow.png new file mode 100755 index 0000000..97d2854 Binary files /dev/null and b/home/res/edje/images/b_home_screen_clock_arrow.png differ diff --git a/home/res/edje/images/b_home_screen_clock_arrow_big.png b/home/res/edje/images/b_home_screen_clock_arrow_big.png new file mode 100755 index 0000000..c034338 Binary files /dev/null and b/home/res/edje/images/b_home_screen_clock_arrow_big.png differ diff --git a/home/res/edje/images/b_home_screen_clock_arrow_big_ef.png b/home/res/edje/images/b_home_screen_clock_arrow_big_ef.png new file mode 100755 index 0000000..8cfd5db Binary files /dev/null and b/home/res/edje/images/b_home_screen_clock_arrow_big_ef.png differ diff --git a/home/res/edje/images/b_home_screen_clock_block_icon.png b/home/res/edje/images/b_home_screen_clock_block_icon.png new file mode 100755 index 0000000..c9567b5 Binary files /dev/null and b/home/res/edje/images/b_home_screen_clock_block_icon.png differ diff --git a/home/res/edje/images/b_home_screen_edit_cover.png b/home/res/edje/images/b_home_screen_edit_cover.png new file mode 100755 index 0000000..0127861 Binary files /dev/null and b/home/res/edje/images/b_home_screen_edit_cover.png differ diff --git a/home/res/edje/images/b_home_screen_edit_cover_ef.png b/home/res/edje/images/b_home_screen_edit_cover_ef.png new file mode 100755 index 0000000..2a86f81 Binary files /dev/null and b/home/res/edje/images/b_home_screen_edit_cover_ef.png differ diff --git a/home/res/edje/images/b_home_screen_favorite_badge_bg.#.png b/home/res/edje/images/b_home_screen_favorite_badge_bg.#.png new file mode 100755 index 0000000..3c1d1ba Binary files /dev/null and b/home/res/edje/images/b_home_screen_favorite_badge_bg.#.png differ diff --git a/home/res/edje/images/b_home_screen_favorite_badge_line.#.png b/home/res/edje/images/b_home_screen_favorite_badge_line.#.png new file mode 100755 index 0000000..64d564e Binary files /dev/null and b/home/res/edje/images/b_home_screen_favorite_badge_line.#.png differ diff --git a/home/res/edje/images/b_home_screen_favorite_edit_icon.png b/home/res/edje/images/b_home_screen_favorite_edit_icon.png new file mode 100755 index 0000000..be3278d Binary files /dev/null and b/home/res/edje/images/b_home_screen_favorite_edit_icon.png differ diff --git a/home/res/edje/images/b_home_screen_favorite_more_icon.png b/home/res/edje/images/b_home_screen_favorite_more_icon.png new file mode 100755 index 0000000..2e22894 Binary files /dev/null and b/home/res/edje/images/b_home_screen_favorite_more_icon.png differ diff --git a/home/res/edje/images/b_home_screen_network_auto.png b/home/res/edje/images/b_home_screen_network_auto.png new file mode 100755 index 0000000..06ead26 Binary files /dev/null and b/home/res/edje/images/b_home_screen_network_auto.png differ diff --git a/home/res/edje/images/b_home_screen_network_off.png b/home/res/edje/images/b_home_screen_network_off.png new file mode 100755 index 0000000..ae84409 Binary files /dev/null and b/home/res/edje/images/b_home_screen_network_off.png differ diff --git a/home/res/edje/images/b_home_screen_network_on.png b/home/res/edje/images/b_home_screen_network_on.png new file mode 100755 index 0000000..593721d Binary files /dev/null and b/home/res/edje/images/b_home_screen_network_on.png differ diff --git a/home/res/edje/images/b_home_screen_power_saving_block_icon.png b/home/res/edje/images/b_home_screen_power_saving_block_icon.png new file mode 100755 index 0000000..9d1ceca Binary files /dev/null and b/home/res/edje/images/b_home_screen_power_saving_block_icon.png differ diff --git a/home/res/edje/images/b_home_screen_recent_icon.png b/home/res/edje/images/b_home_screen_recent_icon.png new file mode 100755 index 0000000..cc28224 Binary files /dev/null and b/home/res/edje/images/b_home_screen_recent_icon.png differ diff --git a/home/res/edje/images/b_home_screen_widget_check.png b/home/res/edje/images/b_home_screen_widget_check.png new file mode 100755 index 0000000..3851009 Binary files /dev/null and b/home/res/edje/images/b_home_screen_widget_check.png differ diff --git a/home/res/edje/images/b_home_screen_widget_check_ef.png b/home/res/edje/images/b_home_screen_widget_check_ef.png new file mode 100755 index 0000000..2995bea Binary files /dev/null and b/home/res/edje/images/b_home_screen_widget_check_ef.png differ diff --git a/home/res/edje/images/b_home_screen_widget_del_bg.png b/home/res/edje/images/b_home_screen_widget_del_bg.png new file mode 100755 index 0000000..c4e87a9 Binary files /dev/null and b/home/res/edje/images/b_home_screen_widget_del_bg.png differ diff --git a/home/res/edje/images/b_home_screen_widget_del_icon.png b/home/res/edje/images/b_home_screen_widget_del_icon.png new file mode 100755 index 0000000..5101f62 Binary files /dev/null and b/home/res/edje/images/b_home_screen_widget_del_icon.png differ diff --git a/home/res/edje/images/b_home_screen_widget_del_line.png b/home/res/edje/images/b_home_screen_widget_del_line.png new file mode 100755 index 0000000..16b3c0a Binary files /dev/null and b/home/res/edje/images/b_home_screen_widget_del_line.png differ diff --git a/home/res/edje/images/b_home_screen_widget_line.#.png b/home/res/edje/images/b_home_screen_widget_line.#.png new file mode 100755 index 0000000..cb25821 Binary files /dev/null and b/home/res/edje/images/b_home_screen_widget_line.#.png differ diff --git a/home/res/edje/images/b_home_screen_widget_line_ef.png b/home/res/edje/images/b_home_screen_widget_line_ef.png new file mode 100755 index 0000000..6b77be7 Binary files /dev/null and b/home/res/edje/images/b_home_screen_widget_line_ef.png differ diff --git a/home/res/edje/images/b_home_screen_widget_plus.png b/home/res/edje/images/b_home_screen_widget_plus.png new file mode 100755 index 0000000..97922da Binary files /dev/null and b/home/res/edje/images/b_home_screen_widget_plus.png differ diff --git a/home/res/edje/images/b_home_screen_widget_plus_ef.png b/home/res/edje/images/b_home_screen_widget_plus_ef.png new file mode 100755 index 0000000..0c502d3 Binary files /dev/null and b/home/res/edje/images/b_home_screen_widget_plus_ef.png differ diff --git a/home/res/edje/images/b_home_screen_widget_plus_origin.png b/home/res/edje/images/b_home_screen_widget_plus_origin.png new file mode 100755 index 0000000..0d6af14 Binary files /dev/null and b/home/res/edje/images/b_home_screen_widget_plus_origin.png differ diff --git a/home/res/edje/images/b_widget_favorite_bg.png b/home/res/edje/images/b_widget_favorite_bg.png new file mode 100755 index 0000000..0ff8fd1 Binary files /dev/null and b/home/res/edje/images/b_widget_favorite_bg.png differ diff --git a/home/res/edje/images/bouncing_bottom_edge.png b/home/res/edje/images/bouncing_bottom_edge.png new file mode 100755 index 0000000..7259d14 Binary files /dev/null and b/home/res/edje/images/bouncing_bottom_edge.png differ diff --git a/home/res/edje/images/bouncing_bottom_glow.png b/home/res/edje/images/bouncing_bottom_glow.png new file mode 100755 index 0000000..5b150b0 Binary files /dev/null and b/home/res/edje/images/bouncing_bottom_glow.png differ diff --git a/home/res/edje/images/bouncing_left_edge.png b/home/res/edje/images/bouncing_left_edge.png new file mode 100755 index 0000000..413fccd Binary files /dev/null and b/home/res/edje/images/bouncing_left_edge.png differ diff --git a/home/res/edje/images/bouncing_left_glow.png b/home/res/edje/images/bouncing_left_glow.png new file mode 100755 index 0000000..11015e4 Binary files /dev/null and b/home/res/edje/images/bouncing_left_glow.png differ diff --git a/home/res/edje/images/bouncing_right_edge.png b/home/res/edje/images/bouncing_right_edge.png new file mode 100755 index 0000000..e14f69b Binary files /dev/null and b/home/res/edje/images/bouncing_right_edge.png differ diff --git a/home/res/edje/images/bouncing_right_glow.png b/home/res/edje/images/bouncing_right_glow.png new file mode 100755 index 0000000..69ed30b Binary files /dev/null and b/home/res/edje/images/bouncing_right_glow.png differ diff --git a/home/res/edje/images/do_not_ic_disturb.png b/home/res/edje/images/do_not_ic_disturb.png new file mode 100755 index 0000000..6ae3a40 Binary files /dev/null and b/home/res/edje/images/do_not_ic_disturb.png differ diff --git a/home/res/edje/images/do_not_ic_donot_now.png b/home/res/edje/images/do_not_ic_donot_now.png new file mode 100755 index 0000000..09427ca Binary files /dev/null and b/home/res/edje/images/do_not_ic_donot_now.png differ diff --git a/home/res/edje/images/favorite_contact_bg_cover.png b/home/res/edje/images/favorite_contact_bg_cover.png new file mode 100755 index 0000000..9d7eb1c Binary files /dev/null and b/home/res/edje/images/favorite_contact_bg_cover.png differ diff --git a/home/res/edje/images/indicator_clock_on_focused.png b/home/res/edje/images/indicator_clock_on_focused.png new file mode 100755 index 0000000..4c2a757 Binary files /dev/null and b/home/res/edje/images/indicator_clock_on_focused.png differ diff --git a/home/res/edje/images/indicator_clock_on_focused_ef.png b/home/res/edje/images/indicator_clock_on_focused_ef.png new file mode 100755 index 0000000..84a2ace Binary files /dev/null and b/home/res/edje/images/indicator_clock_on_focused_ef.png differ diff --git a/home/res/edje/images/indicator_clock_on_normal.png b/home/res/edje/images/indicator_clock_on_normal.png new file mode 100755 index 0000000..334e96d Binary files /dev/null and b/home/res/edje/images/indicator_clock_on_normal.png differ diff --git a/home/res/edje/images/indicator_clock_on_normal_ef.png b/home/res/edje/images/indicator_clock_on_normal_ef.png new file mode 100755 index 0000000..9978881 Binary files /dev/null and b/home/res/edje/images/indicator_clock_on_normal_ef.png differ diff --git a/home/res/edje/images/indicator_on_focused.png b/home/res/edje/images/indicator_on_focused.png new file mode 100755 index 0000000..0c84b5f Binary files /dev/null and b/home/res/edje/images/indicator_on_focused.png differ diff --git a/home/res/edje/images/indicator_on_focused_ef.png b/home/res/edje/images/indicator_on_focused_ef.png new file mode 100755 index 0000000..7e52913 Binary files /dev/null and b/home/res/edje/images/indicator_on_focused_ef.png differ diff --git a/home/res/edje/images/indicator_on_normal.png b/home/res/edje/images/indicator_on_normal.png new file mode 100755 index 0000000..a844317 Binary files /dev/null and b/home/res/edje/images/indicator_on_normal.png differ diff --git a/home/res/edje/images/indicator_on_normal_ef.png b/home/res/edje/images/indicator_on_normal_ef.png new file mode 100755 index 0000000..e2b20f6 Binary files /dev/null and b/home/res/edje/images/indicator_on_normal_ef.png differ diff --git a/home/res/edje/images/indicator_panel_on_focused.png b/home/res/edje/images/indicator_panel_on_focused.png new file mode 100755 index 0000000..cdaa564 Binary files /dev/null and b/home/res/edje/images/indicator_panel_on_focused.png differ diff --git a/home/res/edje/images/indicator_panel_on_focused_ef.png b/home/res/edje/images/indicator_panel_on_focused_ef.png new file mode 100755 index 0000000..f509daa Binary files /dev/null and b/home/res/edje/images/indicator_panel_on_focused_ef.png differ diff --git a/home/res/edje/images/indicator_panel_on_normal.png b/home/res/edje/images/indicator_panel_on_normal.png new file mode 100755 index 0000000..9965865 Binary files /dev/null and b/home/res/edje/images/indicator_panel_on_normal.png differ diff --git a/home/res/edje/images/indicator_panel_on_normal_ef.png b/home/res/edje/images/indicator_panel_on_normal_ef.png new file mode 100755 index 0000000..f11fe19 Binary files /dev/null and b/home/res/edje/images/indicator_panel_on_normal_ef.png differ diff --git a/home/res/edje/images/overlay000_image.png b/home/res/edje/images/overlay000_image.png new file mode 100755 index 0000000..b700c87 Binary files /dev/null and b/home/res/edje/images/overlay000_image.png differ diff --git a/home/res/edje/images/overlay00_bg_cover.png b/home/res/edje/images/overlay00_bg_cover.png new file mode 100755 index 0000000..95d1e63 Binary files /dev/null and b/home/res/edje/images/overlay00_bg_cover.png differ diff --git a/home/res/edje/images/overlay01_bg_cover.png b/home/res/edje/images/overlay01_bg_cover.png new file mode 100755 index 0000000..bed116a Binary files /dev/null and b/home/res/edje/images/overlay01_bg_cover.png differ diff --git a/home/res/edje/images/overlay05_bg_cover.png b/home/res/edje/images/overlay05_bg_cover.png new file mode 100755 index 0000000..45807bd Binary files /dev/null and b/home/res/edje/images/overlay05_bg_cover.png differ diff --git a/home/res/edje/images/overlay06_bg_cover.png b/home/res/edje/images/overlay06_bg_cover.png new file mode 100755 index 0000000..0528375 Binary files /dev/null and b/home/res/edje/images/overlay06_bg_cover.png differ diff --git a/home/res/edje/images/overlay08_bg_cover.png b/home/res/edje/images/overlay08_bg_cover.png new file mode 100755 index 0000000..07ed911 Binary files /dev/null and b/home/res/edje/images/overlay08_bg_cover.png differ diff --git a/home/res/edje/images/overlay_button.#.png b/home/res/edje/images/overlay_button.#.png new file mode 100755 index 0000000..b942f7a Binary files /dev/null and b/home/res/edje/images/overlay_button.#.png differ diff --git a/home/res/edje/images/overlay_button_press.#.png b/home/res/edje/images/overlay_button_press.#.png new file mode 100755 index 0000000..2fd68e2 Binary files /dev/null and b/home/res/edje/images/overlay_button_press.#.png differ diff --git a/home/res/edje/images/overlay_close.png b/home/res/edje/images/overlay_close.png new file mode 100755 index 0000000..0cf4539 Binary files /dev/null and b/home/res/edje/images/overlay_close.png differ diff --git a/home/res/edje/images/overlay_cue.png b/home/res/edje/images/overlay_cue.png new file mode 100755 index 0000000..78f9263 Binary files /dev/null and b/home/res/edje/images/overlay_cue.png differ diff --git a/home/res/edje/images/overlay_start_button.png b/home/res/edje/images/overlay_start_button.png new file mode 100755 index 0000000..8e479c4 Binary files /dev/null and b/home/res/edje/images/overlay_start_button.png differ diff --git a/home/res/edje/images/overlay_start_button_press.png b/home/res/edje/images/overlay_start_button_press.png new file mode 100755 index 0000000..9ba2878 Binary files /dev/null and b/home/res/edje/images/overlay_start_button_press.png differ diff --git a/home/res/edje/images/overlay_swipe_down.png b/home/res/edje/images/overlay_swipe_down.png new file mode 100755 index 0000000..988ac7b Binary files /dev/null and b/home/res/edje/images/overlay_swipe_down.png differ diff --git a/home/res/edje/images/overlay_swipe_left.png b/home/res/edje/images/overlay_swipe_left.png new file mode 100755 index 0000000..53415f0 Binary files /dev/null and b/home/res/edje/images/overlay_swipe_left.png differ diff --git a/home/res/edje/images/overlay_swipe_right.png b/home/res/edje/images/overlay_swipe_right.png new file mode 100755 index 0000000..45ae883 Binary files /dev/null and b/home/res/edje/images/overlay_swipe_right.png differ diff --git a/home/res/edje/images/overlay_swipe_up.png b/home/res/edje/images/overlay_swipe_up.png new file mode 100755 index 0000000..0801f9d Binary files /dev/null and b/home/res/edje/images/overlay_swipe_up.png differ diff --git a/home/res/edje/images/w_cover_view_ic_delete.png b/home/res/edje/images/w_cover_view_ic_delete.png new file mode 100755 index 0000000..493b397 Binary files /dev/null and b/home/res/edje/images/w_cover_view_ic_delete.png differ diff --git a/home/res/edje/images/widget_circle_bg.png b/home/res/edje/images/widget_circle_bg.png new file mode 100755 index 0000000..d4a849c Binary files /dev/null and b/home/res/edje/images/widget_circle_bg.png differ diff --git a/home/res/edje/images/widget_circle_bg_ef.png b/home/res/edje/images/widget_circle_bg_ef.png new file mode 100755 index 0000000..7339f2c Binary files /dev/null and b/home/res/edje/images/widget_circle_bg_ef.png differ diff --git a/home/res/edje/images/widget_circle_bg_stroke.png b/home/res/edje/images/widget_circle_bg_stroke.png new file mode 100755 index 0000000..748cd2a Binary files /dev/null and b/home/res/edje/images/widget_circle_bg_stroke.png differ diff --git a/home/res/edje/images/widget_music_player_bg_cover.png b/home/res/edje/images/widget_music_player_bg_cover.png new file mode 100755 index 0000000..86860a8 Binary files /dev/null and b/home/res/edje/images/widget_music_player_bg_cover.png differ diff --git a/home/res/edje/rectangle/CMakeLists.txt b/home/res/edje/rectangle/CMakeLists.txt new file mode 100755 index 0000000..2f8149a --- /dev/null +++ b/home/res/edje/rectangle/CMakeLists.txt @@ -0,0 +1,16 @@ +FILE(GLOB edc_files ${CMAKE_CURRENT_SOURCE_DIR}/*.edc) +FOREACH(edc_file ${edc_files}) + GET_FILENAME_COMPONENT( FName ${edc_file} NAME_WE ) + MESSAGE("${FName}") + ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${FName}.edj + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/../images + -DCIRCLE_TYPE=${CIRCLE_TYPE} + ${CMAKE_CURRENT_SOURCE_DIR}/${FName}.edc ${FName}.edj ${EDJE_CFLAGS} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FName}.edc + ) + ADD_CUSTOM_TARGET(${FName}.edj DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FName}.edj) + ADD_DEPENDENCIES(${PROJECT_NAME} ${FName}.edj) +ENDFOREACH(edc_file) + +# install edc files +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ DESTINATION ${EDJEDIR} FILES_MATCHING PATTERN "*.edj") diff --git a/home/res/edje/rectangle/apps_box.edc b/home/res/edje/rectangle/apps_box.edc new file mode 100755 index 0000000..b774f07 --- /dev/null +++ b/home/res/edje/rectangle/apps_box.edc @@ -0,0 +1,414 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + +images { + image: "b_home_screen_recent_icon.png" COMP; +} + + +styles { + style { + name: "button_text_style"; + base: "font=TIZEN:style=Regular text_class=AT014 font_size="32" color_class=AT014 text_class=AT014 align=middle color=#FFFFFF ellipsis=1 wrap=mixed"; + } + style { + name: "button_text_style,pressed"; + base: "font=TIZEN:style=Regular text_class=AT014P font_size="32" color_class=AT014P text_class=AT014P align=middle color=#FFFFFF ellipsis=1 wrap=mixed"; + } +} + +collections { + group { + name: "box"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "top_area"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 0.0; to, "bg"; } + align: 0.0 0.0; + fixed: 1 1; + visible: 0; + /* Do not need buttons */ + //min: 0 BOX_TOP_MENU_HEIGHT; + min: 0 BOX_TOP_HEIGHT; + } + } +#if 0 /* Do not need buttons */ + part { + name: "top_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "top_area"; } + rel2 { relative: 1.0 1.0; to, "top_area"; } + visible: 1; + } + } +#endif + part { + name: "top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to, "top_area"; } + rel2 { relative: 1.0 1.0; to, "top_area"; } + align: 0.0 0.0; + fixed: 1 1; + visible: 0; + min: 0 BOX_TOP_HEIGHT; + } + } + part { + name: "box"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 1.0; + rel1.to: "top"; + rel2.relative: 1.0 0.0; + rel2.to: "bottom"; + visible: 1; + } + } + part { + name: "bottom"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + align: 0.0 1.0; + fixed: 1 1; + visible: 0; + /* Do not need buttons */ + //min: 0 (BOX_BOTTOM_HEIGHT+BOX_BOTTOM_MENU_HEIGHT); + min: 0 0; + } + } +#if 0 /* Do not need buttons */ + part { + name: "bottom_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 BOX_BOTTOM_HEIGHT/BOX_BOTTOM_MENU_HEIGHT; to, "bottom"; } + rel2 { relative: 1.0 1.0; to, "bottom"; } + visible: 1; + } + } +#endif + } + } + +#if 0 /* Do not need bottom button */ + group { + name: "bottom_button"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: 0 BOX_BOTTOM_MENU_HEIGHT; + fixed: 1 1; + } + } + part { + name: "button,line"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to: "bg"; } + color_class: "AO0152"; + min: 0 1; + align: 0.5 0.0; + fixed: 1 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO0152P"; + } + } + part { + name: "button,body"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color_class: "AO0151"; + fixed: 1 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO0151P"; + } + } + part { + name: "button,txt"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "button,body"; offset: 16 5; } + rel2 { relative: 1.0 1.0; to: "button,body"; offset: -16 -5; } + color_class: "AT014"; + text { + style: "button_text_style"; + align: 0.0 0.5; + } + align: 0.5 0.5; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AT014P"; + text { + style: "button_text_style,pressed"; + align: 0.0 0.5; + } + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + + programs { + program { + signal: "mouse,down,1"; + source: "focus"; + action: STATE_SET "pressed" 0.0; + target: "button,line"; + target: "button,body"; + target: "button,txt"; + } + program { + signal: "mouse,up,1"; + source: "focus"; + action: STATE_SET "default" 0.0; + target: "button,line"; + target: "button,body"; + target: "button,txt"; + } + program { + signal: "mouse,out"; + source: "focus"; + action: STATE_SET "default" 0.0; + target: "button,line"; + target: "button,body"; + target: "button,txt"; + } + } + } //button group + + + group { + name: "top_button"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + fixed: 1 1; + } + } + part { + name: "button,bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 0.5 0.0; + min: BOX_TOP_MENU_WIDTH BOX_TOP_MENU_HEIGHT; + max: BOX_TOP_MENU_WIDTH BOX_TOP_MENU_HEIGHT; + fixed: 1 1; + visible: 0; + } + } + part { + name: "button,txt"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "button,bg"; } + rel2 { relative: 0.5 0.5; to: "button,bg"; } + align: 0.5 0.5; + visible: 1; + fixed: 1 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "button,bg"; } + rel2 { relative: 1.0 1.0; to: "button,bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + } //button group + + group { + name: "top_button_text"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + fixed: 1 1; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.5; to: "bg"; } + rel2 { relative: 0.0 0.5; to: "bg"; } + align: 0.0 0.5; + min: 55 37; + image { + normal: "b_home_screen_recent_icon.png"; + } + color_class: "AO017"; + fixed: 1 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO017P"; + } + } + part { + name: "txt"; + type: TEXT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to_x: "icon"; to_y: "bg"; offset: 3 0; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color_class: "AT014"; + text { + text_class: "AT014"; + align: 0.0 0.5; + min: 1 0; + } + align: 0.0 0.5; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AT014P"; + text { + text_class: "AT014P"; + align: 0.0 0.5; + min: 1 0; + } + } + } + } + + programs { + program { + signal: "press,button"; + source: "button"; + action: STATE_SET "pressed" 0.0; + target: "txt"; + target: "icon"; + } + program { + signal: "release,button"; + source: "button"; + action: STATE_SET "default" 0.0; + target: "txt"; + target: "icon"; + } + } + } //button group +#endif +} diff --git a/home/res/edje/rectangle/apps_button.edc b/home/res/edje/rectangle/apps_button.edc new file mode 100755 index 0000000..aa5da7e --- /dev/null +++ b/home/res/edje/rectangle/apps_button.edc @@ -0,0 +1,126 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + +collections { + group { + name : "button"; + images { + image: "b_home_screen_favorite_more_icon.png" COMP; + } + parts { + part { + name: "bg"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part { + name : "image"; + type: IMAGE; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.24 0.5; to, "bg"; } + rel2 { relative: 0.24 0.5; to, "bg"; } + image { + normal: "b_home_screen_favorite_more_icon.png"; + } + min: 37 37; + max: 37 37; + align: 0.5 0.5; + color_class: AO0351; + } + } + part { + name : "center_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to, "image"; } + rel2 { relative: 1.0 1.0; to, "image"; } + min: 13 69; + align: 0.0 0.5; + } + } + part { + name : "button_txt"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to, "center_padding"; } + rel2 { relative: 1.0 1.0; to, "center_padding"; } + color: 255 255 255 255; + text { + font: "Tizen:style=Bold"; + text_class: "tizen"; + size: 27; + align: 0.0 0.5; + ellipsis: 1; + } + min: 157 69; + align: 0.0 0.5; + visible: 1; + } + } + part { + name : "event"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + color : 0 0 0 0; + visible : 1; + } + description { + state: "pressed" 0.0; + inherit: "default"; + color : 255 255 255 50; + } + } + } + programs { + program { + signal: "pressed"; + source: "button"; + action: STATE_SET "pressed" 0.0; + target: "event"; + } + program { + signal: "unpressed"; + source: "button"; + action: STATE_SET "default" 0.0; + target: "event"; + } + } + } //group +} //collections + + + +// End of file diff --git a/home/res/edje/rectangle/apps_conf.edc b/home/res/edje/rectangle/apps_conf.edc new file mode 120000 index 0000000..d61af6c --- /dev/null +++ b/home/res/edje/rectangle/apps_conf.edc @@ -0,0 +1 @@ +../../../include/apps/apps_conf.h \ No newline at end of file diff --git a/home/res/edje/rectangle/apps_grid.edc b/home/res/edje/rectangle/apps_grid.edc new file mode 100755 index 0000000..a2d9824 --- /dev/null +++ b/home/res/edje/rectangle/apps_grid.edc @@ -0,0 +1,198 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + +#define STYLE(NAME, SIZE) style {\ + name: "style_name_"NAME;\ + base: "font=TIZEN:style=MEDIUM text_class=tizen font_size="SIZE" align=center valign=top color=#FFFFFF ellipsis=1 wrap=mixed";\ + tag: "br" "\n";\ + } + +styles { + STYLE("27", 27) +} + +collections { + group { + name: "elm/gengrid/item/recent-apps/default"; + /* content_get reads these data */ + data.item: "contents" "bg icon_image selected"; + data.item: "texts" "txt"; + + parts { + part { + name: "bg"; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + } + part { + name: "icon_bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 ITEM_ICON_Y/ITEM_HEIGHT; to, "bg"; } + rel2 { relative: 0.5 ITEM_ICON_Y/ITEM_HEIGHT; to, "bg"; } + } + } + part { + name: "selected"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to, "bg"; } + rel2 { relative: 0.5 0.5; to, "bg"; } + visible: 1; + } + } + part { + name: "icon_image"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to, "icon_bg"; } + rel2 { relative: 0.5 0.5; to, "icon_bg"; } + align: 0.5 0.5; + fixed: 1 1; + } + description { + state: "bigger" 0.0; + inherit: "default" 0.0; + } + } + part { + name: "txt_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 ITEM_TEXT_Y/ITEM_HEIGHT; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + } + } + part { + name: "txt"; + type: TEXTBLOCK; + effect: SOFT_SHADOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "txt_region"; } + rel2 { relative: 1.0 1.0; to: "txt_region"; } + color: 255 255 255 255; + color2: 0 0 0 35; + color3: 0 0 0 35; + text { + style: "style_name_27"; + align: 0.5 0.0; + } + visible: 1; + } + description + { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + color: 0 0 0 0; + } + } + part { + name: "icon_image_event"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + + programs { + program { + name: "item,down"; + signal: "mouse,down,1"; + source: "icon_image_event"; + action: SIGNAL_EMIT "item,down" "menu"; + } + program { + name: "item,up"; + signal: "mouse,up,1"; + source: "icon_image_event"; + action: SIGNAL_EMIT "item,up" "menu"; + } + + program { + name: "txt,single"; + signal: "txt,single"; + source: "txt"; + script { + set_state(PART:"txt", "default", 0.0); + } + } + program { + name: "txt,dual"; + signal: "txt,dual"; + source: "txt"; + script { + set_state(PART:"txt", "dual", 0.0); + } + } + program { + name: "txt,single,full"; + signal: "txt,single,full"; + source: "txt"; + script { + set_state(PART:"txt", "single_full", 0.0); + } + } + program { + name: "txt,hide"; + signal: "hide"; + source: "txt"; + action: STATE_SET "hide" 0.0; + target: "txt"; + } + program { + name: "txt,show"; + signal: "show"; + source: "txt"; + action: STATE_SET "default" 0.0; + target: "txt"; + } + } + } // group +} diff --git a/home/res/edje/rectangle/apps_item.edc b/home/res/edje/rectangle/apps_item.edc new file mode 100755 index 0000000..f664fa3 --- /dev/null +++ b/home/res/edje/rectangle/apps_item.edc @@ -0,0 +1,430 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + +styles { + style { + name: "name_style"; + base: "font=Tizen:style=Regular text_class=AT0121 font_size="28" align=middle color=#FFFFFF color_class=AT0121 ellipsis=1.0"; + } +} + +images { + image: "b_home_screen_badge_large_bg.#.png" COMP; + image: "b_home_screen_badge_large_line.#.png" COMP; + image: "b_home_screen_badge_large_shadow.#.png" COMP; +} + +collections { +base_scale: 1.2; +group { + name: "item"; + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: ITEM_WIDTH ITEM_HEIGHT; + align: 0.0 0.0; + color: 0 0 0 0; + visible: 1; + } + description { + state: "edit" 0.0; + inherit: "default" 0.0; + min: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; + } + } + part { + name: "item_inner"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "bg"; } + rel2 { relative: 0.5 0.5; to: "bg"; } + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + programs { + program { + signal: "unedit"; + source: "item"; + action: STATE_SET "default" 0.0; + target: "bg"; + } + program { + signal: "edit"; + source: "item"; + action: STATE_SET "edit" 0.0; + target: "bg"; + } + } +} + +group { + name: "item_inner"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: ITEM_WIDTH ITEM_HEIGHT; + fixed: 1 1; + } + description { + state: "edit" 0.0; + inherit: "default" 0.0; + min: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; + } + } + part { + name: "icon"; + type: SWALLOW; + scale: 1; + clip_to: "event,clip"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + min: ITEM_ICON_WIDTH ITEM_ICON_HEIGHT; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + } + description { + state: "edit" 0.0; + inherit: "default" 0.0; + min: ITEM_SMALL_ICON_WIDTH ITEM_SMALL_ICON_HEIGHT; + } + } + part { + name: "name"; + type: TEXTBLOCK; + scale: 1; + clip_to: "event,clip"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "icon"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + text { + style: "name_style"; + min: 0 0; + align: 0.0 0.0; + } + fixed: 1 1; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "badge_bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: (ITEM_BADGE_X/ITEM_WIDTH) (ITEM_BADGE_Y/ITEM_HEIGHT); to, "bg"; } + rel2 { relative: (ITEM_BADGE_X/ITEM_WIDTH) (ITEM_BADGE_Y/ITEM_HEIGHT); to, "bg"; } + } + } + part { + name: "badge_image"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "badge_txt"; offset: -1 -1; } + rel2 { relative: 1.0 1.0; to, "badge_txt"; offset: -1 -1; } + image { + normal: "b_home_screen_badge_large_bg.#.png"; + } + color_class: "AO013L1"; + min: ITEM_BADGE_W ITEM_BADGE_H; + fixed: 1 1; + visible: 0; + } + description { + state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + min: ITEM_BADGE_W ITEM_BADGE_H; + } + description { + state: "2" 0.0; + inherit: "1" 0.0; + rel1 { relative: 0.0 0.0; to, "badge_txt"; offset: 0 -1; } + rel2 { relative: 1.0 1.0; to, "badge_txt"; offset: 0 -1; } + min: ITEM_BADGE_2W ITEM_BADGE_H; + } + description { + state: "3" 0.0; + inherit: "1" 0.0; + rel1 { relative: 0.0 0.0; to, "badge_txt"; offset: 0 -1; } + rel2 { relative: 1.0 1.0; to, "badge_txt"; offset: 0 -1; } + min: ITEM_BADGE_3W ITEM_BADGE_H; + } + } + part { + name: "badge_line"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "badge_image"; } + rel2 { relative: 1.0 1.0; to, "badge_image"; } + image { + normal: "b_home_screen_badge_large_line.#.png"; + } + color_class: "AO013L2"; + fixed: 1 1; + visible: 0; + } + description { + state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "2" 0.0; + inherit: "1" 0.0; + } + description { + state: "3" 0.0; + inherit: "1" 0.0; + } + } + part { + name: "badge_shadow"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "badge_image"; } + rel2 { relative: 1.0 1.0; to, "badge_image"; } + image { + normal: "b_home_screen_badge_large_shadow.#.png"; + } + color_class: "AO061"; + fixed: 1 1; + visible: 0; + } + description { + state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "2" 0.0; + inherit: "1" 0.0; + } + description { + state: "3" 0.0; + inherit: "1" 0.0; + } + } + + part { + name: "badge_txt"; + type: TEXT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to, "badge_bg"; } + rel2 { relative: 0.5 0.5; to, "badge_bg"; } + align: 0.5 0.5; + color_class: "AT0132"; + text { + text_class: "AT0132"; + ellipsis: 0.0; + align: 0.5 0.5; + min: 1 1; + } + fixed: 1 1; + visible: 0; + } + description { + state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "2" 0.0; + inherit: "1" 0.0; + } + description { + state: "3" 0.0; + inherit: "1" 0.0; + } + } + part { + name: "event,clip"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + color: 255 255 255 255; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color: 255 255 255 127; + } + } + } + programs { + program { + signal: "item,pressed"; + source: "item_inner"; + action: STATE_SET "pressed" 0.0; + target: "event,clip"; + } + program { + signal: "item,released"; + source: "item_inner"; + action: STATE_SET "default" 0.0; + target: "event,clip"; + } + program { + signal: "name,show"; + source: "item_inner"; + action: STATE_SET "default" 0.0; + target: "name"; + } + program { + signal: "name,hide"; + source: "item_inner"; + action: STATE_SET "hide" 0.0; + target: "name"; + } + program { + signal: "unedit"; + source: "item_inner"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "icon"; + } + program { + signal: "edit"; + source: "item_inner"; + action: STATE_SET "edit" 0.0; + target: "bg"; + target: "icon"; + } + // Badge + program { + signal: "badge,on,1"; + source: "item"; + action: STATE_SET "1" 0.0; + target: "badge_image"; + target: "badge_line"; + target: "badge_txt"; + } + program { + signal: "badge,on,2"; + source: "item"; + action: STATE_SET "2" 0.0; + target: "badge_image"; + target: "badge_line"; + target: "badge_shadow"; + target: "badge_txt"; + } + program { + signal: "badge,on,3"; + source: "item"; + action: STATE_SET "3" 0.0; + target: "badge_image"; + target: "badge_line"; + target: "badge_shadow"; + target: "badge_txt"; + } + program { + signal: "badge,off"; + source: "item"; + action: STATE_SET "default" 0.0; + target: "badge_image"; + target: "badge_line"; + target: "badge_shadow"; + target: "badge_txt"; + } + } +} +group { + name: "center"; + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + color: 0 0 0 0; + visible: 1; + } + } + } +} + + +} diff --git a/home/res/edje/rectangle/apps_layout.edc b/home/res/edje/rectangle/apps_layout.edc new file mode 100755 index 0000000..535c751 --- /dev/null +++ b/home/res/edje/rectangle/apps_layout.edc @@ -0,0 +1,229 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + +collections { + group { + name: "layout"; + parts { + part { + name: "bg"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: 0 0; } + color: 0 0 0 0; + visible: 1; + perspective { + zplane: 0; + } + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + part { + name: "container"; + type: SWALLOW; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + visible: 1; + } + } + part { + name: "zoom"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + perspective { + zplane: -140; + } + } + } + part { + name: "scroller"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + align: 0.5 0.0; + visible: 1; + map { + on: 0; + } + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + map { + on: 1; + perspective: "bg"; + } + } + description { + state: "zoom" 0.0; + inherit: "on"; + map { + perspective: "zoom"; + } + } + } + part { + name: "top_checker"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.2; to: "bg"; } + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "bottom_checker"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.8; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + part { + name: "blocker"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 0; + } + description { + state: "enable" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { + name: "bg,down"; + signal: "mouse,down,1"; + source: "bg"; + action: SIGNAL_EMIT "bg,down" "bg"; + } + program { + name: "bg,up"; + signal: "mouse,up,1"; + source: "bg"; + action: SIGNAL_EMIT "bg,up" "bg"; + } + program { + signal: "show"; + source: "checker"; + action: STATE_SET "show" 0.0; + target: "top_checker"; + target: "bottom_checker"; + } + program { + signal: "hide"; + source: "checker"; + action: STATE_SET "default" 0.0; + target: "top_checker"; + target: "bottom_checker"; + } + program { + signal: "block"; + source: "layout"; + action: STATE_SET "enable" 0.0; + target: "blocker"; + } + program { + signal: "unblock"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "blocker"; + } + program { + signal: "show,zoom"; + source: "scroller"; + action: STATE_SET "on" 0.0; + target: "scroller"; + after: "show,zoom,after"; + } + program { + name: "show,zoom,after"; + action: STATE_SET "zoom" 0.0; + transition: SIN_FAC 0.2 0.90; + target: "scroller"; + } + program { + signal: "reset,zoom"; + source: "scroller"; + action: STATE_SET "on" 0.0; + transition: SIN_FAC 0.2 0.90; + target: "scroller"; + after: "reset,zoom,after"; + } + program { + name: "reset,zoom,after"; + action: STATE_SET "default" 0.0; + target: "scroller"; + } + } + } // layout group + +} // collections + + + +// End of file diff --git a/home/res/edje/rectangle/apps_page.edc b/home/res/edje/rectangle/apps_page.edc new file mode 100755 index 0000000..f9d5182 --- /dev/null +++ b/home/res/edje/rectangle/apps_page.edc @@ -0,0 +1,144 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "apps_conf.edc" +#include "../color_classes.edc" + + + +#define ITEM_CENTER_PART(part_name, rel_x, rel_y, off_x, off_y, align_x, align_y) \ + part { \ + name: "item_center_"part_name; \ + type: SWALLOW; \ + mouse_events: 1; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (rel_x) (rel_y); offset: off_x off_y; to: "bg"; } \ + rel2 { relative: (rel_x) (rel_y); offset: off_x off_y; to: "bg"; } \ + align: align_x align_y; \ + min: ITEM_WIDTH ITEM_HEIGHT; \ + fixed: 1 1; \ + } \ + description { \ + state: "edit" 0.0; \ + inherit: "default" 0.0; \ + min: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; \ + } \ + } + +#define ITEM_CENTER_PROGRAM(part_name) \ + program { \ + signal: "unedit"; \ + source: "item_center_"part_name; \ + action: STATE_SET "default" 0.0; \ + target: "item_center_"part_name; \ + transition: DECELERATE 0.1; \ + } \ + program { \ + signal: "edit"; \ + source: "item_center_"part_name; \ + action: STATE_SET "edit" 0.0; \ + target: "item_center_"part_name; \ + transition: DECELERATE 0.1; \ + } + +#define ITEM_PART(part_name, pre_center, next_center) \ + part { \ + name: "item_"part_name; \ + type: SWALLOW; \ + scale: 1; \ + mouse_events: 1; \ + repeat_events: 1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + rel1 { relative: 0.5 0.5; to: "item_center_"part_name; } \ + rel2 { relative: 0.5 0.5; to: "item_center_"part_name; } \ + align: 0.5 0.5; \ + fixed: 1 1; \ + } \ + description { \ + state: "prev" 0.0; \ + inherit: "default" 0.0; \ + rel1 { relative: 0.5 0.5; to: "item_center_"pre_center; } \ + rel2 { relative: 0.5 0.5; to: "item_center_"pre_center; } \ + } \ + description { \ + state: "next" 0.0; \ + inherit: "default" 0.0; \ + rel1 { relative: 0.5 0.5; to: "item_center_"next_center; } \ + rel2 { relative: 0.5 0.5; to: "item_center_"next_center; } \ + } \ + } + +#define ITEM_PROGRAM(part_name) \ + program { \ + signal: "prev"; \ + source: "item_"part_name; \ + action: STATE_SET "prev" 0.0; \ + target: "item_"part_name; \ + } \ + program { \ + signal: "next"; \ + source: "item_"part_name; \ + action: STATE_SET "next" 0.0; \ + target: "item_"part_name; \ + } \ + program { \ + signal: "return"; \ + source: "item_"part_name; \ + action: STATE_SET "default" 0.0; \ + target: "item_"part_name; \ + transition: LINEAR 0.2; \ + } + +collections { + group { + name: "page"; + parts { + part { + name: "bg"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 0; + } + } + + ITEM_CENTER_PART("-1", 0.5, -0.5, 1, 0, 0.0, 0.5) + ITEM_CENTER_PART("0", 0.5, 0.5, 0, 0, 1.0, 0.5) + ITEM_CENTER_PART("1", 0.5, 0.5, 1, 0, 0.0, 0.5) + ITEM_CENTER_PART("2", 0.5, 1.5, 0, 0, 1.0, 0.5) + + ITEM_PART("0", "-1", "1") + ITEM_PART("1", "0", "2") + } + + programs { + ITEM_CENTER_PROGRAM("-1"); + ITEM_CENTER_PROGRAM("0"); + ITEM_CENTER_PROGRAM("1"); + ITEM_CENTER_PROGRAM("2"); + + ITEM_PROGRAM("0") + ITEM_PROGRAM("1") + } + } // group +} // collections diff --git a/home/res/edje/rectangle/box_layout.edc b/home/res/edje/rectangle/box_layout.edc new file mode 100755 index 0000000..d875381 --- /dev/null +++ b/home/res/edje/rectangle/box_layout.edc @@ -0,0 +1,50 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +collections { + group { + name: "box"; + parts { + part { + name: "bg"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "box"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel1.to: "bg"; + rel2.relative: 1.0 1.0; + rel2.to: "bg"; + visible: 1; + } + } + } + } +} diff --git a/home/res/edje/rectangle/clock_shortcut.edc b/home/res/edje/rectangle/clock_shortcut.edc new file mode 100755 index 0000000..6c0d3cc --- /dev/null +++ b/home/res/edje/rectangle/clock_shortcut.edc @@ -0,0 +1,160 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +#define CLOCK_SHORTCUT_W 65 +#define CLOCK_SHORTCUT_H 65 + +images { + image: "do_not_ic_donot_now.png" COMP; +} + +collections { +group { + name: "shortcut"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "shortcut,icon"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: CLOCK_SHORTCUT_W CLOCK_SHORTCUT_H; + max: CLOCK_SHORTCUT_W CLOCK_SHORTCUT_H; + rel1 { relative: 1.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to: "bg"; } + align: 1.0 0.0; + fixed: 1 1; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "block"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "focus"; + rel2.to: "focus"; + color: 0 0 0 0; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 0.0 0.0; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { + name: "icon,show"; + signal: "icon,show"; + source: "prog"; + action: STATE_SET "show" 0.0; + target: "shortcut,icon"; + target: "focus"; + target: "block"; + } + program { + name: "icon,hide"; + signal: "icon,hide"; + source: "prog"; + action: STATE_SET "default" 0.0; + target: "shortcut,icon"; + target: "focus"; + target: "block"; + } + } +} + +group { + name: "shortcut_default_icon"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "shortcut,icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "bg"; } + rel2 { relative: 0.5 0.5; to: "bg"; } + image { + normal: "do_not_ic_donot_now.png"; + } + min: CLOCK_SHORTCUT_W CLOCK_SHORTCUT_H; + max: CLOCK_SHORTCUT_W CLOCK_SHORTCUT_H; + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + } + } +} +} // collections + + + +// End of file diff --git a/home/res/edje/rectangle/conf.edc b/home/res/edje/rectangle/conf.edc new file mode 120000 index 0000000..f925e7c --- /dev/null +++ b/home/res/edje/rectangle/conf.edc @@ -0,0 +1 @@ +../../../include/conf.h \ No newline at end of file diff --git a/home/res/edje/rectangle/dynamicbox.edc b/home/res/edje/rectangle/dynamicbox.edc new file mode 100644 index 0000000..ccd5f09 --- /dev/null +++ b/home/res/edje/rectangle/dynamicbox.edc @@ -0,0 +1,429 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "../color_classes.edc" + +collections { + styles { + style { + name: "overlay,text"; + base: "font=Tizen text_class=tizen font_size=30 align=center color=#FFFFFF ellipsis=1.0 wrap=char"; + tag: "br" "\n"; + tag: "hilight" "+ font=Tizen:style=Bold"; + tag: "b" "+ font=Tizen:style=Bold"; + tag: "tab" "\t"; + } + } + + group + { + name: "overlay"; + parts + { + part { + name: "preview"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + + part { + name: "bg,img"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color: 100 100 100 100; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + part { + name: "text"; + type: TEXTBLOCK; + description { + state: "default" 0.0; + rel1 { relative: 0.5 200/320; } + rel2 { relative: 0.5 320/320; } + max: 280 -1; + fixed: 1 0; + text { + style: "overlay,text"; + min: 0 0; + } + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + } + + programs { + program { + name: "disable,text"; + signal: "disable"; + source: "text"; + action: STATE_SET "hide" 0.0; + target: "text"; + target: "bg,img"; + } + + program { + name: "enable,text"; + signal: "enable"; + source: "text"; + action: STATE_SET "default" 0.0; + target: "text"; + target: "bg,img"; + } + } + } + + group + { + name: "widget,image"; + parts + { + part { + name: "front"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + description { + state: "to,back" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + part { + name: "front,content"; + type: SWALLOW; + clip_to: "front"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + + part { + name: "back"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 0; + } + description { + state: "to,back" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + part { + name: "back,content"; + type: SWALLOW; + clip_to: "back"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + } + + programs + { + program { + name: "turn,to,back,front"; + signal: "to,back"; + source: "turn"; + action: STATE_SET "to,back" 0.0; + target: "front"; + target: "back"; + transition: LINEAR 0.5; + after: "play,end"; + } + + program { + name: "turn,to,front"; + signal: "to,front"; + source: "turn"; + action: STATE_SET "default" 0.0; + target: "front"; + target: "back"; + transition: LINEAR 0.5; + after: "play,end"; + } + + program { + name: "play,end"; + action: SIGNAL_EMIT "done" "turn"; + } + } + } + + group + { + name: "widget"; + parts + { + part { + name: "widget,content"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + map { + on: 0; + } + } + description { + state: "tilt" 0.0; + inherit: "default" 0.0; + map { + on: 1; + rotation { + x: 30.0; + } + } + } + description { + state: "move,down" 0.0; + inherit: "default" 0.0; + rel1 { relative: 0.0 0.2; } + rel2 { relative: 1.0 1.2; } + } + } + + part { + name: "scroller"; + mouse_events: 1; + repeat_events: 1; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + + part { + name: "overlay"; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color: 255 255 255 255; + visible: 1; + } + description { + state: "disable,overlay" 0.0; + inherit: "default" 0.0; + color: 0 0 0 0; + visible: 0; + } + } + + part { + name: "overlay,content"; + mouse_events: 1; + type: SWALLOW; + clip_to: "overlay"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + } + + programs + { + program { + name: "reset,overlay"; + signal: "reset"; + source: "overlay"; + action: STATE_SET "disable,overlay" 0.0; + target: "overlay"; + } + program { + name: "enable,overlay"; + signal: "enable"; + source: "overlay"; + action: STATE_SET "default" 0.0; + target: "overlay"; + transition: LINEAR 0.5; + after: "animation,done"; + } + + program { + name: "disable,overlay"; + signal: "disable"; + source: "overlay"; + action: STATE_SET "disable,overlay" 0.0; + target: "overlay"; + transition: LINEAR 0.5; + after: "animation,done"; + } + + program { + name: "tilt,start"; + signal: "tilt"; + source: "content"; + action: STATE_SET "tilt" 0.0; + target: "widget,content"; + transition: LINEAR 0.15; + after: "tilt,end"; + } + + program { + name: "tilt,end"; + action: STATE_SET "default" 0.0; + target: "widget,content"; + transition: LINEAR 0.15; + after: "animation,done"; + } + + program { + name: "move,down,start"; + signal: "move,down"; + source: "content"; + action: STATE_SET "move,down" 0.0; + target: "widget,content"; + transition: LINEAR 0.15; + after: "move,down,end"; + } + + program { + name: "move,down,end"; + action: STATE_SET "default" 0.0; + target: "widget,content"; + transition: LINEAR 0.15; + after: "animation,done"; + } + + program { + name: "animation,done"; + action: SIGNAL_EMIT "finished" "animation"; + } + } + } + + group + { + name: "gbar"; + parts + { + part { + name: "gbar,content"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + + part { + name: "overlay"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color: 255 255 255 255; + visible: 1; + } + description { + state: "disable,overlay" 0.0; + inherit: "default" 0.0; + color: 0 0 0 0; + visible: 0; + } + } + + part { + name: "overlay,content"; + type: SWALLOW; + clip_to: "overlay"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + } + + programs + { + program { + name: "reset,overlay"; + signal: "reset"; + source: "overlay"; + action: STATE_SET "disable,overlay" 0.0; + target: "overlay"; + } + program { + name: "enable,overlay"; + signal: "enable"; + source: "overlay"; + action: STATE_SET "default" 0.0; + target: "overlay"; + transition: LINEAR 0.15; + after: "animation,done"; + } + + program { + name: "disable,overlay"; + signal: "disable"; + source: "overlay"; + action: STATE_SET "disable,overlay" 0.0; + target: "overlay"; + transition: LINEAR 0.15; + after: "animation,done"; + } + + program { + name: "animation,done"; + action: SIGNAL_EMIT "finished" "animation"; + } + } + } +} + +/* End of a file */ diff --git a/home/res/edje/rectangle/edit.edc b/home/res/edje/rectangle/edit.edc new file mode 100755 index 0000000..7d32d65 --- /dev/null +++ b/home/res/edje/rectangle/edit.edc @@ -0,0 +1,170 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +#define PLUS_MIN 90 90 + +styles { + style { + name: "max_text_style"; + base: "font=TIZEN:style=Regular text_class=tizen style=shadow shadow_color=#0000004C font_size="25" color_class=AT0121 align=middle color=#FFFFFF ellipsis=1 wrap=mixed"; + } +} + +images { + image: "b_home_screen_widget_line.#.png" COMP; + image: "b_home_screen_widget_line_ef.png" COMP; + image: "b_home_screen_widget_plus.png" COMP; + image: "b_home_screen_widget_plus_ef.png" COMP; + image: "b_home_screen_edit_cover.png" COMP; + image: "b_home_screen_edit_cover_ef.png" COMP; +} + +collections { +group { + name: "edit"; + parts { + part { + name: "bottom_bg"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part { + name: "bg"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color_class: "AO041"; + visible: 0; + } + } + part { + name: "scroller_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + } + } + part { + name: "scroller"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "scroller_region";} + rel2 { relative: 1.0 1.0; to, "scroller_region";} + visible: 1; + } + } + part { + name: "index_region"; + type: SPACER; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 INDICATOR_START_Y/BASE_HEIGHT; to, "bg"; } + rel2 { relative: 1.0 (INDICATOR_START_Y+INDICATOR_HEIGHT)/BASE_HEIGHT; to, "bg"; } + } + } + part { + name: "index_clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "index_region"; } + rel2 { relative: 1.0 1.0; to: "index_region"; } + color: 255 255 255 0; + visible: 1; + } + description { + state: "init" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "index"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + clip_to: "index_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "index_region";} + rel2 { relative: 1.0 1.0; to, "index_region";} + visible: 1; + } + } + } // parts + programs { + program { + signal: "init"; + source: "edit"; + action: STATE_SET "init" 0.0; + target: "index_clipper"; + transition: LINEAR 0.5; + } + program { + signal: "hide"; + source: "edit"; + action: STATE_SET "default" 0.0; + target: "index_clipper"; + } + } // programs +} // group + +group { + name: "proxy_item"; + parts { + part { + name: "proxy_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + min: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; + max: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; + visible: 1; + } + } + } +} // group +} // collections + + + +// End of file diff --git a/home/res/edje/rectangle/index.edc b/home/res/edje/rectangle/index.edc new file mode 100755 index 0000000..9eed13c --- /dev/null +++ b/home/res/edje/rectangle/index.edc @@ -0,0 +1,357 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +collections { + group { + name: "elm/index/item/vertical/clock/thumbnail"; + alias: "elm/index/item_odd/vertical/clock/thumbnail"; + alias: "elm/index/item/horizontal/clock/thumbnail"; + alias: "elm/index/item_odd/horizontal/clock/thumbnail"; + images { + image: "indicator_clock_on_normal.png" COMP; + image: "indicator_clock_on_focused.png" COMP; + image: "indicator_clock_on_normal_ef.png" COMP; + image: "indicator_clock_on_focused_ef.png" COMP; + } + parts { + part { name:"bg"; + type : RECT; + scale: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + min: INDEX_THUMBNAIL_HOME_BG_SIZE; + max: INDEX_THUMBNAIL_HOME_BG_SIZE; + visible: 0; + align: 0.5 0.5; + } + } + part { name: "indicator1_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_clock_on_normal_ef.png"; + color_class: "AO062"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator1"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_clock_on_normal.png"; + color_class: "AO032"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator2_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_clock_on_focused_ef.png"; + color_class: "AO062P"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "indicator2"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_clock_on_focused.png"; + color_class: "AO0321"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } //parts + programs { + program { name: "active"; + signal: "elm,state,active"; + source: "elm"; + action: STATE_SET "active" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + program { name: "inactive"; + signal: "elm,state,inactive"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + } //programs + } // group + group { + name: "elm/index/item/vertical/noti/thumbnail"; + alias: "elm/index/item_odd/vertical/noti/thumbnail"; + alias: "elm/index/item/horizontal/noti/thumbnail"; + alias: "elm/index/item_odd/horizontal/noti/thumbnail"; + images { + image: "indicator_panel_on_normal.png" COMP; + image: "indicator_panel_on_focused.png" COMP; + image: "indicator_panel_on_normal_ef.png" COMP; + image: "indicator_panel_on_focused_ef.png" COMP; + } + parts { + part { name:"bg"; + type : RECT; + scale: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + min: INDEX_THUMBNAIL_HOME_BG_SIZE; + max: INDEX_THUMBNAIL_HOME_BG_SIZE; + visible: 0; + align: 0.5 0.5; + } + } + part { name: "indicator1_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_panel_on_normal_ef.png"; + color_class: "AO062"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator1"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_panel_on_normal.png"; + color_class: "AO032"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator2_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_panel_on_focused_ef.png"; + color_class: "AO062P"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "indicator2"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_panel_on_focused.png"; + color_class: "AO0321"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } //parts + programs { + program { name: "active"; + signal: "elm,state,active"; + source: "elm"; + action: STATE_SET "active" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + program { name: "inactive"; + signal: "elm,state,inactive"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + } //programs + } // group + group { + name: "elm/index/item/vertical/page/thumbnail"; + alias: "elm/index/item_odd/vertical/page/thumbnail"; + alias: "elm/index/item/horizontal/page/thumbnail"; + alias: "elm/index/item_odd/horizontal/page/thumbnail"; + images { + image: "indicator_on_normal.png" COMP; + image: "indicator_on_focused.png" COMP; + image: "indicator_on_normal_ef.png" COMP; + image: "indicator_on_focused_ef.png" COMP; + } + parts { + part { name:"bg"; + type : RECT; + scale: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + min: INDEX_THUMBNAIL_HOME_BG_SIZE; + max: INDEX_THUMBNAIL_HOME_BG_SIZE; + visible: 0; + align: 0.5 0.5; + } + } + part { name: "indicator1_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_on_normal_ef.png"; + color_class: "AO062"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator1"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_on_normal.png"; + color_class: "AO032"; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "indicator2_ef"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_on_focused_ef.png"; + color_class: "AO062P"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "indicator2"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + min: INDEX_THUMBNAIL_HOME_IND_SIZE; + max: INDEX_THUMBNAIL_HOME_IND_SIZE; + image.normal: "indicator_on_focused.png"; + color_class: "AO0321"; + visible: 0; + } + description { state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } //parts + programs { + program { name: "active"; + signal: "elm,state,active"; + source: "elm"; + action: STATE_SET "active" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + program { name: "inactive"; + signal: "elm,state,inactive"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "indicator1"; + target: "indicator2"; + target: "indicator1_ef"; + target: "indicator2_ef"; + } + } // programs + } //group +} // collections + +/* End of a file */ diff --git a/home/res/edje/rectangle/layout.edc b/home/res/edje/rectangle/layout.edc new file mode 100755 index 0000000..d2557a3 --- /dev/null +++ b/home/res/edje/rectangle/layout.edc @@ -0,0 +1,668 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +images { + image: "bouncing_bottom_edge.png" COMP; + image: "bouncing_bottom_glow.png" COMP; + image: "bouncing_left_edge.png" COMP; + image: "bouncing_left_glow.png" COMP; + image: "bouncing_right_edge.png" COMP; + image: "bouncing_right_glow.png" COMP; +} + +collections { + group { + name: "layout"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part { + name: "opacity"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to: "bg"; } + rel2 { to: "bg"; } + color: 0 0 0 64; + visible: 0; + } + description { + state: "opacity" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "scroller,clip"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg";} + rel2 { relative: 1.0 1.0; to, "bg";} + color: 255 255 255 255; + visible: 1; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + } + } + part { + name: "scroller_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to, "bg"; } + rel2 { to, "bg"; } + } + } + part { + name: "scroller"; + type: SWALLOW; + clip_to: "scroller,clip"; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "scroller_region";} + rel2 { relative: 1.0 1.0; to, "scroller_region";} + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "index_region"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 INDICATOR_START_Y/BASE_HEIGHT; to, "bg"; } + rel2 { relative: 1.0 (INDICATOR_START_Y+INDICATOR_HEIGHT)/BASE_HEIGHT; to, "bg"; } + } + } + part { + name: "left_index,clip"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "index_region"; } + rel2 { relative: 1.0 1.0; to, "index_region"; } + color: 255 255 255 255; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + color: 0 0 0 0; + } + } + part { + name: "left_index"; + type: SWALLOW; + scale: 1; + clip_to: "left_index,clip"; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "index_region";} + rel2 { relative: 1.0 1.0; to, "index_region";} + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "right_index,clip"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "index_region"; } + rel2 { relative: 1.0 1.0; to, "index_region"; } + color: 255 255 255 255; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + } + } + part { + name: "right_index"; + type: SWALLOW; + scale: 1; + clip_to: "right_index,clip"; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "index_region";} + rel2 { relative: 1.0 1.0; to, "index_region";} + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "edit_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to, "bg"; } + rel2 { to, "bg"; } + } + } + part { + name: "edit"; + type: SWALLOW; + clip_to: "scroller,clip"; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "edit_region";} + rel2 { relative: 1.0 1.0; to, "edit_region";} + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "add_viewer_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to, "bg"; } + rel2 { to, "bg"; } + } + } + part { + name: "add_viewer,clip"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg";} + rel2 { relative: 1.0 1.0; to, "bg";} + color: 255 255 255 0; + visible: 1; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "add_viewer"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + clip_to: "add_viewer,clip"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "add_viewer_region";} + rel2 { relative: 1.0 1.0; to, "add_viewer_region";} + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "left_checker"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 0.2 1.0; to: "bg"; } + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "right_checker"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.8 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "blocker"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 0; + } + description { + state: "enable" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "bottom,clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "bouncing,bottom,edge"; } + rel2 { relative: 1.0 1.0; to: "bouncing,bottom,edge"; } + visible: 1; + } + description { + state: "show"; + inherit: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,bottom,glow"; } + rel2 { relative: 1.0 1.0; to: "bouncing,bottom,edge"; } + } + } + part { + name: "bouncing,bottom,edge"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "bottom,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + image { + normal: "bouncing_bottom_edge.png"; + } + color_class: "B019"; + min: 360 2; + fixed: 1 1; + align: 0.5 1.0; + visible: 1; + } + } + part { + name: "bouncing,bottom,glow"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "bottom,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,bottom,edge"; } + rel2 { relative: 1.0 0.0; to: "bouncing,bottom,edge"; } + image { + normal: "bouncing_bottom_glow.png"; + } + color_class: "B018E"; + min: 360 50; + fixed: 1 1; + align: 0.5 1.0; + visible: 1; + } + } + part { + name: "left,clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,left,edge"; } + rel2 { relative: 0.0 1.0; to: "bouncing,left,edge"; } + visible: 1; + } + description { + state: "show"; + inherit: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,left,edge"; } + rel2 { relative: 1.0 1.0; to: "bouncing,left,glow"; } + } + } + part { + name: "bouncing,left,edge"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "left,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 0.0 1.0; to: "bg"; } + image { + normal: "bouncing_left_edge.png"; + } + color_class: "B019"; + min: 1 480; + fixed: 1 1; + align: 0.0 0.5; + visible: 1; + } + } + part { + name: "bouncing,left,glow"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "left,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to: "bouncing,left,edge"; } + rel2 { relative: 1.0 1.0; to: "bouncing,left,edge"; } + image { + normal: "bouncing_left_glow.png"; + } + color_class: "B018E"; + min: 50 480; + fixed: 1 1; + align: 0.0 0.5; + visible: 1; + } + } + part { + name: "right,clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to: "bouncing,right,edge"; } + rel2 { relative: 1.0 1.0; to: "bouncing,right,edge"; } + visible: 1; + } + description { + state: "show"; + inherit: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,right,glow"; } + rel2 { relative: 1.0 1.0; to: "bouncing,right,edge"; offset: 1 0; } + } + } + + part { + name: "bouncing,right,edge"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "right,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + image { + normal: "bouncing_right_edge.png"; + } + color_class: "B019"; + min: 1 480; + fixed: 1 1; + align: 1.0 0.5; + visible: 1; + } + } + part { + name: "bouncing,right,glow"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "right,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bouncing,right,edge"; } + rel2 { relative: 0.0 1.0; to: "bouncing,right,edge"; } + image { + normal: "bouncing_right_glow.png"; + } + color_class: "B018E"; + min: 50 480; + fixed: 1 1; + align: 1.0 0.5; + visible: 1; + } + } + } + programs { + program { + signal: "opacity"; + source: "layout"; + action: STATE_SET "opacity" 0.0; + target: "opacity"; + } + program { + signal: "transparent"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "opacity"; + } + program { + signal: "show"; + source: "checker"; + action: STATE_SET "show" 0.0; + target: "left_checker"; + target: "right_checker"; + } + program { + signal: "hide"; + source: "checker"; + action: STATE_SET "default" 0.0; + target: "left_checker"; + target: "right_checker"; + } + program { + signal: "block"; + source: "layout"; + action: STATE_SET "enable" 0.0; + target: "blocker"; + } + program { + signal: "unblock"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "blocker"; + } + program { + signal: "show"; + source: "left_index"; + action: STATE_SET "default" 0.0; + target: "left_index,clip"; + } + program { + signal: "hide"; + source: "left_index"; + action: STATE_SET "hide" 0.0; + target: "left_index,clip"; + transition: LINEAR 0.2; + } + program { + signal: "show"; + source: "right_index"; + action: STATE_SET "default" 0.0; + target: "right_index,clip"; + } + program { + signal: "hide"; + source: "right_index"; + action: STATE_SET "hide" 0.0; + target: "right_index,clip"; + transition: LINEAR 0.2; + } + program { + signal: "show"; + source: "edit"; + action: STATE_SET "show" 0.0; + target: "edit"; + } + program { + signal: "hide"; + source: "edit"; + action: STATE_SET "default" 0.0; + target: "edit"; + } + program { + signal: "show"; + source: "scroller"; + action: STATE_SET "default" 0.0; + target: "scroller"; + target: "left_index"; + target: "right_index"; + } + program { + signal: "hide"; + source: "scroller"; + action: STATE_SET "hide" 0.0; + target: "scroller"; + target: "left_index"; + target: "right_index"; + } + program { + signal: "show"; + source: "add_viewer"; + action: STATE_SET "show" 0.0; + target: "add_viewer,clip"; + target: "add_viewer"; + target: "scroller,clip"; + transition: LINEAR 0.1; + } + program { + signal: "hide"; + source: "add_viewer"; + action: STATE_SET "default" 0.0; + target: "add_viewer,clip"; + target: "add_viewer"; + target: "scroller,clip"; + transition: LINEAR 0.1; + after: "hide,after"; + } + program { + signal: "hide,instant"; + source: "add_viewer"; + action: STATE_SET "default" 0.0; + target: "add_viewer,clip"; + target: "add_viewer"; + target: "scroller,clip"; + after: "hide,after"; + } + program { + name: "hide,after"; + source: "add_viewer"; + action: SIGNAL_EMIT "add_viewer,hide" "add_viewer"; + } + program { + name: "bottom,show"; + signal: "bottom,show"; + source: "layout"; + action: STATE_SET "show" 0.0; + target: "bottom,clipper"; + transition: LINEAR 0.2; + after: "bottom,hide"; + } + program { + name: "bottom,hide"; + signal: "bottom,hide"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "bottom,clipper"; + } + program { + name: "left,show"; + signal: "left,show"; + source: "layout"; + action: STATE_SET "show" 0.0; + target: "left,clipper"; + transition: LINEAR 0.2; + after: "left,hide"; + } + program { + name: "left,hide"; + signal: "left,hide"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "left,clipper"; + } + program { + name: "right,show"; + signal: "right,show"; + source: "layout"; + action: STATE_SET "show" 0.0; + target: "right,clipper"; + transition: LINEAR 0.2; + after: "right,hide"; + } + program { + name: "right,hide"; + signal: "right,hide"; + source: "layout"; + action: STATE_SET "default" 0.0; + target: "right,clipper"; + } + } + } // group +} // collections + + + +// End of file diff --git a/home/res/edje/rectangle/noti.edc b/home/res/edje/rectangle/noti.edc new file mode 100755 index 0000000..7204f81 --- /dev/null +++ b/home/res/edje/rectangle/noti.edc @@ -0,0 +1,514 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +styles { + style { + name: "summary_text_style"; + base: "font=TIZEN:style=Regular text_class=tizen style=shadow shadow_color=#0000004C font_size=25 align=middle ellipsis=1 color=#FFFFFF wrap=mixed"; + } +} + +styles { + style { + name: "detail_text_style"; + base: "font=TIZEN:style=Regular text_class=tizen style=shadow shadow_color=#0000004C font_size=25 align=middle color=#FFFFFF wrap=mixed"; + } +} + +images { + image: "w_cover_view_ic_delete.png" COMP; +} + +collections { + base_scale: 1.2; + group { + name: "summary"; + parts { + part { + name: "bg"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + } + part { + name: "bg,rect"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 255; + visible: 1; + } + } + part { + name: "icon"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; offset: 0 3; } + rel2 { relative: 0.5 0.0; to: "bg"; offset: 0 3; } + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "title"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.2 1.0; to_x: "bg"; to_y: "icon"; } + rel2 { relative: 0.8 1.0; to_x: "bg"; to_y: "icon"; } + align: 0.5 0.0; + min: 0 47; + color: 255 255 255 255; + text { + size: 30; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + } + part { + name: "time"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.1 1.0; to_x: "bg"; to_y: "title"; } + rel2 { relative: 0.9 1.0; to_x: "bg"; to_y: "title"; } + align: 0.5 0.0; + min: 0 32; + color: 255 255 255 255; + text { + size: 20; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + } + part { + name: "time,pad"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "time"; } + rel2 { relative: 1.0 1.0; to_y: "bg"; to_y: "time"; } + align: 0.5 0.0; + min: 0 16; + } + } + part { + name: "text"; + type: TEXTBLOCK; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.1 1.0; to_x: "bg"; to_y: "time,pad"; } + rel2 { relative: 0.9 0.0; to_x: "bg"; to_y: "count,up,pad"; } + align: 0.5 0.5; + min: 0 74; + text { + style: "summary_text_style"; + align: 0.5 0.5; + min: 0 1; + } + } + } + part { + name: "launch,btn"; + type: SWALLOW; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to_x: "bg"; to_y: "text"; } + align: 0.0 0.0; + visible: 1; + } + } + part { + name: "del,btn"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 1.0; to: "bg"; offset: 0 -5; } + rel2 { relative: 0.5 1.0; to: "bg"; offset: 0 -5; } + align: 0.5 1.0; + min: 52 52; + fixed: 1 1; + align: 0.5 0.5; + visible: 1; + } + } + part { + name: "del,btn,icon"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "del,btn"; } + rel2 { relative: 0.5 0.5; to: "del,btn"; } + image { + normal: "w_cover_view_ic_delete.png"; + } + align: 0.5 1.0; + min: 52 52; + fixed: 1 1; + visible: 1; + } + } + part { + name: "count,down,pad"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to_x: "bg"; to_y: "del,btn,icon"; } + rel2 { relative: 1.0 0.0; to_y: "bg"; to_y: "del,btn,icon"; } + align: 0.5 0.0; + min: 0 12; + } + } + part { + name: "count"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.1 0.0; to_x: "bg"; to_y: "count,down,pad"; } + rel2 { relative: 0.9 0.0; to_x: "bg"; to_y: "count,down,pad"; } + align: 0.5 1.0; + min: 0 32; + color: 255 255 255 255; + text { + size: 20; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + } + part { + name: "count,up,pad"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to_x: "bg"; to_y: "count"; } + rel2 { relative: 1.0 0.0; to_x: "bg"; to_y: "count"; } + align: 0.5 1.0; + min: 0 15; + } + } + } + } + group { + name: "detail"; + parts { + part { + name: "bg"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + } + part { + name: "bg,rect"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 10 10 10 255; + visible: 1; + } + } + part { + name: "icon"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; offset: 0 3; } + rel2 { relative: 0.5 0.0; to: "bg"; offset: 0 3; } + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "title,pad"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to: "bg"; } + align: 0.5 0.0; + min: 0 30; + color: 0 0 0 255; + visible: 1; + } + description { + state: "show,icon" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "title"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.2 1.0; to_x: "bg"; to_y: "title,pad"; } + rel2 { relative: 0.8 1.0; to_x: "bg"; to_y: "title,pad"; } + align: 0.5 0.0; + min: 0 47; + color: 255 255 255 255; + text { + size: 30; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + description { + state: "show,icon" 0.0; + inherit: "default" 0.0; + rel1 { relative: 0.2 1.0; to_x: "bg"; to_y: "icon"; } + rel2 { relative: 0.8 1.0; to_x: "bg"; to_y: "icon"; } + } + } + part { + name: "time"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.1 1.0; to_x: "bg"; to_y: "title"; } + rel2 { relative: 0.9 1.0; to_x: "bg"; to_y: "title"; } + align: 0.5 0.0; + min: 0 32; + color: 255 255 255 255; + text { + size: 20; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + } + part { + name: "time,pad"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "time"; } + rel2 { relative: 1.0 1.0; to_y: "bg"; to_y: "time"; } + align: 0.5 0.0; + min: 0 16; + } + } + part { + name: "text"; + type: TEXTBLOCK; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.1 1.0; to_x: "bg"; to_y: "time,pad"; } + rel2 { relative: 0.9 1.0; to_x: "bg"; to_y: "time,pad"; } + align: 0.5 0.0; + text { + style: "detail_text_style"; + align: 0.5 0.5; + min: 0 1; + } + } + } + part { + name: "del,btn"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 1.0; to: "bg"; offset: 0 -5; } + rel2 { relative: 0.5 1.0; to: "bg"; offset: 0 -5; } + align: 0.5 1.0; + min: 52 52; + fixed: 1 1; + align: 0.5 0.5; + visible: 1; + } + } + part { + name: "del,btn,icon"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "del,btn"; } + rel2 { relative: 0.5 0.5; to: "del,btn"; } + image { + normal: "w_cover_view_ic_delete.png"; + } + align: 0.5 1.0; + min: 52 52; + fixed: 1 1; + visible: 1; + } + } + } + programs { + program { + signal: "show,icon"; + source: "icon"; + action: STATE_SET "show,icon" 0.0; + target: "title,pad"; + target: "title"; + } + program { + signal: "hide,icon"; + source: "icon"; + action: STATE_SET "defualt" 0.0; + target: "title,pad"; + target: "title"; + } + } + } + group { + name: "simple"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part { + name: "bg,rect"; + type: RECT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 100 100 100 255; + visible: 1; + } + } + part { + name: "icon"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg,rect"; offset: 0 8; } + rel2 { relative: 0.5 0.0; to: "bg,rect"; offset: 0 8; } + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "title"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 0.5 1.0; + min: 0 47; + color: 255 255 255 255; + text { + size: 24; + font: "TIZEN"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + } + } + } +} + + + +// End of file diff --git a/home/res/edje/rectangle/page.edc b/home/res/edje/rectangle/page.edc new file mode 100755 index 0000000..ba755f0 --- /dev/null +++ b/home/res/edje/rectangle/page.edc @@ -0,0 +1,1150 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +#define DEL_IMAGE_MIN 54 54 +#define PLUS_IMAGE_MIN 90 90 +#define LINE_IMAGE_MIN (216+4) (288+4) +#define TEXT_MIN 300 420 + + + +styles { + style { + name: "max_text_style"; + base: "font=TIZEN:style=Regular text_class=tizen style=shadow shadow_color=#0000004C font_size="25" color_class=AT0121 align=middle color=#FFFFFF ellipsis=1 wrap=mixed"; + } +} + +images { + image: "b_home_screen_widget_del_bg.png" COMP; + image: "b_home_screen_widget_del_line.png" COMP; + image: "b_home_screen_widget_del_icon.png" COMP; + image: "b_widget_favorite_bg.png" COMP; + image: "b_home_screen_widget_plus_origin.png" COMP; + image: "b_home_screen_widget_plus_ef.png" COMP; + image: "b_home_screen_add_widget_line.#.png" COMP; + image: "b_home_screen_widget_line_ef.png" COMP; + image: "b_home_screen_edit_cover.png" COMP; + image: "b_home_screen_edit_cover_ef.png" COMP; +} + +collections { +base_scale: 1.3; +group { + name: "page"; + parts { + part { + name: "bg"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part { + name: "inner"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + fixed: 1 1; + visible: 1; + } + } + } +} +group { + name: "page_inner"; + parts { + part { + name: "focus"; + type: SWALLOW; + scale : 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "item"; } + rel2 { relative: 1.0 1.0; to: "item"; } + color: 0 0 0 0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "area"; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "normal"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + perspective { + zplane: 0; + } + } + } + part { + name: "zoom"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + perspective { + zplane: 120; + } + } + } + part { + name: "bg"; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "item"; } + rel2 { relative: 1.0 1.0; to: "item"; } + fixed: 1 1; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "gradient,bg"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "item"; } + rel2 { relative: 1.0 1.0; to: "item"; } + color_class: "AO031"; + image { + normal: "b_widget_favorite_bg.png"; + } + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "item"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "area"; } + rel2 { relative: 0.5 0.5; to: "area"; } + fixed: 1 1; + align: 0.5 0.5; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "cover_clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "cover_ef"; } + rel2 { relative: 1.0 1.0; to: "cover_ef"; } + color: 0 0 0 0; + visible: 1; + } + description { + state: "select" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "cover_ef"; + type: IMAGE; + clip_to: "cover_clipper"; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "item"; } + rel2 { relative: 0.5 0.5; to: "item"; } + image { + normal: "b_home_screen_edit_cover_ef.png"; + } + color_class: "AO063"; + /* This size is different from "item" */ + min: ITEM_EDIT_EF_WIDTH ITEM_EDIT_EF_HEIGHT; + fixed: 1 1; + align: 0.5 0.5; + visible: 0; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "select" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "disable" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "zoom" 0.0; + inherit: "select" 0.0; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + map { + on: 1; + } + } + } + part { + name: "cover"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "cover_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "item"; } + rel2 { relative: 0.5 0.5; to: "item"; } + image { + normal: "b_home_screen_edit_cover.png"; + } + color_class: "AO0482"; + min: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; + fixed: 1 1; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "deselect" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "select" 0.0; + inherit: "default" 0.0; + color_class: "AO0482"; + } + description { + state: "disable" 0.0; + inherit: "default" 0.0; + color_class: "AO047"; + } + description { + state: "zoom" 0.0; + inherit: "select" 0.0; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + map { + on: 1; + } + } + } + part { + name: "line_clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "line_ef"; offset: -30 -30; } + rel2 { relative: 1.0 1.0; to: "line_ef"; offset: 30 30; } + color: 255 255 255 0; + visible: 1; + } + description { + state: "select" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "line,widget"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "cover"; } + rel2 { relative: 0.5 0.5; to: "cover"; } + image { + normal: "b_home_screen_add_widget_line.#.png"; + } + /* this color class code is AO033 */ + //color_class: "AO033"; + color_class: "AO0481"; + min: 222 294; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "line_ef"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "line_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "cover_ef"; } + rel2 { relative: 1.0 1.0; to: "cover_ef"; } + image { + normal: "b_home_screen_widget_line_ef.png"; + } + color_class: "AO063"; + align: 0.5 0.5; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "disable" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "zoom" 0.0; + inherit: "default" 0.0; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + map { + on: 1; + } + + } + } + part { + name: "line"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + clip_to: "line_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "item"; } + rel2 { relative: 0.5 0.5; to: "item"; } + color_class: "AO043"; + min: ITEM_EDIT_LINE_WIDTH ITEM_EDIT_LINE_HEIGHT; + align: 0.5 0.5; + visible: 1; + fixed: 1 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "disable" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "zoom" 0.0; + inherit: "default" 0.0; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + map { + on: 1; + } + } + } + part { + name: "item_event"; + type: RECT; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1.to: "item"; + rel2.to: "item"; + color: 0 0 0 0; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "del_clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "del_event_region"; } + rel2 { relative: 1.0 1.0; to: "del_event_region"; } + color: 255 255 255 0; + visible: 1; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "del_image_region"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0.0; to: "item"; offset: 0 -2; } + rel2 { relative: 1.0 0.0; to: "item"; offset: 0 -2; } + align: 0.5 0.5; + min: DEL_IMAGE_MIN; + fixed: 1 1; + } + } + /* This part blocks events */ + part { + name: "del_event_region"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: -0.5 -0.5; to: "del_image_region"; } + rel2 { relative: 1.5 1.5; to: "del_image_region"; } + color: 0 0 0 0; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "del_bg"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "del_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "del_image_region"; } + rel2 { relative: 0.5 0.5; to: "del_image_region"; } + image { + normal: "b_home_screen_widget_del_bg.png"; + } + color_class: "AO044L1"; + align: 0.5 0.5; + min: DEL_IMAGE_MIN; + fixed: 1 1; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "del_line"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "del_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "del_image_region"; } + rel2 { relative: 0.5 0.5; to: "del_image_region"; } + image { + normal: "b_home_screen_widget_del_line.png"; + } + color_class: "AO044L2"; + align: 0.5 0.5; + min: DEL_IMAGE_MIN; + fixed: 1 1; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "del_icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "del_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "del_image_region"; } + rel2 { relative: 0.5 0.5; to: "del_image_region"; } + image { + normal: "b_home_screen_widget_del_icon.png"; + } + color_class: "AO044L3"; + align: 0.5 0.5; + min: DEL_IMAGE_MIN; + fixed: 1 1; + visible: 1; + map { + on: 0; + perspective: "normal"; + } + } + description { + state: "zoom" 0.0; + inherit: "default"; + map { + on: 1; + perspective: "zoom"; + } + } + description { + state: "on" 0.0; + inherit: "default"; + map { + on: 1; + } + } + } + part { + name: "remove_focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "del_event_region"; } + rel2 { relative: 1.0 1.0; to: "del_event_region"; } + color: 0 0 0 0; + visible: 0; + } + description { + state: "show" 0.0; + rel1 { relative: 0.0 0.0; to: "del_event_region"; } + rel2 { relative: 1.0 1.0; to: "del_event_region"; } + visible: 1; + } + } + part { + name: "blocker"; + type: RECT; + mouse_events: 1; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "cover"; } + rel2 { relative: 1.0 1.0; to: "cover"; } + color: 0 0 0 0; + visible: 0; + } + description { + state: "enable" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { + signal: "show"; + source: "del"; + action: STATE_SET "show" 0.0; + target: "del_clipper"; + target: "del_event_region"; + target: "remove_focus"; + } + program { + signal: "hide"; + source: "del"; + action: STATE_SET "default" 0.0; + target: "del_clipper"; + target: "del_event_region"; + target: "remove_focus"; + } + program { + signal: "mouse,clicked,1"; + source: "focus"; + action: SIGNAL_EMIT "clicked" "page"; + } + program { + name: "enable,bg"; + signal: "enable"; + source: "gradient,bg"; + action: STATE_SET "show" 0.0; + target: "gradient,bg"; + } + program { + name: "disable,bg"; + signal: "disable"; + source: "gradient,bg"; + action: STATE_SET "default" 0.0; + target: "gradient,bg"; + } + program { + source: "blocker"; + signal: "enable"; + action: STATE_SET "enable" 0.0; + target: "blocker"; + } + program { + source: "blocker"; + signal: "disable"; + action: STATE_SET "default" 0.0; + target: "blocker"; + } + program { + signal: "deselect"; + source: "cover_clipper"; + action: STATE_SET "default" 0.0; + target: "cover_clipper"; + target: "cover_ef"; + } + program { + signal: "select"; + source: "cover_clipper"; + action: STATE_SET "select" 0.0; + target: "cover_clipper"; + target: "cover_ef"; + transition: LINEAR 0.5; + } + program { + signal: "deselect"; + source: "cover"; + action: STATE_SET "deselect" 0.0; + target: "cover"; + transition: LINEAR 0.5; + } + program { + signal: "select"; + source: "cover"; + action: STATE_SET "select" 0.0; + target: "cover"; + transition: LINEAR 0.5; + } + program { + signal: "disable"; + source: "cover"; + action: STATE_SET "disable" 0.0; + target: "cover"; + target: "cover_ef"; + target: "line_ef"; + target: "line"; + transition: LINEAR 0.5; + } + program { + signal: "deselect"; + source: "line"; + action: STATE_SET "default" 0.0; + target: "line_clipper"; + transition: LINEAR 0.5; + } + program{ + signal: "deselect,im"; + source: "line"; + action: STATE_SET "default" 0.0; + target: "line_clipper"; + } + program { + signal: "hide"; + source: "line,widget"; + action: STATE_SET "default" 0.0; + target: "line,widget"; + } + program { + signal: "show"; + source: "line,widget"; + action: STATE_SET "show" 0.0; + target: "line,widget"; + } + program { + signal: "select"; + source: "line"; + action: STATE_SET "select" 0.0; + target: "line_clipper"; + transition: LINEAR 0.5; + } + program { + signal: "on,zoom"; + source: "inner"; + action: STATE_SET "on" 0.0; + target: "item_event"; + target: "bg"; + target: "gradient,bg"; + target: "item"; + target: "del_bg"; + target: "del_line"; + target: "del_icon"; + target: "cover_ef"; + target: "cover"; + target: "line_ef"; + target: "line"; + after: "show,zoom"; + } + program { + name: "show,zoom"; + action: STATE_SET "zoom" 0.0; + transition: SIN_FAC 0.2 0.90; + target: "item_event"; + target: "bg"; + target: "gradient,bg"; + target: "item"; + target: "del_bg"; + target: "del_line"; + target: "del_icon"; + target: "cover_ef"; + target: "cover"; + target: "line_ef"; + target: "line"; + } + program { + signal: "reset,zoom"; + source: "inner"; + action: STATE_SET "on" 0.0; + transition: SIN_FAC 0.2 0.90; + target: "item_event"; + target: "bg"; + target: "gradient,bg"; + target: "item"; + target: "del_bg"; + target: "del_line"; + target: "del_icon"; + target: "cover_ef"; + target: "cover"; + target: "line_ef"; + target: "line"; + after: "off,zoom"; + } + program { + name: "off,zoom"; + action: STATE_SET "defalut" 0.0; + target: "item_event"; + target: "bg"; + target: "gradient,bg"; + target: "item"; + target: "del_bg"; + target: "del_line"; + target: "del_icon"; + after: "on,cover"; + } + program { + name: "on,cover"; + action: STATE_SET "select" 0.0; + target: "line_ef"; + target: "cover_ef"; + target: "cover_clipper"; + target: "line_clipper"; + } + } +} +group { + name: "plus_item"; + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + /* This size is different from "item" */ + min: ITEM_EDIT_WIDTH ITEM_EDIT_HEIGHT; + fixed: 1 1; + color: 0 0 0 0; + visible: 1; + } + } + part { + name: "add,bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "bg"; } + rel2 { relative: 0.5 0.5; to: "bg"; } + min: LINE_IMAGE_MIN; + fixed: 1 1; + color_class: "AO0111"; + visible: 1; + } + description { + state: "edit" 0.0; + inherit: "default" 0.0; + color_class: "AO0481"; + } + } + part { + name: "plus_ef"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + rel1 { relative: 0.5 0.5; to: "add,bg"; } + rel2 { relative: 0.5 0.5; to: "add,bg"; } + image { + normal: "b_home_screen_widget_plus_ef.png"; + } + color_class: "AO063"; + min: PLUS_IMAGE_MIN; + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + description { + state: "press" 0.0; + inherit: "default" 0.0; + color_class: "AO0663"; + } + description { + state: "edit" 0.0; + inherit: "default" 0.0; + } + description { + state: "edit,press" 0.0; + inherit: "press" 0.0; + } + description { + state: "max" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "plus"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "add,bg"; } + rel2 { relative: 0.5 0.5; to: "add,bg"; } + image { + normal: "b_home_screen_widget_plus_origin.png"; + } + color_class: "AO035"; + min: PLUS_IMAGE_MIN; + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + description { + state: "press" 0.0; + inherit: "default" 0.0; + color_class: "AO035P"; + } + description { + state: "edit" 0.0; + inherit: "default" 0.0; + color_class: "AO034"; + } + description { + state: "edit,press" 0.0; + inherit: "default" 0.0; + color_class: "AO034P"; + } + description { + state: "max" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "max_text"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.1 0.05; to: "bg"; } + rel2 { relative: 0.9 0.95; to: "bg"; } + fixed: 1 0; + text { + style: "max_text_style"; + } + visible: 0; + } + description { + state: "max" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { + name: "button,down"; + signal: "mouse,down,1"; + source: "bg"; + action: SIGNAL_EMIT "down" "plus_item"; + } + program { + source: "plus"; + signal: "press"; + action: STATE_SET "press" 0.0; + target: "plus"; + target: "plus_ef"; + } + program { + name: "button,up"; + signal: "mouse,up,1"; + source: "bg"; + action: SIGNAL_EMIT "up" "plus_item"; + } + program { + name: "button,click"; + signal: "mouse,clicked,1"; + source: "bg"; + action: SIGNAL_EMIT "click" "plus_item"; + } + program { + source: "plus"; + signal: "release"; + action: STATE_SET "default" 0.0; + target: "plus"; + target: "plus_ef"; + } + program { + source: "plus"; + signal: "edit,press"; + action: STATE_SET "edit,press" 0.0; + target: "plus"; + target: "plus_ef"; + } + program { + source: "plus"; + signal: "edit,release"; + action: STATE_SET "edit" 0.0; + target: "plus"; + target: "plus_ef"; + } + program { + name: "hide_plus"; + signal: "max"; + source: "plus_in_edit"; + action: STATE_SET "max" 0.0; + target: "max_text"; + target: "plus"; + target: "plus_ef"; + } + program { + name: "show_plus"; + signal: "no_max"; + source: "plus_in_edit"; + action: STATE_SET "default" 0.0; + target: "max_text"; + after: "show,edit"; + } + program { + name: "show,widget"; + signal: "show,widget"; + source: "plus_item"; + action: STATE_SET "default" 0.0; + target: "add,bg"; + target: "plus"; + } + program { + name: "show,edit"; + signal: "show,edit"; + source: "plus_item"; + action: STATE_SET "edit" 0.0; + target: "add,bg"; + target: "plus"; + target: "plus_ef"; + } + program { + name: "show,widget,ani"; + signal: "show,widget,ani"; + source: "plus_item"; + action: STATE_SET "edit" 0.0; + target: "add,bg"; + target: "plus"; + after: "show,widget,ani,2"; + } + program { + name: "show,widget,ani,2"; + action: STATE_SET "default" 0.0; + target: "add,bg"; + target: "plus"; + transition: LINEAR 0.5; + } + + } +}//end group +}//end collections diff --git a/home/res/edje/rectangle/page_clock.edc b/home/res/edje/rectangle/page_clock.edc new file mode 100755 index 0000000..9ba6749 --- /dev/null +++ b/home/res/edje/rectangle/page_clock.edc @@ -0,0 +1,1803 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +#define HIDDEN_AREA_H 256 +#define HIDDEN_QUICKBUTTON_W (29+90+29) +#define HIDDEN_QUICKBUTTON_H (90+7+33+33) +#define HIDDEN_BUTTON_TRANSIT_TIME 0.35 +#define CLOCK_INDICATOR_W 65 +#define CLOCK_INDICATOR_H 65 +#define CLOCK_INDICATOR_ICON_W 60 +#define CLOCK_INDICATOR_ICON_H 60 + +images { + image: "b_home_screen_clock_arrow_big.png" COMP; + image: "b_home_screen_clock_arrow_big_ef.png" COMP; + image: "Arrow_S_00015.png" COMP; + image: "Arrow_S_00016.png" COMP; + image: "Arrow_S_00017.png" COMP; + image: "Arrow_S_00018.png" COMP; + image: "Arrow_S_00019.png" COMP; + image: "Arrow_S_00020.png" COMP; + image: "Arrow_S_00021.png" COMP; + image: "Arrow_S_00022.png" COMP; + image: "Arrow_S_00023.png" COMP; + image: "Arrow_S_00024.png" COMP; + image: "Arrow_S_00025.png" COMP; + image: "Arrow_S_00026.png" COMP; + image: "Arrow_S_00027.png" COMP; + image: "Arrow_S_00028.png" COMP; + image: "Arrow_S_00029.png" COMP; + image: "Arrow_S_00030.png" COMP; + image: "Arrow_S_00031.png" COMP; + image: "Arrow_S_00032.png" COMP; + image: "Arrow_S_00033.png" COMP; + image: "B3_Data.png" COMP; + image: "do_not_ic_disturb.png" COMP; + image: "b_home_screen_block_btn_bg.png" COMP; + image: "b_home_screen_block_btn_line.png" COMP; + image: "b_home_screen_block_text_btn_bg.#.png" COMP; + image: "b_home_screen_block_text_btn_line.#.png" COMP; + image: "b_home_screen_block_btn_ic.png" COMP; + image: "b_home_screen_network_auto.png" COMP; + image: "b_home_screen_network_off.png" COMP; + image: "b_home_screen_network_on.png" COMP; +} + +collections { + + styles { + style { + name: "text,1,normal"; + base: "font=Tizen text_class=AT041 font_size=32 align=center color=#FFFFFF color_class=AT044 wrap=mixed"; # ellipsis=1.0 + } + style { + name: "text,1,pressed"; + base: "font=Tizen text_class=AT041S font_size=32 align=center color=#FFFFFF color_class=AT044P wrap=mixed"; # ellipsis=1.0 + } + style { + name: "name_style"; + base: "font=TIZEN:style=Regular text_class=tizen font_size="28" align=center color=#FFFFFF color_class=AT043 ellipsis=1 wrap=mixed"; + } + style { + name: "name_style_pressed"; + base: "font=TIZEN:style=Regular text_class=tizen font_size="28" align=center color=#FFFFFF color_class=AT043P ellipsis=1 wrap=mixed"; + } + } + group { + name: "clock_page"; + parts { + part { + name: "clock_bg"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + } + part { + name: "item"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "clock_bg";} + rel2 { relative: 0.5 0.5; to: "clock_bg";} + fixed: 1 1; + visible: 1; + align: 0.5 0.5; + } + } + part { + name: "hidden_region"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "clock_bg";} + rel2 { relative: 1.0 0.0; to: "clock_bg";} + min: 0 HIDDEN_AREA_H; + fixed: 1 1; + align: 0.0 1.0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + min: 0 HIDDEN_AREA_H; + max: -1 HIDDEN_AREA_H; + rel1 { relative: 0.0 0.0; to: "clock_bg";} + rel2 { relative: 1.0 0.0; to: "clock_bg";} + align: 0.0 0.0; + } + description { + state: "show.short" 0.0; + inherit: "default" 0.0; + min: 0 HIDDEN_AREA_H; + max: -1 HIDDEN_AREA_H; + rel1 { relative: 0.0 0.0; to: "clock_bg"; offset: 0 -99;} + rel2 { relative: 1.0 0.0; to: "clock_bg";} + align: 0.0 0.0; + } + } + part { + name: "bottom_cue"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + min: 75 75; + max: 75 75; + rel1 { relative: 0.5 1.0; to: "clock_bg"; } + rel2 { relative: 0.5 1.0; to: "clock_bg"; } + fixed: 1 1; + visible: 1; + align: 0.5 1.0; + } + } + part { + name: "bottom_cue_button_bg"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 106 53; + max: 106 53; + rel1 { relative: 0.5 1.0; to: "clock_bg"; offset: 0 -19;} + rel2 { relative: 0.5 1.0; to: "clock_bg"; offset: 0 -19;} + image { + normal: "b_home_screen_clock_arrow_big_ef.png"; + } + color_class: "AO064"; + fixed: 1 1; + visible: 0; + align: 0.5 1.0; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "bottom_cue_button"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 106 53; + max: 106 53; + rel1 { relative: 0.5 1.0; to: "clock_bg"; offset: 0 -19;} + rel2 { relative: 0.5 1.0; to: "clock_bg"; offset: 0 -19;} + image { + normal: "b_home_screen_clock_arrow_big.png"; + } + color_class: "AO014"; + fixed: 1 1; + visible: 0; + align: 0.5 1.0; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "clock_bg"; } + rel2 { relative: 1.0 1.0; to: "clock_bg"; } + align: 0.0 0.0; + visible: 0; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "shortcut"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + min: CLOCK_SHORTCUT_AREA_W CLOCK_SHORTCUT_AREA_W; + max: CLOCK_SHORTCUT_AREA_W CLOCK_SHORTCUT_AREA_W; + rel1 { relative: 1.0 0.0; to: "clock_bg"; } + rel2 { relative: 1.0 0.0; to: "clock_bg"; } + fixed: 1 1; + visible: 1; + align: 1.0 0.0; + } + } + part { + name: "indicator.1"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + min: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + max: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + rel1 { relative: 0.0 0.0; to: "clock_bg"; } + rel2 { relative: 0.0 0.0; to: "clock_bg"; } + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + } + part { + name: "indicator.2"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + min: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + max: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + rel1 { relative: 1.0 0.0; to_x: "indicator.1"; to_y: "clock_bg"; } + rel2 { relative: 1.0 0.0; to_x: "indicator.1"; to_y: "clock_bg"; } + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + } + part { + name: "hidden_item"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "hidden_region"; } + rel2 { relative: 1.0 1.0; to: "hidden_region"; } + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + } + part { + name: "focus.bottom.cue"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bottom_cue_button"; } + rel2 { relative: 1.0 1.0; to: "bottom_cue_button"; } + align: 0.0 0.0; + visible: 0; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "event_blocker"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "clock_bg"; } + rel2 { relative: 0.5 0.5; to: "clock_bg"; } + fixed: 1 1; + visible: 1; + align: 0.5 0.5; + } + } + + programs { + program { + signal: "hidden.show"; + source: "clock_bg"; + action: STATE_SET "show" 0.0; + target: "hidden_region"; + transition: SIN_FAC HIDDEN_BUTTON_TRANSIT_TIME 1.7; + after: "hidden.show,after"; + } + program { + signal: "hidden.show.short"; + source: "clock_bg"; + action: STATE_SET "show.short" 0.0; + target: "hidden_region"; + transition: SIN_FAC HIDDEN_BUTTON_TRANSIT_TIME 1.7; + after: "hidden.show,after"; + } + program { + name: "hidden.show,after"; + source: "clock_bg"; + action: SIGNAL_EMIT "drawer,displayed" "clock_bg"; + } + program { + signal: "hidden.hide"; + source: "clock_bg"; + action: STATE_SET "default" 0.0; + target: "hidden_region"; + transition: DECELERATE 0.2; + transition: SIN_FAC HIDDEN_BUTTON_TRANSIT_TIME 1.7; + after: "hidden.hide,after"; + } + program { + name: "hidden.hide,after"; + source: "clock_bg"; + action: SIGNAL_EMIT "drawer,hided" "clock_bg"; + } + program { + signal: "screenreader,on"; + source: "clock_bg"; + action: STATE_SET "enabled" 0.0; + target: "focus"; + } + program { + signal: "screenreader,off"; + source: "clock_bg"; + action: STATE_SET "default" 0.0; + target: "focus"; + } + program { + signal: "screenreader,apps,on"; + source: "clock_bg"; + action: STATE_SET "enabled" 0.0; + target: "focus.bottom.cue"; + target: "bottom_cue_button"; + } + program { + signal: "screenreader,apps,off"; + source: "clock_bg"; + action: STATE_SET "default" 0.0; + target: "focus.bottom.cue"; + target: "bottom_cue_button"; + } + } + } + } // end of group + + group { + name: "blockingmode"; + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + color_class: "AO053"; + fixed: 1 1; + visible: 1; + } + } + part { + name: "pad.top"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 0 53; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to: "bg"; } + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "line.1"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "pad.top"; } + rel2 { relative: 1.0 1.0; to: "pad.top"; } + min: 0 1; + max: -1 1; + fixed: 1 1; + align: 0.0 1.0; + color_class: "AO057"; + } + } + part { + name: "area.content"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "pad.top"; } + rel2 { relative: 1.0 1.0; to_x: "bg"; to_y: "bg"; } + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "area.button.1"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 0 99; + max: -1 99; + rel1 { relative: 0.0 0.0; to_x:"area.content"; to_y:"area.content";} + rel2 { relative: 1.0 0.0; to_x:"area.content"; to_y:"area.content";} + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "line.2"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "area.button.1"; } + rel2 { relative: 1.0 1.0; to: "area.button.1"; } + min: 0 1; + max: -1 1; + fixed: 1 1; + align: 0.0 1.0; + color_class: "AO057"; + } + } + part { + name: "line.3"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + min: 0 2; + max: -1 2; + fixed: 1 1; + align: 0.0 1.0; + color_class: "AO0531"; + } + } + part { + name: "area.button.2"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 0 100; + max: -1 100; + rel1 { relative: 0.0 1.0; to_x:"area.content"; to_y: "line.2";} + rel2 { relative: 1.0 1.0; to_x:"area.content"; to_y: "line.2";} + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "button.1"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "area.button.1";} + rel2 { relative: 1.0 1.0; to: "area.button.1";} + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "button.2"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "area.button.2";} + rel2 { relative: 1.0 1.0; to: "area.button.2";} + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + } + programs { + program { + signal: "button.1.show"; + source: "prog"; + script { + set_state(PART:"button.1", "default", 0.0); + } + } + program { + signal: "button.1.hide"; + source: "prog"; + script { + set_state(PART:"button.1", "hide", 0.0); + } + } + program { + signal: "button.2.hide"; + source: "prog"; + script { + set_state(PART:"button.2", "hide", 0.0); + } + } + } + } // end of group + group { + styles { + style { + name: "dnd,title,normal"; + base: "font=Tizen text_class=AT044 font_size=32 align=center color=#FFFFFF color_class=AT056 wrap=mixed"; # ellipsis=1.0 + } + style { + name: "dnd,title,pressed"; + base: "font=Tizen text_class=AT044 font_size=32 align=center color=#FFFFFF color_class=AT056P wrap=mixed"; # ellipsis=1.0 + } + style { + name: "dnd,title,enabled"; + base: "font=Tizen text_class=AT044 font_size=32 align=center color=#FFFFFF color_class=AT055 wrap=mixed"; # ellipsis=1.0 + } + style { + name: "dnd,title,enabled,pressed"; + base: "font=Tizen text_class=AT044 font_size=32 align=center color=#FFFFFF color_class=AT055P wrap=mixed"; # ellipsis=1.0 + } + } + name: "hidden_item_blocking_mode"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: 0 100; + max: -1 100; + fixed: 1 1; + } + } + part { + name: "pad.top"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 0 16; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to: "bg"; } + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "pad.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 14 0; + fixed: 1 1; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 0.0 1.0; to: "bg"; } + align: 0.0 0.0; + } + } + part { + name: "pad.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 14 0; + fixed: 1 1; + rel1 { relative: 1.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 1.0 0.0; + } + } + part { + name: "area.icon"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 332 69; + max: 332 69; + fixed: 1 1; + rel1 { relative: 1.0 1.0; to_x:"pad.left"; to_y: "pad.top";} + rel2 { relative: 0.0 1.0; to_x:"pad.right"; to_y: "pad.top";} + align: 0.0 0.0; + } + } + part { + name: "icon.bg"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to: "area.icon"; } + rel2 { to: "area.icon"; } + image { + normal: "b_home_screen_block_text_btn_bg.#.png"; + } + color_class: "AO084L1"; + fixed: 1 1; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO084L1P"; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + color_class: "AO083L1"; + } + description { + state: "enabled_pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO083L1P"; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { to: "area.icon"; } + rel2 { to: "area.icon"; } + image { + normal: "b_home_screen_block_text_btn_line.#.png"; + } + color_class: "AO084L2"; + fixed: 1 1; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO084L2P"; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + color_class: "AO083L2"; + } + description { + state: "enabled_pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO083L2P"; + } + } + part { + name: "name"; + type: TEXTBLOCK; + scale: 1; + multiline: 1; + description { + state: "default" 0.0; + min: 300 38; + max: 300 38; + fixed: 1 1; + rel1 { relative: 0.5 0.5; to:"icon";} + rel2 { relative: 0.5 0.5; to:"icon";} + text { + style: "dnd,title,normal"; + align: 0.5 0.5; + } + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + text { style: "dnd,title,pressed"; } + visible: 1; + } + description { + state: "enabled" 0.0; + inherit: "default" 0.0; + text { style: "dnd,title,enabled"; } + visible: 1; + } + description { + state: "enabled_pressed" 0.0; + inherit: "default" 0.0; + text { style: "dnd,title,enabled,pressed"; } + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + programs { + script { + public g_icon_enabled; + public g_is_graytone; + } + program { + signal: "gray,enable"; + source: "prog"; + script { + set_int(g_is_graytone, 1); + } + } + program { + signal: "gray,disable"; + source: "prog"; + script { + set_int(g_is_graytone, 0); + } + } + program { + signal: "icon,enable"; + source: "prog"; + script { + set_int(g_icon_enabled, 1); + set_state(PART:"icon.bg", "enabled", 0.0); + set_state(PART:"icon", "enabled", 0.0); + set_state(PART:"name", "enabled", 0.0); + } + } + program { + signal: "icon,disable"; + source: "prog"; + script { + set_int(g_icon_enabled, 0); + set_state(PART:"icon.bg", "default", 0.0); + set_state(PART:"icon", "default", 0.0); + set_state(PART:"name", "default", 0.0); + } + } + program { + signal: "mouse,down,1"; + source: "focus"; + script { + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon.bg", "enabled_pressed", 0.0); + set_state(PART:"icon", "enabled_pressed", 0.0); + set_state(PART:"name", "enabled_pressed", 0.0); + } else { + set_state(PART:"icon.bg", "enabled_pressed", 0.0); + set_state(PART:"icon", "enabled_pressed", 0.0); + set_state(PART:"name", "enabled_pressed", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon.bg", "pressed", 0.0); + set_state(PART:"icon", "pressed", 0.0); + set_state(PART:"name", "pressed", 0.0); + } else { + set_state(PART:"icon.bg", "pressed", 0.0); + set_state(PART:"icon", "pressed", 0.0); + set_state(PART:"name", "pressed", 0.0); + } + } + } + } + program { + signal: "mouse,up,1"; + source: "focus"; + script { + if (get_int(g_is_graytone) == 1) { + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"icon.bg", "enabled", 0.0); + set_state(PART:"icon", "enabled", 0.0); + set_state(PART:"name", "enabled", 0.0); + } else { + set_state(PART:"icon.bg", "default", 0.0); + set_state(PART:"icon", "default", 0.0); + set_state(PART:"name", "default", 0.0); + } + } else { + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"icon.bg", "enabled", 0.0); + set_state(PART:"icon", "enabled", 0.0); + set_state(PART:"name", "enabled", 0.0); + } else { + set_state(PART:"icon.bg", "default", 0.0); + set_state(PART:"icon", "default", 0.0); + set_state(PART:"name", "default", 0.0); + } + } + } + } + program { + signal: "mouse,out"; + source: "focus"; + script { + if (get_int(g_is_graytone) == 1) { + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"icon.bg", "enabled", 0.0); + set_state(PART:"icon", "enabled", 0.0); + set_state(PART:"name", "enabled", 0.0); + } else { + set_state(PART:"icon.bg", "default", 0.0); + set_state(PART:"icon", "default", 0.0); + set_state(PART:"name", "default", 0.0); + } + } else { + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"icon.bg", "enabled", 0.0); + set_state(PART:"icon", "enabled", 0.0); + set_state(PART:"name", "enabled", 0.0); + } else { + set_state(PART:"icon.bg", "default", 0.0); + set_state(PART:"icon", "default", 0.0); + set_state(PART:"name", "default", 0.0); + } + } + } + } + } + } + + group { + name: "bottom_cue"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + fixed: 1 1; + } + } + part { + name: "cue_clip"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + align: 0.0 0.0; + color: 0 0 0 0; + visible: 1; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "cue"; + type: IMAGE; + scale: 1; + mouse_events: 0; + clip_to: "cue_clip"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "bg"; } + rel2 { relative: 1.0 1.0; to, "bg"; } + image { + normal: "Arrow_S_00033.png"; + } + fixed: 1 1; + visible: 0; + } + description { + state: "idle" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "work" 0.0; + inherit: "default" 0.0; + image { + normal: "Arrow_S_00033.png"; + tween: "Arrow_S_00015.png"; + tween: "Arrow_S_00016.png"; + tween: "Arrow_S_00017.png"; + tween: "Arrow_S_00018.png"; + tween: "Arrow_S_00019.png"; + tween: "Arrow_S_00020.png"; + tween: "Arrow_S_00021.png"; + tween: "Arrow_S_00022.png"; + tween: "Arrow_S_00023.png"; + tween: "Arrow_S_00024.png"; + tween: "Arrow_S_00025.png"; + tween: "Arrow_S_00026.png"; + tween: "Arrow_S_00027.png"; + tween: "Arrow_S_00028.png"; + tween: "Arrow_S_00029.png"; + tween: "Arrow_S_00030.png"; + tween: "Arrow_S_00031.png"; + tween: "Arrow_S_00032.png"; + tween: "Arrow_S_00033.png"; + } + visible: 1; + } + } + } + + programs { + script { + public g_is_enabled; + public g_anim_count; + } + program{ + name: "cue,enable"; + in: 1.0 0.0; + signal: "cue,enable"; + source: "prog"; + script { + if (get_int(g_is_enabled) == 0) { + set_int(g_is_enabled, 1); + set_int(g_anim_count, 0); + + stop_programs_on(PART:"cue"); + + run_program(PROGRAM:"anim,cue,fadeout"); + run_program(PROGRAM:"anim,cue,image"); + } else { + set_int(g_anim_count, 0); + } + } + } + program{ + name: "cue,disable"; + signal: "cue,disable"; + source: "prog"; + script { + set_int(g_is_enabled, 0); + set_int(g_anim_count, 0); + + stop_programs_on(PART:"cue"); + + run_program(PROGRAM:"anim,cue,fadein"); + } + } + program { + name: "anim,cue,fadeout"; + signal: "anim,cue,fadeout"; + action: STATE_SET "show" 0.0; + target: "cue_clip"; + } + program { + name: "anim,cue,fadein"; + signal: "anim,cue,fadein"; + action: STATE_SET "default" 0.0; + target: "cue_clip"; + } + program { + name: "anim,cue,image"; + action: STATE_SET "work" 0.0; + target: "cue"; + transition: DECELERATE 1.3; + after: "anim,cue,image,idle"; + } + program { + name: "anim,cue,image,idle"; + action: STATE_SET "idle" 0.0; + target: "cue"; + after: "anim,cue,image,restart"; + } + program { + name: "anim,cue,image,restart"; + in: 0.5 0.0; + script { + set_int(g_anim_count, get_int(g_anim_count) + 1); + + if (get_int(g_is_enabled) == 1) { + run_program(PROGRAM:"anim,cue,image"); + } + if (get_int(g_anim_count) >= 1) { + run_program(PROGRAM:"cue,disable"); + } + } + } + } + } // end of group + group { + name: "modem_off_icon"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "bg"; } + rel2 { relative: 0.5 0.5; to: "bg"; } + image { + normal: "B3_Data.png"; + } + //color_class: "AO013L2"; + color: 255 255 255 255; + min: CLOCK_INDICATOR_ICON_W CLOCK_INDICATOR_ICON_H; + max: CLOCK_INDICATOR_ICON_W CLOCK_INDICATOR_ICON_H; + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 0.0 0.0; + visible: 1; + } + } + } + } + group { + name: "dnd_icon"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "bg"; } + rel2 { relative: 0.5 0.5; to: "bg"; } + image { + normal: "do_not_ic_disturb.png"; + } + min: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + max: CLOCK_INDICATOR_W CLOCK_INDICATOR_H; + align: 0.5 0.5; + fixed: 1 1; + visible: 1; + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + align: 0.0 0.0; + visible: 1; + } + } + } + } + group { + name: "item_1"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: HIDDEN_QUICKBUTTON_W HIDDEN_QUICKBUTTON_H; + max: HIDDEN_QUICKBUTTON_W HIDDEN_QUICKBUTTON_H; + fixed: 1 1; + } + } + part { + name : "color_clip_icon"; + type : RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { + to: "icon"; + } + rel2 { + to: "icon"; + } + align: 0.5 0.5; + color_class: "AO056L4"; + } + description { + state: "off" 0.0; + inherit: "default" 0.0; + } + description { + state: "off_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4P"; + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + color_class: "AO056L3"; + } + description { + state: "on_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L3P"; + } + description { + state: "e_off" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4"; + } + description { + state: "e_off_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4P"; + } + description { + state: "e_on" 0.0; + inherit: "default" 0.0; + color_class: "AO056L5"; + } + description { + state: "e_on_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L5P"; + } + } + part { + name: "icon_bg_1"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_block_btn_bg.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + color_class: "AO056L1"; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO056L1P"; + } + } + part { + name: "icon_bg_2"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_block_btn_line.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + color_class: "AO056L2"; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO056L1P"; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + clip_to: "color_clip_icon"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_block_btn_ic.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "name"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: HIDDEN_QUICKBUTTON_W 70; + max: HIDDEN_QUICKBUTTON_W 70; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "icon"; offset: 0 7; } + rel2 { relative: 1.0 1.0; to: "bg"; } + text { + style: "name_style"; + align: 0.5 0.5; + } + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + text { + style: "name_style_pressed"; + align: 0.5 0.5; + } + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + programs { + script { + public g_icon_enabled; + public g_is_graytone; + } + program { + signal: "gray,enable"; + source: "prog"; + script { + set_int(g_is_graytone, 1); + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"color_clip_icon", "e_on", 0.0); + } else { + set_state(PART:"color_clip_icon", "e_off", 0.0); + } + } + } + program { + signal: "gray,disable"; + source: "prog"; + script { + set_int(g_is_graytone, 0); + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"color_clip_icon", "on", 0.0); + } else { + set_state(PART:"color_clip_icon", "off", 0.0); + } + } + } + program { + signal: "icon,enable"; + source: "prog"; + script { + set_int(g_icon_enabled, 1); + set_state(PART:"color_clip_icon", "on", 0.0); + } + } + program { + signal: "icon,disable"; + source: "prog"; + script { + set_int(g_icon_enabled, 0); + set_state(PART:"color_clip_icon", "off", 0.0); + } + } + program { + signal: "mouse,down,1"; + source: "focus"; + script { + set_state(PART:"name", "pressed", 0.0); + set_state(PART:"icon_bg_1", "pressed", 0.0); + set_state(PART:"icon_bg_2", "pressed", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on_p", 0.0); + } else { + set_state(PART:"icon_bg_2", "on_p", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off_p", 0.0); + } else { + set_state(PART:"icon_bg_2", "off_p", 0.0); + } + } + } + } + program { + signal: "mouse,up,1"; + source: "focus"; + script { + set_state(PART:"name", "default", 0.0); + set_state(PART:"icon_bg_1", "default", 0.0); + set_state(PART:"icon_bg_2", "default", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on", 0.0); + } else { + set_state(PART:"icon_bg_2", "on", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off", 0.0); + } else { + set_state(PART:"icon_bg_2", "off", 0.0); + } + } + } + } + program { + signal: "mouse,out"; + source: "focus"; + script { + set_state(PART:"name", "default", 0.0); + set_state(PART:"icon_bg_1", "default", 0.0); + set_state(PART:"icon_bg_2", "default", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on", 0.0); + } else { + set_state(PART:"icon_bg_2", "on", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off", 0.0); + } else { + set_state(PART:"icon_bg_2", "off", 0.0); + } + } + } + } + } + } + group { + name: "item_2"; + parts { + part { + name: "bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + min: HIDDEN_QUICKBUTTON_W HIDDEN_QUICKBUTTON_H; + max: HIDDEN_QUICKBUTTON_W HIDDEN_QUICKBUTTON_H; + fixed: 1 1; + } + } + part { + name : "color_clip_icon"; + type : RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { + to: "icon"; + } + rel2 { + to: "icon"; + } + align: 0.5 0.5; + color_class: "AO056L4"; + } + description { + state: "off" 0.0; + inherit: "default" 0.0; + } + description { + state: "off_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4P"; + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + color_class: "AO056L3"; + } + description { + state: "on_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L3P"; + } + description { + state: "e_off" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4"; + } + description { + state: "e_off_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L4P"; + } + description { + state: "e_on" 0.0; + inherit: "default" 0.0; + color_class: "AO056L5"; + } + description { + state: "e_on_p" 0.0; + inherit: "default" 0.0; + color_class: "AO056L5P"; + } + } + part { + name: "icon_bg_1"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_block_btn_bg.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + color_class: "AO056L1"; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO056L1P"; + } + } + part { + name: "icon_bg_2"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_block_btn_line.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + color_class: "AO056L2"; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO056L1P"; + } + } + part { + name: "icon"; + type: IMAGE; + scale: 1; + clip_to: "color_clip_icon"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.0; to: "bg"; } + rel2 { relative: 0.5 0.0; to: "bg"; } + image { + normal: "b_home_screen_network_off.png"; + } + min: 90 90; + align: 0.5 0.0; + fixed: 1 1; + visible: 1; + } + description { + state: "off" 0.0; + inherit: "default" 0.0; + image { + normal: "b_home_screen_network_off.png"; + } + } + description { + state: "on" 0.0; + inherit: "default" 0.0; + image { + normal: "b_home_screen_network_on.png"; + } + } + description { + state: "auto" 0.0; + inherit: "default" 0.0; + image { + normal: "b_home_screen_network_auto.png"; + } + } + } + part { + name: "name"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: HIDDEN_QUICKBUTTON_W 70; + max: HIDDEN_QUICKBUTTON_W 70; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "icon"; offset: 0 7; } + rel2 { relative: 1.0 1.0; to: "bg"; } + text { + style: "name_style"; + align: 0.5 0.5; + } + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + text { + style: "name_style_pressed"; + align: 0.5 0.5; + } + } + } + part { + name: "focus"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + color: 0 0 0 0; + visible: 1; + } + } + } + programs { + script { + public g_icon_enabled; + public g_is_graytone; + } + program { + signal: "gray,enable"; + source: "prog"; + script { + set_int(g_is_graytone, 1); + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"color_clip_icon", "e_on", 0.0); + } else { + set_state(PART:"color_clip_icon", "e_off", 0.0); + } + } + } + program { + signal: "gray,disable"; + source: "prog"; + script { + set_int(g_is_graytone, 0); + if (get_int(g_icon_enabled) == 1) { + set_state(PART:"color_clip_icon", "on", 0.0); + } else { + set_state(PART:"color_clip_icon", "off", 0.0); + } + } + } + program { + signal: "icon,enable"; + source: "prog"; + script { + set_int(g_icon_enabled, 1); + set_state(PART:"color_clip_icon", "on", 0.0); + } + } + program { + signal: "icon,disable"; + source: "prog"; + script { + set_int(g_icon_enabled, 0); + set_state(PART:"color_clip_icon", "off", 0.0); + } + } + program { + signal: "icon,set,off"; + source: "prog"; + script { + set_state(PART:"icon", "off", 0.0); + } + } + program { + signal: "icon,set,on"; + source: "prog"; + script { + set_state(PART:"icon", "on", 0.0); + } + } + program { + signal: "icon,set,auto"; + source: "prog"; + script { + set_state(PART:"icon", "auto", 0.0); + } + } + program { + signal: "mouse,down,1"; + source: "focus"; + script { + set_state(PART:"name", "pressed", 0.0); + set_state(PART:"icon_bg_1", "pressed", 0.0); + set_state(PART:"icon_bg_2", "pressed", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on_p", 0.0); + } else { + set_state(PART:"icon_bg_2", "on_p", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off_p", 0.0); + } else { + set_state(PART:"icon_bg_2", "off_p", 0.0); + } + } + } + } + program { + signal: "mouse,up,1"; + source: "focus"; + script { + set_state(PART:"name", "default", 0.0); + set_state(PART:"icon_bg_1", "default", 0.0); + set_state(PART:"icon_bg_2", "default", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on", 0.0); + } else { + set_state(PART:"icon_bg_2", "on", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off", 0.0); + } else { + set_state(PART:"icon_bg_2", "off", 0.0); + } + } + } + } + program { + signal: "mouse,out"; + source: "focus"; + script { + set_state(PART:"name", "default", 0.0); + set_state(PART:"icon_bg_1", "default", 0.0); + set_state(PART:"icon_bg_2", "default", 0.0); + if (get_int(g_icon_enabled) == 1) { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_on", 0.0); + } else { + set_state(PART:"icon_bg_2", "on", 0.0); + } + } else { + if (get_int(g_is_graytone) == 1) { + set_state(PART:"icon_bg_2", "e_off", 0.0); + } else { + set_state(PART:"icon_bg_2", "off", 0.0); + } + } + } + } + } + } +} // end of collection diff --git a/home/res/edje/rectangle/popup.edc b/home/res/edje/rectangle/popup.edc new file mode 100644 index 0000000..524059c --- /dev/null +++ b/home/res/edje/rectangle/popup.edc @@ -0,0 +1,139 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + + + +collections { + group { + name: "popup_checkview_internal"; + parts { + part { + name: "label"; + scale: 1; + type: SWALLOW; + description { + state: "default" 0.0; + fixed: 1 0; + rel2 { + relative: 1.0 0.0; + to_y: "end_field"; + } + } + } + part { + name: "bottom_pad"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + align: 0.0 1.0; + min: 0 4; + fixed: 0 1; + rel1.relative: 0.0 1.0; + } + } + part { + name: "pad_b"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + align: 0.0 1.0; + min: 0 90; + fixed: 0 1; + rel1 { + relative: 0.0 0.0; + to: "bottom_pad"; + } + rel2 { + relative: 1.0 0.0; + to: "bottom_pad"; + } + } + } + part { + name: "left_pad"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min: 16 0; + rel1 { + relative: 0.0 0.0; + } + rel2 { + relative: 0.0 1.0; + } + } + } + part { + name: "right_pad"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min: 16 0; + rel1 { + relative: 1.0 0.0; + } + rel2 { + relative: 1.0 1.0; + } + } + } + part { + name: "end_field"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + align: 0.0 1.0; + min: 0 90; + fixed: 0 1; + rel1 { + relative: 1.0 1.0; + to_x: "left_pad"; + to_y: "pad_b"; + } + rel2 { + relative: 0.0 1.0; + to_x: "right_pad"; + to_y: "pad_b"; + } + } + } + part { + name: "elm.swallow.end"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + align: 0.0 0.5; + rel1.to: "end_field"; + rel1.offset: 1 0; + rel2.to: "end_field"; + } + } + } + } //end group +} //end collections diff --git a/home/res/edje/rectangle/preview.edc b/home/res/edje/rectangle/preview.edc new file mode 100755 index 0000000..c08dc14 --- /dev/null +++ b/home/res/edje/rectangle/preview.edc @@ -0,0 +1,547 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +styles { + style { + name: "preview,title"; + base: "font=Tizen text_class=AT0311 style=shadow shadow_color=#0000004C font_size=40 align=center color=#FFFFFF color_class=AT0311 wrap=word"; # ellipsis=1.0 + tag: "br" "\n"; + tag: "hilight" "+ font=Tizen:style=Bold"; + tag: "b" "+ font=Tizen:style=Bold"; + tag: "tag" "\t"; + } +} +styles { + style { + name: "preview,title,dim"; + base: "font=Tizen text_class=AT0312 style=shadow shadow_color=#0000004C font_size=40 align=center color=#FFFFFF color_class=AT0312 wrap=word"; # ellipsis=1.0 + tag: "br" "\n"; + tag: "hilight" "+ font=Tizen:style=Bold"; + tag: "b" "+ font=Tizen:style=Bold"; + tag: "tag" "\t"; + } +} + +styles { + style { + name: "preview,title,press"; + base: "font=Tizen text_class=AT0312 style=shadow shadow_color=#0000004C font_size=40 align=center color=#FFFFFF color_class=AT0312 wrap=word"; # ellipsis=1.0 + tag: "br" "\n"; + tag: "hilight" "+ font=Tizen:style=Bold"; + tag: "b" "+ font=Tizen:style=Bold"; + tag: "tag" "\t"; + } +} + +images { + image: "b_widget_favorite_bg.png" COMP; + image: "b_home_screen_widget_line.#.png" COMP; + image: "b_home_screen_widget_line_ef.png" COMP; + image: "b_home_screen_edit_cover.png" COMP; + image: "b_home_screen_edit_cover_ef.png" COMP; + image: "b_home_screen_widget_check.png" COMP; + image: "b_home_screen_widget_check_ef.png" COMP; +} + +#define HEIGHT (ADD_VIEWER_TEXT_HEIGHT + ADD_VIEWER_PAD + ADD_VIEWER_PREVIEW_HEIGHT) + +collections { + group { + name: "bg"; + parts { + part { + name: "bg_bottom"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color: 0 0 0 0; + } + } + part { + name: "bg"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color_class: "AO041"; + visible: 0; + } + } + part { + name: "empty"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + text { + text_class: "AT0132"; + align: 0.5 0.5; + ellipsis: 0.0; + min: 1 1; + } + visible: 1; + } + } + } + } + + /* Icon group */ + group { + name: "default,1x1"; + } + group { + name: "default,2x2"; + } + + /* Preview group */ + group { + name: "preview,1x1"; + } + group { + name: "preview,2x2"; + script { + public g_focus = 0; + } + parts { + part { + name: "entire,bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + min: ADD_VIEWER_PREVIEW_WIDTH HEIGHT; + color: 0 0 0 0; + } + } + + part { + name: "title"; + type: TEXTBLOCK; + scale: 1; + multiline: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 ADD_VIEWER_TEXT_HEIGHT/HEIGHT; } + text { + style: "preview,title"; + align: 0.5 1.0; + min: 0 1; + } + min: 0 ADD_VIEWER_TEXT_HEIGHT; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + text { style: "preview,title,dim"; } + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + text { style: "preview,title,press"; } + } + } + + part { + name: "pad"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 ADD_VIEWER_TEXT_HEIGHT/HEIGHT; } + rel2 { relative: 1.0 (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD)/HEIGHT; } + min: 0 ADD_VIEWER_PAD; + } + } + + part { + name: "bg"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "preview"; } + rel2 { relative: 1.0 1.0; to, "preview"; } + } + } + + part { + name: "gradient,bg"; + type: IMAGE; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to, "preview"; } + rel2 { relative: 1.0 1.0; to, "preview"; } + image { normal: "b_widget_favorite_bg.png"; } + color_class: "AO031"; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + part { + name: "preview"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD)/HEIGHT; } + rel2 { relative: 1.0 1.0; } + min: ADD_VIEWER_PREVIEW_WIDTH ADD_VIEWER_PREVIEW_HEIGHT; // 216, 288 + } + description { + state: "pressed" 0.0; + rel1 { relative: 5/ADD_VIEWER_PREVIEW_WIDTH (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD+5)/HEIGHT; } + rel2 { relative: (ADD_VIEWER_PREVIEW_WIDTH-5)/ADD_VIEWER_PREVIEW_WIDTH (HEIGHT-5)/HEIGHT; } + min: (ADD_VIEWER_PREVIEW_WIDTH-10) (ADD_VIEWER_PREVIEW_HEIGHT-10); + } + } + part { + name: "check_ef"; + type: IMAGE; + description { + state: "default" 0.0; + rel1 { relative: (ADD_VIEWER_PREVIEW_WIDTH-54)/ADD_VIEWER_PREVIEW_WIDTH (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD)/HEIGHT; } + rel2 { relative: 1.0 (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD+54)/HEIGHT; } + image { + normal: "b_home_screen_widget_check_ef.png"; + } + color_class: "AO063"; + min: 54 54; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "check"; + type: IMAGE; + description { + state: "default" 0.0; + rel1 { relative: (ADD_VIEWER_PREVIEW_WIDTH-54)/ADD_VIEWER_PREVIEW_WIDTH (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD)/HEIGHT; } + rel2 { relative: 1.0 (ADD_VIEWER_TEXT_HEIGHT+ADD_VIEWER_PAD+54)/HEIGHT; } + image { + normal: "b_home_screen_widget_check.png"; + } + color_class: "AO042"; + min: 54 54; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "cover_ef"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.to: "preview"; + rel2.to: "preview"; + image { + normal: "b_home_screen_edit_cover_ef.png"; + } + color_class: "AO065"; + fixed: 1 1; + min: ITEM_EDIT_EF_WIDTH ITEM_EDIT_EF_HEIGHT; + align: 0.5 0.5; + visible: 0; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "cover"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.to: "preview"; + rel2.to: "preview"; + image { + normal: "b_home_screen_edit_cover.png"; + } + color_class: "AO0482"; + min: ADD_VIEWER_PREVIEW_WIDTH ADD_VIEWER_PREVIEW_HEIGHT; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO0661"; + } + } + part { + name: "line_ef"; + type: IMAGE; + scale: 1; + mouse_events: 1; + clip_to: "line_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "preview"; } + rel2 { relative: 0.5 0.5; to: "preview"; } + image { + normal: "b_home_screen_widget_line_ef.png"; + } + color_class: "AO063"; + fixed: 1 1; + min: ITEM_EDIT_EF_WIDTH ITEM_EDIT_EF_HEIGHT; + align: 0.5 0.5; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO0663"; + } + } + part { + name: "line_clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1.to: "line_ef"; + rel2.to: "line_ef"; + color: 255 255 255 255; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + } + } + part { + name: "line"; + type: IMAGE; + scale: 1; + mouse_events: 1; + clip_to: "line_clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "preview"; } + rel2 { relative: 0.5 0.5; to: "preview"; } + image { + normal: "b_home_screen_widget_line.#.png"; + } + color_class: "AO043"; + min: ADD_VIEWER_PREVIEW_LINE_WIDTH ADD_VIEWER_PREVIEW_LINE_HEIGHT; + align: 0.5 0.5; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "AO0662"; + } + } + part { + name: "preview,dbg"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { to, "preview"; } + rel2 { to, "preview"; } + color: 0 0 0 0; + } + } + } // parts + + programs { + program { + name: "pressed"; + source: "preview,dbg"; + signal: "mouse,down,1"; + script { + if (get_int(g_focus) != 0) { + set_state(PART:"preview", "pressed", 0.0); + set_state(PART:"title", "pressed", 0.0); + set_state(PART:"cover", "pressed", 0.0); + set_state(PART:"line", "pressed", 0.0); + set_state(PART:"line_ef", "pressed", 0.0); + set_state(PART:"line_clipper", "default", 0.0); + set_state(PART:"cover_ef", "default", 0.0); + } else { + set_state(PART:"preview", "pressed", 0.0); + set_state(PART:"cover", "pressed", 0.0); + set_state(PART:"title", "hide", 0.0); + set_state(PART:"line", "pressed", 0.0); + set_state(PART:"line_ef", "pressed", 0.0); + set_state(PART:"line_clipper", "hide", 0.0); + set_state(PART:"cover_ef", "hide", 0.0); + } + } + } + program { + name: "released"; + source: "preview,dbg"; + signal: "mouse,up,1"; + script { + if (get_int(g_focus) != 0) { + set_state(PART:"preview", "default", 0.0); + set_state(PART:"title", "default", 0.0); + set_state(PART:"cover", "default", 0.0); + set_state(PART:"line", "default", 0.0); + set_state(PART:"line_ef", "default", 0.0); + set_state(PART:"line_clipper", "default", 0.0); + set_state(PART:"cover_ef", "default", 0.0); + } else { + set_state(PART:"preview", "default", 0.0); + set_state(PART:"cover", "default", 0.0); + set_state(PART:"line", "default", 0.0); + set_state(PART:"line_ef", "default", 0.0); + set_state(PART:"title", "hide", 0.0); + set_state(PART:"line_clipper", "hide", 0.0); + set_state(PART:"cover_ef", "hide", 0.0); + } + } + } + program { + name: "released,force"; + source: "preview,dbg"; + signal: "reset"; + action: STATE_SET "default" 0.0; + target: "preview"; + } + program { + name: "clicked"; + source: "preview,dbg"; + signal: "mouse,clicked,1"; + action: SIGNAL_EMIT "clicked" "preview"; + } + + program { + name: "enable,bg"; + source: "gradient,bg"; + signal: "enable"; + action: STATE_SET "show" 0.0; + target: "gradient,bg"; + } + program { + name: "disable,bg"; + source: "gradient,bg"; + signal: "disable"; + action: STATE_SET "default" 0.0; + target: "gradient,bg"; + } + program { + name: "show,line"; + signal: "show"; + source: "line"; + action: STATE_SET "default" 0.0; + target: "title"; + after: "show,after"; + } + program { + name: "show,after"; + script { + set_int(g_focus, 1); + } + after: "show,after,2"; + } + program { + name: "show,after,2"; + action: STATE_SET "default" 0.0; + target: "line_clipper"; + target: "cover_ef"; + transition: LINEAR 0.5; + } + program { + name: "hide,line"; + signal: "hide"; + source: "line"; + action: STATE_SET "hide" 0.0; + target: "title"; + after: "hide,after"; + } + program { + name: "hide,after"; + script { + set_int(g_focus, 0); + } + after: "hide,after,2"; + } + program { + name: "hide,after,2"; + action: STATE_SET "hide" 0.0; + target: "line_clipper"; + target: "cover_ef"; + transition: LINEAR 0.5; + } + program { + name: "hide,line,im"; + signal: "hide,im"; + source: "line"; + script { + set_int(g_focus, 0); + } + after: "hide,im,after"; + } + program { + name: "hide,im,after"; + action: STATE_SET "hide" 0.0; + target: "line_clipper"; + target: "title"; + target: "cover_ef"; + } + program { + name: "duplicated,mark,show"; + signal: "show"; + source: "duplicated"; + action: STATE_SET "show" 0.0; + target: "check_ef"; + target: "check"; + } + program { + name: "duplicated,mark,hide"; + signal: "hide"; + source: "duplicated"; + action: STATE_SET "default" 0.0; + target: "check_ef"; + target: "check"; + } + } // programs + } // group +} // collections + +/* End of a file */ diff --git a/home/res/edje/rectangle/tutorial.edc b/home/res/edje/rectangle/tutorial.edc new file mode 100755 index 0000000..787d50e --- /dev/null +++ b/home/res/edje/rectangle/tutorial.edc @@ -0,0 +1,1183 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.edc" +#include "../color_classes.edc" + +styles { + style { + name: "main_text_style"; + base: "font=TIZEN:style=REGULAR text_class=tizen font_size="40" align=center valign=top color=#FFFFFF ellipsis=1 wrap=mixed"; + tag: "
" "\n"; + } + style { + name: "sub_text_style"; + base: "font=TIZEN:style=REGULAR text_class=tizen font_size="32" color=#FFFFFF ellipsis=1 wrap=mixed"; + tag: "
" "\n"; + } + style { + name: "main_text_style,medium"; + base: "font=TIZEN:style=REGULAR text_class=tizen font_size="38" align=center valign=top color=#FFFFFF ellipsis=1 wrap=mixed"; + tag: "
" "\n"; + } + style { + name: "sub_text_style,medium"; + base: "font=TIZEN:style=REGULAR text_class=tizen font_size="30" color=#FFFFFF ellipsis=1 wrap=mixed"; + tag: "
" "\n"; + } + style { + name: "main_text_style,small"; + base: "font=TIZEN:style=REGULAR text_class=tizen font_size="34" align=center valign=top color=#FFFFFF ellipsis=1 wrap=mixed"; + tag: "
" "\n"; + } + style { + name: "sub_text_style,small"; + base: "font=TIZEN:style=REGULAR text_class=tizen font_size="24" color=#FFFFFF ellipsis=1 wrap=mixed"; + tag: "
" "\n"; + } + style { + name: "button_text_style"; + base: "font=TIZEN:style=BOLD text_class=tizen font_size="28" align=center color=#FFFFFF ellipsis=1.0 wrap=mixed"; + tag: "
" "\n"; + } +} + +images { + image: "overlay00_bg_cover.png" COMP; + image: "overlay01_bg_cover.png" COMP; + image: "overlay05_bg_cover.png" COMP; + image: "overlay06_bg_cover.png" COMP; + image: "overlay08_bg_cover.png" COMP; + image: "overlay_swipe_right.png" COMP; + image: "overlay_swipe_left.png" COMP; + image: "overlay_swipe_up.png" COMP; + image: "overlay_swipe_down.png" COMP; + image: "overlay_start_button.png" COMP; + image: "overlay_start_button_press.png" COMP; + image: "overlay_cue.png" COMP; + image: "overlay_close.png" COMP; + image: "overlay_button.#.png" COMP; + image: "overlay_button_press.#.png" COMP; + image: "overlay000_image.png" COMP; +} + +collections { + group { + name: "tutorial"; + parts { + part { + name: "bg_area"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + visible: 0; + } + } + part { + name: "page0"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg_area"; } + rel2 { relative: 1.0 1.0; to: "bg_area"; } + image { + normal: "overlay00_bg_cover.png"; + } + color: 255 255 255 0; + visible: 1; + } + description { + state: "in" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "page1"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg_area"; } + rel2 { relative: 1.0 1.0; to: "bg_area"; } + image { + normal: "overlay01_bg_cover.png"; + } + color: 255 255 255 0; + visible: 1; + } + description { + state: "in" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "page2"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg_area"; } + rel2 { relative: 1.0 1.0; to: "bg_area"; } + image { + normal: "overlay01_bg_cover.png"; + } + color: 255 255 255 0; + visible: 1; + } + description { + state: "in" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "page3"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg_area"; } + rel2 { relative: 1.0 1.0; to: "bg_area"; } + image { + normal: "overlay01_bg_cover.png"; + } + color: 255 255 255 0; + visible: 1; + } + description { + state: "in" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "page4"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg_area"; } + rel2 { relative: 1.0 1.0; to: "bg_area"; } + image { + normal: "overlay01_bg_cover.png"; + } + color: 255 255 255 0; + visible: 1; + } + description { + state: "in" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "page5"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg_area"; } + rel2 { relative: 1.0 1.0; to: "bg_area"; } + image { + normal: "overlay05_bg_cover.png"; + } + color: 255 255 255 0; + visible: 1; + } + description { + state: "in" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "page6"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg_area"; } + rel2 { relative: 1.0 1.0; to: "bg_area"; } + image { + normal: "overlay06_bg_cover.png"; + } + color: 255 255 255 0; + visible: 1; + } + description { + state: "in" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "page7"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg_area"; } + rel2 { relative: 1.0 1.0; to: "bg_area"; } + image { + normal: "overlay06_bg_cover.png"; + } + color: 255 255 255 0; + visible: 1; + } + description { + state: "in" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "page8"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg_area"; } + rel2 { relative: 1.0 1.0; to: "bg_area"; } + image { + normal: "overlay08_bg_cover.png"; + } + color: 255 255 255 0; + visible: 1; + } + description { + state: "in" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "structure"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 IMAGE_Y/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 0.5 IMAGE_Y/BASE_HEIGHT; to: "bg_area"; } + image { + normal: "overlay000_image.png"; + } + min: 360 260; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "show" 0.0; + color: 255 255 255 0; + } + } + part { + name: "text_area"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 16/BASE_WIDTH 269/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 344/BASE_WIDTH 386/BASE_HEIGHT; to: "bg_area"; } + } + description { + state: "structure" 0.0; + inherit: "default" 0.0; + rel1 { relative: 16/BASE_WIDTH 242/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 344/BASE_WIDTH 359/BASE_HEIGHT; to: "bg_area"; } + } + description { + state: "down" 0.0; + inherit: "default" 0.0; + rel1 { relative: 16/BASE_WIDTH 209/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 344/BASE_WIDTH 365/BASE_HEIGHT; to: "bg_area"; } + } + description { // use page 8 + state: "down,indi" 0.0; + inherit: "default" 0.0; + rel1 { relative: 16/BASE_WIDTH 331/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 344/BASE_WIDTH 448/BASE_HEIGHT; to: "bg_area"; } + } + description { + state: "up" 0.0; + inherit: "default" 0.0; + rel1 { relative: 16/BASE_WIDTH 112/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 344/BASE_WIDTH 307/BASE_HEIGHT; to: "bg_area"; } + } + description { + state: "center" 0.0; + inherit: "default" 0.0; + rel1 { relative: 16/BASE_WIDTH 77/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 344/BASE_WIDTH 383/BASE_HEIGHT; to: "bg_area"; } + } + description { + state: "center,done" 0.0; + inherit: "center" 0.0; + rel1 { relative: 16/BASE_WIDTH 112/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 344/BASE_WIDTH 316/BASE_HEIGHT; to: "bg_area"; } + } + } + part { + name: "text,clipper"; + type: RECT; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg_area"; } + rel2 { relative: 1.0 1.0; to: "bg_area"; } + color: 255 255 255 255; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + } + } + part { + name: "text"; + type: TEXTBLOCK; + mouse_events: 1; + repeat_events: 1; + clip_to: "text,clipper"; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "text_area"; } + rel2 { relative: 1.0 1.0; to: "text_area"; } + align: 0.5 0.5; + text { + style: "sub_text_style"; + align: 0.5 0.5; + min: 0 1; + } + visible: 1; + } + description { + state: "sub_up" 0.0; + inherit: "default" 0.0; + text { + style: "sub_text_style"; + align: 0.5 0.1; + min: 0 1; + } + } + description { + state: "center" 0.0; + inherit: "default" 0.0; + text { + style: "main_text_style"; + align: 0.5 0.2; + min: 0 1; + } + } + description { + state: "sub_medium" 0.0; + inherit: "default" 0.0; + text { + style: "sub_text_style,medium"; + align: 0.5 0.5; + min: 0 1; + } + } + description { + state: "center_medium" 0.0; + inherit: "default" 0.0; + text { + style: "main_text_style,medium"; + align: 0.5 0.2; + min: 0 1; + } + } + description { + state: "sub_small" 0.0; + inherit: "default" 0.0; + text { + style: "sub_text_style,small"; + align: 0.5 0.5; + min: 0 1; + } + } + description { + state: "center_small" 0.0; + inherit: "default" 0.0; + text { + style: "main_text_style,small"; + align: 0.5 0.2; + min: 0 1; + } + } + } + part { + name: "focus,text"; + type: SWALLOW; + scale : 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "text"; } + rel2 { relative: 1.0 1.0; to: "text"; } + color: 0 0 0 0; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "swipe"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; //right + rel1 { relative: 100/BASE_WIDTH 419/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 260/BASE_WIDTH 461/BASE_HEIGHT; to: "bg_area"; } + image { + normal: "overlay_swipe_right.png"; + } + align: 0.5 0.5; + visible: 1; + } + description { + state: "left" 0.0; + inherit: "default" 0.0; + rel1 { relative: 100/BASE_WIDTH 419/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 260/BASE_WIDTH 461/BASE_HEIGHT; to: "bg_area"; } + image { + normal: "overlay_swipe_left.png"; + } + } + description { + state: "down" 0.0; + inherit: "default" 0.0; + rel1 { relative: 159/BASE_WIDTH 384/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 201/BASE_WIDTH 464/BASE_HEIGHT; to: "bg_area"; } + image { + normal: "overlay_swipe_up.png"; + } + } + description { // use page 8 + state: "down,indi" 0.0; + inherit: "down" 0.0; + rel1 { relative: 159/BASE_WIDTH 241/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 201/BASE_WIDTH 321/BASE_HEIGHT; to: "bg_area"; } + } + description { + state: "up" 0.0; + inherit: "default" 0.0; + rel1 { relative: 159/BASE_WIDTH 16/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 201/BASE_WIDTH 96/BASE_HEIGHT; to: "bg_area"; } + image { + normal: "overlay_swipe_down.png"; + } + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "swipe_cue"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; // hide + rel1 { relative: 159/BASE_WIDTH -24/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 201/BASE_WIDTH 18/BASE_HEIGHT; to: "bg_area"; } + image { + normal: "overlay_cue.png"; + } + visible: 0; + } + description { + state: "down" 0.0; + inherit: "default" 0.0; + rel1 { relative: 148/BASE_WIDTH 453/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 213/BASE_WIDTH 518/BASE_HEIGHT; to: "bg_area"; } + visible: 1; + } + description { + state: "up" 0.0; + inherit: "default" 0.0; + rel1 { relative: 148/BASE_WIDTH -38/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 213/BASE_WIDTH 27/BASE_HEIGHT; to: "bg_area"; } + visible: 1; + } + } + part { + name: "close_button"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: CLOSE_BUTTON_X/BASE_WIDTH CLOSE_BUTTON_Y/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: CLOSE_BUTTON_X/BASE_WIDTH CLOSE_BUTTON_Y/BASE_HEIGHT; to: "bg_area"; } + min: 66 66; + fixed: 1 1; + align: 0.5 0.5; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "close_button,line"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "close_button"; } + rel2 { relative: 0.5 0.5; to: "close_button"; } + image { + normal: "overlay_close.png"; + } + min: 66 66; + fixed: 1 1; + align: 0.5 0.5; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "button_bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.5 BUTTON_LOCATION/BASE_HEIGHT; to: "bg_area"; } + rel2 { relative: 0.5 BUTTON_LOCATION/BASE_HEIGHT; to: "bg_area"; } + } + } + part { + name: "button"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; // hide + rel1 { relative: 0.0 0.0; to: "button_text"; offset: -16 0; } + rel2 { relative: 1.0 1.0; to: "button_text"; offset: 16 0; } + min: 174 71; + max: 334 71; + fixed: 1 1; + align: 0.5 0.5; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "button_line"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; // hide + rel1 { relative: 0.0 0.0; to: "button_text"; offset: -16 0; } + rel2 { relative: 1.0 1.0; to: "button_text"; offset: 16 0; } + image { + normal: "overlay_button.#.png"; + } + min: 174 71; + max: 334 71; + fixed: 1 1; + align: 0.5 0.5; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "press" 0.0; + inherit: "default" 0.0; + image { + normal: "overlay_button_press.#.png"; + } + visible: 1; + } + } + part { + name: "button_text"; + type: TEXTBLOCK; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description { // hide + state: "default" 0.0; + rel1 { relative: 0.5 0.5; to: "button_bg"; } + rel2 { relative: 0.5 0.5; to: "button_bg"; } + align: 0.5 0.5; + text { + style: "button_text_style"; + align: 0.5 0.5; + min: 0 0; + } + fixed: 1 1; + visible: 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "focus,tutorial"; + type: SWALLOW; + scale : 1; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; to: "bg_area"; } + rel2 { relative: 1.0 1.0; to: "bg_area"; } + color: 0 0 0 0; + visible: 1; + } + } + }// end parts + + programs { + program { // start + signal: "start"; + source: "start"; + action: STATE_SET "center" 0.0; + target: "text_area"; + after: "bg,show"; + } + program { + name: "bg,show"; + action: STATE_SET "in" 0.0; + target: "page0"; + after: "init,show"; + } + program { + name: "init,show"; + action: STATE_SET "default" 0.0; + target: "text,clipper"; + target: "focus,text"; + after: "swipe,hide"; + } + program { + name: "swipe,hide"; + action: STATE_SET "hide" 0.0; + target: "swipe"; + target: "swipe_cue"; + after: "button,show"; + } + program { + name: "button,show"; + action: STATE_SET "show" 0.0; + target: "button"; + target: "button_line"; + target: "button_text"; + target: "close_button"; + target: "close_button,line"; + } + program { // start, pressed + signal: "show"; + source: "start,pressed"; + action: STATE_SET "press" 0.0; + target: "button_line"; + after: "text,hide"; + } + program { + name: "text,hide"; + action: STATE_SET "hide" 0.0; + target: "text,clipper"; + transition: LINEAR 0.5; + after: "button,hide"; + } + program { + name: "button,hide"; + action: STATE_SET "default" 0.0; + target: "button_line"; + target: "button_text"; + target: "close_button"; + target: "close_button,line"; + after: "tutorial,start"; + } + program { + name: "tutorial,start"; + action: SIGNAL_EMIT "start" "button"; + } + program { // structure page + signal: "show"; + source: "structure_page"; + action: STATE_SET "default" 0.0; + target: "text,clipper"; + after: "image,show"; + } + program { + name: "image,show"; + action: STATE_SET "show" 0.0; + target: "button_line"; + target: "button_text"; + target: "structure"; + after: "structure_page,text"; + } + program { + name: "structure_page,text"; + action: STATE_SET "structure" 0.0; + target: "text_area"; + } + program { // start 2, pressed + signal: "show"; + source: "start2,pressed"; + action: STATE_SET "press" 0.0; + target: "button_line"; + after: "text2,hide"; + } + program { + name: "text2,hide"; + action: STATE_SET "hide" 0.0; + target: "text,clipper"; + target: "structure"; + transition: LINEAR 0.5; + after: "button2,hide"; + } + program { + name: "button2,hide"; + action: STATE_SET "default" 0.0; + target: "structure"; + target: "button_line"; + target: "button_text"; + after: "tutorial,start2"; + } + program { + name: "tutorial,start2"; + action: SIGNAL_EMIT "start2" "button"; + } + program { // structure page out + signal: "hide"; + source: "page0"; + action: STATE_SET "default" 0.0; + target: "page0"; + transition: LINEAR 0.3; + } + program { // page 1 + signal: "show"; + source: "page1"; + action: STATE_SET "default" 0.0; + target: "page1"; + target: "text_area"; + target: "text,clipper"; + target: "swipe"; + target: "swipe_cue"; + after: "page1,in"; + } + program { + name: "page1,in"; + action: STATE_SET "in" 0.0; + target: "page1"; + transition: LINEAR 0.3; + } + program { // page 1 out + signal: "hide"; + source: "page1"; + action: STATE_SET "default" 0.0; + target: "page1"; + transition: LINEAR 0.3; + } + program { // page 2 + signal: "show"; + source: "page2"; + action: STATE_SET "default" 0.0; + target: "page2"; + after: "page2,in"; + } + program { + name: "page2,in"; + action: STATE_SET "in" 0.0; + target: "page2"; + transition: LINEAR 0.3; + after: "swipe,left"; + } + program { + name: "swipe,left"; + action: STATE_SET "left" 0.0; + target: "swipe"; + after: "text,show"; + } + program { + name: "text,show"; + action: STATE_SET "default" 0.0; + target: "text,clipper"; + } + program { // page 2 out + signal: "hide"; + source: "page2"; + action: STATE_SET "default" 0.0; + target: "page2"; + transition: LINEAR 0.3; + } + program { // page 3 + signal: "show"; + source: "page3"; + action: STATE_SET "default" 0.0; + target: "page3"; + after: "page3,in"; + } + program { + name: "page3,in"; + action: STATE_SET "in" 0.0; + target: "page3"; + transition: LINEAR 0.3; + after: "text,show"; + } + program { // page 3 out + signal: "hide"; + source: "page3"; + action: STATE_SET "default" 0.0; + target: "page3"; + transition: LINEAR 0.3; + } + program { // page 4 + signal: "show"; + source: "page4"; + action: STATE_SET "default" 0.0; + target: "page4"; + after: "page4,in"; + } + program { + name: "page4,in"; + action: STATE_SET "in" 0.0; + target: "page4"; + transition: LINEAR 0.3; + after: "swipe,right"; + } + program { + name: "swipe,right"; + action: STATE_SET "default" 0.0; + target: "swipe"; + after: "text,show"; + } + program { // page 4 out + signal: "hide"; + source: "page4"; + action: STATE_SET "hide" 0.0; + target: "text,clipper"; + after: "page4,out"; + } + program { + name: "page4,out"; + action: STATE_SET "default" 0.0; + target: "page4"; + transition: LINEAR 0.3; + } + program { // page 5 + signal: "show"; + source: "page5"; + action: STATE_SET "default" 0.0; + target: "page5"; + after: "page5,in"; + } + program { + name: "page5,in"; + action: STATE_SET "in" 0.0; + target: "page5"; + transition: LINEAR 0.3; + after: "down"; + } + program { + name: "down"; + action: STATE_SET "down" 0.0; + target: "text_area"; + target: "swipe"; + target: "swipe_cue"; + after: "text,show"; + } + program { // page 5 out + signal: "hide"; + source: "page5"; + action: STATE_SET "hide" 0.0; + target: "text,clipper"; + after: "page5,out"; + } + program { + name: "page5,out"; + action: STATE_SET "default" 0.0; + target: "page5"; + transition: LINEAR 0.3; + } + program { // page 6 + signal: "show"; + source: "page6"; + action: STATE_SET "default" 0.0; + target: "page6"; + after: "page6,in"; + } + program { + name: "page6,in"; + action: STATE_SET "in" 0.0; + target: "page6"; + transition: LINEAR 0.3; + after: "up"; + } + program { + name: "up"; + action: STATE_SET "up" 0.0; + target: "text_area"; + target: "swipe"; + target: "swipe_cue"; + after: "text,show"; + } + program { // page 6 out + signal: "hide"; + source: "page6"; + action: STATE_SET "default" 0.0; + target: "page6"; + transition: LINEAR 0.4; + } + program { // page 7 + signal: "show"; + source: "page7"; + action: STATE_SET "default" 0.0; + target: "page7"; + after: "page7,in"; + } + program { + name: "page7,in"; + action: STATE_SET "in" 0.0; + target: "page7"; + transition: LINEAR 0.3; + after: "text,show"; + } + program { // page 7 out + signal: "hide"; + source: "page7"; + action: STATE_SET "hide" 0.0; + target: "text,clipper"; + after: "page7,out"; + } + program { + name: "page7,out"; + action: STATE_SET "default" 0.0; + target: "page7"; + transition: LINEAR 0.3; + } + program { // page 8 + signal: "show"; + source: "page8"; + action: STATE_SET "default" 0.0; + target: "page8"; + after: "page8,in"; + } + program { + name: "page8,in"; + action: STATE_SET "in" 0.0; + target: "page8"; + transition: LINEAR 0.3; + after: "indicator,down"; + } + program { + name: "indicator,down"; + action: STATE_SET "down,indi" 0.0; + target: "text_area"; + target: "swipe"; + after: "cue,hide"; + } + program { + name: "cue,hide"; + action: STATE_SET "default" 0.0; + target: "swipe_cue"; + after: "text,show"; + } + program { // page 8 out + signal: "hide"; + source: "page8"; + action: STATE_SET "hide" 0.0; + target: "text,clipper"; + target: "swipe"; + after: "page8,out"; + } + program { + name: "page8,out"; + action: STATE_SET "default" 0.0; + target: "page8"; + transition: LINEAR 0.3; + } + program { // page 9 + signal: "show"; + source: "page9"; + action: STATE_SET "default" 0.0; + target: "page0"; + after: "page9,in"; + } + program { + name: "page9,in"; + action: STATE_SET "in" 0.0; + target: "page0"; + transition: LINEAR 0.3; + after: "swipe,hide2"; + } + program { + name: "swipe,hide2"; + action: STATE_SET "hide" 0.0; + target: "swipe"; + after: "button,show2"; + } + program { + name: "button,show2"; + action: STATE_SET "show" 0.0; + target: "button"; + target: "button_line"; + target: "button_text"; + after: "text,center"; + } + program { + name: "text,center"; + action: STATE_SET "center,done" 0.0; + target: "text_area"; + after: "text,show"; + } + program { // page 9, pressed + signal: "show"; + source: "page9,pressed"; + action: STATE_SET "press" 0.0; + target: "button_line"; + after: "text,hide2"; + } + program { + name: "text,hide2"; + action: STATE_SET "hide" 0.0; + target: "text,clipper"; + transition: LINEAR 0.5; + after: "button,hide2"; + } + program { + name: "button,hide2"; + action: STATE_SET "default" 0.0; + target: "button_line"; + target: "button_text"; + after: "tutorial,done"; + } + program { + name: "tutorial,done"; + action: SIGNAL_EMIT "done" "button"; + } + program { + signal: "standard"; + source: "sub"; + action: STATE_SET "default" 0.0; + target: "text"; + } + program { + signal: "up"; + source: "sub"; + action: STATE_SET "sub_up" 0.0; + target: "text"; + } + program { + signal: "medium"; + source: "sub"; + action: STATE_SET "sub_medium" 0.0; + target: "text"; + } + program { + signal: "small"; + source: "sub"; + action: STATE_SET "sub_small" 0.0; + target: "text"; + } + program { + signal: "standard"; + source: "center"; + action: STATE_SET "center" 0.0; + target: "text"; + } + program { + signal: "medium"; + source: "center"; + action: STATE_SET "center_medium" 0.0; + target: "text"; + } + program { + signal: "small"; + source: "center"; + action: STATE_SET "center_small" 0.0; + target: "text"; + } + program { + signal: "show"; + source: "text"; + action: STATE_SET "default" 0.0; + target: "text,clipper"; + } + program { + signal: "hide"; + source: "text"; + action: STATE_SET "hide" 0.0; + target: "text,clipper"; + } + }// end programs + }// end group +}// end collection diff --git a/home/res/icon/CMakeLists.txt b/home/res/icon/CMakeLists.txt new file mode 100755 index 0000000..ef2cd79 --- /dev/null +++ b/home/res/icon/CMakeLists.txt @@ -0,0 +1,3 @@ +# install icons +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}.png DESTINATION ${ICONDIR}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}.small.png DESTINATION ${ICONDIR}) diff --git a/home/res/icon/org.tizen.w-home.png b/home/res/icon/org.tizen.w-home.png new file mode 100755 index 0000000..ac14444 Binary files /dev/null and b/home/res/icon/org.tizen.w-home.png differ diff --git a/home/res/icon/org.tizen.w-home.small.png b/home/res/icon/org.tizen.w-home.small.png new file mode 100755 index 0000000..453073b Binary files /dev/null and b/home/res/icon/org.tizen.w-home.small.png differ diff --git a/home/res/image/CMakeLists.txt b/home/res/image/CMakeLists.txt new file mode 100644 index 0000000..0bc0cc6 --- /dev/null +++ b/home/res/image/CMakeLists.txt @@ -0,0 +1,6 @@ +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/unknown.png DESTINATION ${IMAGEDIR}) +IF("${CIRCLE}" STREQUAL "circle") +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/widget_circle_bg_stroke.png DESTINATION ${IMAGEDIR}) +ELSE() +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/b_home_screen_widget_line.png DESTINATION ${IMAGEDIR}) +ENDIF() diff --git a/home/res/image/b_home_screen_widget_line.png b/home/res/image/b_home_screen_widget_line.png new file mode 100755 index 0000000..4f4a320 Binary files /dev/null and b/home/res/image/b_home_screen_widget_line.png differ diff --git a/home/res/image/unknown.png b/home/res/image/unknown.png new file mode 100755 index 0000000..535db60 Binary files /dev/null and b/home/res/image/unknown.png differ diff --git a/home/res/image/widget_circle_bg_stroke.png b/home/res/image/widget_circle_bg_stroke.png new file mode 100755 index 0000000..748cd2a Binary files /dev/null and b/home/res/image/widget_circle_bg_stroke.png differ diff --git a/home/res/list/CMakeLists.txt b/home/res/list/CMakeLists.txt new file mode 100755 index 0000000..99a6b87 --- /dev/null +++ b/home/res/list/CMakeLists.txt @@ -0,0 +1,2 @@ +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/tts_white.list DESTINATION ${RESDIR}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/tts_black.list DESTINATION ${RESDIR}) diff --git a/home/res/list/tts_black.list b/home/res/list/tts_black.list new file mode 100644 index 0000000..e4bb9d9 --- /dev/null +++ b/home/res/list/tts_black.list @@ -0,0 +1,4 @@ +org.tizen.w-magazine.dbox.home +org.tizen.w-calendar2.win +org.tizen.shealth.dbox +org.tizen.clocksetting.live diff --git a/home/res/list/tts_white.list b/home/res/list/tts_white.list new file mode 100644 index 0000000..c1b3abf --- /dev/null +++ b/home/res/list/tts_white.list @@ -0,0 +1,3 @@ +org.tizen.w-music-player.livebox +org.tizen.w-contacts2.dbox +org.tizen.weather.widget-today diff --git a/home/res/ordering/CMakeLists.txt b/home/res/ordering/CMakeLists.txt new file mode 100755 index 0000000..fa9753f --- /dev/null +++ b/home/res/ordering/CMakeLists.txt @@ -0,0 +1,15 @@ +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/default_favorite_apps_emergency.xml DESTINATION ${RESDIR}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/default_items.xml DESTINATION ${RESDIR}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/default_items_tts.xml DESTINATION ${RESDIR}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/settings.xml DESTINATION ${RESDIR}) +IF(RUN_ON_DEVICE) + INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/default_favorite_apps.xml DESTINATION ${RESDIR}) + INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/default_favorite_apps_without_hr.xml DESTINATION ${RESDIR}) + INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/default_favorite_apps_without_sleep.xml DESTINATION ${RESDIR}) + INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/default_favorite_apps_without_camera.xml DESTINATION ${RESDIR}) + INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/default_favorite_apps_without_camera_sleep.xml DESTINATION ${RESDIR}) +ELSEIF(RUN_ON_EMULATOR) + INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/default_favorite_apps_emulator.xml DESTINATION ${RESDIR} RENAME default_favorite_apps.xml) +ENDIF() + +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/apps_default_items.xml DESTINATION ${RESDIR}) diff --git a/home/res/ordering/apps_default_items.xml b/home/res/ordering/apps_default_items.xml new file mode 100755 index 0000000..241828c --- /dev/null +++ b/home/res/ordering/apps_default_items.xml @@ -0,0 +1,99 @@ + + + + org.tizen.w-dialer2 + org.tizen.w-dialer2 + 0 + 0 + + + org.tizen.w-contacts2 + org.tizen.w-contacts2 + 0 + 1 + + + org.tizen.message + org.tizen.message + 1 + 0 + + + org.tizen.wemail + org.tizen.wemail + 1 + 1 + + + org.tizen.w-calendar2 + org.tizen.w-calendar2 + 2 + 0 + + + org.tizen.clocksetting + org.tizen.clocksetting + 2 + 1 + + + grk68HBhDL.Navigator + grk68HBhDL.Navigator + 3 + 0 + + + org.tizen.shealth.dashboard + org.tizen.shealth.dashboard + 3 + 1 + + + bNAm8uFvZ6.Running + bNAm8uFvZ6.Running + 4 + 0 + + + org.tizen.w-music-player + org.tizen.w-music-player + 4 + 1 + + + org.tizen.w-magazine + org.tizen.w-magazine + 5 + 0 + + + org.tizen.weather + org.tizen.weather + 5 + 1 + + + org.tizen.svoice + org.tizen.svoice + 6 + 0 + + + org.tizen.alarm + org.tizen.alarm + 6 + 1 + + + org.tizen.w-gallery + org.tizen.w-gallery + 7 + 0 + + + org.tizen.wfmd + org.tizen.wfmd + 7 + 1 + + diff --git a/home/res/ordering/apps_default_items_ATT.xml b/home/res/ordering/apps_default_items_ATT.xml new file mode 100755 index 0000000..5bee97f --- /dev/null +++ b/home/res/ordering/apps_default_items_ATT.xml @@ -0,0 +1,105 @@ + + + + org.tizen.w-dialer2 + org.tizen.w-dialer2 + 0 + 0 + + + org.tizen.w-contacts2 + org.tizen.w-contacts2 + 0 + 1 + + + org.tizen.message + org.tizen.message + 1 + 0 + + + org.tizen.wemail + org.tizen.wemail + 1 + 1 + + + org.tizen.shealth.dashboard + org.tizen.shealth.dashboard + 2 + 0 + + + org.tizen.w-calendar2 + org.tizen.w-calendar2 + 2 + 1 + + + bNAm8uFvZ6.Running + bNAm8uFvZ6.Running + 3 + 0 + + + org.tizen.weather + org.tizen.weather + 3 + 1 + + + org.tizen.w-music-player + org.tizen.w-music-player + 4 + 0 + + + M6escjwPfn.MilkMusic + M6escjwPfn.MilkMusic + 4 + 1 + + + grk68HBhDL.Navigator + grk68HBhDL.Navigator + 5 + 0 + + + org.tizen.w-magazine + org.tizen.w-magazine + 5 + 1 + + + org.tizen.w-gallery + org.tizen.w-gallery + 6 + 0 + + + org.tizen.alarm + org.tizen.alarm + 6 + 1 + + + org.tizen.clocksetting + org.tizen.clocksetting + 7 + 0 + + + org.tizen.wfmd + org.tizen.wfmd + 7 + 1 + + + org.tizen.svoice + org.tizen.svoice + 8 + 0 + + diff --git a/home/res/ordering/default_favorite_apps.xml b/home/res/ordering/default_favorite_apps.xml new file mode 100755 index 0000000..425e7c8 --- /dev/null +++ b/home/res/ordering/default_favorite_apps.xml @@ -0,0 +1,17 @@ + + + + org.tizen.w-media-controller.livebox + org.tizen.w-media-controller.livebox + 0 + 0 + 0 + + + org.tizen.weather.widget + org.tizen.weather.widget + 0 + 1 + 0 + + diff --git a/home/res/ordering/default_favorite_apps_emergency.xml b/home/res/ordering/default_favorite_apps_emergency.xml new file mode 100755 index 0000000..8cffa59 --- /dev/null +++ b/home/res/ordering/default_favorite_apps_emergency.xml @@ -0,0 +1,38 @@ + + + + org.tizen.idle-clock-digital + org.tizen.idle-clock-digital + 0 + 0 + 0 + + + org.tizen.w-dialer2 + org.tizen.w-dialer2 + 1 + 0 + 0 + + + org.tizen.message + org.tizen.message + 1 + 1 + 0 + + + org.tizen.w-contacts2 + org.tizen.w-contacts2 + 1 + 0 + 1 + + + org.tizen.wnotification2 + org.tizen.wnotification2 + 1 + 1 + 1 + + diff --git a/home/res/ordering/default_favorite_apps_emulator.xml b/home/res/ordering/default_favorite_apps_emulator.xml new file mode 100755 index 0000000..5f077d7 --- /dev/null +++ b/home/res/ordering/default_favorite_apps_emulator.xml @@ -0,0 +1,24 @@ + + + + org.tizen.idle-clock-digital + org.tizen.idle-clock-digital + 0 + 0 + 0 + + + org.tizen.clocksetting + org.tizen.clocksetting + 1 + 0 + 0 + + + org.tizen.w-launcher-app + org.tizen.w-launcher-app + 1 + 1 + 0 + + diff --git a/home/res/ordering/default_favorite_apps_without_camera.xml b/home/res/ordering/default_favorite_apps_without_camera.xml new file mode 100755 index 0000000..5d594b8 --- /dev/null +++ b/home/res/ordering/default_favorite_apps_without_camera.xml @@ -0,0 +1,108 @@ + + + + org.tizen.svoice-w + org.tizen.svoice-w + 0 + 0 + 0 + + + org.tizen.w-music-player + org.tizen.w-music-player + 0 + 1 + 0 + + + org.tizen.w-voicerecorder + org.tizen.w-voicerecorder + 0 + 0 + 1 + + + org.tizen.shealth + org.tizen.shealth.pedometer + 0 + 1 + 1 + + + org.tizen.shealth + org.tizen.shealth.exercise + 0 + 0 + 2 + + + org.tizen.shealth + org.tizen.shealth.heartrate + 0 + 1 + 2 + + + org.tizen.shealth + org.tizen.shealth.sleep + 1 + 0 + 0 + + + org.tizen.wnotification2 + org.tizen.wnotification2 + 1 + 1 + 0 + + + org.tizen.w-logs2 + org.tizen.w-logs2 + 1 + 0 + 1 + + + org.tizen.w-dialer2 + org.tizen.w-dialer2 + 1 + 1 + 1 + + + org.tizen.w-contacts2 + org.tizen.w-contacts2 + 1 + 0 + 2 + + + org.tizen.w-launcher-app + org.tizen.w-launcher-app + 1 + 1 + 2 + + + org.tizen.w-idle-clock-shortcut2 + org.tizen.w-idle-clock-shortcut2 + 2 + 0 + 0 + + + org.tizen.clocksetting + org.tizen.clocksetting + 3 + 0 + 0 + + + org.tizen.windicator + org.tizen.windicator + 3 + 1 + 0 + + diff --git a/home/res/ordering/default_favorite_apps_without_camera_sleep.xml b/home/res/ordering/default_favorite_apps_without_camera_sleep.xml new file mode 100755 index 0000000..9113971 --- /dev/null +++ b/home/res/ordering/default_favorite_apps_without_camera_sleep.xml @@ -0,0 +1,115 @@ + + + + S8UVkC4ryF + S8UVkC4ryF.WatchONWeb + 0 + 0 + 0 + + + org.tizen.svoice-w + org.tizen.svoice-w + 0 + 1 + 0 + + + org.tizen.wfmd + org.tizen.wfmd + 0 + 0 + 1 + + + org.tizen.w-voicerecorder + org.tizen.w-voicerecorder + 0 + 1 + 1 + + + org.tizen.shealth + org.tizen.shealth.pedometer + 1 + 0 + 0 + + + org.tizen.shealth + org.tizen.shealth.exercise + 1 + 1 + 0 + + + org.tizen.shealth + org.tizen.shealth.heartrate + 1 + 0 + 1 + + + org.tizen.windicator + org.tizen.windicator + 1 + 1 + 1 + + + org.tizen.w-idle-clock-shortcut2 + org.tizen.w-idle-clock-shortcut2 + 2 + 0 + 0 + + + org.tizen.wnotification2 + org.tizen.wnotification2 + 3 + 0 + 0 + + + org.tizen.w-logs2 + org.tizen.w-logs2 + 3 + 1 + 0 + + + org.tizen.w-dialer2 + org.tizen.w-dialer2 + 3 + 0 + 1 + + + org.tizen.w-contacts2 + org.tizen.w-contacts2 + 3 + 1 + 1 + + + org.tizen.w-launcher-app + org.tizen.w-launcher-app + 4 + 0 + 0 + + + org.tizen.clocksetting + org.tizen.clocksetting + 4 + 1 + 0 + + + org.tizen.w-music-player + org.tizen.w-music-player + 4 + 0 + 1 + + diff --git a/home/res/ordering/default_favorite_apps_without_hr.xml b/home/res/ordering/default_favorite_apps_without_hr.xml new file mode 100755 index 0000000..e171c14 --- /dev/null +++ b/home/res/ordering/default_favorite_apps_without_hr.xml @@ -0,0 +1,108 @@ + + + + org.tizen.svoice-w + org.tizen.svoice-w + 0 + 0 + 0 + + + org.tizen.w-music-player + org.tizen.w-music-player + 0 + 1 + 0 + + + org.tizen.w-voicerecorder + org.tizen.w-voicerecorder + 0 + 0 + 1 + + + org.tizen.w-camera-app + org.tizen.w-camera-app + 0 + 1 + 1 + + + org.tizen.shealth + org.tizen.shealth.pedometer + 1 + 0 + 0 + + + org.tizen.shealth + org.tizen.shealth.exercise + 1 + 1 + 0 + + + org.tizen.shealth + org.tizen.shealth.sleep + 1 + 0 + 1 + + + org.tizen.windicator + org.tizen.windicator + 1 + 1 + 1 + + + org.tizen.w-idle-clock-shortcut2 + org.tizen.w-idle-clock-shortcut2 + 2 + 0 + 0 + + + org.tizen.wnotification2 + org.tizen.wnotification2 + 3 + 0 + 0 + + + org.tizen.w-logs2 + org.tizen.w-logs2 + 3 + 1 + 0 + + + org.tizen.w-dialer2 + org.tizen.w-dialer2 + 3 + 0 + 1 + + + org.tizen.w-contacts2 + org.tizen.w-contacts2 + 3 + 1 + 1 + + + org.tizen.w-launcher-app + org.tizen.w-launcher-app + 4 + 0 + 0 + + + org.tizen.clocksetting + org.tizen.clocksetting + 4 + 1 + 0 + + diff --git a/home/res/ordering/default_favorite_apps_without_sleep.xml b/home/res/ordering/default_favorite_apps_without_sleep.xml new file mode 100755 index 0000000..e040dbc --- /dev/null +++ b/home/res/ordering/default_favorite_apps_without_sleep.xml @@ -0,0 +1,122 @@ + + + + S8UVkC4ryF + S8UVkC4ryF.WatchONWeb + 0 + 0 + 0 + + + org.tizen.svoice-w + org.tizen.svoice-w + 0 + 1 + 0 + + + org.tizen.wfmd + org.tizen.wfmd + 0 + 0 + 1 + + + org.tizen.w-voicerecorder + org.tizen.w-voicerecorder + 0 + 1 + 1 + + + org.tizen.shealth + org.tizen.shealth.pedometer + 1 + 0 + 0 + + + org.tizen.shealth + org.tizen.shealth.exercise + 1 + 1 + 0 + + + org.tizen.shealth + org.tizen.shealth.heartrate + 1 + 0 + 1 + + + org.tizen.windicator + org.tizen.windicator + 1 + 1 + 1 + + + org.tizen.w-idle-clock-shortcut2 + org.tizen.w-idle-clock-shortcut2 + 2 + 0 + 0 + + + org.tizen.wnotification2 + org.tizen.wnotification2 + 3 + 0 + 0 + + + org.tizen.w-logs2 + org.tizen.w-logs2 + 3 + 1 + 0 + + + org.tizen.w-dialer2 + org.tizen.w-dialer2 + 3 + 0 + 1 + + + org.tizen.w-contacts2 + org.tizen.w-contacts2 + 3 + 1 + 1 + + + org.tizen.w-launcher-app + org.tizen.w-launcher-app + 4 + 0 + 0 + + + org.tizen.w-camera-app + org.tizen.w-camera-app + 4 + 1 + 0 + + + org.tizen.clocksetting + org.tizen.clocksetting + 4 + 0 + 1 + + + org.tizen.w-music-player + org.tizen.w-music-player + 4 + 1 + 1 + + diff --git a/home/res/ordering/default_items.xml b/home/res/ordering/default_items.xml new file mode 100755 index 0000000..bc2bdbf --- /dev/null +++ b/home/res/ordering/default_items.xml @@ -0,0 +1,31 @@ + + + + org.tizen.w-music-player.livebox + org.tizen.w-music-player.livebox + 0 + 0 + 0 + + + org.tizen.shealth.dbox + org.tizen.shealth.dbox + 0 + 1 + 0 + + + org.tizen.w-magazine.dbox.home + org.tizen.w-magazine.dbox.home + 0 + 0 + 1 + + + org.tizen.w-calendar2.win + org.tizen.w-calendar2.win + 0 + 1 + 1 + + diff --git a/home/res/ordering/default_items_tts.xml b/home/res/ordering/default_items_tts.xml new file mode 100755 index 0000000..f217e27 --- /dev/null +++ b/home/res/ordering/default_items_tts.xml @@ -0,0 +1,24 @@ + + + + org.tizen.w-music-player.livebox + org.tizen.w-music-player.livebox + 0 + 0 + 0 + + + org.tizen.w-contacts2.dbox + org.tizen.w-contacts2.dbox + 0 + 0 + 1 + + + org.tizen.weather.widget-today + org.tizen.weather.widget-today + 0 + 1 + 0 + + diff --git a/home/res/ordering/settings.xml b/home/res/ordering/settings.xml new file mode 100755 index 0000000..766226b --- /dev/null +++ b/home/res/ordering/settings.xml @@ -0,0 +1,13 @@ + + + + @IDS_IDLE_BODY_APPS + org.tizen.w-home + org.tizen.w-home + org.tizen.w-home.png + null + false + true + + + diff --git a/home/res/po/CMakeLists.txt b/home/res/po/CMakeLists.txt new file mode 100755 index 0000000..75c8adc --- /dev/null +++ b/home/res/po/CMakeLists.txt @@ -0,0 +1,34 @@ +# for i18n + +SET(POFILES + ar.po as.po az.po bg.po bn.po ca.po cs.po + da.po de.po el_GR.po en.po en_PH.po en_US.po es_ES.po + es_US.po et.po eu.po fa.po fi.po fr.po fr_CA.po + ga.po gl.po gu.po he.po hi.po hr.po hu.po hy.po + id.po is.po it_IT.po ja_JP.po ka.po kk.po km.po + kn.po ko_KR.po ky_KG.po lo.po lt.po lv.po mk.po ml.po mn_MN.po + mr.po ms.po my.po nb.po ne.po nl.po or.po pa.po + pl.po pt_BR.po pt_PT.po ro.po ru_RU.po si.po + sk.po sl.po sq.po sr.po sv.po ta.po te.po tg_TJ.po th.po tk_TM.po tl.po tr_TR.po + uk.po ur.po uz.po vi.po zh_CN.po zh_HK.po zh_TW.po +) + +SET(MSGFMT "/usr/bin/msgfmt") + +FOREACH(pofile ${POFILES}) + SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile}) + MESSAGE("PO: ${pofile}") + GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE) + GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE) + SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo) + ADD_CUSTOM_COMMAND( + OUTPUT ${moFile} + COMMAND ${MSGFMT} -o ${moFile} ${absPofile} + DEPENDS ${absPofile} + ) + INSTALL(FILES ${moFile} + DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo) + SET(moFiles ${moFiles} ${moFile}) +ENDFOREACH(pofile) + +ADD_CUSTOM_TARGET(home_po ALL DEPENDS ${moFiles}) diff --git a/home/res/po/ar.po b/home/res/po/ar.po new file mode 100755 index 0000000..edb81c9 --- /dev/null +++ b/home/res/po/ar.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "تطبيقات" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "التالي" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "عدم التكرار" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "حذف الكل" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "تتعذر الإزالة." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "انقر مع الاستمرار فوق عنصر واجهة المستخدم لنقله." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "تم تغيير الشاشة الرئيسية." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "جاري التحميل ..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "يتعذر تحميل البيانات. انقر لإعادة المحاولة." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "تتعذر إضافة التطبيق. لا تتوفّر مساحة إضافية على الشاشة الرئيسية." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "تتعذر إضافة التطبيق المصغر. لا تتوفّر مساحة إضافية على الشاشة الرئيسية." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "التطبيقات موجودة بالفعل." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "التطبيق المصغر موجود بالفعل." + +msgid "IDS_COM_POP_CANCEL" +msgstr "إلغاء" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "تم تغيير تخطيط الشاشة الرئيسية." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "سيُزال هذا التطبيق من الشاشة الرئيسية. لن يُحذف من الجهاز." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "إزالة التطبيق" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "إزالة التطبيق المصغر" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ستتم إزالة هذا التطبيق المصغر من الشاشة الرئيسية. لن يُحذف من الجهاز." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "وضع التوفير الفائق للطاقة" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "تتعذر إضافة التطبيق المصغر. تم الوصول إلى الحد الأقصى للتطبيقات المصغرة (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "تتعذر إضافة تطبيق. تم الوصول إلى أقصى عدد من التطبيقات (‎%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "تتعذر إضافة صفحة." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "الوضع العادي" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "تم إلغاء تفعيل وضع توفير الطاقة." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "تم تفعيل وضع توفير الطاقة." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "تطبيقات حديثة" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "تتعذر إضافة تطبيق. تم بلوغ الحدّ الأقصى لعدد التطبيقات (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "تتعذر إضافة تطبيق مصغّر. تم بلوغ الحدّ الأقصى لعدد التطبيقات المصغّرة (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "إزالة صفحة" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "سيتم إزالة هذه الصفحة ومحتواها." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "حذف" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "قم بإدخال البطاقة للنفاذ إلى خدمات الشبكة." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "وضع الحظر" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "مفعل" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "غير مفعل" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "تم نقل العنصر." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "انقر نقرًا مزدوجًا للإضافة." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "إضافة تطبيق مصغر" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "تمت إضافة العنصر." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "تمت إزالة العنصر." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "صفحة %1$d من %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "تتعذر إعادة ترتيب عناصر لوحة الإشعارات." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "إنها %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "إنها %d:%d صباحا." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "إنها %d:%d مساء." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d عناصر جديدة" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "تم بلوغ الحد الأقصى لعدد التطبيقات المصغرة (%s). احذف بعض التطبيقات المصغرة وحاول مرة أخرى." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "اسحب لليمين للعودة إلى الساعة." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "اسحب لليسار لعرض التطبيقات المصغرة." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "اسحب لليسار للعودة إلى الساعة." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "اسحب لليمين لعرض الإشعارات." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "هل تريد إلغاء تثبيت %s؟" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "تم بلوغ الحد الأقصى لعدد التطبيقات المصغرة (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "انقر نقرًا مزدوجًا لفتح علبة التطبيقات." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "عنصر واحد جديد" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "انقر نقراً مزدوجاً للتفعيل." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "الساعة" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "درجة حرارة الجهاز مرتفعة للغاية" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "قم بتنزيل تطبيقات ساعة Gear باستخدام الجهاز المحمول." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "أثناء النوم" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "الحصول على مزيد من التطبيقات" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "لا يتوفر هذا الإجراء بينما يكون توفير الطاقة + قيد التفعيل." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "لا يتوفر %s عندما يكون قارئ الشاشة قيد التفعيل." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "عدم الإزعاج" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "يتعذر تشغيل بيانات الهاتف المحمول عندما يكون وضع الطيران قيد التفعيل. قم بإلغاء تفعيل وضع الطيران وحاول مرة أخرى." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "اسحب للأعلى للعودة إلى الساعة." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "هذا كل شيء! استمتع باستخدام ساعة Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "شبكات المحمول" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "تحويل المكالمات إلى Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "بدء" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "خروج" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "مرحباً! انقر فوق الزر أدناه للتعرف على كيفية استخدام ساعة Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "تم طلب إلغاء التفعيل" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "تم طلب التفعيل" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "اسحب من أعلى الحافة للأسفل لرؤية رموز المؤشر على الساعة." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "اسحب للأعلى من أسفل الحافة لعرض التطبيقات على الساعة." + +msgid "IDS_ST_BUTTON_OK" +msgstr "موافق" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "اسحب من أعلى الحافة للأسفل للعودة." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "لتثبيت التطبيقات أو إلغاء تثبيتها، استخدم تطبيق Samsung Gear على جهازك المحمول." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "هذه هي البنية الأساسية للشاشة الرئيسية." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "خالي" diff --git a/home/res/po/as.po b/home/res/po/as.po new file mode 100755 index 0000000..6354485 --- /dev/null +++ b/home/res/po/as.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "এপ্প্‌চ" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "পৰৱৰ্তী" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "ৱিজেট" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "পুনৰাই নকৰিব।" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "সকলো বিলোপ কৰক" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "আঁতৰাবলৈ অক্ষম৷" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "ইয়াক লৈ যাবৰ বাবে এটা ৱিজেট টিপক আৰু ধৰি থাকক৷" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "গৃহ স্ক্ৰীণ সলনি কৰা হৈছে৷" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "লোড হৈ আছে..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "ডাটা লোড কৰিবলৈ অক্ষম৷ পুনঃচেষ্টা কৰিবৰ বাবে টিপক।" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "এপ্লিকেশ্বন যোগ কৰিবলৈ অক্ষম৷ গৃহ স্ক্ৰীণত কোনো কোঠা নাই৷" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ৱিজেট যোগ কৰিবলৈ অক্ষম৷ গৃহ স্ক্ৰীণত কোনো কোঠা নাই৷" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "এপ্লিকেশ্বন ইতিমধ্যে মজুত আছে৷" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "ৱিজেট ইতিমধ্যে মজুত আছে৷" + +msgid "IDS_COM_POP_CANCEL" +msgstr "বাতিল" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "গৃহ স্ক্ৰীণ লেআউট পৰিৱৰ্তন হৈছে৷" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "গৃহ স্ক্রীণৰ পৰা এই এপ্লিকেশ্বন আঁতৰোৱা হ'ব৷ ইয়াক ডিভাইচৰ পৰা বিলোপ কৰিব নোৱাৰিব৷" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "এপ্লিকেশ্বন আঁতৰাওক" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "ৱিজেট আঁতৰাওক" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "গৃহ স্ক্রীণৰ পৰা এই ৱিজেট আঁতৰোৱা হ'ব৷ ইয়াক ডিভাইচৰ পৰা বিলোপ কৰিব নোৱাৰিব৷" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "অত্যাধিক পাৱাৰ সংৰক্ষণ ম'ড" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ৱিজেট যোগ কৰিবলৈ অক্ষম৷ সৰ্বাধিক সংখ্যক ৱিজেট (%d) উপনীত হৈছে৷" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "এপ্লিকেশ্বন যোগ কৰাত অক্ষম৷ সৰ্বাধিক সংখ্যক এপ্লিকেশ্বনত (%d) উপনীত হৈছে৷" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "পৃষ্ঠা যোগ কৰিবলৈ অক্ষম৷" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "সাধাৰণ ম'ড" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "পাৱাৰ সংৰক্ষণ ম'ড অক্ষম কৰা হৈছে৷" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "পাৱাৰ সংৰক্ষণ ম'ড সক্ষম৷" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "শেহতীয়া এপ্প্‌চ" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "এপ্লিকেশ্বন যোগ কৰিবলৈ অক্ষম৷ এপ্লিকেশ্বনৰ সৰ্বাধিক সংখ্যা (%s) ত উপনীত হৈছে৷" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "ৱিজেট যোগ কৰিবলৈ অক্ষম৷ এপ্লিকেশ্বনৰ সৰ্বাধিক সংখ্যা (%s) ত উপনীত হৈছে৷" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "পৃষ্ঠা আঁতৰাওক" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "এই পৃষ্ঠাটো আৰু ইয়াৰ সমল আঁতৰোৱা হ'ব৷" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "আঁতৰাওক" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "নেটৱৰ্ক সেৱাত প্ৰৱেশ কৰিবলৈ SIM কাৰ্ড আন্তঃসংযোগ কৰক৷" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "অৱৰোধ ম'ড" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "অন" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "অফ" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "আইটেম লৈ যোৱা হৈছে৷" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "যোগ কৰিবলৈ দুবাৰ টিপক৷" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "ৱিডগেট যোগ কৰক" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "আইটেম যোগ কৰা হৈছে৷" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "আইটেম আঁতৰোৱা হৈছে৷" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "পৃষ্ঠা %2$d ৰ %1$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "অধিসূচনা ব'ৰ্ড আইটেমসমূহ পুনঃক্ৰম কৰিব নোৱাৰি৷" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "এইটো %1$d:%2$d হয়৷" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "এইটো %d:%d এম৷" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "এইটো %d:%d পিএম৷" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d নতুন আইটেমসমূহ" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "ৱিজেটৰ সৰ্বাধিক সংখ্যাত (%s)-ত উপনীত হৈছে৷ কিছুমান ৱিজেট বিলোপ কৰক আৰু পুনঃচেষ্টা কৰক৷" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ঘড়ীলৈ ঘুৰি যাবলৈ সোঁদিশলৈ ঘঁহাওক৷" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "ৱিজেটসমূহ দৰ্শন কৰিবলৈ বাঁওদিশলৈ ঘঁহাওক৷" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ঘড়ীলৈ ঘুৰি যাবলৈ বাঁওদিশলৈ ঘঁহাওক৷" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "অধিসূচনাসমূহ দৰ্শন কৰিবলৈ সোঁদিশলৈ ঘঁহাওক৷" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "আনইনষ্টল %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ৱিজেটৰ সৰ্বাধিক সংখ্যাত (%s) উপনীত হৈছে৷" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "এপ ট্ৰে খুলিবলৈ দুবাৰ টিপক৷" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 টা নতুন আইটেম" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "সক্ষম কৰিবলৈ দুবাৰ টিপক৷" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "ঘড়ী" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "ডিভাইচৰ তাপমাত্ৰা অতি বেছি৷" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "ম'বাইল ডিভাইচ ব্যৱহাৰ কৰি গীয়েৰ এপ্লিকেশ্বনসমূহ ডাউনলোড কৰক৷" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "শুই থকাৰ সময়ত" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "অধিক এপ্লিকেশ্বন লাভ কৰক" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "পাৱাৰ সংৰক্ষণ + সক্ষম হৈ থকাৰ অৱস্থাত কাৰ্য উপলব্ধ নহয়৷" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "স্ক্ৰীণ ৰিডাৰ সক্ষম কৰাৰ সময়ত %s উপলব্ধ নহয়৷" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "আমনি নকৰিব" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "ফ্লাইট ম'ড সক্ষম হৈ থকাৰ সময়ত ম'বাইল ডাটা অন কৰিবলৈ অক্ষম৷ ফ্লাইট ম'ড অক্ষম কৰক আৰু পুনৰ চেষ্টা কৰক৷" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "ঘড়ীলৈ পিছুৱাই যাবলৈ ওপৰলৈ ঘহাঁওক৷" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "সেইটোৱেই! গীয়েৰলৈ যাওক!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "ম'বাইল নেটৱৰ্ক" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "গীয়েৰলৈ কল ফৰৱাৰ্ড" + +msgid "IDS_ST_BUTTON_START" +msgstr "আৰম্ভ কৰক" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "প্ৰস্থান" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "স্বাগতম! আপোনাৰ গীয়েৰ কেনেকৈ ব্যৱহাৰ কৰিব লাগে তাক জানিবলৈ তলৰ বুটামটো টিপক৷" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "অক্ষম কৰিবলৈ অনুৰোধিত" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "সক্ষম কৰিবলৈ অনুৰোধিত" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "ঘড়ীত ইণ্ডিকেটৰ আইকনসমূহ চাবলৈ শীৰ্ষ কাষ তললৈ ঘহাঁওক৷" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "ঘড়ীত এপ্প্‌চ দৰ্শন কৰিবলৈ তলৰ কাষ ওপৰলৈ ঘহাঁওক৷" + +msgid "IDS_ST_BUTTON_OK" +msgstr "ঠিক" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "ঘূৰি যাবলৈ শীৰ্ষ কাষ তললৈ ঘহাঁওক৷" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "এপ্লিকেশ্বনসমূহ ইনষ্টল বা আনইনষ্টল কৰিবলৈ, আপোনাৰ ম'বাইল ডিভাইচত চেমচাং গীয়েৰ এপ্লিকেশ্বন ব্যৱহাৰ কৰক৷" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "এইটো হ'ল গৃহ স্ক্ৰীণৰ প্ৰধান গঠন৷" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "খালী" diff --git a/home/res/po/az.po b/home/res/po/az.po new file mode 100755 index 0000000..567b850 --- /dev/null +++ b/home/res/po/az.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Proqramlar" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Növbəti" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Qurğu" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Təkrar etmə" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Hamısını sil" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Silmək mümkün deyil." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Yerini dəyişmək üçün piktoqrama vurub saxlayın." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Əsas ekran dəyişib." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Yüklənir..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Məlumatları yükləmək mümkün deyil. Yenidən cəhd etmək üçün vurun" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Proqram əlavə etmək mümkün olmadı. Əsas ekranda artıq yer yoxdur." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Piktoqram əlavə etmək mümkün olmadı. Əsas ekranda artıq yer yoxdur." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Proqram artıq mövcuddur." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Piktoqram artıq mövcuddur." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Ləğv et" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Əsas ekranın tərtibatı dəyişdirildi." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Bu proqram əsas ekrandan silinəcəkdir. O, cihazdan silinməyəcək." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Proqramı sil" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Piktoqramı sil" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Bu piktoqram əsas ekrandan silinəcəkdir. O, cihazdan silinməyəcək." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultra enerji qən rejimi" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Piktoqram əlavə etmək mümkün deyil. Piktoqramların sayı maksimuma (%d) çatmışdır." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Proqram əlavə etmək mümkün olmadı. Proqramların sayı maksimuma (%d) çatmışdır." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Səhifə əlavə etmək mümkün deyil." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normal rejim" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Enerjiyə qənaət rejimi qeyri-aktiv edildi." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Enerjiyə qənaət rejimi aktivləşdirilmişdir." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Son proqr" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Proqram əlavə etmək mümkün olmadı. Proqramların sayı maksimuma (%s) çatmışdır." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Piktoqram əlavə etmək mümkün deyil. Piktoqramların sayı maksimuma (%s) çatmışdır." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Səhifəni sil" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Bu səhifə və onun məzmunu silinəcək." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Sil" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Şəbəkə xidmətlərinə daxil olmaq üçün SİM kartı daxil edin." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Bloklama rejimi" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Qoş" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Söndür" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Elementin yeri dəyişdirildi." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Əlavə etmək üçün iki dəfə vur." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Piktoqram əlavə edin" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Element əlavə olundu." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Element silindi." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Səhifə %1$d / %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Bildiriş panel elementlərini yenidən sıralamaq olmur." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Belədir: %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Saat %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Saat %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d yeni element" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Vidjetlərin sayı maksimuma (%s) çatdı. Bəzi vidjetləri silin və yenidən cəhd edin." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Saata dönmək üçün sağa sürüşdürün." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Vidjetə baxmaq üçün sola sürüşdürün." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Saata dönmək üçün sola sürüşdürün." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Bild bax üçün sağa sürüş." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s silinsin?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Vidjetlərin sayı maksimuma (%s) çatmışdır." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Proqram panelini açmaq üçün iki dəfə vurun." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 yeni element" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Aktiv etmək üçün iki dəfə vur." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Saat" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Cihazın temperaturu olduqca yüksəkdir." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Mobil cihaz vasitəsilə Gear proqramlarını yükləyin." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Yatan\nzaman" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Daha çox proqram əldə et" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Enerjiyə qənaət+ aktiv olduqda əməliyyat mümkün olmur." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "Ekran oxuyucusu aktiv olan zaman %s mövcud olmur." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Narahat etmə" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Uçuş rej akt olan zaman Mobil tarifi yand olmadı. Uçuş rej q-akt et və yen cəhd et." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Saata qayıtmaq üçün yuxarı sürüşdürün." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Budur! Gear-a keç!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobil şəbəkələr" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Zən. Gear-a yönl." + +msgid "IDS_ST_BUTTON_START" +msgstr "Başla" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Çıx" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Xoş gəldiniz! Gear-dan ist qayd öyrən üçün aşağ.düyməyə vur." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Söndürmək sorğusu verildi" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Yandırmaq sorğusu verildi" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Saatda niş görmək üçün yuxarı kənar hiss aşağı sürüşdr." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Proqr saatda baxmaq üçün kənarda aşağ yuxarıya sürüşdür." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Geri qayıtmaq üçün yuxarı kənar hissəni aşağı sürüşdür." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Proqramları quraşdırmaq və ya pozmaq üçün mobil cihazınızda Samsung Gear proqramından istifadə edin." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Bu, əsas ekranın əsas strukturudur." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Boşdur" diff --git a/home/res/po/bg.po b/home/res/po/bg.po new file mode 100755 index 0000000..33d0666 --- /dev/null +++ b/home/res/po/bg.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Приложения" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Следващ" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Визуален елемент" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Не повтаряй" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Изтрий всички" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Не може да се премахне." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Чукнете и задръжте виз. ел., за да го преместите." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Началният екран е променен." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Зареждане" + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Данните не могат да се заредят. Чукнете, за да опитате отново." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Приложението не може да се добави. Няма повече място в началния екран." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Визуалният елемент не може да се добави. Няма повече място в началния екран." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Приложението вече съществува." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Визуалният елемент вече съществува." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Отказ" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Оформлението на началния екран е променено." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Това приложение ще бъде премахнато от началния екран. То няма да бъде изтрито от устройството." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Прем. на приложение" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Прем. на виз. елем." + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Този визуален елемент ще бъде премахнат от началния екран. Той няма да бъде изтрит от устройството." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Режим ултра пест. енергия" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Визуалният елемент не може да се добави. Достигнат е максималният брой визуални елементи (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Приложението не може да се добави. Достигнат е максималният брой приложения (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Страницата не може да се добави." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Нормален режим" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Режимът на пестене на енергия е деактивиран." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Режимът на пестене енергия е активиран." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Скор. прил." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Неуспешно добавяне на приложение. Достигнат е максималният брой приложения (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Визуалният елемент не може да бъде добавен. Достигнат е максималният брой визуални елементи (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Премахване на страницата" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Тази страница и съдържанието й ще бъдат премахнати." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Премаxни" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Поставете SIM картата, за да получите достъп до услуги на мрежата." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Режим на блокиране" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Включено" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Изключено" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Елементът е преместен." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Чукнете двукратно, за да добавите." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Добавяне на визуален елемент" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Елементът е добавен." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Елементът е премахнат." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Страница %1$d от %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Елементите от таблото за уведомления не може да се пренаредят." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Сега е %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Сега е %d:%d часа пр.об." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Сега е %d:%d часа сл.об." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d нови елемента" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Достигнат е максималният брой уиджети (%s). Изтрийте някои уиджети и опитайте отново." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Плъз. надясно за назад към часовника." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Плъзнете наляво за още уиджети." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Плъз. наляво за обратно към часовника." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Плъзнете надясно за преглед уведомл." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Деинсталиране на %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Достигнат е максималният брой уиджети (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Докоснете двукратно, за да отворите областта с приложения." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 нов елемент" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Докоснете двукратно, за да активирате." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Часовник" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Температурата на устройството е твърде висока." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Изтеглете приложения за Gear чрез мобилно устройство." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "По време на сън" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Получаване на още прил." + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Действието не е налично, докато „Пестене на енергия +“ е активирано." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s не е налично, докато Екранен четец е активирано." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Не безпокойте" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Моб. данни не може да се вкл. при акт. режим Полет. Деакт. режим Полет и опитайте пак." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Плъз. нагоре за обратно към часовника." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Това е! Съединете се с Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Мобилни мрежи" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Преп.пов. до Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Старт" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Изход" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Привет! Док. бутона долу, за да научите как се ползва Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Искане за деактивиране" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Искане за активиране" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Плъз. горния край надолу за индикаторни икони на часовн." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Плъзн. долния край нагоре, за да видите прил. на часов." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Плъзнете горния край надолу, за да се върнете назад." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "За да инсталирате или деинсталирате приложения, използвайте приложението Samsung Gear на мобилното си устройство." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Това е основната структура на началния екран." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Празно" diff --git a/home/res/po/bn.po b/home/res/po/bn.po new file mode 100755 index 0000000..818f64d --- /dev/null +++ b/home/res/po/bn.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "অ্যাপগুলি" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "পরে" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "উইজেট" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "পুনরাবৃত্তি করবেন না।" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "সমস্ত মুছুন" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "অপসারণ করতে অক্ষম।" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "উইজেট সরাতে সেটি ট্যাপ করে ধরে থাকুন।" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "হোম স্ক্রিন পরিবর্তিত।" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "লোড হচ্ছে..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "তথ্য লোড করতে অক্ষম৷ পুনরায় চেষ্টা করতে ট্যাপ করুন৷" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "অ্যাপ্লিকেশন যোগ করতে অক্ষম। হোম স্ক্রিনে আর রুম নেই।" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "উইজেট যোগ করতে অক্ষম। হোম স্ক্রিনে আর রুম নেই।" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "অ্যাপ্লিকেশন ইতিমধ্যে বিদ্যমান।" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "উইজেট ইতিমধ্যে বিদ্যমান।" + +msgid "IDS_COM_POP_CANCEL" +msgstr "বাতিল" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "হোম স্ক্রিনের বিন্যাস পরিবর্তিত হয়েছে।" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "হোম স্ক্রিন থেকে এই অ্যাপ্লিকেশনটি অপসারণ করা হবে। এটি ডিভাইস থেকে মোছা হবে না।" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "অ্যাপ্লিকেশন সরান" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "উইজেট অপসারণ করুন" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "হোম স্ক্রিন থেকে এই উইজেটটি অপসারণ করা হবে। এটি ডিভাইস থেকে মোছা হবে না।" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "অতিরিক্ত পাওয়ার সাশ্রয় মোড" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "উইজেট যোগ করতে অক্ষম। উইজেটগুলির সর্বাধিক সংখ্যায় (%d) পৌঁছেছে।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "অ্যাপ্লিকেশন যোগ করতে অক্ষম৷ অ্যাপ্লিকেশনের সর্বাধিক সংখ্যায় (%d) পৌঁছেছে৷" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "পৃষ্ঠা যোগ করতে অক্ষম।" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "সাধারণ মোড" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "পাওয়ার সাশ্রয় মোড অক্ষম হয়েছে।" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "পাওয়ার সাশ্রয় মোড সক্ষম হয়েছে।" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "সাম্প্রতিক অ্যাপগুলি" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "অ্যাপ্লিকেশন যোগ করতে অক্ষম। অ্যাপ্লিকেশনের সর্বাধিক সংখ্যায় (%sটি) পৌঁছেছে।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "উইজেট যোগ করতে অক্ষম। উইজেটের সর্বাধিক সংখ্যায় (%sটি) পৌঁছেছে।" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "পৃষ্ঠা অপসারণ করুন" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "এই পৃষ্ঠাটি এবং এর সামগ্রী অপসারিত হবে।" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "অপসারণ" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "নেটওয়ার্ক পরিষেবা অ্যাক্সেস করার জন্যে SIM কার্ড প্রবেশ করান।" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "অবরুদ্ধকারী মোড" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "চালু" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "বন্ধ" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "আইটেম সরানো হয়েছে৷" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "যোগ করতে দুবার ট্যাপ করুন।" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "উইজেট যোগ করুন" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "আইটেম যুক্ত হয়েছে৷" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "আইটেম অপসারিত হয়েছে৷" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d-এর মধ্যে %1$d পৃষ্ঠা" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "বিজ্ঞপ্তি বোর্ড আইটেমগুলি পুনরায় ক্রমসজ্জিত করতে পারা যায় না।" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "এটি %1$d:%2$d।" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "এখন %d:%d AM।" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "এখন %d:%d PM।" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%dটি নতুন আইটেম" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "উইজেটগুলির সর্বাধিক সংখ্যায় (%sটি) পৌঁছেছে। কিছু আইটেম মুছুন এবং পুনরায় চেষ্টা করুন।" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ঘড়িতে ফিরে যেতে ডানে সোয়াইপ করুন।" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "উইজেটগুলি দেখতে বামে সোয়াইপ করুন।" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ঘড়িতে ফিরে যেতে বামে সোয়াইপ করুন।" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "বিজ্ঞপ্তিগুলি দেখতে ডানে সোয়াইপ করুন।" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s আনইনস্টল করবেন?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "উইজেটগুলির সর্বাধিক সংখ্যায় (%s) পৌঁছেছে।" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "অ্যাপ ট্রেটি খুলতে দুবার ট্যাপ করুন।" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1টি নতুন আইটেম" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "সক্ষম করতে দুবার ট্যাপ করুন।" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "ঘড়ি" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "ডিভাইসের তাপমাত্রাটি অত্যন্ত বেশি।" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "মোবাইল ডিভাইস ব্যবহার করে গিয়ার অ্যাপ্লিকেশনগুলি ডাউনলোড করুন।" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "ঘুমানোর সময়" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "আরও অ্যাপ্লিকেশন পান" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "পাওয়ার সাশ্রয় + সক্ষম থাকাকালীন ক্রিয়াকলাপ সুলভ নেই।" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "স্ক্রিন রিডার সক্ষম অবস্থায় %s সুলভ নয়।" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "বিরক্ত করবেন না" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "বিমান মোড সক্ষম থাকলে মোবাইল তথ্য চালু করতে অক্ষম। বিমান মোড অক্ষম করুন ও আবার চেষ্টা করুন।" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "ঘড়িতে ফিরে যেতে উপরের দিকে সোয়াইপ করুন।" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "ব্যাস এতটাই! গিয়ার উপভোগ করুন!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "মোবাইল নেটওয়ার্কগুলি" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "গিয়ারে কল অগ্রবর্তী" + +msgid "IDS_ST_BUTTON_START" +msgstr "শুরু" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "প্রস্থান" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "স্বাগত! কীভাবে আপনার গাড়ি ব্যবহার করতে হয় তা জানতে নীচের বোতামটি ট্যাপ করুন।" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "অক্ষম করার জন্য অনুরোধ করা হয়েছে" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "সক্ষম করার জন্য অনুরোধ করা হয়েছে" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "ঘড়িগুলিতে সূচক আইকনগুলি দেখতে শীর্ষের প্রান্তটি নীচের দিকে সোয়াইপ করুন।" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "ঘড়িতে অ্যাপস দেখতে নীচের প্রান্তটি থেকে উপরে সোয়াইপ করুন।" + +msgid "IDS_ST_BUTTON_OK" +msgstr "ওকে" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "ফিরে যেতে শীর্ষের প্রান্তটি নীচের দিকে সোয়াইপ করুন।" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "অ্যাপ্লিকেশনগুলি ইনস্টল বা আনইনস্টল করতে আপনার মোবাইল ডিভাইসে Samsung Gear অ্যাপ্লিকেশনটি ব্যবহার করুন।" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "এটি হোম স্ক্রিনের প্রধান কাঠামো।" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ফাঁকা" diff --git a/home/res/po/ca.po b/home/res/po/ca.po new file mode 100755 index 0000000..7571958 --- /dev/null +++ b/home/res/po/ca.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplicacions" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Seg" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "No repetir" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Esborrar tot" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "No es pot eliminar" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Mantenir tocat un widget per moure'l" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Ha canviat la pantalla d'inici" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Carregant..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "No es poden carregar les dades. Toqui per tornar-ho a intentar." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "No es pot afegir l'aplicació. No hi ha més lloc a la pantalla d'inici." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "No es pot afegir el widget. No hi ha més lloc a la pantalla d'inici." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "L'aplicació ja existeix." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "El widget ja existeix." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Cancel·lar" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "S'ha canviat el disseny de la pantalla d'inici." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "S'eliminarà aquesta aplicació de la pantalla d'inici. No s'esborrarà del dispositiu." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Eliminar aplicació" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Eliminar widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "S'eliminarà aquest widget de la pantalla d'inici. No s'esborrarà del dispositiu." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Mode estalvi ultra energ" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "No es pot afegir el widget. S'ha assolit el nombre màxim de widgets (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "No es pot afegir l'aplicació. S'ha assolit el nombre màxim d'aplicacions (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "No es pot afegir pàgina." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Mode normal" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Mode d'estalvi d'energia deshabilitat." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Mode d'estalvi d'energia habilitat." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Aplic recent" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "No es pot afegir l'aplicació. S'ha assolit el nombre màxim d'aplicacions (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "No es pot afegir el widget. S'ha assolit el nombre màxim de widgets (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Eliminar pàgina" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "S'eliminarà aquesta pàgina i el seu contingut." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Eliminar" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Insereixi la targeta SIM per a accedir als serveis de xarxa" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Mode de bloqueig" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Activat" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Desactivat" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Element mogut." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Toqui dos cops per afegir." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Afegir widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Element afegit." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Element esborrat." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Pàgina %1$d de %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "No es pot canviar l'ordre dels elements de la pissarra de notificacions." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Són les %1$d:%2$d" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Són les %d:%d AM" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Són les %d:%d PM" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d elements nous" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "S'ha assolit el nombre màxim de widgets (%s). Esborri'n alguns i torni-ho a intentar." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Desplaci dreta per tornar a rellotge." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Desplaci a esquerra per veure widgets." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Desplaci esq per tornar a rellotge." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Desplaci a dreta per veure notific." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Desinstal·lar %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "S'ha assolit el nombre màxim de widgets (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Toqui dos cops per obrir la safata d'aplicacions." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 element nou" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Toqui dues vegades per habilitar." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Rellotge" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "La temperatura del dispositiu és massa alta" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Descarregar aplicacions de Gear amb el dispositiu mòbil." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Mentre dorm" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Obtenir més aplicacions" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Acció no disponible amb Estalvi energia + habilitat." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s no està disponible mentre el Lector de pantalla estigui habilitat." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "No molestar" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "No pot activar dades mòbils amb mode Vol habilitat. Deshab mode Vol i torni a intentar." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Desplaci amunt per tornar a rellotge." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Ja està! Entri a Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Xarxes mòbils" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Desv truc a Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Iniciar" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Sortir" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Benvingut! Toqui el botó següent per informació sobre Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "S'ha sol·licitat que es deshabiliti" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "S'ha sol·licitat que s'habiliti" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Desplaci's cap avall per veure icon d'indic al rellotge." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Desplaci's cap amunt per veure aplicacions al rellotge." + +msgid "IDS_ST_BUTTON_OK" +msgstr "Acceptar" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Desplaci's avall des de dalt per tornar." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Per instal·lar o desinstal·lar aplicacions, utilitzi l'aplicació Samsung Gear al dispositiu mòbil." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Aquesta és l'estructura principal de la pantalla d'inici." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Buit" diff --git a/home/res/po/cs.po b/home/res/po/cs.po new file mode 100755 index 0000000..fac8b48 --- /dev/null +++ b/home/res/po/cs.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplikace" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Další" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Neopakovat" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Odstranit vše" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Nelze odstranit." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Klepnutím a podržením nástroje ho přesunete." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Domovská obrazovka byla změněna." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Nahrávám..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Data nelze načíst. Klepnutím opakujte akci." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Aplikaci nelze přidat. Na domovské obrazovce již není místo." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Nástroj nelze přidat. Na domovské obrazovce již není místo." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplikace již existuje." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Nástroj již existuje." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Zrušit" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Rozložení domovské obrazovky bylo změněno." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Aplikace bude odebrána z domovské obrazovky, ale nebude odstraněna ze zařízení." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Odebrat aplikaci" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Odebrat nástroj" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Nástroj bude odebrán z domovské obrazovky, ale nebude odstraněn ze zařízení." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultra úsporný režim" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Nástroj nelze přidat. Bylo dosaženo maximálního počtu nástrojů (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Aplikaci nelze přidat. Bylo dosaženo maximálního počtu aplikací (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Nelze přidat stránku." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normální režim" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Úsporný režim byl vypnut." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Byl zapnut úsporný režim." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Posl. aplik." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Aplikaci nelze přidat. Bylo dosaženo maximálního počtu aplikací (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Nástroj nelze přidat. Bylo dosaženo maximálního počtu nástrojů (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Odebrat stránku" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Tato stránka a její obsah budou odebrány." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Odebrat" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Chcete-li používat síťové služby, vložte SIM kartu." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Režim blokování" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Zapnout" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Vypnout" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Položka byla přesunuta." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Poklepáním přidáte." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Přidat nástroj" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Položka byla přidána." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Položka byla odebrána." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Stránka %1$d z %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Pořadí položek na oznamovacím panelu nelze změnit." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Je %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Je %d:%d dop." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Je %d:%d odp." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d nových položek" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Bylo dosaženo maximálního počtu nástrojů (%s). Odstraňte některé nástroje a zkuste to znovu." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Přejetím doprava se vraťte na hodiny." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Přejetím doleva zobrazíte nástroje." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Přejetím doleva se vraťte na hodiny." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Přejetím doprava zobrazíte oznámení." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Odinstalovat %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Bylo dosaženo maximálního počtu nástrojů (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Poklepáním otevřete panel aplikací." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nová položka" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Poklepáním zapnete." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Hodiny" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Teplota zařízení je příliš vysoká." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Stáhněte si aplikace Gear pomocí mobilního zařízení." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Při spánku" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Získat další aplikace" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Když je zapnutý Úsporný režim +, akce není dostupná." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s není k dispozici, když je zapnutá Čtečka displeje." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Nerušit" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "V režimu Letadlo není možné zapnout Mobilní data. Vypněte režim Letadlo a opakujte akci." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Přejetím nahoru se vraťte na hodiny." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "To je ono! Nadchněte se pro Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobilní sítě" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Př. hov. do Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Start" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Konec" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Vítejte! Klepněte na tl. a dozvíte se, jak používat Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Požadováno vypnutí" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Požadováno zapnutí" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Přejetím od hor. okr. zobrazíte na hod. ikony indik." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Přejetím od dolního okraje zobrazíte apl. v hodinách." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Přejetím od horního okraje dolů se vrátíte zpět." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Pro nainstalování nebo odinstalování aplikací použijte aplikaci Samsung Gear v mobilním zařízení." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Toto je hlavní struktura domovské obrazovky." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Prázdný" diff --git a/home/res/po/da.po b/home/res/po/da.po new file mode 100755 index 0000000..25bce26 --- /dev/null +++ b/home/res/po/da.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Apps" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Næste" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Gentag ikke." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Slet alt" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Kan ikke fjerne." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Tryk og hold en widget nede for at flytte den." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Startskærm ændret." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Indlæser data ..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Kan ikke indlæse data. Tap for at prøve igen." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Kunne ikke tilføje program. Ikke mere plads på Startskærmen." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Kunne ikke tilføje widget. Ikke mere plads på Startskærmen." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Applikationen findes allerede." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget findes allerede." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Annullér" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Layout for startskærm ændret." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Dette program vil blive fjernet fra Startskærmen. Det vil ikke blive slettet fra enheden." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Fjern applikation" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Fjern widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Denne widget vil blive fjernet fra Startskærmen. Den vil ikke blive slettet fra enheden." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultrastrømbesp. tilstand" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Kan ikke tilføje widget. Det maksimale antal widgets (%d) er nået." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Kunne ikke tilføje program. Det maksimale antal programmer (%d) er nået." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Kunne ikke tilføje side." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normal tilstand" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Strømsparetilstand deaktiveret." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Strømbesparende tilstand er aktiveret." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Seneste apps" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Kan ikke tilføje applikation. Det maksimale antal applikationer (%s) er nået." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Kan ikke tilføje widget. Det maksimale antal widgets (%s) er nået." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Fjern side" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Denne side og dens indhold vil blive fjernet." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Fjern" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Indsæt SIM-kortet for at få adgang til netværkstjenesterne." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blokeringstilstand" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Til" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Fra" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Element flyttet." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Dobbeltap for at tilføje." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Tilføj widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Element tilføjet." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Element fjernet." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Side %1$d af %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Det er ikke muligt at flytte rundt på elementer i informationspanelet." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Den er %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Den er %d:%d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Den er %d:%d." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d nye elementer" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Det maksimale antal widgets (%s) er nået. Slet nogle widgets, og prøv igen." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Stryg mod h. for at gå tilbage til ur." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Stryg mod venstre for at se widgets." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Stryg mod v. for at gå tilbage til ur." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Stryg mod højre for at se meddelelser." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Afinstallér %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Det maksimale antal widgets er blevet nået (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Dobbelttryk for at åbne app-bakken." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nyt element" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Dobbelttryk for at aktivere." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Ur" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Enhedens temperatur er for høj." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Download Gear-applikationer med en mobilenhed." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Når du sover" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Hent flere applikationer" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Handlingen er ikke tilgængelig, mens Strømbesparelse + er aktiveret." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s er ikke tilgængelig, når Skærmlæser er aktiveret." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Forstyr ikke" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Kan ikke slå Mobile data til, når Flytilstand er aktiv. Deaktiver Flytilst., og prøv igen." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Stryg opad for at gå tilbage til ur." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Sådan! Kom op i Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobile netværk" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Viderest. t. Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Start" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Afslut" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Velkommen! Tryk på knappen for at lære at bruge dit Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Anmodede om at deaktivere" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Anmodede om at aktivere" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Stryg øverste kant nedad, og se indikatorikoner på uret." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Stryg den nederste kant opad for at se apps på uret." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Stryg den øverste kant nedad for at gå tilbage." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Vil du installere eller afinstallere applikationer, skal du bruge applikationen Samsung Gear på din mobilenhed." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Dette er startskærmens overordnede opbygning." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Tom" diff --git a/home/res/po/de.po b/home/res/po/de.po new file mode 100755 index 0000000..0f6a86e --- /dev/null +++ b/home/res/po/de.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Menü" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Weiter" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Nicht wiederholen" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Alles löschen" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Entfernen nicht möglich" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Zum Verschieben des Widgets tippen und halten." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Startbildschirm geändert" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Lädt..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Daten konnten nicht geladen werden. Für erneuten Versuch tippen" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Anwendung kann nicht hinzugefügt werden. Kein Platz mehr auf dem Startbildschirm." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Widget kann nicht hinzugefügt werden. Kein Platz mehr auf dem Startbildschirm." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Anwendung ist bereits vorhanden." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget bereits vorhanden." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Abbrechen" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Layout des Startbildschirms geändert." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Diese Anwendung wird vom Startbildschirm entfernt. Sie wird nicht vom Gerät gelöscht." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Anwendung entfernen" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Widget entfernen" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Dieses Widget wird vom Startbildschirm entfernt. Es wird nicht vom Gerät gelöscht." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultra-Energiesparmodus" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Widget konnte nicht hinzugefügt werden. Maximale Anzahl von Widgets (%d) erreicht." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Anwendung konnte nicht hinzugefügt werden. Maximale Anzahl an Anwendungen (%d) erreicht." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Seite kann nicht hinzugefügt werden." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normalmodus" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Energiesparmodus deaktiviert." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Energiesparmodus aktiviert." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Akt. Apps" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Anwendung konnte nicht hinzugefügt werden. Maximale Anzahl an Anwendungen (%s) erreicht." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Widget konnte nicht hinzugefügt werden. Maximale Anzahl an Widgets (%s) erreicht." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Seite entfernen" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Diese Seite und der zugehörige Inhalt werden entfernt." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Entfernen" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "SIM-Karte einsetzen, um auf Netzdienste zuzugreifen" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Ruhemodus" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Ein" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Aus" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Element verschoben." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Zum Hinzufügen zweimal tippen." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Widget hinzufügen" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Element hinzugefügt." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Element entfernt." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Seite %1$d von %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Elemente im Benachrichtigungsfeld können nicht neu angeordnet werden." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Es ist %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Es ist %d:%d AM" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Es ist %d:%d PM" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d neue Elemente" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Die max. Anzahl von Widgets (%s) ist erreicht. Löschen Sie einige und versuchen Sie es erneut." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Zurück zur Uhr: Nach rechts streichen." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Widgets zeigen: Nach links streichen." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Zurück zur Uhr: Nach links streichen." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Benachrichtigungen: Nach rechts streichen." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s deinstallieren?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Maximale Anzahl von Widgets (%s) erreicht." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Zweimal tippen, um das App-Fach zu öffnen." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 neues Element" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Zum Aktivieren zweimal tippen." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Uhr" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Die Gerätetemperatur ist zu hoch." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Gear-Anwendungen über Mobilgerät herunterladen." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Beim Schlafen" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Weitere Anw. herunterl." + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Wenn der Energiesparmodus + aktiviert ist, ist die Aktion nicht verfügbar." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s ist nicht verfügbar, wenn das Bildschirmleseprogramm aktiviert ist." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Nicht stören" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Mobile Daten sind im Offline-Modus nicht verfügbar. Modus deaktiv. und erneut versuchen." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Zurück zur Uhr: Nach oben streichen." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Herzlich willkommen! Viel Spass mit der Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobiles Netzwerk" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Anr. zur Gear weiterl." + +msgid "IDS_ST_BUTTON_START" +msgstr "Start" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Beenden" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Willkommen! Unten tippen, um mehr über die Gear zu erfahren." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Deaktivieren angefordert" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Aktivieren angefordert" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Abwärts streichen, um Anzeigesymbole auf Uhr anzuzeigen." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Von Unterkante hochstreichen, um die Apps anzuzeigen." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Von Oberkante hinunterstreichen, um zurückzugehen." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "Auf der Uhr von der oberen Kante nach unten streichen, um Anzeigesymbole anzuzeigen." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "Auf der Uhr von der unteren Kante nach oben streichen, um Apps anzuzeigen." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "Streichen Sie von der Uhr aus nach rechts, um Benachrichtigungen anzuzeigen." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Nach links streichen, um zur Uhr zurückzukehren." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "Streichen Sie von der Uhr aus nach links, um die Widgets anzuzeigen." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Nach rechts streichen, um zur Uhr zurückzukehren." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "Streichen Sie von der Uhr aus nach oben, um Apps anzuzeigen." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Nach unten streichen, um zur Uhr zurückzukehren." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "Streichen Sie von der Uhr aus nach unten, um die Momente-Leiste anzuzeigen." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Nach oben streichen, um zur Uhr zurückzukehren." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "Die Uhr ist Ihr Startbildschirm. Um loszulegen, tippen Sie unten." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Zum Installieren und Deinstallieren von Anwendungen nutzen Sie die Samsung Gear-Anwendung auf Ihrem Mobilgerät." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Dies ist die Hauptstruktur des Startbildschirms." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "Dies ist das Layout Ihres Startbildschirms." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Leer" diff --git a/home/res/po/el_GR.po b/home/res/po/el_GR.po new file mode 100755 index 0000000..394f58c --- /dev/null +++ b/home/res/po/el_GR.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Εφαρμογές" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Επόμενο" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Όχι επανάλ." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Διαγραφή όλων" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Δεν είναι δυνατή η αφαίρεση." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Πατ. παρατετ. ένα widget για να το μετακινήσετε." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Η αρχική οθόνη άλλαξε." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Φόρτωση..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Δεν είναι δυνατή η φόρτωση δεδομένων. Πατήστε για να δοκιμάσετε ξανά." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Δεν είναι δυνατή η προσθήκη της εφαρμογής. Δεν υπάρχει χώρος στην αρχική οθόνη." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Δεν είναι δυνατή η προσθήκη του widget. Δεν υπάρχει χώρος στην αρχική οθόνη." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Η εφαρμογή υπάρχει ήδη." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Το widget υπάρχει ήδη." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Ακύρωση" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Η διάταξη της αρχικής οθόνης άλλαξε." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Αυτή η εφαρμογή θα καταργηθεί από την αρχική οθόνη. Δεν πρόκειται να διαγραφεί από τη συσκευή." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Κατάργηση εφαρμογής" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Κατάργηση widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Αυτό το widget θα καταργηθεί από την αρχική οθόνη. Δεν πρόκειται να διαγραφεί από τη συσκευή." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Λειτ. εξοικ. ενέργ. Ultra" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Δεν είναι δυνατή η προσθήκη widget. Συμπληρώθηκε ο μέγιστος αριθμός widget (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Δεν είναι δυνατή η προσθήκη εφαρμογής. Συμπληρώθηκε ο μέγιστος αριθμός εφαρμογών (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Δεν είναι δυνατή η προσθήκη σελίδας." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Κανονική λειτουργία" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Η λειτουργία εξοικονόμησης ενέργειας απενεργοποιήθηκε." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Η λειτουργία εξοικονόμησης ενέργειας ενεργοποιήθηκε." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Πρόσφ. εφ." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Δεν είναι δυνατή η προσθήκη εφαρμογής. Συμπληρώθηκε ο μέγιστος αριθμός εφαρμογών (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Δεν είναι δυνατή η προσθήκη widget. Συμπληρώθηκε ο μέγιστος αριθμός widget (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Κατάργηση σελίδας" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Αυτή η σελίδα και το περιεχόμενό της θα καταργηθεί." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Κατάργηση" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Εισάγετε την κάρτα SIM για παροχή πρόσβασης στις υπηρεσίες δικτύου." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Λειτουργία αποκλεισμού" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Ενεργό" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Ανενεργό" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Το στοιχείο μετακινήθηκε." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Πατήστε δύο φορές για προσθήκη." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Προσθήκη widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Προσθήκη στοιχείου." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Το στοιχείο καταργήθηκε." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Σελίδα %1$d από %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Δεν είναι δυνατή η αναδιάταξη στοιχείων του πίνακα ειδοποιήσεων." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Η ώρα είναι %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Η ώρα είναι %d:%d πμ." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Η ώρα είναι %d:%d μμ." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d νέα στοιχεία" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Συμπληρώθηκε ο μέγιστος αριθμός widget (%s). Διαγράψτε μερικά widget και προσπαθήστε ξανά." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Κάντε σάρ. δεξιά για επισ. στο ρολόι." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Κάντε σάρ. αριστ. για να δείτε widget." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Κάντε σάρ. αριστ. για επισ. στο ρολόι." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Κάντε σάρωση δεξιά για να δείτε ειδοπ." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Κατάργηση της εγκατάστασης του %s;" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Συμπληρώθηκε ο μέγιστος αριθμός widget (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Πατήστε δύο φορές για να ανοίξετε τη γραμμή εφαρμογών." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 νέο στοιχείο" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Πατήστε δύο φορές για ενεργοποίηση." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Ρολόι" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Η θερμοκρασία της συσκευής είναι υπερβολικά υψηλή." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Κάντε λήψη εφαρμογών Gear χρησιμοποιώντας την κινητή συσκευή." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Κατά τον ύπνο" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Λήψη περισσ. εφαρμογών" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Η ενέργεια δεν είναι διαθέσιμη όταν η «Εξοικονόμηση ενέργειας +» είναι ενεργοποιημένη." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "Η λειτουργία %s δεν είναι διαθέσιμη όταν είναι ενεργοποιημένο το Εργαλείο ανάγνωσης οθόνης." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Μην ενοχλείτε" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Δεν επιτρ. ταυτ. ενεργ. δεδ. κιν. τηλ. και λειτ. πτήσ. Απεν. τη λειτ. πτήσ. και δοκ. ξανά." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Κάντε σάρ. επάνω για επισ. στο ρολόι." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Αυτό ήταν! Ξεκινήστε με το Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Δίκτυα κινητής" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Πρ. κλ. στο Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Έναρξη" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Έξοδος" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Καλώς ορίσατε! Για να μάθετε για το Gear, πατήστε το κουμπί." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Έγινε αίτηση για απενεργοποίηση" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Έγινε αίτηση για ενεργοποίηση" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Σύρ. κάτω την πάνω άκρη, για προβ. ενδείξεων στο ρολόι." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Σύρ. επάνω το κάτω άκρο για προβολή εφαρμογών στο ρολόι." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Για επιστροφή, σύρετε της επάνω άκρη προς τα κάτω." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Για την εγκατάσταση ή την κατάργηση εγκατάστασης εφαρμογών, χρησιμοποιήστε την εφαρμογή Samsung Gear στην κινητή συσκευή σας." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Αυτή είναι η κύρια δομή της αρχικής οθόνης." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Κενό" diff --git a/home/res/po/en.po b/home/res/po/en.po new file mode 100755 index 0000000..01ade24 --- /dev/null +++ b/home/res/po/en.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Apps" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Next" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Don't repeat." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Delete all" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Unable to remove." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Tap and hold a widget to move it." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Home screen changed." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Loading..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Unable to load data. Tap to retry." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Unable to add application. No more room on home screen." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Unable to add widget. No more room on home screen." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Application already exists." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget already exists." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Cancel" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Home screen layout changed." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "This application will be removed from the home screen. It will not be deleted from the device." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Remove application" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Remove widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "This widget will be removed from the home screen. It will not be deleted from the device." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultra power saving mode" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Unable to add widget. Maximum number of widgets (%d) reached." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Unable to add application. Maximum number of applications (%d) reached." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Unable to add page." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normal mode" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Power saving mode disabled." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Power saving mode enabled." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Recent apps" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Unable to add application. Maximum number of applications (%s) reached." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Unable to add widget. Maximum number of widgets (%s) reached." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Remove page" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "This page and its content will be removed." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Remove" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Insert SIM card to access network services." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blocking mode" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "On" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Off" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Item moved." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Double tap to add." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Add widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Item added." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Item removed." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Page %1$d of %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Cannot reorder notification board items." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "It is %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "It is %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "It is %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d new items" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "The maximum number of widgets (%s) has been reached. Delete some widgets and try again." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Swipe left to view widgets." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Swipe right to view notifications." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Uninstall %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Maximum number of widgets (%s) reached." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Double tap to open app tray." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 new item" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Double tap to enable." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Clock" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "The device temperature is too high." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Download Gear applications using mobile device." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "While sleeping" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Get more applications" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Action not available while Power saving + enabled." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s is not available while Screen reader is enabled." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Do not disturb" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Unable to turn on Mobile data while Flight mode enabled. Disable Flight mode and try again." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Swipe upwards to go back to clock." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "That's it! Get into Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobile networks" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Fwd calls to Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Start" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Exit" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Welcome! Tap the button below to learn how to use your Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Requested to disable" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Requested to enable" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Swipe top edge down to see indicator icons on clock." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Swipe bottom edge up to view apps on clock." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Swipe top edge down to go back." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "To install or uninstall applications, use the Samsung Gear application on your mobile device." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "This is the main structure of the home screen." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Empty" diff --git a/home/res/po/en_PH.po b/home/res/po/en_PH.po new file mode 100755 index 0000000..8eba95d --- /dev/null +++ b/home/res/po/en_PH.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Apps" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Next" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Don't repeat" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Delete all" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Unable to remove." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Tap and hold a widget to move it." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Home screen changed." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Loading..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Unable to load data. Tap to retry." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Unable to add application. No more room on home screen." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Unable to add widget. No more room on home screen." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Application already exists." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget already exists." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Cancel" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Home screen layout changed." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "This application will be removed from the home screen. It will not be deleted from the device." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Remove application" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Remove widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "This widget will be removed from the home screen. It will not be deleted from the device." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultra power saving mode" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Unable to add widget. Maximum number of widgets (%d) reached." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Unable to add application. Maximum number of applications (%d) reached." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Unable to add page." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normal mode" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Power saving mode disabled." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Power saving mode enabled." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Recent apps" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Unable to add application. Maximum number of applications (%s) reached." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Unable to add widget. Maximum number of widgets (%s) reached." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Remove page" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "This page and its content will be removed." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Remove" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Insert SIM card to access network services." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blocking mode" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "On" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Off" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Item moved." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Double tap to add." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Add widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Item added." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Item removed." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Page %1$d of %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Cannot reorder notification board items." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "It is %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "It is %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "It is %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d new items" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "The maximum number of widgets (%s) has been reached. Delete some widgets and try again." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Swipe left to view widgets." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Swipe right to view notifications." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Uninstall %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Maximum number of widgets (%s) reached." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Double tap to open app tray." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 new item" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Double tap to enable." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Clock" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "The device temperature is too high." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Download Gear applications using mobile device." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "While sleeping" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Get more applications" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Action not available while Power saving + enabled." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s is not available while Screen reader is enabled." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Do not disturb" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Unable to turn on Mobile data while Flight mode enabled. Disable Flight mode and try again." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Swipe upwards to go back to clock." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "That's it! Get into Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobile networks" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Fwd calls to Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Start" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Exit" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Welcome! Tap the button below to learn how to use your Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Requested to disable" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Requested to enable" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Swipe top edge down to see indicator icons on clock." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Swipe bottom edge up to view apps on clock." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Swipe top edge down to go back." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "To install or uninstall applications, use the Samsung Gear application on your mobile device." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "This is the main structure of the home screen." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Empty" diff --git a/home/res/po/en_US.po b/home/res/po/en_US.po new file mode 100755 index 0000000..70d5e26 --- /dev/null +++ b/home/res/po/en_US.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Apps" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Next" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Don't repeat" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Delete all" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Unable to remove." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Press and hold a widget to move it." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Home screen changed." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Loading..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Unable to load data. Tap to retry." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Unable to add application. No more room on Home screen." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Unable to add widget. No more room on Home screen." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Application already exists." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget already exists." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Cancel" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Home screen layout changed." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "This application will be removed from the Home screen. It will not be deleted from the device." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Remove application" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Remove widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "This widget will be removed from the Home screen. It will not be deleted from the device." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultra power saving mode" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Unable to add widget. Maximum number of widgets (%d) reached." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Unable to add application. Maximum number of applications (%d) reached." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Unable to add page." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normal mode" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Power saving mode disabled." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Power saving mode turned on." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Recent apps" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Unable to add application. Maximum number of applications (%s) reached." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Unable to add widget. Maximum number of widgets (%s) reached." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Remove page" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "This page and its content will be removed." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Remove" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Insert SIM card to access network services." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blocking mode" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "On" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Off" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Item moved." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Double tap to add." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Add widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Item added." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Item removed." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Page %1$d of %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Cannot reorder notification board items." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "It is %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "It is %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "It is %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d new items" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "The maximum number of widgets (%s) has been reached. Delete some widgets and try again." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Swipe left to view widgets." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Swipe left to view the clock." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Swipe right to view notifications." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Uninstall %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Maximum number of widgets (%s) reached." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Double tap to open app tray." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 new item" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Double tap to turn on." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Clock" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "The device temperature is too high." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Download Gear applications using mobile device." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "While sleeping" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Get more applications" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Action not available while Power saving + on." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s is not available while Screen reader is on." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Do not disturb" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Unable to use Mobile data while Airplane mode is on. Turn off Airplane mode and try again." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Swipe upwards to go back to clock." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "That's it! Get into Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobile networks" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Fwd calls to Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Start" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Exit" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Welcome! Tap the button below to learn how to use your Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Requested to disable" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Requested to enable" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Swipe top edge downwards to see indicator icons on clock." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Swipe bottom edge upwards to view apps on clock." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Swipe top edge downwards to go back." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "To install or uninstall applications, use the Samsung Gear application on your mobile device." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "This is the main structure of the Home screen." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Empty" diff --git a/home/res/po/es_ES.po b/home/res/po/es_ES.po new file mode 100755 index 0000000..da73045 --- /dev/null +++ b/home/res/po/es_ES.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplicaciones" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Siguiente" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "No repetir" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Eliminar todo" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "No se puede eliminar" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Mantenga pulsado un widget para moverlo" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Se ha cambiado la pantalla de inicio" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Cargando..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "No se pueden cargar datos. Pulse para volver a intentarlo." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "No se puede añadir la aplicación. No hay espacio disponible en la pantalla de inicio." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "No se puede añadir el widget. No hay espacio disponible en la pantalla de inicio." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "La aplicación ya existe." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "El widget ya existe." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Cancelar" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Se ha cambiado el diseño de la pantalla de inicio." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Se eliminará esta aplicación de la pantalla de inicio. No obstante, no se eliminará del dispositivo." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Eliminar aplicación" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Eliminar widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Se eliminará este widget de la pantalla de inicio. No obstante, no se eliminará del dispositivo." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Modo Ultrahorro energía" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "No se puede añadir widget. Se ha alcanzado el número máximo de widgets (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "No se puede añadir aplicación. Número máximo de aplicaciones (%d) alcanzado." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "No se puede añadir la página." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Modo normal" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Modo Ahorro de energía desactivado." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Modo de ahorro de energía activado." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Aplic recien" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "No se puede añadir la aplicación. Se ha alcanzado el número máximo de aplicaciones (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "No se puede añadir el widget. Se ha alcanzado el número máximo de widgets (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Eliminar página" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Se eliminará esta página y su contenido." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Eliminar" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Inserte la tarjeta SIM para acceder a los servicios de red." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Modo Bloqueo" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Activado" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Desactivado" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Elemento movido." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Pulse dos veces para añadir." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Añadir widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Elemento añadido." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Elemento eliminado." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Página %1$d de %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "No se pueden reordenar los elementos del panel de notificación." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Son las %1$d:%2$d" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Son las %d:%d AM" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Son las %d:%d PM" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d elementos nuevos" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Se ha alcanzado el número máximo de widgets (%s). Elimine algunos y vuelva a intentarlo." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Deslice a dcha para volver al reloj." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Deslice a izquierda para ver widgets." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Deslice a izqda para volver al reloj." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Deslice a dcha para ver notificac." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "¿Desinstalar %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Se alcanzó el número máximo de widgets (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Pulse dos veces para abrir la bandeja de aplicaciones." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 elemento nuevo" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Pulse dos veces para activarlo." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Reloj" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "La temperatura del dispositivo es demasiado alta" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Descargue aplicaciones de Gear mediante el dispositivo móvil." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Mientras duerme" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Obtener más aplicaciones" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Acción no disponible con Ahorro de energía + activado." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s no está disponible mientras Lector de pantalla esté activado." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "No molestar" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Imposible activ datos móviles con modo Avión activ. Desac modo Avión y vuelva a intentarlo." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Deslice arriba para volver al reloj." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "¡Eso es! ¡Conozca Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Redes móviles" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Desví llam a Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Iniciar" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Salir" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Bienvenido. Pulse siguiente botón para aprender a usar Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Solicitud de desactivación" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Solicitud de activación" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Deslice borde sup ab para ver icon indicadores en reloj." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Deslice el borde inferior arr para ver aplic en reloj." + +msgid "IDS_ST_BUTTON_OK" +msgstr "Aceptar" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Deslice el borde superior hacia abajo para volver." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Para instalar o desinstalar aplicaciones, utilice la aplicación de Samsung Gear en su dispositivo móvil." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Esta es la estructura principal de la pantalla de inicio." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Vacío" diff --git a/home/res/po/es_US.po b/home/res/po/es_US.po new file mode 100755 index 0000000..058d19e --- /dev/null +++ b/home/res/po/es_US.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplic." + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Siguiente" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "No volver a mostrar" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Eliminar todo" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "No se puede eliminar." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Mantenga pulsado el widget para moverlo." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Se cambió la pantalla de inicio." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Cargando..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "No es posible cargar los datos. Pulse para intentarlo de nuevo." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "No se puede añadir la aplicación. No hay espacio disponible en la pantalla de inicio." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "No se puede añadir el widget. No hay espacio disponible en la pantalla de inicio." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "La aplicación ya existe." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "El widget ya existe." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Cancelar" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Se ha cambiado el diseño de la pantalla de inicio." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Se eliminará esta aplicación de la pantalla de inicio. No obstante, no se eliminará del dispositivo." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Eliminar aplicación" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Eliminar widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Se eliminará este widget de la pantalla de inicio. No obstante, no se eliminará del dispositivo." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Modo ultra ahorro energía" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "No se puede añadir widget. Se alcanzó el número máximo de widget (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "No se puede añadir la aplicación. Se alcanzó el número máximo de aplicaciones (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "No se puede añadir la página." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Modo normal" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Modo de ahorro de energía desactivado." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Modo Ahorro de energía activado." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Apl. recien." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "No se puede añadir la aplicación. Se alcanzó el número máximo de aplicaciones (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "No se puede añadir el widget. Se alcanzó el número máximo de widget (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Eliminar página" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Se eliminará esta página y su contenido." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Eliminar" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Inserte tarjeta SIM para acceder a los servicios de red" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Modo de bloqueo" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Activado" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Desactivado" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Elemento movido." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Pulse dos veces para añadir." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Añadir Widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Elemento añadido." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Elemento eliminado." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Página %1$d de %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "No se puede reordenar los elementos del panel de notificación." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Son las %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Son las %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Son las %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d elementos nuevos" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Se alcanzó el número máximo de widgets (%s). Elimine algunos widgets e inténtelo de nuevo." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Deslice a la derecha para volver al reloj." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Deslice a la izquierda para ver widgets." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Deslice a la izquierda para volver al reloj." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Deslice a la derecha para ver notificaciones." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "¿Desinstalar %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Se alcanzó el número máximo de widgets (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Pulse dos veces para abrir la bandeja de aplicaciones." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nuevo elemento" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Pulse dos veces para activar." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Reloj" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "La temperatura del dispositivo es demasiado alta." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Descargar aplicaciones de Gear a través del dispositivo móvil." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Mientras duerme" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Obtener más aplicaciones" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "La acción no está disponible mientras Ahorro de energía + activado." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s no se encuentra disponible mientras Lector de pantalla esté activado." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "No molestar" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "No es pos. activ. Dat. móviles mientras que el perfil fuera de línea está activ. Desact. el perfil Fuera de línea e intént. de nuevo." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Deslice hacia arriba para volver al reloj." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "¡Listo! Ahora, a disfrutar de Gear." + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Redes móviles" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Desv. llam. a Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Iniciar" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Salir" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "¡Bienvenido! Pulse el sig. botón para aprender a usar Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Desactivación solicitada" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Activación solicitada" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Deslice borde superior hacia abajo para ver indicadores." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Deslice borde inferior arriba para ver aplicaciones." + +msgid "IDS_ST_BUTTON_OK" +msgstr "Aceptar" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Deslice el borde superior hacia abajo para retroceder." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "En el reloj, deslice el borde superior hacia abajo para ver los íconos del indicador." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "En el reloj, deslice el borde inferior hacia arriba para ver las aplicaciones." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "En el reloj, deslice hacia la derecha para ver las notificaciones." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Deslice a la izquierda para volver al reloj." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "En el reloj, deslice hacia la izquierda para ver los widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Deslice a la derecha para volver al reloj." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "En el reloj, deslice hacia arriba para ver las aplicaciones." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Deslice hacia abajo para volver al reloj." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "En el reloj, deslice hacia abajo para ver la barra Momentos." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Deslice hacia arriba para volver al reloj." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "El reloj es la pantalla de inicio. Pulse abajo para comenzar." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Para instalar o desinstalar aplicaciones, use la aplicación Samsung Gear en el dispositivo móvil." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Esta es la estructura principal de la pantalla de inicio." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "Este es el diseño de la pantalla de inicio." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Vacío" diff --git a/home/res/po/et.po b/home/res/po/et.po new file mode 100755 index 0000000..825d834 --- /dev/null +++ b/home/res/po/et.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Rakendused" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Järgmine" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Vidin" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Ära korda" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Kustuta kõik" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Ei saa eemaldada." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Vidina teisaldamiseks toksake ja hoidke seda." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Avaekraani on muudetud." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Laadimine..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Andmeid ei saa laadida. Toksake, et proovida uuesti." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Rakendust ei saa lisada. Avaekraanil pole rohkem ruumi." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Vidinat ei saa lisada. Avaekraanil pole rohkem ruumi." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Rakendus on juba olemas." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Vidin on juba olemas." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Tühista" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Avaekraani paigutust on muudetud." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "See rakendus eemaldatakse avaekraanilt. Seda ei kustutata seadmest." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Eemalda rakendus" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Eemalda vidin" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "See vidin eemaldatakse avaekraanilt. Seda ei kustutata seadmest." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ülim energiasäästurežiim" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Vidinat ei saa lisada. Vidinate maksimaalne arv (%d) on saavutatud." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Rakendust ei saa lisada. Rakenduste maksimaalne arv (%d) on saavutatud." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Lehte ei saa lisada." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Tavarežiim" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Energiasäästurežiim on desaktiveeritud." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Energiasäästurežiim on aktiveeritud." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Hilj. rak.-d" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Rakendust ei saa lisada. Rakenduste maksimaalne arv (%s) on saavutatud." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Vidinat ei saa lisada. Vidinate maksimaalne arv (%s) on saavutatud." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Eemalda leht" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "See leht ja selle sisu eemaldatakse." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Eemalda" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Sisestage SIM-kaart, et paaseda ligi vorguteenustele." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blokeerimis-\nrežiim" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Sees" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Väljas" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Üksus on teisaldatud." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Toksake kaks korda, et lisada." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Lisa vidin" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Üksus on lisatud." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Üksus on eemaldatud." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Leht %1$d/%2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Teavituste tahvli üksusi ei saa ümber järjestada." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Kell on %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Kell on %d:%d EL." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Kell on %d:%d PL." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d uut üksust" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Vidinate maksimaalne arv (%s) on saavutatud. Kustutage mõni vidin ja proovige uuesti." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Kellale naasmiseks libistage paremale." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Vidinate kuvamiseks libist. vasakule." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Kellale naasmiseks libistage vasakule." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Teavituste kuvamiseks lib. paremale." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Kas desinstallida %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Vidinate maksimaalne arv (%s) on saavutatud." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Toksake kaks korda, et avada rakenduste salve." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 uus üksus" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Toksake kaks korda, et aktiveerida." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Kell" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Seadme temperatuur on liiga korge." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Saate laadida Geari rakendusi alla mobiilsideseadmes." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Magamise ajal" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Hangi rohkem rakendusi" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Toiming ei ole saadaval, kui Energia säästmine + on aktiveeritud." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s ei ole saadaval, kui ekraanilugeja on aktiveeritud." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Mitte segada" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Mob. andmesidet ei saa lennurežiimis sisse lülitada. Desakt. lennurežiim ja proovige veel." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Kellale naasmiseks libistage üles." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Ongi kõik! Alustage seadme Gear kasutamist!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobiilivõrgud" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Suuna kõned Geari" + +msgid "IDS_ST_BUTTON_START" +msgstr "Käivita" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Välju" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Tere tulemast! Toksake nuppu, et tutvuda Geari kasutamisega." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Taotletud desaktiveerimist" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Taotletud aktiveerimist" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Libistage ülaservast alla, et näha kellal indik. ikoone." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Rakenduste kuvamiseks kellal libistage allservast üles." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Naasmiseks libistage ülaservast allapoole." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Rakenduste installimiseks või desinstallimiseks kasutage oma mobiilsideseadmes rakendust Samsung Gear." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "See on avaekraani põhistruktuur." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Tühi" diff --git a/home/res/po/eu.po b/home/res/po/eu.po new file mode 100755 index 0000000..675a0ba --- /dev/null +++ b/home/res/po/eu.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplikazioak" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Hurrengoa" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "ElMezularitza tua" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Ez errepik." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Ezab. guztiak" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Ezin da kendu" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Ukitu eta eutsi widget bat mugitzeko" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Pantaila nagusia aldatuta" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Kargatzen..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Ezin dira datuak kargatu. Ukitu berriz saiatzeko." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Ezin da aplikazioa gehitu. Ez dago lekurik pantaila nagusian." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Ezin da widgeta gehitu. Ez dago lekurik pantaila nagusian." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplikazioa badago lehendik." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widgeta badago lehendik." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Ezeztatu" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Pantaila nagusiaren diseinua aldatu da." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Aplikazio hau pantaila nagusitik kenduko da. Ez da gailutik ezabatuko." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Kendu aplikazioa" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Kendu widgeta" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Widget hau pantaila nagusitik kenduko da. Ez da gailutik ezabatuko." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Bat. aurrezt. ultramodua" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Ezin da widget aplikazioa gehitu. Gehienezko widget kopurura (%d) iritsi zara." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Ezin da aplikazioa gehitu. Gehieneko aplikazio kopurura (%d) iritsi zara." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Ezin da orria gehitu." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Modu normala" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Bateria aurrezteko modua ezgaitu da." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Bateria aurrezteko modua gaitu da." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Berr. aplik." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Ezin da aplikazioa gehitu. Gehieneko aplikazio kopurura (%s) iritsi zara." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Ezin da widgeta gehitu. Gehieneko widget kopurura (%s) iritsi zara." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Kendu orria" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Orri hau eta bere edukia ezabatuko dira." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Kendu" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Sartu SIM txartela sare zerbitzuetan sartzeko." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blokeo modua" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Aktibatuta" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Desaktibatuta" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Elementua mugituta." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Ukitu bi aldiz gehitzeko." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Gehitu widgeta" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Elementua gehituta." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Elementua kenduta." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%1$d. orria %2$d-(e)tik" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Ezin dira berrordenatu jakinarazpenen paneleko elementuak." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "%1$d:%2$d dira" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Goizeko %d:%d-a(k) d(ir)a" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Arratsaldeko %d:%d-a(k) d(ir)a" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d elementu berri" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Widgeten gehieneko kopurura (%s) iritsi zara. Ezabatu widget janari eta saiatu berriz." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Irris. esk. ordularian atzera joateko." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Irristatu ezkerrera widgetak ikusteko." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Irris. ezk. ordularian atzera joateko." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Irristatu esk. jakinarazp. Ikusteko." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Desinstalatu %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Widget-en gehieneko kopurura (%s) iritsi zara." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Ukitu bi aldiz aplikazio ontzia irekitzeko." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "Elementu berri 1" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Ukitu bi aldiz gaitzeko." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Erlojua" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Gailuaren tenperatura altuegia da." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Deskargatu Gear-en aplikazioak gailu mugikorra erabiliz." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Lo egon bitartean" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Lortu aplikazio gehiago" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Ekintza ez dago erabilgarri, + bateria aurrezlea gaituta badago." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s ez dago erabilgarri, Pantaila irakurgailua gaituta badago." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Ez molestatu" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Ezin dira datu mugikorrak piztu, hegaldi modua gaituta badago. Ezgaitu eta saiatu berriz." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Irristatu gora, erlojura itzultzeko." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Hori da! Murgildu Gear-en!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Sare mugikorrak" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Birb. deiak Gear-era" + +msgid "IDS_ST_BUTTON_START" +msgstr "Hasi" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Irten" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Ongi etorri! Ukitu beheko botoia, Gear erabiltzen ikasteko." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Ezgaitzeko eskatuta" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Gaitzeko eskatuta" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Irris. goiko ertza behera, ikonoak erlojuan ikusteko." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Irristatu beheko ertzetik gora erlojuan apl. ikusteko." + +msgid "IDS_ST_BUTTON_OK" +msgstr "Ados" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Irristatu goiko ertzetik beherantz, atzera egiteko." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Aplikazioak instalatzeko edo desinstalatzeko, erabili gailu mugikorreko Samsung Gear aplikazioa." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Hau da pantaila nagusiaren egitura nagusia." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Hutsik" diff --git a/home/res/po/fa.po b/home/res/po/fa.po new file mode 100755 index 0000000..5d70d1c --- /dev/null +++ b/home/res/po/fa.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "برنامه" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "بعدی" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "نوار ابزار" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "تکرار نشود" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "حذف همه" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "حذف ممکن نیست." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "برای جابجا کردن ابزارک روی آن ضربه زده و نگه دارید." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "صفحه اصلی تغییر کرد." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "در حال دانلود..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "بارگیری داده ممکن نیست. برای امتحان مجدد ضربه بزنید." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "افزودن برنامه ممکن نیست. فضای بیشتری در صفحه اصلی وجود ندارد." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "افزودن ویجت ممکن نیست. فضای بیشتری در صفحه اصلی وجود ندارد." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "برنامه از قبل وجود دارد." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "ویجت از قبل وجود دارد." + +msgid "IDS_COM_POP_CANCEL" +msgstr "لغو" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "چیدمان صفحه اصلی تغییر کرد." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "این برنامه از صفحه اصلی حذف می‌شود.ولی از دستگاه حذف نخواهد شد." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "حذف برنامه" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "حذف ویجت" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "این ویجت از صفحه اصلی حذف می‌شود. ولی از دستگاه حذف نخواهد شد." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "حالت ذخیره نیروی بیشتر" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "افزودن ویجت ممکن نیست. تعداد ویجت‌ها به حداکثر مجاز (‎%d) رسیده است." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "افزودن برنامه ممکن نیست. تعداد شرکت‌کنندگان به حداکثر مجاز (‎%d) رسید." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "افزودن صفحه ممکن نیست." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "حالت عادی" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "حالت ذخیره نیرو غیرفعال شد." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "حالت ذخیره نیرو فعال شد." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "برنامه اخیر" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "افزودن برنامه ممکن نیست. تعداد برنامه‌ها به حداکثر مجاز (‎%s) رسید." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "افزودن ویجت ممکن نیست. تعداد ویجت‌ها به حداکثر مجاز (‎%s) رسید." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "حذف صفحه" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "این صفحه و محتوای آن حذف خواهد شد." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "حذف" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "برای دستیابی به خدمات شبکه سیم کارت را وارد کنید." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "حالت انسداد" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "روشن" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "خاموش" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "مورد منتقل شد." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "برای افزودن دو بار ضربه بزنید." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "افزودن ابزار" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "مورد افزوده شد." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "مورد حذف شد." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "صفحه %1$d از %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "تغییر ترتیب موارد در صفحه اعلان‌ها ممکن نیست." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "%1$d:%2$d است." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "%d:%d صبح است." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "%d:%d عصر است." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d مورد جدید" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "تعداد ویجت‌ها به حداکثر (‎%s) رسیده است. چند ویجت را حذف کرده و دوباره امتحان کنید." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "برای برگشت به ساعت به راست بکشید." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "برای مشاهده ویجت‌ها به چپ بکشید." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "برای برگشت به ساعت به چپ بکشید." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "برای مشاهده اعلان‌ها به راست بکشید." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "لغو نصب %s؟" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "تعداد ویجت‌ها به حداکثر مجاز (‎%s) رسیده است." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "برای باز کردن سینی برنامه‌ها دو بار ضربه بزنید." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 مورد جدید" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "برای فعال‌سازی دو بار ضربه بزنید." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "ساعت" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "دمای دستگاه بسیار بالا است" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "برنامه‌های Gear را با استفاده از دستگاه تلفن همراه دانلود کنید." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "هنگام خواب" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "دریافت برنامه‌های بیشتر" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "عملکرد هنگام فعال بودن ذخیره نیرو + در دسترس نیست." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "وقتی صفحه‌خوان فعال است، ‎%s در دسترس نیست." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "مزاحم نشوید" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "وقتی حالت پرواز فعال است، داده تلفن همراه روشن نمی‌شود. حالت پرواز را غیرفعال وامتحان کنید." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "برای بازگشت به ساعت، به بالا بکشید." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "به همین سادگی! از Gear لذت ببرید!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "شبکه تلفن همراه" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "هدایت تماس بهGear" + +msgid "IDS_ST_BUTTON_START" +msgstr "شروع" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "خروج" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "خوش آمدید! برای نحوه کار با Gear، روی دکمه زیر ضربه بزنید." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "غیرفعال‌سازی درخواست شد" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "فعال‌سازی درخواست شد" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "جهت نمایش نمادها روی ساعت، بالای صفحه را به پایین بکشید." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "جهت نمایش برنامه‌ها در ساعت،پایین صفحه را به بالا بکشید." + +msgid "IDS_ST_BUTTON_OK" +msgstr "تأیید" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "برای بازگشت، لبه بالایی صفحه را به سمت پایین بکشید." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "برای نصب یا لغو نصب برنامه‌ها، از برنامه Samsung Gear در دستگاه تلفن همراهتان استفاده کنید." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "این ساختار مهم صفحه اصلی است." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "خالی" diff --git a/home/res/po/fi.po b/home/res/po/fi.po new file mode 100755 index 0000000..d32ff3b --- /dev/null +++ b/home/res/po/fi.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Sovellukset" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Seuraava" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Pienoisohjelma" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Älä toista." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Poista kaikki" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Ei voi poistaa." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Siirrä pienoisohjelmaa painamalla jonkin aikaa." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Alkunäyttö vaihdettu." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Ladataan..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Tietoja ei voi ladata. Yritä napauttamalla uudelleen." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Sovellusta ei voi lisätä. Alkunäytössä ei ole enää tilaa." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Pienoisohjelmaa ei voi lisätä. Alkunäytössä ei ole enää tilaa." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Sovellus on jo olemassa." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Pienoisohjelma on jo olemassa." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Peruuta" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Alkunäytön asettelu muutettu." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Tämä sovellus poistetaan alkunäytöstä. Sitä ei poisteta laitteesta." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Poista sovellus" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Poista pienoisohj." + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Tämä pienoisohjelma poistetaan alkunäytöstä. Sitä ei poisteta laitteesta." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Er. teh. virransäästötila" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Pienoisohjelmaa ei voi lisätä. Pienoisohjelmien enimmäismäärä (%d) saavutettu." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Sovellusta ei voi lisätä. Sovellusten enimmäismäärä (%d) on saavutettu." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Sivua ei voi lisätä." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normaali tila" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Virransäästötila on poistettu käytöstä." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Virransäästötila käytössä." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Viim. sov." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Sovellusta ei voi lisätä. Sovellusten enimmäismäärä (%s) on saavutettu." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Pienoisohjelmaa ei voi lisätä. Pienoisohjelmien enimmäismäärä (%s) on saavutettu." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Poista sivu" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Tämä sivu ja sen sisältö poistetaan." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Poista" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Pääset verkkopalveluihin asettamalla SIM-kortin paikalleen." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Estotila" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Päällä" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Pois" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Kohde siirretty." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Lisää kaksoisnapauttamalla." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Lisää pienoisohjelma" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Kohde lisätty." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Kohde poistettu." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Sivu %1$d/%2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Ilmoitustaulun kohteiden järjestystä ei voi muuttaa." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Kello on %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Nyt on klo %d:%d ap." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Nyt on klo %d:%d ip." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d uutta kohdetta" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Pienoisohjelmien enimmäismäärä (%s) on saavutettu. Poista pienoisohjelmia ja yritä uudelleen." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Palaa kelloon pyyhkäisemällä oikealle." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Näytä pienoisohj. pyyhk. vasemmalle." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Palaa kelloon pyyhk. vasemmalle." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Näytä ilmoitukset pyyhk. oikealle." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Poistetaanko kohteen %s asennus?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Pienoisohjelmien enimmäismäärä (%s) on saavutettu." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Avaa sovelluspalkki kaksoisnapauttamalla." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 uusi kohde" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Ota käyttöön kaksoisnapauttamalla." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Kello" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Laitteen lämpötila on liian korkea." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Lataa Gear-sovelluksia mobiililaitteella." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Nukkuessa" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Hae lisää sovelluksia" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Toiminto ei ole käytettävissä, kun Virransäästö + on käytössä." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s ei ole käytettävissä, kun Näytönlukija on käytössä." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Älä häiritse" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Mobiilidataa ei voi käyttää lentotilassa. Poista lentotila käytöstä ja yritä uudelleen." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Palaa kelloon pyyhkäisemällä ylöspäin." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Hienoa! Aloita Gearin käyttö!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Matkapuh.verkot" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Soitons. Geariin" + +msgid "IDS_ST_BUTTON_START" +msgstr "Käynnistä" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Poistu" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Tervetuloa! Perehdy Gearin käyttöön napauttamalla painiketta." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Pyydetty poistamaan käytöstä" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Pyydetty ottamaan käyttöön" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Näytä ilmaisinkuv. kellossa pyyhk. yläreunasta alaspäin." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Näytä sovellukset kellossa pyyhk. alareunasta ylöspäin." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Palaa pyyhkäisemällä yläreunasta alaspäin." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Jos haluat asentaa sovelluksia tai poistaa niiden asennuksen, käytä mobiililaitteessa olevaa Samsung Gear -sovellusta." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Tämä on alkunäytön päärakenne." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Tyhjä" diff --git a/home/res/po/fr.po b/home/res/po/fr.po new file mode 100755 index 0000000..e683654 --- /dev/null +++ b/home/res/po/fr.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Applications" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Suivant" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widgets" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Ne plus afficher" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Supprimer tout" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Suppression impossible" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "App. de façon prolongée sur widget pour déplacer." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Ecran d'accueil modifié" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Chargement en cours." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Impossible de charger les données. Appuyez pour réessayer." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Impossible d'ajouter l'application. Espace saturé sur l'écran d'accueil." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Impossible d'ajouter le widget. Espace saturé sur l'écran d'accueil." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "L'application existe déjà." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Le widget existe déjà." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Annuler" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Disposition de l'écran d'accueil modifiée." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Cette application sera supprimée de l'écran d'accueil. Elle sera cependant conservée sur l'appareil." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Supprimer l'appli" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Supprimer le widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ce widget sera supprimé de l'écran d'accueil. Il sera cependant conservé sur l'appareil." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Mode Ultra éco. d'énergie" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Impossible d'ajouter le widget. Nombre maximal de widgets (%d) atteint." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Impossible d'ajouter l'application. Nombre maximal d'applications (%d) atteint." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Impossible d'ajouter une page." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Mode normal" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Mode économie d'énergie désactivé." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Mode Économie d'énergie activé." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Applis réc." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Impossible d'ajouter l'application. Nombre maximal d'applications (%s) atteint." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Impossible d'ajouter le widget. Nombre maximal de widgets (%s) atteint." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Supprimer la page" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Cette page et son contenu vont être supprimés." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Supprimer" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Insérez une carte SIM pour accéder aux services réseau." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Mode Blocage" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Activé" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Désactivé" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Elément déplacé." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Appuyez deux fois pour ajouter." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Ajouter widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Elément ajouté." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Elément supprimé." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Page %1$d sur %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Impossible de réorganiser les éléments de la barre de notifications." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Il est %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Il est %d:%d du matin." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Il est %d:%d de l'après-midi." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d nouveaux éléments" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Le nombre maximal de widgets (%s) a été atteint. Supprimez des widgets, puis réessayez." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Retour horloge : glisser vers la droite" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Widgets : glisser vers la gauche." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Retour horloge : glisser vers la gauche" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Notifications : glisser vers la droite" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Désinstaller %s ?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Nombre maximal de widgets (%s) atteint." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Appuyez deux fois pour ouvrir la barre des applications." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nouvel élément" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Appuyez deux fois pour activer." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Horloge" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "La température de l'appareil est trop élevée." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Téléchargez des applications Gear via votre appareil mobile." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "En dormant" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Obtenir plus d'applis" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Cette action est impossible lorsque le mode Économie d'énergie + est activé." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s n'est pas disponible si le lecteur d'écran est activé." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Ne pas déranger" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Impossible d'activer Données mobiles en mode Hors-ligne. Désactivez ce mode et réessayez." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Retour horloge : glisser vers le haut" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Ça y est ! Utilisez Gear !" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Réseaux mobiles" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Appel vers Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Démarrer" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Quitter" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Bienvenue ! Appuyez sur la touche pour découvrir la Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Demande de désactivation effectuée" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Demande d'activation effectuée" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Notifications : glisser de haut en bas." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Applications : glisser de bas en haut." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Retour : glisser de haut en bas." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "Sur l'horloge, faites glisser votre doigt de haut en bas pour voir les icônes de pointeur." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "Sur l'horloge, faites glisser votre doigt de bas en haut pour afficher les applications." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "Depuis l'horloge, faites glisser votre doigt vers la droite pour afficher les notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Faites glisser votre doigt vers la gauche pour revenir à l'horloge." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "Depuis l'horloge, faites glisser vers la gauche pour afficher les widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Faites glisser votre doigt vers la droite pour revenir à l'horloge." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "Depuis l'horloge, faites glisser vers le haut pour afficher les applications." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Faites glisser votre doigt vers le bas pour revenir à l'horloge." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "Depuis l'horloge, faites glisser votre doigt vers le bas pour afficher la barre Moments." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Faites glisser votre doigt vers le haut pour revenir à l'horloge." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "L'horloge est votre écran d'accueil. Appuyez ci-dessous pour démarrer." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Pour installer ou désinstaller des applications, utilisez l'application Samsung Gear sur votre appareil mobile." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Votre écran d'accueil est organisé de cette façon." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "Voici la disposition de votre écran d'accueil." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Vide" diff --git a/home/res/po/fr_CA.po b/home/res/po/fr_CA.po new file mode 100755 index 0000000..740e305 --- /dev/null +++ b/home/res/po/fr_CA.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Applications" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Suivant" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widgets" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Ne pas rép." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Supprimer tout" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Suppression impossible." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Touchez longuement le widget pour le déplacer." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Écran d'accueil modifié" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Chargement..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Impossible de charger les données. Appuyez pour réessayer." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Impossible d'ajouter l'application. Espace saturé sur l'écran d'accueil." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Impossible d'ajouter le widget. Espace saturé sur l'écran d'accueil." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "L'application existe déjà." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Le widget existe déjà." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Non" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Disposition de l'écran d'accueil modifiée." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Cette application sera supprimée de l'écran d'accueil. Elle sera cependant conservée sur l'appareil." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Supprimer l'appli" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Supprimer le widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ce widget sera supprimé de l'écran d'accueil. Il sera cependant conservé sur l'appareil." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Mode Ultra écon. d'énergie" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Impossible d'ajouter le widget. Nombre maximal de widgets (%d) atteint." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Impossible d'ajouter l'application. Nombre maximal d'applications (%d) atteint." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Impossible d'ajouter une page." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Mode normal" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Mode économie d'énergie désactivé." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Mode Économie d'énergie activé." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Applis réc." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Impossible d'ajouter l'application. Nombre maximal d'applications (%s) atteint." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Impossible d'ajouter le widget. Nombre maximal de widgets (%s) atteint." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Supprimer la page" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Cette page et son contenu vont être supprimés." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Supprimer" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Insérez une carte SIM pour accéder aux services réseau." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Mode Blocage" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Activé" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Désactivé" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Élément déplacé." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Touchez deux fois pour ajouter." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Ajouter widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Élément ajouté." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Élément supprimé." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Page %1$d sur %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Impossible de réorganiser les éléments de la barre de notifications." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Il est %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Il est %d:%d du matin." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Il est %d:%d de l'après-midi." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d nouveaux éléments" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Le nombre maximal de widgets (%s) a été atteint. Supprimez des widgets, puis réessayez." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Glissez à droite pour rev. à horloge." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Glissez à gauche pr aff. des widgets." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Glissez à gauche pour rev. à horloge." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Glissez à droite pour afficher notif." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Désinstaller %s ?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Nombre maximal de widgets (%s) atteint." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Touchez deux fois pour ouvrir la barre des applications." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nouvel élément" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Touchez deux fois pour activer." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Horloge" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "La température de l'appareil est trop élevée." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Téléchargez des applications Gear via votre appareil mobile." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "En dormant" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Obtenir plus d'applis" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Cette action est impossible lorsque le mode Économie d'énergie + est activé." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s n'est pas disponible si le lecteur d'écran est activé." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Ne pas déranger" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Impossible d'activer Données mobiles en mode Hors-ligne. Désactivez ce mode et réessayez." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Glissez vers haut pr reven. à horloge." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Ça y est ! Utilisez Gear !" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Réseaux mobiles" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Tr. app. v. Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Démarrer" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Quitter" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Bienvenue ! Touchez le bouton pour découvrir votre Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Demande de désactivation effectuée" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Demande d'activation effectuée" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Gliss. haut en bas pour aff. icônes indic. sur horloge." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Gliss. bas en haut de l'écr. pour aff. apps sur horloge." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Faites glisser votre doigt de haut en bas pour revenir." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "Sur l'horloge, faites glisser votre doigt de haut en bas pour voir les icônes de pointeur." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "Sur l'horloge, faites glisser votre doigt de bas en haut pour afficher les applications." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "Depuis l'horloge, faites glisser votre doigt vers la droite pour afficher les notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Faites glisser votre doigt vers la gauche pour revenir à l'horloge." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "Depuis l'horloge, faites glisser vers la gauche pour afficher les widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Faites glisser votre doigt vers la droite pour revenir à l'horloge." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "Depuis l'horloge, faites glisser vers le haut pour afficher les applications." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Faites glisser votre doigt vers le bas pour revenir à l'horloge." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "Depuis l'horloge, faites glisser votre doigt vers le bas pour afficher la barre Moments." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Faites glisser votre doigt vers le haut pour revenir à l'horloge." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "L'horloge est votre écran d'accueil. Touchez ci-dessous pour démarrer." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Pour installer ou désinstaller des applications, utilisez l'application Samsung Gear sur votre appareil mobile." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Votre écran d'accueil est organisé de cette façon." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "Voici la disposition de votre écran d'accueil." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Vide" diff --git a/home/res/po/ga.po b/home/res/po/ga.po new file mode 100755 index 0000000..0ed0546 --- /dev/null +++ b/home/res/po/ga.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Feidhmchláir" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Ar aghaidh" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Giuirléid" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Ná hathdhéan" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Scrios gach" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Ní féidir é a bhaint." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Tapáil agus coinnigh giuirléid lena bogadh" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Scáileán baile athraithe." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Ag lódáil..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Ní féidir sonraí a choinneáil. Tapáil le triail arís." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Ní féidir an feidhmchlár a chur leis. Níl aon spás eile fágtha ar an scáileán baile." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Ní féidir giuirléid a chur leis. Níl aon spás eile fágtha ar an scáileán baile." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Tá an feidhmchlár ann cheana." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Tá giuirléid ann cheana." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Cuir ar ceal" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Leagan amach an scáileáin bhaile athraithe." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Bainfear an feidhmchlár seo ón scáileán baile. Ní scriosfar ón ngléas é." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Bain an feidhmchlár" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Bain giuirléid" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Bainfear an ghiuirléid seo ón scáileán baile. Ní scriosfar ón ngléas í." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultramhód coigilte cumh." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Ní féidir giuirléid a chur leis. Uaslíon na ngiuirléidí (%d) bainte amach." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Ní féidir feidhmchlár a chur leis. Uaslíon na bhfeidhmchlár (%d) bainte amach." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Ní féidir leathanach a chur leis." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Mód normálta" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Mód coigilte cumhachta díchumasaithe." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Mód coigilte cumhachta cumasaithe." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "F'chláir le déanaí" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Ní féidir feidhmchlár a chur leis. Uaslíon na bhfeidhmchlár (%s) bainte amach." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Ní féidir giuirléid a chur leis. Uaslíon na ngiuirléidí (%s) bainte amach." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Bain leathanach" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Bainfear an leathanach agus a inneachar." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Bain" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Ionsáigh cárta SIM le seirbhísí líonra a rochtain" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Mód bactha" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Air" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "As" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Mír bogtha." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Déthapáil le cur leis." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Cuir giuirléid leis" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Mír curtha leis." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Mír bainte." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Leathanach %1$d as %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Ní féidir míreanna ar an mbord fógraí a chur in ord nua." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "%1$d:%2$d an t-am anois" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Tá sé %d:%d R.N." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Tá sé %d:%d I.N." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d mír nua" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Tá uaslíon na ngiuirléidí (%s) bainte amach. Scrios roinnt giuirléidí agus triail arís." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Svaidhp. ar dheis le fill. ar chlog." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Svaidhp. ar clé le giuirléidí a fheic." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Svaidhp. ar clé le fill. ar an gclog." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Svaidhp. ar dheis le harc. ar fhógraí." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Díshuiteáil %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Uaslíon na ngiuirléidí (%s) bainte amach." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Déthapáil leis an tráidire feidhmchlár a oscailt." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 mhír nua" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Déthapáil lena chumasú." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Clog" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Tá teocht an ghléis ró-ard." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Íoslódáil feidhmchláir Gear le gléas móibíleach." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Le linn codlata" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Faigh breis feidhmchlár" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Níl an gníomh ar fáil agus Coigilt chumhachta + cumasaithe." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "Níl %s ar fáil agus Léitheoir scáileáin cumasaithe." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Ná cuir isteach" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Ní féidir Son. móib. a chasadh air agus mód Eitilte cumas. Díchum. Mód eit. agus triail arís." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Svaidhp. suas le filleadh ar chlog." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Sin a bhfuil! Tosaigh ar úsáid Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Líonraí móibíl." + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Ar agh. go Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Tosaigh" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Scoir" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Fáilte! Tapáil an cnaipe le foghlaim conas do Gear a úsáid." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Díchumasú iarrtha" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Cumasú iarrtha" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Svaidhp. barrimeall anuas le táscairí a fheic. ar chlog." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Svaidhp. bunimeall aníos le hamh. ar f.chláir ar chlog." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Svaidhpeáil barimeall anuas le gabháil siar." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Le feidhmchláir a shuiteáil nó a dhíshuiteáil, úsáid feidhmchlár Samsung Gear ar do ghléas móibíleach." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Seo príomhstruchtúr an scáileáin bhaile." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Folamh" diff --git a/home/res/po/gl.po b/home/res/po/gl.po new file mode 100755 index 0000000..5eda57a --- /dev/null +++ b/home/res/po/gl.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplicacións" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Seguinte" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Non repetir" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Eliminar todos" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Non se pode eliminar" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Mantén tocado un widget para movelo" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Pantalla de inicio cambiada" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Cargando..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Non se poden cargar datos. Toca para tentalo de novo." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Non se pode engadir a aplicación. Non hai máis espazo na pantalla de inicio." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Non se pode engadir o widget. Non hai máis espazo na pantalla de inicio." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "A aplicación xa existe." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "O widget xa existe." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Cancelar" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Cambiouse o deseño da pantalla de inicio." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Esta aplicación eliminarase da pantalla de inicio. Non se eliminará do dispositivo." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Eliminar aplicación" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Eliminar widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Este widget eliminarase da pantalla de inicio. Non se eliminará do dispositivo." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Modo Aforro enerxía ultra" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Non se pode engadir o widget. Alcanzouse o número máximo de widgets (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Non se pode engadir a aplicación. Alcanzouse o número máximo de aplicacións (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Non se pode engadir a páxina." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Modo normal" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Modo Aforro de enerxía desactivado." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Modo de aforro de enerxía activado." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Aplic.recen." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Non se pode engadir a aplicación. Alcanzouse o número máximo de aplicacións (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Non se pode engadir o widget. Alcanzouse o número máximo de widgets (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Eliminar páxina" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Eliminarase esta páxina e os seus contidos." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Eliminar" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Insira a tarxeta SIM para acceder aos servizos de rede." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Modo Bloqueo" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Activado" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Desactivado" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Elemento movido." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Toca dúas veces para engadir." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Engadir widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Elemento engadido." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Elemento eliminado." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Páxina %1$d de %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Non se poden reordenar os elementos do taboleiro de notificacións." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Son as %1$d:%2$d" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Son as %d:%d AM" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Son as %d:%d PM" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d elementos novos" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Alcanzouse o número máximo de widgets (%s). Elimina algún widget e téntao de novo." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Pasa o dedo á der. para volver ao rel." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Pasa o dedo á esq. para ver widgets." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Pasa o dedo á esq. para volver ao rel." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Pasa o dedo á der. para ver notific." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Desexas desinstalar %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Alcanzouse o número máximo de widgets (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Toca dúas veces para abrir a bandexa de aplicacións." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 novo elemento" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Toca aquí dúas veces para activar." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Reloxo" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "A temperatura do dispositivo é demasiado elevada" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Descarga as aplicacións de Gear mediante o dispositivo móbil." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Mentres dormes" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Obter máis aplicacións" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Acción non dispoñible cando Aforro de enerxía + está activado." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s non está dispoñible con Lector da pantalla activado." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Non molestar" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Imposible activar datos móbiles co modo Avión activa. Desactiva modo avión e volve tentalo." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Pasa o dedo arriba para volver ao rel." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Iso é! Entra en Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Redes móbiles" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Desvi.cham.a Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Iniciar" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Saír" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Benvido. Toca o botón para obter info. de como usar Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Solicitouse a desactivación" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Solicitouse a activación" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Pasa dedo bordo sup.abaixo para ver ico.indic.no reloxo." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Pasa dedo dsd.bordo infer.arriba para ver apl. no relox." + +msgid "IDS_ST_BUTTON_OK" +msgstr "Aceptar" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Pasa o dedo do bordo superior cara abaixo para volver." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Para instalar ou desinstalar aplicacións, utiliza a aplicación Samsung Gear do teu dispositivo móbil." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Esta é a estrutura principal da pantalla de inicio." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Baleiro" diff --git a/home/res/po/gu.po b/home/res/po/gu.po new file mode 100755 index 0000000..4785b8b --- /dev/null +++ b/home/res/po/gu.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "એપ્સ" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "પછીનું" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "વિજેટ" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "દોહરાવશો નહીં." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "બધુ હટાવો" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "કાઢવામાં અસમર્થ." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "વિજેટ ખસેડવા માટે તેને ટેપ કરો અને હોલ્ડ કરો." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "હોમ સ્ક્રીન બદલાઇ ગઈ છે." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "લોડિંગ..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "ડેટા લોડ કરવામાં અસમર્થ. ફરીથી પ્રયાસ કરવા માટે ટેપ કરો." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "એપ્લિકેશન ઉમેરવા માટે અસમર્થ. હોમ સ્ક્રીન પર હવે વધુ અવકાશ નથી." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "વિજેટ ઉમેરવામાં અસમર્થ. હોમ સ્ક્રીન પર હવે વધુ અવકાશ નથી." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "એપ્લિકેશન પહેલાંથી હયાત છે." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "વિજેટ પહેલાંથી હયાત છે." + +msgid "IDS_COM_POP_CANCEL" +msgstr "રદ કરો" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "હોમ સ્ક્રીન લેઆઉટ બદલાયું છે." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "હોમ સ્ક્રીનમાંથી આ એપ્લિકેશનને દૂર કરવામાં આવશે. ઉપકરણમાંથી તે દૂર થશે નહીં." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "એપ્લિકેશન દૂર કરો" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "વિજેટ દૂર કરો" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "હોમ સ્ક્રીનમાંથી આ વિજેટને દૂર કરવામાં આવશે. ઉપકરણમાંથી તે દૂર થશે નહીં." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "અલ્ટ્રા પાવર બચત મોડ" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "વિજેટ ઉમેરવામાં અક્ષમ. વિજેટ્સની મહત્તમ સંખ્યા (%d) પર પહોંચી ગયા." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "એપ્લિકેશનને ઉમેરવામાં અસમર્થ. એપ્લિકેશનોની મહત્તમ સંખ્યા (%d) પર પહોંચી ગયા." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "પૃષ્ઠ ઉમેરવા માટે અસમર્થ." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "સામાન્ય મોડ" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "પાવર બચત મોડ નિષ્ક્રિય થયો." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "પાવર બચત મોડ સક્ષમ થયો." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "તાજેતરની એપ્સ" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "એપ્લિકેશનને ઉમેરવામાં અસમર્થ. એપ્લિકેશનોની મહત્તમ સંખ્યા (%s) પર પહોંચી ગયા." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "વિજેટ ઉમેરવામાં અક્ષમ. વિજેટ્સની મહત્તમ સંખ્યા (%s) પર પહોંચી ગયા." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "પૃષ્ઠ દૂર કરો" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "આ પૃષ્ઠ અને તેની સામગ્રીને દૂર કરવામાં આવશે." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "કાઢી નાખો" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "નેટવર્ક સેવાઓ ઍક્સેસ કરવા માટે SIM કાર્ડ સામેલ કરો." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "મોડને અવરોધિત કરવું" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "ચાલુ" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "બંધ" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "વસ્તુ ખસેડવામાં આવી." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "ઉમેરવા બેવાર ટેપ કરો." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "વિજેટ ઉમેરો" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "વસ્તુ ઉમેરી." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "વસ્તુને દૂર કરી." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d નું %1$d પૃષ્ઠ" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "સૂચના બોર્ડની વસ્તુઓને પુનઃક્રમાંકિત કરી શકાતી નથી." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "આ છે %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "તે %d:%d AM છે." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "તે %d:%d PM છે." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d નવી વસ્તુઓ" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "વિજેટ્સની મહત્તમ સંખ્યા (%s) પર પહોંચી ગયા છો. કેટલાક વિજેટ્સ હટાવો અને ફરી પ્રયત્ન કરો." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ઘડિયાળ પર પાછા જવા માટે જમણે સ્વાઇપ કરો." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "વિજેટ્સ જોવા માટે ડાબે સ્વાઇપ કરો." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ઘડિયાળ પર પાછા જવા માટે ડાબે સ્વાઇપ કરો." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "સૂચનાઓ જોવા માટે જમણે સ્વાઇપ કરો." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s ને અનઇન્સ્ટોલ કરીએ?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "વિજેટ્સની મહત્તમ સંખ્યા (%s) પર પહોંચ્યા." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "એપ્લિકેશન ટ્રે ખોલવા માટે બેવાર ટેપ કરો." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 નવી વસ્તુ" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "સક્ષમ કરવા માટે બે વાર ટેપ કરો." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "ઘડિયાળ" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "ઉપકરણનું તાપમાન ખૂબ વધારે છે." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "મોબાઇલ ઉપકરણનો ઉપયોગ કરી ગિઅર એપ્લિકેશનો ડાઉનલોડ કરો." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "સૂતી વખતે" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "વધુ એપ્લિકેશનો મેળવો" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "પાવર બચત + સક્ષમ કરેલું હોય ત્યારે ક્રિયા ઉપલબ્ધ નથી." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s તે સમય ઉપલબ્ધ નથી કે જ્યારે સ્ક્રીન રીડર સક્ષમ કરેલ હોય." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "વિક્ષેપ પાડશો નહીં" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "ફલાઇટ મોડ સક્ષમ કરેલ હોય ત્યારે મોબાઇલ ડેટાને ચાલુ કરવામાં અસમર્થ. ફલાઇટ મોડને અક્ષમ કરો અને ફરી પ્રયાસ કરો." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "ઘડિયાળ પર પાછા જવા માટે ઉપરની બાજુએ સ્વાઇપ કરો." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "બસ એવી રીતે જ! ગિઅરનો આનંદ લો!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "મોબાઇલ નેટવર્ક્સ" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "કોલ્સ ગિઅર પર ફો. કરો" + +msgid "IDS_ST_BUTTON_START" +msgstr "પ્રારંભ કરો" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "બહાર" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "સ્વાગત છે! તમારા ગિઅરનો ઉપયોગ કેવી રીતે કરવો તે જાણવા માટે નીચેના બટનને ટેપ કરો." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "અક્ષમ કરવાની વિનંતી કરેલ" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "સક્ષમ કરવાની વિનંતી કરેલ" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "ઘડિયાળ પર દર્શક ચિહ્નો જોવા માટે ટોચની કિનારી સ્વાઇપ કરો." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "ઘડિયાળ પર એપ્લિકેશનો જોવા માટે નીચલી કિનારીને ઉપર સ્વાઇપ કરો." + +msgid "IDS_ST_BUTTON_OK" +msgstr "ઓકે" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "પાછળ જવા માટે ટોચની કિનારીને નીચે સ્વાઇપ કરો." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "એપ્લિકેશન્સને ઇન્સ્ટોલ અથવા અનઇન્સ્ટોલ કરવા માટે, તમારા મોબાઇલ ઉપકરણ પરની Samsung Gear એપ્લિકેશનનો ઉપયોગ કરો." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "આ હોમ સ્ક્રીનનું મુખ્ય માળખું છે." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ખાલી" diff --git a/home/res/po/he.po b/home/res/po/he.po new file mode 100755 index 0000000..470eaa6 --- /dev/null +++ b/home/res/po/he.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "יישומים" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "הבא" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "אל תציג שוב" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "מחק הכול" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "לא ניתן להסיר." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "הקש באריכות על ווידג'ט כדי להזיז אותו." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "מסך הבית השתנה." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "טוען..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "לא ניתן לטעון נתונים. הקש כדי לנסות שנית." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "לא ניתן להוסיף יישום. אין עוד מקום במסך הבית." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "לא ניתן להוסיף יישומון. אין עוד מקום במסך הבית." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "יישום זה כבר קיים." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "היישומון כבר קיים." + +msgid "IDS_COM_POP_CANCEL" +msgstr "ביטול" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "פריסת מסך הבית שונתה." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "יישום זה יוסר ממסך הבית. הוא לא יימחק מהמכשיר." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "הסר יישום" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "הסר יישומון" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "יישומון זה יוסר ממסך הבית. הוא לא יימחק מהמכשיר." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "מצב ‘חיסכון מרבי בחשמל’" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "לא ניתן להוסיף יישומון. הגעת למספר היישומונים המרבי המותר (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "לא ניתן להוסיף יישום. הגעת למספר היישומים המרבי (%d‏)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "לא ניתן להוסיף דף." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "מצב רגיל" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "מצב ‘חיסכון באנרגיה’ מושבת." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "מצב חיסכון בחשמל מופעל." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "יישומים אחרונים" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "לא ניתן להוסיף יישום. הגעת למספר היישומים המרבי המותר (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "לא ניתן להוסיף יישומון. הגעת למספר היישומונים המרבי המותר (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "הסר דף" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "דף זה יוסר, עם כל התוכן שהוא מכיל." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "הסר" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "הכנס כרטיס SIM כדי לגשת לשירותי רשת." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "מצב ‘חסימה’" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "מופעל" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "כבוי" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "הפריט הועבר." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "הקש הקשה כפולה כדי להוסיף." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "הוסף יישומון" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "הפריט נוסף." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "פריט הוסר." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "עמוד %1$d מתוך %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "לא ניתן לשנות את סדר הפריטים בחלונית ההתראות." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "השעה היא %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "הוא %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "הוא %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d פריטים חדשים" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "הגעת למספר היישומונים המרבי המותר (%s). מחק יישומונים אחדים ונסה שוב." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "החלק לימין כדי לחזור אל השעון." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "החלק לשמאל כדי להציג יישומונים." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "החלק לשמאל כדי לחזור אל השעון." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "החלק לימין כדי להציג התראות." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "להסיר את %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "הגעת למספר היישומונים המרבי המותר (%s)‏." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "הקש הקשה כפולה כדי לפתוח את מגש היישומים." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "פריט חדש אחד" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "הקש הקשה כפולה כדי להפעיל." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "שעון" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "טמפרטורת המכשיר גבוהה מדי" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "הורד יישומי Gear בעזרת המכשיר הנייד." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "בשינה" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "קבל יישומים נוספים" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "פעולה זו לא זמינה כל עוד התכונה ’חיסכון באנרגיה +‘ מופעלת." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s אינו זמין כל עוד ’קורא מסך‘ מופעל." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "נא לא להפריע" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "לא ניתן להפעיל במקביל את ’נתונים ניידים‘ ומצב ’טיסה‘. השבת את מצב ’טיסה‘ ונסה שוב." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "החלק מעלה כדי לחזור לשעון." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "זהו זה! היכנס ל-Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "רשתות סלולריות" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "העבר שיחות ל-Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "התחל" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "יציאה" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "ברוך הבא! הקש על הלחצן מטה כדי ללמוד כיצד להשתמש ב-Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "ביקש להשבית" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "ביקש להפעיל" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "להצגת סמלי מחוונים בשעון, החלק מטה מהשוליים העליונים." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "כדי להציג יישומים בשעון, החלק מעלה מהשוליים התחתונים." + +msgid "IDS_ST_BUTTON_OK" +msgstr "אישור" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "כדי לחזור, החלק מטה מהשוליים העליונים." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "כדי להתקין או להסיר יישומים, השתמש ביישום Samsung Gear במכשיר הנייד שלך." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "זהו המבנה הראשי של מסך הבית." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ריק" diff --git a/home/res/po/hi.po b/home/res/po/hi.po new file mode 100755 index 0000000..fb05976 --- /dev/null +++ b/home/res/po/hi.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "एप्स" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "अगला" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "विजेट" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "दोहराएं नहीं" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "सभी हटाएँ" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "हटाने में असमर्थ।" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "विजेट ले जाने के लिए उसे टैप करे रखें।" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "होम स्क्रीन बदली गई।" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "लोड हो रहा है..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "डाटा लोड करने में अक्षम। फिर से प्रयास करने हेतु टैप करें।" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "एप्लीकेशन जोड़ने में अक्षम। होम स्क्रीन पर कोई और रूम नहीं है।" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "विजेट जोड़ने में अक्षम। होम स्क्रीन पर कोई और रूम नहीं है।" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "एप्लीकेशन पहले से मौजूद है।" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "विजेट पहले से मौजूद है।" + +msgid "IDS_COM_POP_CANCEL" +msgstr "रद्द करें" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "होम स्क्रीन लेआउट परिवर्तित किया गया।" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "यह एप्लीकेशन होम स्क्रीन से निकाल दिया जाएगा। इसे डिवाइस से नहीं निकाला जाएगा।" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "एप्लीकेशन निकालें" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "विजेट निकालें" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "यह विजेट होम स्क्रीन से निकाल दिया जाएगा। इसे डिवाइस से नहीं निकाला जाएगा।" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "अल्ट्रा पॉवर बचत मोड" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "विजेट को जोड़ने में असमर्थ। विजेट्स की संख्या अधिकतम (%d) तक पहुँच गयी है।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "एप्लीकेशन जोड़ने में असमर्थ। एप्लीकेशंस की अधिकतम संख्या (%d) तक पहुँच गई।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "पेज जोड़ने में अक्षम।" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "सामान्‍य मोड" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "पॉवर बचत मोड अक्षम किया गया।" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "पॉवर बचत मोड सक्षम किया गया।" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "हाल ही के एप्स" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "एप्लीकेशन जोड़ने में असमर्थ। एप्लीकेशंस की अधिकतम संख्या (%s) तक पहुँच गई है।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "विजेट जोड़ने में असमर्थ। विजेट्स की अधिकतम संख्या (%s) तक पहुँच गई है।" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "पेज निकालें" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "यह पेज और इसकी सामग्री निकाल दी जाएगी।" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "निकालें" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "नेटवर्क सेवाएँ एक्सेस करने के लिए SIM कार्ड इंसर्ट करें।" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "अवरोध मोड" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "चालू" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "बंद" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "मद ले जाया गया।" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "जोड़ने के लिए दो बार टैप करें।" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "विजेट जोड़ें" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "मद जोड़ी गई।" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "मद निकाली गई।" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d का %1$d पेज" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "अधिसूचना बोर्ड मदों को पुनः क्रमित नहीं किया जा सकता।" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "यह %1$d:%2$d है" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "समय है %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "समय है %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d नई मदें" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "विजेट्स की अधिकतम संख्या (%s) तक पहुँच गई है। कुछ विजेट्स हटाएँ और फिर प्रयास करें।" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "घड़ी पर वापस जाने हेतु दाएँ स्वाइप करें।" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "विजेट्स देखने हेतु बाएँ स्वाइप करें।" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "घड़ी पर वापस जाने हेतु बाएँ स्वाइप करें।" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "अधिसूचनाएँ देखने हेतु दाएँ स्वाइप करें।" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s की स्थापना रद्द करें?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "विजेट्स की अधिकतम संख्या (%s) पहुँच गई है।" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "एप ट्रे खोलने के लिए दो बार टैप करें।" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 नई मद" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "सक्षम करने के लिए दो बार टैप करें।" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "घड़ी" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "डिवाइस का तापमान बहुत अधिक है" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "मोबाइल डिवाइस का उपयोग करके गियर एप्लीकेशंस डाउनलोड करें।" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "सोने के दौरान" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "अधिक एप्लीकेशंस प्राप्त करें" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "पॉवर बचत + को सक्षम किए जाने के दौरान, कार्रवाई अनुपलब्ध।" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "स्क्रीन रीडर के सक्षम होने के दौरान %s उपलब्ध नहीं होता है।" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "परेशान न करें" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "फ्लाइट मोड सक्षम होने पर मोबाइल डाटा चालू करने में असमर्थ। फ्लाइट मोड अक्षम करें और फिर प्रयास करें।" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "घड़ी पर वापस जाने हेतु ऊपर स्वाइप करें।" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "बस, हो गया! गियर में जाएँ!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "मोबाइल नेटवर्क" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "गियर पर कॉल भेजें" + +msgid "IDS_ST_BUTTON_START" +msgstr "प्रारंभ करें" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "निकास" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "स्वागत है! गियर उपयोग का तरीका जानने हेतु नीचे बटन टैप करें।" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "अक्षम करने के लिए अनुरोध किया गया" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "सक्षम करने के लिए अनुरोध किया गया" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "घड़ी पर संकेतक चिह्न देखने हेतु शीर्ष किनारा नीचे स्वाइप करें।" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "घड़ी पर एप्स देखने हेतु निचले किनारे से ऊपर स्वाइप करें।" + +msgid "IDS_ST_BUTTON_OK" +msgstr "ओके" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "वापस जाने हेतु शीर्ष किनारे से नीचे की ओर स्वाइप करें।" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "एप्लीकेशंस स्थापित करने या स्थापना रद्द करने के लिए, अपने मोबाइल डिवाइस पर सैमसंग गियर एप्लीकेशन का उपयोग करें।" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "यह होम स्क्रीन की मुख्य संरचना है।" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "खाली" diff --git a/home/res/po/hr.po b/home/res/po/hr.po new file mode 100755 index 0000000..c56685d --- /dev/null +++ b/home/res/po/hr.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplikacije" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Dalje" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Ne ponovi." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Obriši sve" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Nemoguće ukloniti." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Dodirnite i držite widget da biste ga premjestili." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Početni zaslon je promijenjen." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Učitavanje..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Nije moguće učitati podatke. Dodirnite radi ponavljanja." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Dodavanje aplikacije nije moguće. Nema više mjesta na početnom zaslonu." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Dodavanje widgeta nije moguće. Nema više mjesta na početnom zaslonu." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplikacija već postoji." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget već postoji." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Prekid" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Izgled početnog zaslona je promijenjen." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ova će aplikacija biti uklonjena s početnog zaslona. Neće biti obrisana s uređaja." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Ukloni aplikaciju" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Ukloni widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ovaj će widget biti uklonjen s početnog zaslona. Neće biti obrisan s uređaja." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Maks. štednja baterije" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Nemoguće dodati widget. Dostignut maksimalan broj widgeta (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Nemoguće dodati aplikaciju. Dosegnut maksimalan broj aplikacija (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Nemoguće dodati stranicu." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normalan način rada" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Isključena je Štednja baterije." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Štednja energije uključena." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Ned. aplik." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Nemoguće dodati aplikaciju. Dosegnut maksimalan broj aplikacija (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Nemoguće dodati widget. Dostignut maksimalan broj widgeta (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Obrišite stranicu" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Ova stranica i njezin sadržaj bit će uklonjeni." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Ukloni" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Umetnite SIM karticu za pristup mrežnim uslugama." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Način Blokiranja" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Uključeno" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Isključeno" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Premješteno." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Dodirnite dvaput za dodavanje." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Dodaj widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Stavka dodana." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Stavka uklonjena." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Stranica %1$d od %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Nije moguće sortirati stavke ploče s obavijestima." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Sada je %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Sada je %d:%d ujutro." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Sada je %d:%d poslijepodne." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d novih stavki" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Dosegnut je maksimalan broj widgeta (%s). Izbrišite neke widgete pa pokušajte ponovno." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Kliznite desno za vraćanje na sat." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Kliznite lijevo za prikaz widgeta." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Kliznite lijevo za vraćanje na sat." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Kliznite desno za prikaz obavijesti." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Deinstalirati %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Dosegnut je maksimalni broj widgeta (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Dvostrukim dodirom otvorite traku aplikacije." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nova stavka" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Dvaput dodirnite za uključivanje." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Sat" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Temperatura uređaja je previsoka." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Skinite aplikacije za Gear pomoću mobilnog uređaja." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Tijekom spavanja" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Preuzmi više aplikacija" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Radnja nije dostupna dok je uključena Štednja baterije +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s nije dostupna dok je uključen Čitač zaslona." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Ne ometajte" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Nemoguće uklj. mob. pod. dok je profil Bez mreže uklj. Isklj. Bez mreže i pokuš. ponovno." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Kliznite gore za vraćanje na sat." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "To je to! Pripremite se za Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobilne mreže" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Pro. poz. na Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Pokretanje" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Prekid" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Dobrodošli! Da biste nauč. upotr. Gear, dodajte gumb u nast." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Zahtjev za isključivanje" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Zahtjev za uključivanje" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Prijeđ. gornj. rub. dolje za prik. ikona indik. na satu." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Prijeđite po donjem rubu gore za prikaz aplik. na satu." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Prijeđite po gornjem rubu prema dolje za povratak." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Za instalaciju ili deinstalaciju aplikacija koristite aplikaciju Samsung Gear na mobilnom uređaju." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Ovo je osnovna struktura početnog zaslona." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Prazno" diff --git a/home/res/po/hu.po b/home/res/po/hu.po new file mode 100755 index 0000000..9da43ce --- /dev/null +++ b/home/res/po/hu.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Alkalmazások" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Következő" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Ne ismételje" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Összes törlése" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Nem lehet eltávolítani." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Tartsa ujját a widgeten, amelyet át kíván helyezni." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "A kezdőképernyő módosult." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Betöltés..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Nem lehet betölteni az adatokat. Érintse meg az újabb próbálkozáshoz." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Nem adható hozzá alkalmazás. Nincs több hely a kezdőképernyőn." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Nem adható hozzá widget. Nincs több hely a kezdőképernyőn." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Ez az alkalmazás már megvan." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Ez a widget már megvan." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Mégse" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "A kezdőképernyő elrendezése módosult." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ezzel eltávolítja az alkalmazást a kezdőképernyőről. Az eszközről nem törlődik." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Alkalm. eltávolítása" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Widget eltávolítása" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ezzel eltávolítja a widgetet a kezdőképernyőről. Az eszközről nem törlődik." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultratakarékos mód" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Nem lehet hozzáadni a widgetet. Elérte a widgetek maximális számát (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Nem lehet alkalmazást hozzáadni. Elérte az alkalmazások maximális számát (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Nem adható hozzá oldal." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normál mód" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Energiatakarékos mód letiltva." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Energiatakarékos mód engedélyezve." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Legut. alk." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Nem lehet alkalmazást hozzáadni. Elérte az alkalmazások maximális számát (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Nem lehet hozzáadni a widgetet. Elérte a widgetek maximális számát (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Oldal eltávolítása" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "El fogja távolítani az oldalt és annak tartalmát." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Eltávolít" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Hálózati szolgáltatások eléréséhez helyezze be a SIM kártyát." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blokkolás üzemmód" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Be" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Ki" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Tétel áthelyezve." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Érintse meg kétszer a hozzáadáshoz." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Widget hozzáadása" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Tétel hozzáadva." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Tétel eltávolítva." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%1$d. oldal, összesen: %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Az értesítési panel elemei nem rendezhetők át." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "%1$d óra %2$d perc van." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "%d:%d de. van." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "%d:%d du. van." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d új tétel" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Elérte a widgetek maximális számát (%s). Töröljön widgeteket, és próbálja újra." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Jobbra simítva visszajut az órához." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Balra simítva megjelennek a widgetek." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Balra simítva visszajut az órához." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Jobbra simítva megjel. az értesítések." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Eltávolítja a(z) %s animált emotikont?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Elérte a widgetek maximális számát (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Érintse meg kétszer az alkalmazástálca megnyitásához." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 új tétel" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Érintse meg kétszer az engedélyezéshez." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Óra" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Túl magas az eszköz hőmérséklete." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Gear-alkalmazásokat tölthet le a mobileszközzel." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Alváskor" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "További alk. letöltése" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Bekapcsolt Energiatakarékosság + mellett a művelet nem használható." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "A(z) %s nem érhető el, ha a Képernyőolvasó engedélyezett." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Ne zavarjanak" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Repülő módban nem kapcsolh. be a mobil int.kapcs. Kapcsolja ki a Rep. módot, és prób. újra." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Felfelé simítva visszajut az órához." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Ez az! Vegye használatba a Geart!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobilhálózatok" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Hívásátir. Gearre" + +msgid "IDS_ST_BUTTON_START" +msgstr "Indítás" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Kilépés" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Üdvözöljük! A gombot megérintve megismerkedhet a Gearrel." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "A funkció kikapcsolását kérte" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "A funkció bekapcsolását kérte" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "A felső szélt lehúzva jelzőikonok jelennek meg az órán." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Az alsó szélt felhúzva alkalmazások jelenn. meg az órán." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "A visszatéréshez húzza le a felső szélt." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Alkalmazások telepítéséhez vagy eltávolításához használja a mobileszköz Samsung Gear alkalmazását." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Bemutatjuk a kezdőképernyő alapvető felépítését." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Üres" diff --git a/home/res/po/hy.po b/home/res/po/hy.po new file mode 100755 index 0000000..e647cd2 --- /dev/null +++ b/home/res/po/hy.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Ծրագրեր" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Հաջորդ" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Վիդջետ" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Չկրկնել" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Ջնջել բոլորը" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Անհնար է հեռացնել:" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Տեղափոխելու համար թակեք և պահեք պատկերագիրը:" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Հիմնական էկրանը փոխվել է:" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Բեռնում է..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Անհնար է տվյալներ բեռնել: Թակեք՝ նորից փորձելու համար" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Անհնար է ծրագիր ավելացնել. այլևս տեղ չկա հիմնական էկրանում:" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Անհնար է պատկերագիր ավելացնել. այլևս տեղ չկա հիմնական էկրանում:" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Ծրագիրն արդեն գոյություն ունի:" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Պատկերագիրն արդեն գոյություն ունի:" + +msgid "IDS_COM_POP_CANCEL" +msgstr "Չեղարկել" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Հիմնական էկրանի դասավորվածքը փոխվել է:" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Այս ծրագիրը կհեռացվի հիմնական էկրանից: Այն չի վերացվի սարքից:" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Հեռացնել ծրագիրը" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Հեռացնել պատկերագիրը" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Այս պատկերագիրը կհեռացվի հիմնական էկրանից: Այն չի վերացվի սարքից:" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Էներգիայի գերխնայ. ռեժիմ" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Անհնար է ավելացնել հարմարանք: Հասել է հարմարանքների առավել. քանակին (%d):" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Անհնար է ծրագիր ավելացնել. հասել է ծրագրերի առավելագույն քանակին (%d):" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Անհնար է էջ ավելացնել:" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Սովորական ռեժիմ" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Էներգիայի խնայման ռեժիմը կասեցված է:" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Էներգիայի խնայման ռեժիմն ընձեռվեց:" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Վերջ. ծրգրեր" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Անհնար է ծրագիր ավելացնել. հասել է ծրագրերի առավելագույն քանակին (%s):" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Անհնար է պատկերագիր ավելացնել. հասել է պատկերագրերի առավելագույն քանակին (%s):" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Հեռացնել էջը" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Այս էջն ու այնտեղի բովանդակությունը կհեռացվեն:" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Հեռացնել" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Տեղադրեք SIM քարտը՝ ցանցային ծառայություններ մտնելու համար:" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Արգելափակման ռեժիմ" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Միացված է" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Անջտվծ" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Տարրը տեղափոխվել է:" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Երկհպեք՝ հավելելու համար:" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Ավելացնել պատկերագիր" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Տարրն ավելացվել է:" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Տարրը հեռացվել է:" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%1$d էջը՝ %2$d-ից" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Անհնար է վերադասավորել ծանուցումների հտախտակի տարրերը:" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Ժամը %1$d:%2$d է:" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Ժամը՝ %d:%d AM:" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Ժամը՝ %d:%d PM:" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d նոր տարրեր" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Հարմարանքների առավելագույն քանակը (%s) լրացավ: Ջնջեք որոշ հարմարանքներ և կրկին փորձեք:" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Սահեցրեք աջ՝ ժամացույց վերադառնալու:" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Սահեցրեք վեր՝ հարմարանքներ դիտելու:" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Սահեցրեք ձախ՝ ժամացույց վերադառնալու:" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Սահեցրեք աջ՝ ծանուցումներ դիտելու:" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Ապատեղադրե՞լ %s-ը:" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Հասել է պատկերագրերի առավելագույն քանակին (%s):" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Կրկնակի թակեք՝ ծրագրերի մատուցարանը բացելու համար:" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 նոր տարր" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Երկհպեք` միացնելու համար:" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Ժամացույց" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Սարքի ջերմաստիճանը չափազանց բարձր է:" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Ներբեռնել Gear ծրագրեր շարժական սարքով:" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Քնի ընթացքում" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Ստացեք ավելի շատ ծրագրեր" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Գործողությունն անմատչելի է, երբ միացված է Էներգիայի խնայում +:" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s-ը մատչելի չէ, երբ Էկրանի ընթերցիչն ընձեռված է:" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Չանհանգստացնել" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Անհն. է միացնել Շարժ. տվյ., երբ Թռիչք. ռեժիմն ընձեռ. է: Կասեցրեք Թռիչք. ռժմ և նորից փորձեք:" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Սահեցրեք վեր՝ ժամացույցին վերադառ. հր:" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Ահա՛ և ամենը: Սկսե՛ք գործածել Gear-ը:" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Շարժական ցանցեր" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Փխնցլ կանչեր Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Մեկնարկել" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Ելք" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Բարի գալուստ: Թակ. ներքևի կոճակ՝ իմանալու, ինչպես օգտ. Gear:" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Պահանջվում է կասեցնել" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Պահանջվում է ընձեռել" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Վերին եզր սահեց. վար՝ ցուցիչ պատկերակ. ժմց. վրա տես. հր:" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Ներքևի եզրը սահեցրեք վեր՝ ծրագրերը ժմցույցի վրա դիտ. հր:" + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Վերին եզրը մատով սահեցրեք ներքև՝ հետ գնալու համար:" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Ծրագրեր տեղադրելու և ապատեղադրելու համար օգտագործեք Samsung Gear ծրագիրը Ձեր շարժական սարքում:" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Սա հիմնական էկրանի գլխավոր կառուցվածքն է:" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Դատարկ է" diff --git a/home/res/po/id.po b/home/res/po/id.po new file mode 100755 index 0000000..7e36e3e --- /dev/null +++ b/home/res/po/id.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplikasi" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Selanjutnya" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Jgn ulangi" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Hapus semua" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Tidak dapat menghapus." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Ketuk dan tahan widget untuk memindahkannya." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Layar depan diubah." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Meloading…" + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Tidak dapat memuat data. Ketuk untuk mencoba lagi." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Tidak dapat menambah aplikasi. Tidak ada ruang lagi di layar depan." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Tidak dapat menambah widget. Tidak ada ruang lagi di layar depan." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplikasi sudah ada." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget sudah ada." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Batalkan" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Tata letak layar depan diubah." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Aplikasi ini akan dihapus dari layar depan. Aplikasi tidak akan dihapus dari perangkat." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Hapus aplikasi" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Hapus widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Widget ini akan dihapus dari layar depan. Aplikasi tidak akan dihapus dari perangkat." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Mode hemat daya ultra" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Tidak dapat menambah widget. Jumlah maksimum widget (%d) tercapai." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Tidak dapat menambahkan aplikasi. Jumlah maksimum aplikasi (%d) tercapai." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Tidak dapat menambah halaman." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Mode normal" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Mode hemat daya diaktifkan." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Mode hemat daya diaktifkan." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Apl terakhir" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Tidak dapat menambah aplikasi. Jumlah maksimum aplikasi (%s) tercapai." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Tidak dapat menambah widget. Jumlah maksimum widget (%s) tercapai." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Hapus halaman" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Halaman ini beserta kontennya akan dihapus." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Hapus" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Masukkan kartu SIM utk mengakses layanan jaringan." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Mode pemblokiran" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Aktif" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Tdk aktif" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Item dipindahkan." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Ketuk dua kali untuk menambah." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Tambah widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Item ditambahkan." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Item dihapus." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Halaman %1$d dari %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Tidak dapat menyusun ulang item papan notifikasi." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Pukul %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Adalah %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Adalah %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d item baru" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Jumlah maksimum widget (%s) telah tercapai. Hapus beberapa widget dan coba lagi." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Usap ke kanan untuk kembali ke jam." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Usap ke kiri untuk melihat widget." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Usap ke kiri untuk kembali ke jam." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Usap ke kanan untuk lihat notifikasi." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Hapus instalasi %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Jumlah maksimum widget (%s) tercapai." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Ketuk dua kali untuk membuka baki aplikasi." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 item baru" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Ketuk dua kali untuk mengaktifkan." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Jam" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Suhu perangkat terlalu tinggi." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Unduh aplikasi Gear dengan perangkat seluler." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Saat tidur" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Dapatkan aplk lainnya" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Tindakan tidak tersedia saat Hemat daya + diaktifkan." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s tidak tersedia saat Pembaca layar diaktifkan." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Jangan diganggu" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Tdk dpt hidupkan Data seluler saat mode Terbang aktif. Nnaktifkan mde Terbang dan cb lg." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Usap ke atas untuk kembali ke jam." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Nah! Ayo mulai pakai Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Jringan seluler" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Trskn pgln k Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Mulai" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Keluar" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Selamat dtng! Ktk tmbl di bwh utk pelajari cr gunakan Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Diminta untuk dinonaktifkan" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Diminta untuk diaktifkan" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Usap tepi atas ke bwh utk melihat ikon indikator di jam." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Usap dr tepi bawah ke atas utk melihat aplikasi di jam." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Usap tepi atas ke bawah untuk kembali." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Untuk menginstal atau menghapus instalasi aplikasi, gunakan aplikasi Samsung Gear di perangkat seluler Anda." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Ini adalah struktur utama dari layar depan." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Kosong" diff --git a/home/res/po/is.po b/home/res/po/is.po new file mode 100755 index 0000000..3b18d3d --- /dev/null +++ b/home/res/po/is.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Forrit" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Næsta" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Græja" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Ekki endurt." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Eyða öllu" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Mistókst að fjarlægja." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Pikkaðu og haltu inni á græju til að færa hana." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Heimaskjá var breytt." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Hleð..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Ekki tókst að hlaða gögn. Pikkaðu til að reyna aftur." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Ekki er hægt að bæta við forriti. Ekki er pláss á heimaskjánum." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Ekki er hægt að bæta við græju. Ekki er pláss á heimaskjánum." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Forritið er þegar til." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Græjan er þegar til." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Hætta við" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Útliti heimaskjás var breytt." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Forritið verður fjarlægt af heimaskjánum. Því verður ekki eytt úr tækinu." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Fjarlægja forrit" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Fjarlægja græju" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Græjan verður fjarlægð af heimaskjánum. Henni verður ekki eytt úr tækinu." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ofursparnaðarstilling" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Ekki er hægt að bæta græju við. Hámarksfjölda græja (%d) hefur verið náð." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Ekki er hægt að bæta forritinu við. Hámarksfjölda forrita (%d) hefur verið náð." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Ekki er hægt að bæta við síðu." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Venjuleg stilling" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Slökkt á orkusparnaðarstillingu." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Kveikt á orkusparnaðarstillingu." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Nýleg forrit" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Ekki er hægt að bæta forritinu við. Hámarksfjölda forrita (%s) hefur verið náð." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Ekki er hægt að bæta græjunni við. Hámarksfjölda græja (%s) hefur verið náð." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Fjarlægja síðu" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Síðan og efni hennar verður fjarlægt." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Fjarlægja" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Setjið SIM kort í til að fá aðgang að netþjónustu." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Bannlista-\nstilling" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Kveikt" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Slökkt" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Atriði fært." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Pikkaðu tvisvar til að bæta við." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Bæta við græju" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Atriði bætt við." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Atriði fjarlægt." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Síða %1$d af %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Ekki er hægt að endurraða atriðum á tilkynningatöflu." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Klukkan er %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Hún er %d:%d fyrir hádegi." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Hún er %d:%d eftir hádegi." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d nýir hlutir" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Hámarksfjölda græja (%s) hefur verið náð. Eyddu einhverjum græjum og reyndu svo aftur." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Strjúktu til hægri fyrir klukku." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Strjúktu til vinstri fyrir græjur." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Strjúktu til vinstri fyrir klukku." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Strjúktu til hægri fyrir tilkynningar." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Fjarlægja %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Hámarksfjölda græja (%s) hefur verið náð." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Pikkaðu tvisvar til að opna forritaskúffu." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "Eitt nýtt atriði" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Pikkaðu tvisvar til að kveikja." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Klukka" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Tækið er of heitt." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Sæktu Gear-forrit með fartæki." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Sofandi" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Sækja fleiri forrit" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Ekki er hægt að nota aðgerð meðan kveikt er á orkusparnaði +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s er ekki í boði þegar kveikt er á skjálesara." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Ónáðið ekki" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Ekki er hægt að kveikja á farsímagögnum í flugstillingu. Slökktu á henni og reyndu aftur." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Strjúktu upp fyrir klukku." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Þá er þetta komið! Þú getur byrjað að nota Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Farsímakerfi" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Frs. símt. í Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Ræsa" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Fara út" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Velkomin(n)! Pikkaðu á hnappinn niðri og lærðu að nota Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Beðið um að slökkva" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Beðið um að kveikja" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Strjúktu niður frá efri brún til að sjá tákn á klukku." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Strjúktu upp frá neðri brún til að skoða forrit klukku." + +msgid "IDS_ST_BUTTON_OK" +msgstr "Í lagi" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Strjúktu niður frá efri brún til að fara til baka." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Til að setja upp eða fjarlægja forrit skaltu nota Samsung Gear forritið í fartækinu." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Þetta er uppbygging heimaskjásins." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Tómt" diff --git a/home/res/po/it_IT.po b/home/res/po/it_IT.po new file mode 100755 index 0000000..b225b63 --- /dev/null +++ b/home/res/po/it_IT.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Applicazioni" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Avanti" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Non ripetere" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Elimina tutto" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Impossibile rimuovere." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Toccate e tenete premuto un widget per spostarlo." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Schermata Home modificata." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Caricamento..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Impossibile caricare i dati. Toccate per riprovare." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Impossibile aggiungere applicazione. Spazio insufficiente nella schermata Home." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Impossibile aggiungere widget. Spazio insufficiente nella schermata Home." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Applicazione già esistente." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget già esistente." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Annulla" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Layout della schermata Home modificato." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Quest'applicazione verrà rimossa dalla schermata Home. Non verrà eliminata dal dispositivo." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Rimuovi applicazione" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Rimuovi widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Questo widget verrà rimosso dalla schermata Home. Non verrà eliminato dal dispositivo." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Risparmio energetico avanzato." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Impossibile aggiungere il widget. Il numero massimo di widget (%d) è stato raggiunto." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Impossibile aggiungere l'applicazione. Il numero massimo di applicazioni (%d) è stato raggiunto." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Impossibile aggiungere la pagina." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Modalità normale" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Modalità di risparmio energetico disattivata." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Modalità di risparmio energetico attivata." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "App recenti" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Impossibile aggiungere l'applicazione. Il numero massimo di applicazioni (%s) è stato raggiunto." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Impossibile aggiungere il widget. Il numero massimo di widget (%s) è stato raggiunto." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Rimuovi pagina" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Questa pagina e il relativo contenuto verranno rimossi." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Rimuovi" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Inserite una scheda SIM per accedere ai servizi di rete." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Modalità di blocco" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Attivo" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Non attivo" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Elemento spostato." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Toccate due volte per aggiungere." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Aggiungi widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Elemento aggiunto." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Elemento rimosso." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Pagina %1$d di %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Impossibile riordinare gli elementi dell'area notifiche." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Sono le %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Sono le %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Sono le %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d nuovi elementi" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "È stato raggiunto il numero massimo di widget (%s). Eliminate alcuni widget e riprovate." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Trascinate a dx per tornare all'orologio." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Trascinate a sx per vedere i widget." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Trascinate a sx per tornare all'orologio." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Trascinate a dx per vedere le notifiche." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Disinstallare %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Numero massimo di widget (%s) raggiunto." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Toccate due volte per aprire la barra delle applicazioni." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nuovo elemento" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Toccate due volte per attivare." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Orologio" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "La temperatura del dispositivo è troppo alta." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Potete scaricare applicazioni Gear mediante il dispositivo mobile." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Mentre dormite" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Ottieni altre applicaz." + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Azione non disponibile mentre il Risparmio energetico + è attivato." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s non è disponibile mentre Lettore schermo è attivo." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Non disturbare" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Imposs. attiv. la conness. dati se la mod. offline è attivata. Disattivatela e riprovate." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Trascina in alto per tornare all'orologio." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Perfetto, entra in Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Reti mobili" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Inol. ch. su Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Avvia" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Esci" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Benvenuti! Per imparare a usare Gear toccate il pulsante." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Richiesta di disattivazione" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Richiesta di attivazione" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Trasc. bordo super. in basso per vedere icone su orolog." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Trasc. bordo infer. in alto per vedere le app su orolog." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Trascinate il bordo super. in basso per tornare indietro." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "Nell'orologio, trascinate verso il basso dal bordo superiore per visualizzare le icone degli indicatori." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "Nell'orologio, trascinate verso l'alto dal bordo inferiore per visualizzare le applicazioni." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "Dall'orologio, trascinate il dito a destra per visualizzare le notifiche." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Trascinate il dito a sinistra per tornare all'orologio." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "Dall'orologio, trascinate il dito a sinistra per visualizzare i widget." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Trascinate il dito a destra per tornare a orologio." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "Dall'orologio, trascinate il dito verso l'alto per visualizzare le app." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Trascinate il dito verso il basso per tornare all'orologio." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "Dall'orologio, trascinate il dito verso il basso per visualizzare la barra dei momenti." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Trascinate il dito verso l'alto per tornare all'orologio." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "L'orologio è impostato come schermata Home. Toccate sotto per iniziare." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Per installare o disinstallare le applicazioni, utilizzate l'applicazione Samsung Gear sul dispositivo mobile." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Questa è la struttura principale della schermata Home." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "Questo è il layout della schermata Home." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Vuoto" diff --git a/home/res/po/ja_JP.po b/home/res/po/ja_JP.po new file mode 100755 index 0000000..83eef94 --- /dev/null +++ b/home/res/po/ja_JP.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "アプリ" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "次へ" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "ウィジェット" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "表示しない" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "全て削除" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "削除することはできません。" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "移動するには、ウィジェットを長押しします。" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "ホーム画面が変更されました。" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "読み込み中..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "データをロードできません。タップして再度実行してください。" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "アプリケーションを追加できません。ホーム画面に空きがありません。" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ウィジェットを追加できません。ホーム画面に空きがありません。" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "アプリケーションは既に存在します。" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "ウィジェットは既に存在します。" + +msgid "IDS_COM_POP_CANCEL" +msgstr "キャンセル" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "ホーム画面のレイアウトを変更しました。" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "このアプリケーションをホーム画面から削除します。端末からは削除されません。" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "アプリを削除" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "ウィジェットを削除" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "このウィジェットをホーム画面から削除します。端末からは削除されません。" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "ウルトラ省電力モード" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ウィジェットを追加できません。ウィジェットの最大数(%d)に達しました。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "アプリケーションを追加できません。アプリケーションの最大数(%d件)に達しました。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "ページを追加できません。" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "標準モード" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "[省電力モード]を無効にしました。" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "省電力モードを有効にしました。" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "最近のアプリ" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "アプリケーションを追加できません。アプリケーションの最大件数(%s件)に達しました。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "ウィジェットを追加できません。ウィジェットの最大件数(%s件)に達しました。" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "ページを削除" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "このページとコンテンツを削除します。" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "削除" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "ネットワークサービスを利用するにはSIMカードを挿入してください。" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "ブロック​モード" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "ON" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "OFF" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "アイテムを移動しました。" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "追加するにはダブルタップしてください。" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "ウィジェットを追加" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "アイテムが追加されました。" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "アイテムが削除されました。" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d中の%1$dページです。" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "通知ボードのアイテムを並べ替えることはできません。" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "%1$d:%2$dです。" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "午前%d時%d分です。" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "午後%d時%d分です。" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d件の最新アイテム" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "ウィジェットの最大件数(%s件)に達しました。不要なウィジェットを削除し、再度実行してください。" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "時計に戻るには右にスワイプします。" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "ウィジェットを表示するには左にスワイプします。" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "時計に戻るには左にスワイプします。" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "通知を見るには右にスワイプします。" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%sをアンインストールしますか?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ウィジェットの最大件数(%s件)に達しました。" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "アプリトレイを開くにはダブルタップします。" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1件の最新アイテムです。" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "有効にするには、ダブルタップします。" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "時計" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "端末の温度が高すぎます。" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "モバイル端末でGearアプリケーションをダウンロードしてください。" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "睡眠中" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "他のアプリを取得" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "[省電力モード+]が有効な間は、この操作を実行できません。" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "スクリーンリーダーが有効な間は、%sを利用できません。" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "通知をミュート" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "機内モードが有効なときはモバイルデータをONにできません。機内モードを無効にし、再度お試しください。" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "時計に戻るには、上にスワイプします。" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "説明は以上です。Gearをお楽しみください。" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "モバイルネットワーク" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Gearに転送" + +msgid "IDS_ST_BUTTON_START" +msgstr "開始" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "終了" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "ようこそ。Gearの使い方を確認するには、下のボタンをタップします。" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "無効に設定中" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "有効に設定中" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "インジケーターを表示するには、時計の上端から下にスワイプします。" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "アプリを表示するには、時計の下端から上にスワイプします。" + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "戻るには、画面の上端から下にスワイプします。" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "アプリケーションをインストールまたはアンインストールするには、モバイル端末でSamsung Gearアプリケーションを使用してください。" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "これはホーム画面の構成です。" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "空き" diff --git a/home/res/po/ka.po b/home/res/po/ka.po new file mode 100755 index 0000000..59f72ad --- /dev/null +++ b/home/res/po/ka.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "პროგრამები" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "შემდეგი" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "გრაფიკული კლიპი" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "არ გამეორდეს" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "ყველას წაშლა" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "ვერ მოცილდება." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "ვიჯეტის გადასატანად დაარტყით მას და არ აიღოთ ხელი." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "საწყისი ეკრანი შეიცვალა." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "იტვირთება..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "მონაცემთა ჩატვირთვა შეუძლებელია. შეეხეთ და გაიმეორეთ მცდელობა" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "პროგრამა ვერ ემატება. საწყის ეკრანზე აღარ არის ადგილი." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ვიჯეტის დამატება შეუძლებელია. საწყის ეკრანზე აღარ არის ადგილი." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "პროგრამა უკვე არსებობს." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "ვიჯეტი უკვე არის." + +msgid "IDS_COM_POP_CANCEL" +msgstr "გაუქმება" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "საწყისი ეკრანის განლაგება შეიცვალა." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ეს პროგრამა წაიშლება საწყის ეკრანზე. იგი არ წაიშლება აპარატში." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "პროგრამის წაშლა" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "ვიჯეტის წაშლა" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ეს ვიჯეტი წაიშლება საწყის ეკრანზე. იგი არ წაიშლება აპარატში." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "დაზოგვის ულტრა რეჟიმი" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ვიჯეტის დამატება შეუძლებელია. მიღწეულია ვიჯეტების მაქსიმალური რაოდენობა (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "პროგრამის დამატება შეუძლებელია. მიღწეულია პროგრამების მაქსიმალური რაოდენობა (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "გვერდს ვერ დაამატებთ." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "ნორმალური რეჟიმი" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "ენერგიის დაზოგვის რეჟიმი გამორთულია." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "ენერგიის დაზოგვის რეჟიმი ჩართულია." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "ბოლო პროგრ." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "პროგრამა ვერ ემატება. მიღწეულია პროგრამების მაქსიმალური რაოდენობა (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "ვიჯეტის დამატება შეუძლებელია. მიღწეულია ვიჯეტების მაქსიმალური რაოდენობა (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "გვერდის წაშლა" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "ეს გვერდი და მისი შიგთავსი წაიშლება." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "წაშლა" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "ქსელის მომსახურების მისაღებად ჩასვით SIM ბარათი." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "დაბლოკვის რეჟიმი" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "ჩართ." + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "გამორთ." + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "ელემენტი გადატანილია." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "დასამატებლად შეეხეთ ორჯერ." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "ვიჯეტის დამატება" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "ელემენტი დაემატა." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "ელემენტი წაიშალა." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "გვერდი %1$d, სულ %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "შეტყობინებათა დაფის ელემენტების განლაგებას ვერ შეცვლით." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "ახლა არის %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "ახლა არის %d:%d, შუადღემდე." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "ახლა არის %d:%d, შუადღის შემდეგ." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d ახალი ელემენტი" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "მიღწეულია ვიჯეტების მაქსიმალური რაოდენობა (%s). წაშალეთ ზოგიერთი ვიჯეტი და ისევ სცადეთ." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "საათზე დაბრუნდებით მარჯვნივ გადასმით." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "ვიჯეტებს ნახავთ მარცხნივ გადასმით." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "საათზე დაბრუნდებით მარცხნივ გადასმით." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "შეტყობინებები ნახეთ მარჯვნივ გადასმით." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "ამოინსტალირდეს %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "მიღწეულია ვიჯეტების მაქსიმალური რაოდენობა (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "შეეხეთ ორჯერ და პროგრამის ლანგარი გაიხსნება." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 ახალი ელემენტი" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "შეეხეთ ორჯერ და გააქტიურდება." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "საათი" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "მოწყობილობის ტემპერატურა ძალიან მაღალია." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "მობილური აპარატით ჩამოტვირთეთ Gear-ის აპლიკაციები." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "ძილის დროს" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "მიიღეთ სხვა აპლიკაციები" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "მოქმედება ვერ შესრულდება, როდესაც გააქტიურებულია ენერგიის დაზოგვა +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s მიუწვდომელია, როდესაც გააქტიურებულია ეკრანის წამკითხველი." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "არ შემაწუხოთ" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "მობილურ მონაცემთა ქსელს ვერ ჩართავთ ფრენის რეჟიმში. გამორთეთ ფრენის რეჟიმი და ისევ სცადეთ." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "აუსვით თითი და დაბრუნდებით საათზე." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "სულ ესაა! მოირგეთ Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "მობილური ქსელი" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "ზარები Gear-ში" + +msgid "IDS_ST_BUTTON_START" +msgstr "დასაწყისი" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "გამოსვ." + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "სალამი! Gear-ის ინფოსთვის შეეხეთ ქვემოთ მოცემულ ღილაკს." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "მოთხოვნილია გამორთვა" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "მოთხოვნილია გააქტიურება" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "საათზე ინდიკატორების სანახავად, ჩამოუსვით თითი ზემოდან." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "საათზე აპლიკაციების სანახავად, აუსვით თითი ქვემოდან." + +msgid "IDS_ST_BUTTON_OK" +msgstr "კი" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "უკან დასაბრუნებლად, ჩამოუსვით ზედა კიდედან ქვემოთ." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "აპლიკაციების დასაინსტალირებლად ან ინსტალაციის გასაუქმებლად, გამოიყენეთ Samsung Gear აპლიკაცია მობილურ მოწყობილობაში." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "ეს არის საწყისი ეკრანის ძირითადი სტრუქტურა." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ცარიელია" diff --git a/home/res/po/kk.po b/home/res/po/kk.po new file mode 100755 index 0000000..3f623ac --- /dev/null +++ b/home/res/po/kk.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Бағдарламалар" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Келесі" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Виджет" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Қайталамау" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Барлығын жою" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Алып тастау мүмкін емес." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Виджетті жылжыту үшін оны басып тұрыңыз." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Бастапқы экран өзгертілді." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Жазылуда..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Деректерді жүктеу мүмкін емес. Қайталау үшін түртіңіз" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Бағдарламаны қосу мүмкін емес. Бұл бастапқы экранда басқа орын жоқ." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Виджетті қосу мүмкін емес. Бұл бастапқы экранда басқа орын жоқ." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Бағдарлама бұрыннан бар." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Виджет бұрыннан бар." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Тоқтату" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Бастапқы экран құрылымы өзгертілді." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Осы бағдарлама бастапқы экраннан жойылады. Ол құрылғыдан жойылмайды." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Бағдарламаны жою" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Виджетті жою" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Осы виджет бастапқы экраннан жойылады. Ол құрылғыдан жойылмайды." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ультра қуат үнемдеу реж." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Виджетті қосу мүмкін емес. Виджеттердің ең көп санына (%d) жетті." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Қолданбаны қосу мүмкін болмады. Ең көп қолданбалар санына (%d) жеттіңіз." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Бет қосу мүмкін емес." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Қалыпты режим" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Қуат үнемдеу режимі өшірілді." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Қуат үнемдеу режимі қосылды." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Соңғы бағд-р" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Бағдарламаны қосу мүмкін болмады. Бағдарламалардың ең көп санына (%s) жетті." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Виджет қосу мүмкін емес. Виджеттердің ең көп санына (%s) жетті." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Бетті жою" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Бұл бет және оның мазмұны жойылады." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Жою" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Желі қызметтеріне өту үшін SIM картасына салу." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Блоктау режимі" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Қосылған" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Өшірілген" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Элемент көшірілді." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Қосу үшін екі рет түртіңіз." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Графикалық үзінді қосу" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Элемент қосылды." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Элемент жойылды." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d ішіндегі %1$d бет" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Хабарландыру тақтасының элементтерін қайта ретке келтіру мүмкін емес." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Ол — %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Сағат %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Сағат %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d жаңа элемент" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Виджеттердің максималды санына (%s) жетті. Кейбір виджеттерді жойып, әрекетті қайталаңыз." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Сағатқа оралу үшін, оңға сипаңыз." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Виджеттерді көру үшін, солға сипаңыз." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Сағатқа оралу үшін, солға сипаңыз." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Хабарлан-ды көру үшін, солға сипаңыз." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s жою керек пе?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Виджеттердің ең көп санына (%s) жетті." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Бағдарлама науасын ашу үшін екі рет түртіңіз." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 жаңа элемент" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Іске қосу үшін екі рет түртіңіз." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Сағат" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Құрылғы температурасы тым жоғары." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Ұялы құрылғының көмегімен Gear бағдарламасын жүктеңіз." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Ұйықтау кезінде" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Қос.бағдарламалар алу" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Қуат үнемдеу + іске қосылғанда әрекет қол жетімсіз." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "Экран оқу құралы қосулы болған кезде %s қолжетімсіз." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Мазаламаңыз" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Ұшу реж.іске қосылғанда ұялы дерект.қосу мүмкін емес. Ұшу реж.өшіріп, әрекетті қайталаңыз." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Сағатқа қайта өту үшін жоғ.сипаңыз." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Бітті! Gear құрылғысына кіріңіз!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Ұялы байл.жел-і" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Қоң.Gear құр.бұру" + +msgid "IDS_ST_BUTTON_START" +msgstr "Бастау" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Шығу" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Қош келдіңіз! Gear пайд. көру үшін, төмендегі түймені түр-з." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Өшіру сұралды" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Қосу сұралды" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Сағат индик. белг. көру үшін, жоғ. төмен қарай сипаңыз." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Сағат бағдарл. көру үшін, төменнен жоғары қарай сипаңыз." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Артқа қайту үшін, жоғарыдан төмен қарай сипаңыз." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Бағдарламаларды орнату немесе жою үшін, ұялы құрылғыдағы Samsung Gear бағдарламасын пайдаланыңыз." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Бұл бастапқы экранның негізгі құрылымы." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Бос" diff --git a/home/res/po/km.po b/home/res/po/km.po new file mode 100755 index 0000000..e298aa2 --- /dev/null +++ b/home/res/po/km.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "កម្មវិធី" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "បន្ទាប់" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "វីដជីត" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "កុំ​ធ្វើឡើងវិញ" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "លុប​ទាំងអស់" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "មិន​អាច​លុប។" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "ប៉ះ​វីដជីត​មួយ​ឲ្យ​ជាប់​ដើម្បី​ផ្លាស់ទី​វា។" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "បាន​ប្តូរ​គេហ​អេក្រង់។" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "កំពុង​ផ្ទុក..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "មិន​អាច​ផ្ទុក​ទិន្នន័យ។ ប៉ះ​ដើម្បី​សាកល្បង​ម្ដងទៀត។" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "មិន​អាច​ថែម​កម្មវិធី។ គ្មាន​កន្លែង​ទៀត​លើ​គេហអេក្រង់។" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "មិន​អាច​ថែម​វីដជីត។ គ្មាន​កន្លែង​ទៀត​លើ​គេហអេក្រង់។" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "កម្មវិធី​មាន​ហើយ។" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "វីដជីត​មាន​ហើយ។" + +msgid "IDS_COM_POP_CANCEL" +msgstr "បោះ​បង់" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "បាន​ប្តូរ​ប្លង់​គេហអេក្រង់។" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "នឹង​លុប​កម្មវិធី​នេះ​ពី​គេហអេក្រង់។ វា​នឹង​មិន​លុប​ពី​ឧបករណ៍​នេះ​ទេ។" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "លុប​កម្មវិធី" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "លុប​វីដជីត" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "នឹង​លុប​វីដជីត​នេះ​ពី​គេហអេក្រង់។ វា​នឹង​មិន​លុប​ពី​ឧបករណ៍​នេះ​ទេ។" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "ទម្រង់​សំចៃ​ថាមពល​បំផុត" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "មិន​អាច​ថែម​វីដជីត។ បាន​ដល់​ចំនួន​អតិបរមា​នៃ​វីដជីត (%d)។" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "មិន​អាច​ថែម​កម្មវិធី។ បាន​ដល់​ចំនួន​អតិបរមា​នៃ​កម្មវិធី (%d)។" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "មិន​អាច​ថែម​ទំព័រ។" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "ទម្រង់​ធម្មតា" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "បាន​បិទ​ទម្រង់​សំចៃ​ថាមពល។" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "បាន​បើកប្រើ​ទម្រង់​សំចៃ​ថាមពល។" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "កម្មវិធី​ថ្មីៗ" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "មិន​អាច​ថែម​កម្មវិធី។ បាន​ដល់​ចំនួន​អតិបរមា​នៃ​កម្មវិធី (%s)។" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "មិន​អាច​ថែម​វីដជីត។ បាន​ដល់​ចំនួន​អតិបរមា​នៃ​វីដជីត (%s)។" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "លុប​ទំព័រ" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "នឹង​លុប​ទំព័រ​នេះ និង ខ្លឹមព័ត៌មាន​របស់​វា។" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "លុបចេញ" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "បញ្ចូលកាត SIM ដើម្បី​ចូលប្រើ​សេវា​បណ្ដាញ។" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "ទម្រង់​ខ្ទប់" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "បើក" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "បិទ" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "បាន​ផ្លាស់ទី​ធាតុ។" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "ប៉ះ​ពីរដង​ដើម្បី​ថែម។" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "ថែម​វីដជីត" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "បាន​ថែម​ធាតុ។" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "បាន​លុប​ធាតុ។" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "ទំព័រ %1$d នៃ %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "មិន​អាច​រៀបលំដាប់​ធាតុ​លើ​ក្ដារ​ជូនដំណឹង​ឡើងវិញ។" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "វា​គឺ %1$d:%2$d។" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "វា​គឺ %d:%d AM។" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "វា​គឺ %d:%d PM។" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "ធាតុ​ថ្មី %d" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "បាន​ដល់​ចំនួន​អតិបរមា​នៃ​វីដជីត (%s)។ លុប​វីដជីត​ខ្លះ ហើយ​សាកល្បង​ម្ដងទៀត។" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "អូស​ទៅ​ស្ដាំ ដើម្បី​ត្រឡប់​ទៅ​នាឡិកា។" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "អូស​មក​ឆ្វេង ដើម្បី​បង្ហាញ​វីដជីត។" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "អូស​មក​ឆ្វេង ដើម្បី​ត្រឡប់​ទៅ​នាឡិកា។" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "អូស​ទៅ​ស្ដាំ ដើម្បី​បង្ហាញ​ការជូនដំណឹង។" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "មិនដំឡើង %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "បាន​ដល់​ចំនួន​អតិបរមា​នៃ​វីដជីត (%s)។" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "ប៉ះ​ពីរដង​ដើម្បី​បើក​ស្ពក​កម្មវិធី។" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "ធាតុ​ថ្មី 1" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "ប៉ះ​ពីរដង​ដើម្បី​បើកប្រើ។" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "នាឡិកា" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "សីតុណ្ហភាព​ឧបករណ៍​ខ្ពស់​ពេក។" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "ទាញយក​កម្មវិធី Gear ដោយ​ប្រើ​ឧបករណ៍​ចល័ត។" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "ខណៈពេល​គេង" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "ទទួល​កម្មវិធី​ច្រើនទៀត" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "មិន​អាច​ធ្វើ​សកម្មភាព ខណៈពេល​បាន​បើកប្រើ​ការសំចៃ​ថាមពល +។" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s មិន​អាច​ប្រើ​បាន ខណៈពេល​បាន​បើកប្រើ​កម្មវិធី​អាន​អេក្រង់។" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "កុំ​រំខាន" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "មិន​អាច​បើក​ទិន្នន័យ​ចល័ត ខណៈពេល​បាន​បើកប្រើ​ទម្រង់​យន្តហោះ។ បិទ​ទម្រង់​យន្តហោះ ហើយ​សាកល្បង​ម្ដងទៀត។" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "អូស​ឡើងលើ ដើម្បី​ត្រឡប់​ទៅ​នាឡិកា។" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "ប៉ុណ្ណេះ​ឯង! សូម​ចូល​ទៅ​ប្រើ Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "បណ្ដាញ​ចល័ត" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "បញ្ជូនបន្ត​ការហៅ​ទៅ Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "ចាប់ផ្តើម" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "ចេញ" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "សូម​ស្វាគមន៍! ប៉ះ​ប៊ូតុង​ខាងក្រោម​ដើម្បី​រៀន​ពី​របៀប​ប្រើ Gear របស់​អ្នក។" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "បាន​ស្នើ​ឲ្យ​បិទ" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "បាន​ស្នើ​ឲ្យ​បើកប្រើ" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "អូស​ពី​គែម​ខាងលើ​ចុះក្រោម ដើម្បី​ឃើញ​អាយខុន​សញ្ញាបង្ហាញ​លើ​នាឡិកា។" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "អូស​ពី​គែម​ខាងក្រោម​ឡើងលើ ដើម្បី​បង្ហាញ​កម្មវិធី​លើ​នាឡិកា។" + +msgid "IDS_ST_BUTTON_OK" +msgstr "ព្រម" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "អូស​ពី​គែម​ខាងលើ​ចុះក្រោម ដើម្បី​ថយ​ក្រោយ។" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "ដើម្បី​ដំឡើង ឬ លុប​កម្មវិធី សូម​ប្រើ​កម្មវិធី Samsung Gear លើ​ឧបករណ៍​ចល័ត​របស់​អ្នក។" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "នេះ​គឺ​ជា​រចនាសម្ពន្ធ​មេ​នៃ​គេហអេក្រង់។" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ទទេ" diff --git a/home/res/po/kn.po b/home/res/po/kn.po new file mode 100755 index 0000000..47287ad --- /dev/null +++ b/home/res/po/kn.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "ಅನ್ವಯಿಸುವಿಕೆಗಳು" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "ಮುಂದಿನ" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "ವಿಜೆಟ್" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "ಪುನರಾವರ್ತಿಸಬೇಡಿ." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "ಎಲ್ಲವನ್ನೂ ಅಳಿಸಿ" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "ಕದಲಿಸಲು ಅಸಮರ್ಥ." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "ಅದನ್ನು ಕದಲಿಸಲು ಒಂದು ವಿಜೆಟ್‌ನ್ನು ತಟ್ಟಿ ಮತ್ತು ಹಿಡಿಯಿರಿ." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "ಹೋಮ್ ಸ್ಕ್ರೀನ್ ಬದಲಾಯಿಸಲಾಗಿದೆ." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "ಲೋಡಿಂಗ್..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "ಡೇಟಾ ಲೋಡ್ ಮಾಡಲು ಅಸಮರ್ಥ. ಮರುಪ್ರಯತ್ನಿಸಲು ಒತ್ತಿ." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ಅನ್ವಹಿಸುವಿಕೆ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ಹೋಮ್‌ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ಇನ್ನು ಕೊಠಡಿಗಳು ಇಲ್ಲ." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ವಿಜೆಟ್ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ಹೋಮ್‌ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ಇನ್ನು ಕೊಠಡಿಗಳು ಇಲ್ಲ." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "ಅನ್ವಯಿಸುವಿಕೆ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "ವಿಜೆಟ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ." + +msgid "IDS_COM_POP_CANCEL" +msgstr "ರದ್ದು" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "ಹೋಮ್‌ ಸ್ಕ್ರೀನ್‌ ವಿನ್ಯಾಸ ಬದಲಾಗಿದೆ." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ಈ ಅನ್ವಹಿಸುವಿಕೆ ಅನ್ನು ಹೋಮ್‌ ಸ್ಕ್ರೀನ್‌ನಿಂದ ತೆಗೆಯಲಾಗುವುದು. ಇದನ್ನು ಸಾಧನದಿಂದ ಅಳಿಸಲಾಗುವುದಿಲ್ಲ." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "ಅನ್ವಹಿಸುವಿಕೆ ತೆಗೆಯಿರಿ" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "ವಿಜೆಟ್ ತೆಗೆಯಿರಿ" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ಈ ವಿಜೆಟ್ ಅನ್ನು ಹೋಮ್‌ ಸ್ಕ್ರೀನ್‌ನಿಂದ ತೆಗೆಯಲಾಗುವುದು. ಇದನ್ನು ಸಾಧನದಿಂದ ಅಳಿಸಲಾಗುವುದಿಲ್ಲ." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "ಅಲ್ಟ್ರಾ ಪವರ್ ಸೇವಿಂಗ್ ಮೋಡ್‌" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ವಿಡ್ಜೆಟ್ ಸೇರಿಸಲಾಗಲಿಲ್ಲ. ವಿಜೆಟ್‌ಗಳ ಗರಿಷ್ಠ ಸಂಖ್ಯೆಯು (%d) ತಲುಪಿದೆ." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "ಅನ್ವಯಿಸುವಿಕೆ ಸೇರಿಸಲು ಅಸಮರ್ಥ. ಅನ್ವಯಿಸುವಿಕೆಗಳ ಗರಿಷ್ಠ ಸಂಖ್ಯೆಯು (%d) ತಲುಪಿದೆ." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "ಪುಟ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "ಸಾಮಾನ್ಯ ಮೋಡ್" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "ಪವರ್ ಸೇವಿಂಗ್ ಮೋಡ್‌ ನಿಶಕ್ತಗೊಳಿಸಲಾಗಿದೆ." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "ಪವರ್ ಸೇವಿಂಗ್ ಮೋಡ್‌ ಶಕ್ತಗೊಳಿಸಲಾಗಿದೆ." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "ಇತ್ತೀಚಿನ ಅನ್ವಯಿಸುವಿಕೆಗಳು" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "ಅನ್ವಹಿಸುವಿಕೆ ಸೇರಿಸಲು ಅಸಮರ್ಥ. ಅನ್ವಹಿಸುವಿಕೆಗಳ ಗರಿಷ್ಠ ಸಂಖ್ಯೆಯು (%s) ತಲುಪಿದೆ." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "ವಿಜೆಟ್ ಸೇರಿಸಲು ಅಸಮರ್ಥ. ವಿಜೆಟ್‌ಗಳ ಗರಿಷ್ಠ ಸಂಖ್ಯೆಯು (%s) ತಲುಪಿದೆ." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "ಪುಟ ತೆಗೆಯಿರಿ" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "ಈ ಪುಟ ಮತ್ತು ಅದರ ಒಳಾಂಶವನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "ತೆಗೆಯಿರಿ" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "ನೆಟ್‌ವರ್ಕ್ ಸೇವೆಯನ್ನು ಪಡೆಯಲು SIM ಕಾರ್ಡ್ ಸೇರಿಸಿ." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "ನಿರ್ಬಂಧಿಸುವ ಮೋಡ್" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "ಆನ್" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "ಆಫ್" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "ಅಂಶ ಚಲಿಸಲಾಗಿದೆ." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "ಸೇರಿಸಲು ಎರಡು ಸಲ ತಟ್ಟಿ." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "ವಿಜೆಟ್ ಸೇರಿಸಿ" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "ಅಂಶ ಸೇರಿಸಲಾಗಿದೆ." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "ಅಂಶವನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "ಪುಟ %2$d ರಲ್ಲಿ %1$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "ಪ್ರಕಟಣೆ ಬೋರ್ಡ್ ಅಂಶಗಳನ್ನು ಮರುಕ್ರಮಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "ಇದು %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "ಈಗ %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "ಈಗ %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d ಹೊಸ ಅಂಶಗಳು" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "ವಿಜೆಟ್‌ಗಳ ಗರಿಷ್ಠ ಮಿತಿ (%s) ತಲುಪಿದೆ. ಕೆಲವು ವಿಜೆಟ್‌ಗಳನ್ನು ಅಳಿಸಿ ಹಾಗೂ ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ಗಡಿಯಾರಕ್ಕೆ ಮರಳಿ ಹೋಗಲು ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "ವಿಜೆಟ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಎಡಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ಗಡಿಯಾರಕ್ಕೆ ಹಿಂತಿರುಗಲು ಎಡಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "ಪ್ರಕಟಣೆಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s ಸ್ಥಾಪನೆ ತೆಗೆಯಲೇ?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ವಿಜೆಟ್‌ಗಳ ಗರಿಷ್ಠ ಸಂಖ್ಯೆ (%s) ತಲುಪಿದೆ." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "ಅನ್ವಹಿಸುವಿಕೆ ಟ್ರೇ ತೆರೆಯಲು ಎರಡು ಬಾರಿ ತಟ್ಟಿ." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 ಹೊಸ ಅಂಶ" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "ಶಕ್ತಗೊಳಿಸಲು ಎರಡು ಬಾರಿ ತಟ್ಟಿ." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "ಗಡಿಯಾರ" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "ಸಾಧನದ ಉಷ್ಣತೆಯು ಅತ್ಯಂತ ಹೆಚ್ಚಾಗಿರುತ್ತದೆ." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "ಮೊಬೈಲ್ ಸಾಧನವನ್ನು ಬಳಸಿ ಗೇರ್ ಅನ್ವಹಿಸುವಿಕೆಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "ನಿದ್ರೆಯಲ್ಲಿರುವಾಗ" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "ಹೆಚ್ಚು ಅನ್ವಹಿಸುವಿಕೆ. ಪಡೆ" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "ಪವರ್ ಉಳಿತಾಯ + ಶಕ್ತಗೊಳಿಸಿದಾಗ ಕ್ರಿಯೆ ಲಭ್ಯವಿರುವುದಿಲ್ಲ." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "ಸ್ಕ್ರೀನ್ ರೀಡರ್ ಶಕ್ತಗೊಂಡಿರುವಾಗ %s ಲಭ್ಯವಿರುವುದಿಲ್ಲ." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "ಅಡಚಣೆ ಮಾಡಬೇಡಿ" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "ಫ್ಲೈಟ್ ಮೋಡ್ ಶಕ್ತವಾಗಿರುವಾಗ ಮೊಬೈಲ್ ಡೇಟಾವನ್ನು ಆನ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಫ್ಲೈಟ್ ಮೋಡ್ ನಿಶಕ್ತಗೊಳಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "ಗಡಿಯಾರಕ್ಕೆ ಮರಳಲು ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "ಮುಗಿಯಿತು! ಗೇರ್‌ಗೆ ಪ್ರವೇಶಿಸಿ!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "ಮೊಬೈಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "ಕರೆಗಳನ್ನು ಗೇರ್‌ಗೆ ಫಾರ್ವಡ್ ಮಾಡಿ" + +msgid "IDS_ST_BUTTON_START" +msgstr "ಆರಂಭಿಸಿ" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "ನಿರ್ಗಮನ" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "ಸ್ವಾಗತ! ನಿಮ್ಮ ಗೇರ್ ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದನ್ನು ತಿಳಿಯಲು ಕೆಳಗಿನ ಬಟನ್ ತಟ್ಟಿ." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "ನಿಶಕ್ತಗೊಳಿಸಲು ವಿನಂತಿಸಿದೆ" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "ಶಕ್ತಗೊಳಿಸಲು ವಿನಂತಿಸಿದೆ" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "ಗಡಿಯಾರದಲ್ಲಿ ಇಂಡಿಕೇಟರ್ ಐಕಾನ್‌ಗಳನ್ನು ನೋಡಲು ಮೇಲಿನ ಅಂಚನ್ನು ಕೆಳಗೆ ಸ್ವೈಪ್ ಮಾಡಿ." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "ಗಡಿಯಾರದಲ್ಲಿ ಅನ್ವಯಿಸುವಿಕೆಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಕೆಳಭಾಗದ ತುದಿಯನ್ನು ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ." + +msgid "IDS_ST_BUTTON_OK" +msgstr "ಓಕೆ" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "ಹಿಂದಕ್ಕೆ ಮರಳಲು ಮೇಲಿನ ಅಂಚನ್ನು ಕೆಳಗೆ ಸ್ವೈಪ್ ಮಾಡಿ." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "ಅನ್ವಯಿಸುವಿಕೆಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ಅಥವಾ ಅಸ್ಥಾಪಿಸಲು, ನಿಮ್ಮ ಮೊಬೈಲ್ ಸಾಧನದಲ್ಲಿ ಸ್ಯಾಮ್‌ಸಂಗ್ ಗೇರ್ ಅನ್ವಯಿಸುವಿಕೆಯನ್ನು ಬಳಸಿ." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "ಇದು ಹೋಮ್‌ ಸ್ಕ್ರೀನ್‌ನ ಮುಖ್ಯ ರಚನೆಯಾಗಿದೆ." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ಖಾಲಿ" diff --git a/home/res/po/ko_KR.po b/home/res/po/ko_KR.po new file mode 100755 index 0000000..d6e29da --- /dev/null +++ b/home/res/po/ko_KR.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "앱스" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "다음" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "위젯" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "다시 보지 않기" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "모두 삭제" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "제거할 수 없습니다." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "위젯을 이동하려면 길게 누르세요." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "홈 화면을 변경하였습니다." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "불러오는 중..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "데이터를 불러올 수 없습니다. 다시 시도하려면 누르세요." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "홈 화면에 공간이 없어 애플리케이션을 추가할 수 없습니다." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "홈 화면에 공간이 없어 위젯을 추가할 수 없습니다." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "동일한 애플리케이션이 있습니다." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "동일한 위젯이 있습니다." + +msgid "IDS_COM_POP_CANCEL" +msgstr "취소" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "홈 화면 구성을 변경하였습니다." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "선택한 애플리케이션을 홈 화면에서 제거합니다. 디바이스에서는 삭제되지 않습니다." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "애플리케이션 제거" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "위젯 제거" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "선택한 위젯을 홈 화면에서 제거합니다. 디바이스에서는 삭제되지 않습니다." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "초절전 모드" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "최대 위젯 수(%d)에 도달하여 추가할 수 없습니다." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "최대 애플리케이션 수(%d)에 도달하여 추가할 수 없습니다." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "페이지를 추가할 수 없습니다." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "일반 모드" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "[절전 모드]를 해제하였습니다." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "[절전 모드]를 실행하였습니다." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "최근 사용 앱" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "최대 애플리케이션 수(%s)에 도달하여 추가할 수 없습니다." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "최대 위젯 수(%s)에 도달하여 추가할 수 없습니다." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "페이지 제거" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "이 페이지 및 컨텐츠를 제거합니다." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "제거" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "네트워크 서비스를 이용하려면 SIM 카드를 삽입하세요." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "차단 모드" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "사용" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "해제" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "항목을 이동하였습니다." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "추가하려면 두 번 누르세요." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "위젯 추가" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "항목을 추가하였습니다." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "항목을 제거하였습니다." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d페이지 중 %1$d페이지입니다" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "알림보드 항목의 순서를 변경할 수 없습니다." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "%1$d시 %2$d분입니다." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "오전 %d시%d분입니다." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "오후 %d시%d분입니다." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "새 항목 %d개" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "최대 위젯 수(%s)에 도달하였습니다. 일부 위젯을 삭제한 후 다시 시도하세요." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "시계로 돌아가려면 오른쪽으로 미세요." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "위젯을 보려면 왼쪽으로 미세요." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "시계로 돌아가려면 왼쪽으로 미세요." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "알림을 보려면 오른쪽으로 미세요." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s을(를) 삭제할까요?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "최대 위젯 수(%s)에 도달하였습니다." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "앱 트레이를 열려면 두 번 누르세요." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "새 항목 1개" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "실행하려면 두 번 누르세요." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "시계" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "디바이스 온도가 너무 높습니다." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "모바일 디바이스를 사용하여 Gear 애플리케이션을 다운로드하세요." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "잠자는 중" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "애플리케이션 더보기" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "[절전+] 실행 중에는 작업을 실행할 수 없습니다." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "[스크린 리더] 실행 중에는 %s 기능을 사용할 수 없습니다." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "방해 금지" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "[비행기 탑승 모드] 실행 중에는 [모바일 데이터]를 실행할 수 없습니다. [비행기 탑승 모드]을 해제한 후 다시 시도하세요." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "시계로 돌아가려면 위로 미세요." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "준비를 완료하였습니다. Gear를 사용해보세요!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "모바일 네트워크" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Gear로 착신전환" + +msgid "IDS_ST_BUTTON_START" +msgstr "시작" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "종료" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "환영합니다! Gear 사용 방법을 알아보려면 아래 버튼을 누르세요." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "해제하도록 요청하였습니다" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "실행하도록 요청하였습니다" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "시계에서 상태표시 아이콘을 보려면 화면 상단을 아래로 미세요." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "시계에서 앱을 보려면 화면 하단을 위로 미세요." + +msgid "IDS_ST_BUTTON_OK" +msgstr "확인" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "돌아가려면 화면 상단을 아래로 미세요." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "시계에서, 상태표시 아이콘을 보려면 화면 상단을 아래로 미세요." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "시계에서, 앱을 보려면 화면 하단을 위로 미세요." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "시계에서, 알림을 보려면 오른쪽으로 미세요." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "시계로 돌아가려면 왼쪽으로 미세요." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "시계에서, 위젯을 보려면 왼쪽으로 미세요." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "시계로 돌아가려면 오른쪽으로 미세요." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "시계에서, 앱을 보려면 위로 미세요." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "시계로 돌아가려면 아래로 미세요." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "시계에서, 모멘트 바를 보려면 아래로 미세요." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "시계로 돌아가려면 위로 미세요." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "시계가 내 홈 화면입니다. 시작하려면 아래를 누르세요." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "애플리케이션을 설치 또는 삭제하려면, 모바일 디바이스에서 Samsung Gear 애플리케이션을 사용하세요." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "홈 화면의 메인 구조입니다." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "홈 화면 구성입니다." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "비어 있음" diff --git a/home/res/po/ky_KG.po b/home/res/po/ky_KG.po new file mode 100755 index 0000000..327b4bc --- /dev/null +++ b/home/res/po/ky_KG.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Колдонмолор" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Кийн." + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Виджет" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Кайталабоо" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Бардыгын жок кылуу" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Алып салуу мүмкүн эмес." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Жылдыруу үчүн виджетти таптап, кармап туруңуз." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Home screen changed." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Жүктөлүүдө..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Unable to load data. Tap to retry." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Сунуучуну кошууга мүмкүн эмес. Башкы экранда бөлмө жок." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Widget кошуу мүмкүн эмес. Башкы экранда бөлмө жок." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Колдонмо эчак бар." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget эчак бар." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Артка" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Башкы экран жайгаштырылышы өзгөрдү." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Бул колдонмо башкы экрандан алып салынат. Ал түзмөктөн өчүрүлбөйт." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Сунуучуну өчүрүү" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Виджетти алып салуу" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Бул widget башкы экрандан алып салынат. Ал түзмөктөн өчүрүлбөйт." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ашынг. кубат сактоо режим" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Widget кошуу мүмкүн эмес. Виджеттер эң көп боло турган санына (%d) жетти." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Колдонмону кошууга мүмкүн эмес. Колдонмолордун саны (%d) чегине жетти." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Бетти кошууга мүмкүн эмес." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Кадимки режим" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Кубаттуулукту үнөмдөө моду өчүрүлдү." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Кубатты үнөмдөө режими иштетилди." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Акыркы колд." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Сунуучуну кошууга мүмкүн эмес. Сунуучулардын саны (%s) нары четине жетти." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Widget кошуу мүмкүн эмес. Виджеттер эң көп боло турган санына (%s) жетти." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Бетти алып салуу" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Бул бет жана анын мазмуну алып салынат." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Алып сал" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Тармак кызматтарына жөлөө үчүн SIM карта салыңыз" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Камоо режими" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Күйүк" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Өчүк" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Нерсе ордун которду." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Кошууга эки жолу таптаңыз." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Виджет кошуу" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Нерсе кошулду." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Нерсе алып салынды." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Page %1$d of %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Эскертүү тактасынын нерселерин кайра иреттей албайт." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Бул %1$d:%2$d" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Саат %d:%d AM болду" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Саат %d:%d PM болду" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d жаңы нерсе" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Виджеттердин саны жогорку чегине (%s) жетти. Айрым виджеттерди жок кылып, дагы аракеттениңиз." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Саатка кайтууга оңго жылдырыңыз." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Виджеттерди көрүүгө солго жылдырыңыз." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Саатка кайтууга солго жылдырыңыз." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Эскертүүлөрдү көрүүгө оңго жылдырыңыз." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Uninstall %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Виджеттер максималдык санына (%s) жетти." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Сунуучу тактаны ачууга эки жолу таптаңыз." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 жаңы элемент" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Иштетүү үчүн эки басыңыз." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Саат" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "The device temperature is too high." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Gear колдонмолорун уюлдук түзмөк менен жүктөп алыңыз." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Уктоо учурунда" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Дагы колдонмолорду алуу" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Кубат сактоо + иштетилген учурда иш-аракет аткаруу мүмкүн эмес." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "Экран окугуч иштетилген учурда %s байкалбайт." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Тынчымды албоо" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Учуу режим иштет-де Мобил. айтымдар күйгүзүлбөдү. Учуу реж. иштен чыгарып, дагы аракет кыл." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Саатка кайтууга өйдө жылдырыңыз." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Бүттү! Gear'ди колдонуңуз!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Мобил. тармакт." + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Gear'ге чакыр. ктр" + +msgid "IDS_ST_BUTTON_START" +msgstr "Баштоо" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Чыгуу" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Кош келиңиз! Gear'ди колдонууну үйрөнүүгө, төмөнкүнү басыңыз." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Иштен чыгарууга суралды" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Иштетүүгө суралды" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Саатта көрсөтк. сүрөт. көрүүгө, баш кырын ылдый жылдырыңыз." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Саатта колдонмолорду көрүүгө, таман кырын өйдө жылдырыңыз." + +msgid "IDS_ST_BUTTON_OK" +msgstr "ОК" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Артка кайтууга баш кырды ылдый жылдырыңыз." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Колдонмолорду орнотуу же өчүрүү үчүн, мобилдик түзмөгүңүздөгү Samsung Gear колдонмосун пайдаланыңыз." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Бул башкы экрандын негизги түзүлүшү." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Бош" diff --git a/home/res/po/lo.po b/home/res/po/lo.po new file mode 100755 index 0000000..08f3c42 --- /dev/null +++ b/home/res/po/lo.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "ແອັບ" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "ຕໍ່ໄປ" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "ວິດເຈັທ" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "ຢ່າເຮັດຊໍ້າຄືນ" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "ລຶບທັງໝົດ" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "ບໍ່ສາມາດເອົາອອກໄປໄດ້." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "ແຕະວິດເຈັດຄ້າງໄວ້ເພື່ອຍ້າຍມັນ." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "ໜ້າຈໍຫຼັກໄດ້ປ່ຽນ." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "ກຳລັງໂຫຼດ..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "ບໍ່ສາມາດໂຫຼດຂໍ້ມູນໄດ້. ເຄາະເພື່ອລອງໃໝ່." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ບໍ່ສາມາດເພີ່ມແອພພລິເຄຊັນໄດ້. ບໍ່ມີຫ້ອງຢູ່ໃນໜ້າຈໍຫຼັກອີກ." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ບໍ່ສາມາດເພີ່ມວິດເຈັດໄດ້. ບໍ່ມີຫ້ອງຢູ່ໃນໜ້າຈໍຫຼັກອີກ." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "ມີແອພພລິເຄຊັນຢູ່ແລ້ວ." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "ມີວິດເຈັດຢູ່ແລ້ວ." + +msgid "IDS_COM_POP_CANCEL" +msgstr "ຍົກເລີກ" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "ແຜນຜັງໜ້າຈໍຫຼັກປ່ຽນແປງແລ້ວ." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ແອພພລິເຄຊັນນີ້ຈະຖືກເອົາອອກໄປຈາກໜ້າຈໍຫຼັກ. ມັນຈະບໍ່ຖືກລຶບໄປຈາກເຄື່ອງ." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "ເອົາແອພພລິເຄຊັນອອກໄປ" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "ເອົາວິດເຈັດອອກໄປ" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ວິດເຈັດນີ້ຈະຖືກເອົາອອກໄປຈາກໜ້າຈໍຫຼັກ. ມັນຈະບໍ່ຖືກລຶບໄປຈາກເຄື່ອງ." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "ໂໝດປະຢັດໄຟພິເສດ" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ບໍ່ສາມາດເພີ່ມວິດເຈັດໄດ້. ຮອດຈໍານວນວິດເຈັດສູງສຸດ (%d) ແລ້ວ." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "ບໍ່ສາມາດເພີ່ມແອພພລິເຄຊັນໄດ້. ຮອດຈໍານວນແອພພລິເຄຊັນສູງສຸດ (%d) ແລ້ວ." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "ບໍ່ສາມາດເພີ່ມໜ້າໄດ້." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "ໂໝດປົກກະຕິ" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "ໂໝດປະຢັດໄຟປິດໃຊ້ງານແລ້ວ." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "ເປີດໃຊ້ງານໂໝດປະຢັດໄຟແລ້ວ." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "ແອັບບໍ່ດົນນີ້" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "ບໍ່ສາມາດເພີ່ມແອພພລິເຄຊັນໄດ້. ຮອດຈໍານວນແອພພລິເຄຊັນສູງສຸດ (%s) ແລ້ວ." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "ບໍ່ສາມາດເພີ່ມວິດເຈັດໄດ້. ຮອດຈໍານວນວິດເຈັດສູງສຸດ (%s) ແລ້ວ." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "ເອົາໜ້າອອກໄປ" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "ໜ້ານີ້ ແລະເນື້ອໃນຂອງມັນຈະຖືກເອົາອອກໄປ." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "ເອົາອອກໄປ" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "ໃສ່ແຜ່ນ SIM ເຂົ້າໄປ ເພື່ອເຂົ້າຫາການບໍລິການເຄືອຂ່າຍ." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "ໂໝດການບລັອກ" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "ເປີດ" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "ປິດ" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "ລາຍການຖືກຍ້າຍແລ້ວ." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "ແຕະສອງເທື່ອຊ້ອນ ເພື່ອເພີ່ມ." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "ເພີ່ມວິດເຈັທ" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "ລາຍການໄດ້ເພີ່ມເຂົ້າ." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "ລາຍການເອົາອອກແລ້ວ." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "ໜ້າ %1$d ໃນ %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "ບໍ່ສາມາດຈັດລໍາດັບລາຍການກະດານການແຈ້ງເຕືອນຄືນໃໝ່ໄດ້." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "ມັນແມ່ນ %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "ເວລາ %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "ເວລາ %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "ລາຍການໃໝ່ %d ລາຍການ" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "ຮອດຈໍານວນວິດເຈັດສູງສຸດ (%s) ແລ້ວ. ລຶບບາງວິດເຈັດອອກ ແລະລອງໃໝ່ອີກ." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ຮູດໄປທາງຂວາ ເພື່ອກັບໄປຫາໂມງ." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "ຮູດໄປທາງຊ້າຍ ເພື່ອເບິ່ງວິດເຈັດ." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ຮູດໄປທາງຊ້າຍ ເພື່ອກັບໄປຫາໂມງ." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "ຮູດໄປທາງຂວາ ເພື່ອເບິ່ງການແຈ້ງເຕືອນ." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "ຖອນການຕິດຕັ້ງ %s ບໍ?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ຮອດຈໍານວນວິດເຈັດສູງສຸດ (%s) ແລ້ວ." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "ແຕະສອງເທື່ອຊ້ອນເພື່ອເປີດຖາດແອັບ." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 ລາຍການໃໝ່" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "ແຕະສອງເທື່ອຊ້ອນ ເພື່ອເປີດໃຊ້ງານ." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "ໂມງ" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "ອຸນຫະພູມເຄື່ອງສູງໂພດ." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "ດາວໂຫຼດແອພພລິເຄຊັນເກຍດ້ວຍການໃຊ້ໂທລະສັບມືຖື." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "ໃນຂະນະກໍາລັງນອນຫຼັບ" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "ເອົາແອພພລິເຄຊັນເພີ່ມເຕີມ" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "ບໍ່ມີການກະທໍາຢູ່ໃນຂະນະທີ່ການປະຢັດໄຟ + ເປີດໃຊ້ງານ." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "ບໍ່ມີ %s ຢູ່ໃນຂະນະທີ່ເຄື່ອງອ່ານໜ້າຈໍເປີດໃຊ້ງານ." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "ຫ້າມລົບກວນ" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "ບໍ່ສາມາດເປີດຂໍ້ມູນມືຖືໄດ້ໃນຂະນະທີ່ໂໝດການບິນເປີດໃຊ້ງານແລ້ວ. ປິດໃຊ້ງານໂໝດການບິນ ແລະລອງໃໝ່ອີກ." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "ຮູດຂຶ້ນເທິງ ເພື່ອກັບໄປຫາໂມງ." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "ເທົ່ານັ້ນລະ! ເຂົ້າໄປຫາເກຍ!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "ເຄືອຂ່າຍໂທລະສັບມືຖື" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "ໂອນສາຍໄປຫາເກຍ" + +msgid "IDS_ST_BUTTON_START" +msgstr "ເລີ່ມຕົ້ນ" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "ອອກ" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "ຍິນດີຕ້ອນຮັບ! ແຕະປຸ່ມລຸ່ມນີ້ ເພື່ອຮຽນວິທີໃຊ້ເກຍຂອງທ່ານ." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "ຂໍປິດໃຊ້ງານແລ້ວ" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "ຂໍເປີດໃຊ້ງານແລ້ວ" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "ຮູດຂອບດ້ານເທິງລົງລຸ່ມ ເພື່ອເບິ່ງໄອຄອນຕົວຊີ້ບອກຢູ່ໂມງ." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "ຮູດຂອບລຸ່ມຂຶ້ນ ເພື່ອເບິ່ງແອັບຢູ່ໃນໂມງ." + +msgid "IDS_ST_BUTTON_OK" +msgstr "ຕົກລົງ" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "ຮູດຂອບເທິງລົງລຸ່ມ ເພື່ອກັບຄືນ." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "ເພື່ອຕິດຕັ້ງ ຫຼືຖອນຕິດຕັ້ງແອພພລິເຄຊັນ, ໃຊ້ແອພພລິເຄຊັນ Samsung Gear ຢູ່ເທິງອຸປະກອນມືຖືຂອງທ່ານ." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "ອັນນີ້ແມ່ນໂຄງສ້າງຫຼັກຂອງໜ້າຈໍຫຼັກ." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ຫວ່າງ​ເປົ່າ" diff --git a/home/res/po/lt.po b/home/res/po/lt.po new file mode 100755 index 0000000..8439fd4 --- /dev/null +++ b/home/res/po/lt.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Programos" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Kitas" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Valdiklis" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Nekartoti" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Trinti viską" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Negalima pašalinti." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Norėdami perkelti vald., bakstelėkite ir laikykite." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Pradžios ekranas pakeistas." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Įkeliama..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Neįmanoma įkelti duomenų. Bakstelėkite ir bandykite dar kartą." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Neįmanoma pridėti programos. Pradžios ekrane nebėra vietos." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Neįmanoma pridėti valdiklio. Pradžios ekrane nebėra vietos." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Programa jau yra." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Valdiklis jau yra." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Atšaukti" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Pradžios ekrano išdėstymas pakeistas." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ši programa bus pašalinta iš pradžios ekrano. Ji nebus ištrinta iš įrenginio." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Pašalinti programą" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Pašalinti valdiklį" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Šis valdiklis bus pašalintas iš pradžios ekrano. Jis nebus ištrintas iš įrenginio." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ypat.energ.taupymo režim." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Neįmanoma pridėti valdiklio. Pasiektas didžiausias leistinas valdiklių skaičius (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Neįmanoma pridėti programos. Pasiektas didžiausias programų skaičius (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Neįmanoma pridėti puslapio." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Įprastinis režimas" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Energijos taupymo režimas išjungtas." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Įjungtas energijos taupymo režimas." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Pask. progr." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Neįmanoma pridėti programos. Pasiektas didžiausias programų skaičius (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Neįmanoma pridėti valdiklio. Pasiektas didžiausias valdiklių skaičius (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Pašalinti puslapį" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Šis puslapis ir jo turinys bus pašalinti." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Šalinti" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Įdėkite SIM kortelę, kad galėtumėte naudotis tinklo paslaugomis." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blokavimo režimas" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Įjungta" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Išjungta" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Elementas perkeltas." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Bakstelėkite dukart ir pridėkite." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Pridėti valdiklį" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Elementas pridėtas." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Elementas pašalintas." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%1$d psl. iš %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Pranešimų lentos elementų pertvarkyti negalima." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Tai %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Dabar %d:%d (priešpiet)." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Dabar %d:%d (popiet)." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "Naujų elementų: %d" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Pasiektas didžiausias valdiklių skaičius (%s). Ištrinkite kelis valdiklius ir bandykite dar." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Braukit dešinėn ir grįžkit į laikrodį." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Braukite kairėn ir peržr. valdiklius." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Braukite kairėn ir grįžkit į laikrodį." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Braukite dešinėn ir peržr. pranešimus." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Pašalinti „%s“?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Pasiektas didžiausias leistinas valdiklių skaičius (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Bakstelėkite dukart, kad atidarytumėte programų dėklą." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 naujas elementas" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Bakstelėkite dukart ir įjunkite." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Laikrodis" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Įrenginio temperatūra per didelė." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Atsisiųskite „Gear“ programas naudodamiesi įrenginiu." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Miegant" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Gauti daugiau programų" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Veiksmo negalima atlikti, kai įjungtas „Energijos taupymas +“." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s nepasiekiama, kai įjungtas ekrano skaitytuvas." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Netrukdyti" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Veikiant skrydžio rež.negalima įjungti mob.duom. Išjunkite skrydžio rež. ir bandykite dar." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Brūkš. į viršų ir grįžkite į laikrodį." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Viskas! Prisijunkite prie „Gear“!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mob. tinklai" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Prs. skamb.į Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Paleisti" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Išeiti" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Sveiki! Bakstelėję mygtuką sužinosite, kaip naudoti „Gear“." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Paprašė išjungti" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Paprašė įjungti" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Braukit virš.kraštą žemyn, žr.indik. piktogr.laikrodyje." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Braukite iš apačios į viršų ir žr. programas laikrodyje." + +msgid "IDS_ST_BUTTON_OK" +msgstr "Gerai" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Braukite viršutinį kraštą žemyn ir grįžkite atgal." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Norėdami įdiegti arba pašalinti programas, naudokite „Samsung Gear“ programą mobiliajame įrenginyje." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Tai pagrindinė pradžios ekrano struktūra." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Tuščia" diff --git a/home/res/po/lv.po b/home/res/po/lv.po new file mode 100755 index 0000000..85e83e0 --- /dev/null +++ b/home/res/po/lv.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Progr." + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Nākamais" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Logrīks" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Neatkārtot" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Dzēst visu" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Nevar noņemt." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Pieskarieties un turiet logrīku, lai to pārvietotu." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Sākuma ekrāns ir nomainīts." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Ielādē..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Nevar ielādēt datus. Pieskarieties, lai mēģinātu vēlreiz." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Nevar pievienot programmu. Sākuma ekrānā vairs nav vietas." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Nevar pievienot logrīku. Sākuma ekrānā vairs nav vietas." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Programma jau pastāv." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Logrīks jau pastāv." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Atcelt" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Sākuma ekrāna izkārtojums ir mainīts." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Šī programma tiks noņemta no sākuma ekrāna. Tā netiks izdzēsta no ierīces." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Noņemt programmu" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Noņemt logrīku" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Šis logrīks tiks noņemts no sākuma ekrāna. Tas netiks izdzēsts no ierīces." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Īpašais enerģ. taup. rež." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Nevar pievienot logrīku. Sasniegts maksimālais logrīku skaits (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Nevar pievienot programmu. Sasniegts maksimālais programmu skaits (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Nevar pievienot lapu." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Parastais režīms" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Enerģijas taupīšanas režīms ir deaktivizēts." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Aktivizēts enerģijas taupīšanas režīms." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Nes. progr." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Nevar pievienot programmu. Sasniegts maksimālais programmu skaits (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Nevar pievienot logrīku. Sasniegts maksimālais logrīku skaits (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Noņemt lapu" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Šī lapa un tās saturs tiks noņemts." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Noņemt" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Lai piekļūtu tīkla pakalpojumiem, ievietojiet SIM karti." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Bloķēšanas režīms" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Ieslēgt" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Izslēgt" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Objekts pārvietots." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Veiciet dubultskārienu, lai pievienotu." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Pievienot logrīku" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Objekts ir pievienots." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Objekts ir noņemts." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%1$d. lapa no %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Nevar pārkārtot paziņojumu paneļa objektus." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Pareizs laiks ir %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Pareizs laiks %d:%d priekšpusdienā." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Pareizs laiks %d:%d pēcpusdienā." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d jauni objekti" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Sasniegts maksimālais logrīku skaits (%s). Izdzēsiet dažus logrīkus un mēģiniet vēlreiz." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Pavelc. pa labi, lai atgr. pie pulkst." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Pavelciet pa kreisi, lai sk. logrīkus." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Pav. pa kreisi, lai atgr. pie pulkst." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Pavelciet pa labi, lai skatītu paziņ." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Vai atinstalēt %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Sasniegts maksimālais logrīku skaits (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Lai atvērtu programmu ikonjoslu, veiciet dubultskārienu." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 jauns objekts" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Veiciet dubultskārienu, lai aktivizētu." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Pulkstenis" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Ierīces temperatūra ir pārāk augsta." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Lejupielādējiet Gear programmas, izmantojot mobilo ierīci." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Gulēšanas laikā" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Iegūt citas programmas" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Šī darbība nav pieejama, kad ir aktivizēta enerģijas taupīšana +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s nav pieejama, kad ir aktivizēts ekrāna lasītājs." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Netraucēt" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Nevar ieslēgt mob.datus, ja aktivizēts lid. režīms. Deakt. lid. režīmu un mēģiniet vēlreiz." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Lai atvērtu pulkst., velciet augšup." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Tieši tā! Uzvelciet un apgūstiet Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobilie tīkli" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Pārs. zv. uz Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Sākt" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Iziet" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Sveiki! Pieskar. pogai tālāk, lai uzzinātu, kā lietot Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Pieprasīts deaktivizēt" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Pieprasīts aktivizēt" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Pav. augš. malu uz leju,lai sk. indik. ikonas uz pulkst." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Pavelciet ap. malu uz augšu, lai sk. progr. uz pulkst." + +msgid "IDS_ST_BUTTON_OK" +msgstr "Labi" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Pavelciet augšējo malu uz leju, lai atgrieztos." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Lai instalētu vai atinstalētu programmas, izmantojiet Samsung Gear programmu savā mobilajā ierīcē." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Šī ir sākuma ekrāna galvenā struktūra." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Tukšs" diff --git a/home/res/po/mk.po b/home/res/po/mk.po new file mode 100755 index 0000000..4ac4f13 --- /dev/null +++ b/home/res/po/mk.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Апликации" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Следно" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Виџет" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Не повтор." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Избриши сè" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Не може да се отстрани." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Допрете и држете виџет за да го поместите." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Почетниот екран е сменет." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Активирање..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Не можат да се вчитаат податоци. Допрете за повторен обид." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Не може да се додаде апликација. Нема веќе место на почетниот екран." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Не може да се додаде виџет. Нема веќе место на почетниот екран." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Апликацијата веќе постои." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Виџетот веќе постои." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Откажи" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Распоредот на почетниот екран е сменет." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Апликацијата ќе се отстрани од почетниот екран. Нема да се избрише од уредот." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Отстрани апликација" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Отстрани виџет" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Виџетот ќе се отстрани од почетниот екран. Нема да се избрише од уредот." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ултра реж.за штед.енерг." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Не може да се додаде виџетот. Достигнат е максималниот број виџети (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Не може да се додаде апликација. Достигнат е максималниот број апликации (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Не може да се додаде страница." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Нормален режим" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Режимот за штедење енергија е исклучен." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Вклучен е режимот за штедење енергија." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Посл. аплик." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Не може да се додаде апликација. Достигнат е максималниот број апликации (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Не може да се додаде виџет. Достигнат е максималниот број виџети (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Отстрани страница" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Страницата и содржините ќе се отстранат." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Отстрани" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Вметнете SIM-картичка за да пристапите кон мрежните услуги." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Режим за блокирање" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Вклучено" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Исклучено" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Записот е преместен." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Допрете двапати за да додадете." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Додај виџет" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Записот е додаден." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Записот е отстранет." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Страница %1$d од %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Не може да се прередат ставките на таблата за известувања." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Сега е %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Сега е %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Сега е %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d нови записи" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Достигнат е максималниот број виџети (%s). Избришете некој виџет и обидете се повторно." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Помин. десно за да се врат.на часовн." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Помин.лево за да ги видите виџетите." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Помин.лево за да се врат.на часовн." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Помин. десно за да видите известувања." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Да се деинсталира %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Достигнат е максималниот број виџети (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Допрете двапати за да ја отворите лентата за апликации." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 нов запис" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Допрете двапати за да овозможите." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Часовник" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Температурата на уредот е превисока." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Преземајте апликации за Gear користејќи мобилен уред." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "При спиење" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Земи повеќе апликации" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Дејството не е достапно додека е вклучено Штедење енергија +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s не е достапно додека е вклучен екранскиот читач." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Не вознемирувај" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Не може да се вклучи Моб. подат. додека е вклучен режимот за лет. Искл. режим за лет. и обид.се повт." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Помин.горе за враќање на часовникот." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Толку! Забавувајте се со Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Мобилни мрежи" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Препр.пов.на Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Почни" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Излез" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Добре дојдовте! Доп.го коп. подолу за да го користите Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Побарано да се исклучи" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Побарано да се вклучи" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Пом.со горн.раб надолу за показните икони на часовникот." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Пом. од долниот раб нагоре за апликациите на часовникот." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Поминете со горниот раб надолу за да се вратите." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "За да инсталирате или одинсталирате апликации, користете ја апликацијата Samsung Gear на мобилниот уред." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Ова е главната структура на почетниот екран." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Празно" diff --git a/home/res/po/ml.po b/home/res/po/ml.po new file mode 100755 index 0000000..a77c047 --- /dev/null +++ b/home/res/po/ml.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "ആപ്ലിക്കേഷനുകൾ" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "അടുത്തത്" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "വിജറ്റ്" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "ആവർത്തിക്കേണ്ട." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "എല്ലാം ഇല്ലാതാക്കുക" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "നീക്കം ചെയ്യാന്‍ ആവുന്നില്ല." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "ഒരു വിജറ്റ് നീക്കുന്നതിന് അതിൽ സ്പർശിച്ചുപിടിക്കുക." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "ഹോം സ്ക്രീന്‍ മാറ്റി." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "ലോഡ്‌ ചെയ്യുന്നു..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "ഡാറ്റ ലോഡുചെയ്യാന്‍ കഴിയുന്നില്ല. വീണ്ടും ശ്രമിക്കുന്നതിന് ടാപ്പുചെയ്യുക" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ആപ്ലിക്കേഷൻ ചേർക്കാനാവില്ല. ഹോം സ്ക്രീനിൽ ഇനിയും സ്ഥലമില്ല." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "വിജറ്റ് ചേർ‌ക്കാനാവില്ല. ഹോം സ്ക്രീനിൽ ഇനിയും സ്ഥലമില്ല." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "ആപ്ലിക്കേഷൻ നേരത്തേതന്നെ നിലവിലുണ്ട്." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "വിജറ്റ് നേരത്തേതന്നെ നിലവിലുണ്ട്." + +msgid "IDS_COM_POP_CANCEL" +msgstr "റദ്ദാക്കുക" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "ഹോം സ്ക്രീൻ ലേഔട്ട് മാറ്റി." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ഈ ആപ്ലിക്കേഷൻ ഹോം സ്ക്രീനിൽ നിന്ന് നീക്കം ചെയ്യപ്പെടും. ഉപകരണത്തിൽ നിന്ന് അത് നീക്കംചെയ്യപ്പെടുകയില്ല." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "ആപ്ലിക്കേഷൻ നീക്കംചെയ്യുക" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "വിജറ്റ് നീക്കംചെയ്യുക" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ഈ വിജറ്റ് ഹോം സ്ക്രീനിൽ നിന്ന് നീക്കം ചെയ്യപ്പെടും. ഉപകരണത്തിൽ നിന്ന് അത് നീക്കംചെയ്യപ്പെടുകയില്ല." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "അൾട്രാ പവർ സേവിംഗ് മോഡ്" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "വിജറ്റ് ചേർ‌ക്കാനാവില്ല. വിജറ്റുകളുടെ എണ്ണം പരമാവധിയിൽ (%d) എത്തി." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "ആപ്ലിക്കേഷൻ ചേർക്കാനാകില്ല. ആപ്ലിക്കേഷനുകളുടെ പരമാവധി എണ്ണം (%d) എത്തി." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "പേജ് ചേർക്കാനാവില്ല." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "സാധാരണ മോഡ്" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "പവർ ലാഭിക്കൽ മോഡ് അപ്രാപ്തമാക്കി." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "പവർ സേവിംഗ് മോഡ് പ്രാപ്തമാക്കി." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "അടുത്തിടെ ഉപയോഗിച്ച ആപ്ലിക്കേഷനുകൾ" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "ആപ്ലിക്കേഷൻ ചേർക്കാനാവില്ല. ആപ്ലിക്കേഷനുകളുടെ എണ്ണം പരമാവധിയിൽ (%s) എത്തി." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "വിജറ്റ് ചേർ‌ക്കാനാവില്ല. വിജറ്റുകളുടെ എണ്ണം പരമാവധിയിൽ (%s) എത്തി." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "പേജ് നീക്കംചെയ്യുക" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "ഈ പേജും ഇതിലെ ഉള്ളടക്കവും നീക്കംചെയ്യപ്പെടും." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "നീക്കംചെയ്യുക" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "നെറ്റ്‌വര്‍ക്ക് സേവനങ്ങള്‍ ആക്സസുചെയ്യാന്‍ SIM കാര്‍ഡ് തിരുകുക" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "തടയൽ മോഡ്" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "ഓണ്‍‌" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "ഓഫ്" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "ഇനം നീക്കി." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "ചേർക്കുന്നതിന് ഇരട്ട ടാപ്പുചെയ്യുക." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "വിജറ്റ് ചേര്‍ക്കുക" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "ചേർത്ത ഇനം." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "ഇനം നീക്കംചെയ്യപ്പെട്ടു." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d ല്‍ പേജ് %1$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "അറിയിപ്പ് ബോർഡ് ഇനങ്ങളുടെ ക്രമം മാറ്റാനാവില്ല." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "ഇത് %1$d:%2$d ആണ്." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "ഇപ്പോള്‍ %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "ഇപ്പോള്‍ %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d പുതിയ ഇനങ്ങള്‍" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "വിജറ്റുകളുടെ എണ്ണം പരമാവധിയിൽ (%s) എത്തി. ഏതാനും വിജറ്റുകൾ ഇല്ലാതാക്കി വീണ്ടും ശ്രമിക്കുക." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ക്ലോക്കിലേക്ക് മടങ്ങുന്നതിന് വലത്തോട്ട് സ്വൈപ് ചെയ്യുക." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "വിജറ്റുകൾ കാണുന്നതിന് ഇടത്തോട്ട് സ്വൈപ് ചെയ്യുക." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ക്ലോക്കിലേക്ക് മടങ്ങുന്നതിന് ഇടത്തോട്ട് സ്വൈപ് ചെയ്യുക." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "അറിയിപ്പുകൾ കാണുന്നതിന് വലത്തോട്ട് സ്വൈപ് ചെയ്യുക." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s അണ്‍‌ഇന്‍സ്റ്റാള്‍ചെയ്യണോ?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "വിജറ്റുകളുടെ എണ്ണം പരമാവധിയിൽ (%s) എത്തി." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "ആപ്ലിക്കേഷൻ ട്രേ തുറക്കുന്നതിന് രണ്ടുതവണ സ്പർശിക്കുക." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 പുതിയ ഇനം" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "പ്രാപ്തമാക്കുന്നതിന് രണ്ടുതവണ സ്പർശിക്കുക." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "ക്ലോക്ക്" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "ഉപകരണത്തിന്‍റെ താപനില വളരെ ഉയര്‍ന്നതാണ്." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "മൊബൈൽ ഉപകരണം ഉപയോഗിച്ച് ഗിയർ ആപ്ലിക്കേഷനുകൾ ഡൗൺലോഡ് ചെയ്യുക." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "ഉറങ്ങുമ്പോൾ" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "കൂടുതൽ ആപ്ലിക്കേഷനുകൾ നേടുക" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "പവർ സേവിംഗ് + പ്രാപ്തമാക്കിയിരിക്കുന്ന സമയത്ത് പ്രവർത്തനം ലഭ്യമല്ല." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "സ്ക്രീൻ റീഡർ പ്രാപ്തമാക്കിയിരിക്കുന്ന സമയത്ത് %s ലഭ്യമല്ല." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "ശല്യപ്പെടുത്തരുത്" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "ഫ്ലൈറ്റ് മോഡ് പ്രാപ്തമാക്കിയിരിക്കുന്ന സമയത്ത് മൊബൈൽ ഡാറ്റ ഓൺ ചെയ്യാനാവില്ല. ഫ്ലൈറ്റ് മോഡ് അപ്രാപ്തമാക്കി വീണ്ടും ശ്രമിക്കുക." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "ക്ലോക്കിലേക്ക് തിരികെ പോകുന്നതിന് മുകളിലേക്ക് സ്വൈപ് ചെയ്യുക." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "അതുതന്നെ! ഗിയറിൽ പ്രവേശിക്കുക!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "മൊബൈൽ നെറ്റ്‍വർക്കുകൾ" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "ഗിയറിലേക്ക് കോളുകൾ ഫോർവേഡ് ചെയ്യുക" + +msgid "IDS_ST_BUTTON_START" +msgstr "ആരംഭിക്കുക" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "പുറത്തുകടക്കുക" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "സ്വാഗതം! നിങ്ങളുടെ ഗിയർ ഉപയോഗിക്കുന്നത് എങ്ങനെയെന്നറിയുന്നതിന് താഴെയുള്ള ബട്ടണിൽ സ്പർശിക്കുക." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "അപ്രാപ്തമാക്കുന്നതിന് അഭ്യർത്ഥിച്ചു" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "പ്രാപ്തമാക്കുന്നതിന് അഭ്യർത്ഥിച്ചു" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "ക്ലോക്കിൽ ഇൻഡിക്കേറ്റർ ഐക്കണുകളെ കാണുന്നതിന് മുകളിലെ അരുകിൽ നിന്ന് താഴേയ്ക്ക് സ്വൈപ് ചെയ്യുക." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "ആപ്ലിക്കേഷനുകളെ ക്ലോക്കിൽ കാണുന്നതിന് താഴത്തെ അരുകിൽ നിന്ന് മുകളിലേക്ക് സ്വൈപ് ചെയ്യുക." + +msgid "IDS_ST_BUTTON_OK" +msgstr "ശരി" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "പിന്നോട്ട് പോവുന്നതിന് മുകളിലെ അരുകിൽ നിന്ന് താഴേയ്ക്ക് സ്വൈപ് ചെയ്യുക." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "ആപ്ലിക്കേഷനുകൾ ഇൻസ്റ്റാൾ ചെയ്യാനോ അൺഇൻസ്റ്റാൾ ചെയ്യാനോ, നിങ്ങളുടെ മൊബൈൽ ഉപകരണത്തിലെ Samsung Gear ആപ്ലിക്കേഷൻ ഉപയോഗിക്കുക." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "ഇതാണ് ഹോം സ്ക്രീനിന്‍റെ പ്രധാന ഘടന." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ശൂന്യം" diff --git a/home/res/po/mn_MN.po b/home/res/po/mn_MN.po new file mode 100755 index 0000000..f36da60 --- /dev/null +++ b/home/res/po/mn_MN.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Апп" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Цааш" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Тоноглол" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Бүү давт" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Бүгдийг устгах" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Арилгах боломжгүй." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Тоноглолыг зөөхийн тулд товшиж барь" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Эхлэл дэлгэц өөрчлөгдсөн." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Ачаалж байна..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Өгөгдөл ачаалах боломжгүй. Товшиж дахин оролд" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Програм нэмэх боломжгүй. Эхлэл дэлгэцэд дахиад зай байхгүй." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Тоноглол нэмэх боломжгүй. Эхлэл дэлгэцэд дахиад зай байхгүй." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Програм аль хэдийн байна." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Тоноглол аль хэдийн байна." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Цуцлах" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Эхлэл дэлгэцийн байрлал өөрчлөгдсөн." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Эхлэл дэлгэцээс энэ програмыг арилгана. Энэ нь төхөөрөмжөөс устгагдахгүй." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Програм арилгах" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Тоноглол арилгах" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Эхлэл дэлгэцээс энэ тоноглолыг арилгана. Энэ нь төхөөрөмжөөс устгагдахгүй." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Хэт тэжээл хэмнэх горим" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Тоноглол нэмэх боломжгүй. Тоноглолын (%d) тооны дээд хязгаарт хүрсэн." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Програм нэмэх боломжгүй. Програмын (%d) тооны дээд хязгаарт хүрсэн." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Хуудас нэмэх боломжгүй." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Хэвийн горим" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Тэжээл хэмнэх горим идэвхгүй боллоо" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Тэжээл хэмнэх горимыг идэвхжүүлсэн." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Сүүл. прог" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Програм нэмэх боломжгүй. Програмын (%s) тооны дээд хязгаарт хүрсэн." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Тоноглол нэмэх боломжгүй. Тоноглолын (%s) тооны дээд хязгаарт хүрсэн." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Хуудас арилгах" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Энэ хуудас болон түүний агуулгыг арилгана." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Арилгах" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Сүлжээний үйлчилгээнд хандахын тулд SIM картыг оруул" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Хаах горим" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Идэвхтэй" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Идэвхгүй" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Зүйлийг зөөсөн." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Нэмэхийн тулд хоёр товш." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Тоноглол нэмэх" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Зүйл нэмсэн." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Зүйл арилгасан." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Хуудас %1$d / %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Мэдэгдлийн самбарын зүйлсийн дарааллыг өөрчлөх боломжгүй." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Энэ нь %1$d:%2$d" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Одоо %d:%d AM" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Одоо %d:%d PM" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d шинэ зүйл" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Тоноглолын тооны дээд хязгаарт (%s) хүрсэн. Зарим тоноглолыг устгаад, дахин оролд." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Баруун тийш шударч цаг руу буц." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Зүүн тийш шударч тоноглолууд хар." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Зүүн тийш шударч цаг руу буц." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Баруун тийш шударч мэдэгдэл хар." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Uninstall %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Тоноглолын (%s) тооны дээд хязгаарт хүрсэн." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Аппын тавиурыг нээхийн тулд хоёр товш." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 шинэ зүйл" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Идэвхжүүлэхийн тулд хоёр товш." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Цаг" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Төхөөрөмжийн температур хэт өндөр байна" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Мобайл төхөөрөмж ашиглан Gear-ийн аппууд тат." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Унтаж байхад" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Өөр аппууд авах" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Тэжээл хэмнэх + идэвхжүүлсэн үед үйлдэл боломжгүй." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "Дэлгэц уншигчийг идэвхжүүлсэн үед %s боломжгүй байна." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Бүү үймүүл" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Нислэг горим идэвхжсэн үед Хөдөл. дата асахгүй. Нислэг горим идэвхгүй болгоод, дахин оролд." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Дээш шударч цаг руу буц." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Ингээд боллоо! Gear-ээ ашиглаж эхэл!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Хөдөлгнт сүлжээ" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Gear-т дууд уламж" + +msgid "IDS_ST_BUTTON_START" +msgstr "Эхлүүлэх" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Гарах" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Тавтай морил! Gear ашиглаж сурахын тулд доорх товчийг товш." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Идэвхгүй болгохыг хүссэн" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Идэвхжүүлэхийг хүссэн" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Цаган дээр заагчийн дүрс харахдаа дээд ирмэг доош шудар." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Цаган дээр аппууд харахын тулд доод ирмэгийг дээш шудар." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Буцахын тулд дээд ирмэгийг доош шудар." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Аппликэйшныг суулгах эсвэл устгах бол хөдөлгөөнт төхөөрөмж дээрх Samsung Gear аппликэйшн ашигла." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Энэ бол эхлэл дэлгэцийн үндсэн бүтэц юм." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Хоосон" diff --git a/home/res/po/mr.po b/home/res/po/mr.po new file mode 100755 index 0000000..d450896 --- /dev/null +++ b/home/res/po/mr.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "अनुप्रयोग" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "पुढे" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "विजेट" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "पुनरावृत्‍ती करू नका." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "सर्व हटवा" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "काढण्यास अक्षम." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "ते हलवण्या साठी विजेट टॅप आणि होल्ड करा." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "होम स्क्रीन बदलली." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "लोड होत आहे..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "डेटा लोड करण्यामध्‍ये अक्षम. पुनर्प्रयत्न करण्‍यासाठी टॅप करा." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "अनुप्रयोग जोडण्यात अक्षम. मुख्य स्‍क्रीनवर कोणतेही अधिक कक्ष नाहीत." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "विजेट जोडण्यात अक्षम. मुख्य स्‍क्रीनवर कोणतेही अधिक कक्ष नाहीत." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "अनुप्रयोग आधीपासूनच अस्तित्वात आहे." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "विजेट आधीपासूनच अस्तित्वात आहे." + +msgid "IDS_COM_POP_CANCEL" +msgstr "रद्द" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "मुख्य स्क्रीन लेआउट बदलले." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "हा अनुप्रयोग मुख्य स्‍क्रीनवरून काढण्‍यात येईल. हे उपकरणा मधून हटवण्यात येणार नाही." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "अनुप्रयोग काढून टाका" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "विजेट काढून टाका" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "हा विजेट मुख्य स्‍क्रीनवरून काढून टाकण्यात येईल. हे उपकरणा मधून हटवण्यात येणार नाही." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "अल्ट्रा पॉवर बचत मोड" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "विजेट जोडण्यात अक्षम. विजेटची कमाल संख्‍या (%d) गाठली." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "अनुप्रयोग जोडण्‍यामध्‍ये अक्षम. अनुप्रयोगांची कमाल संख्‍या (%d) गाठली." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "पृष्ठ जोडण्यात अक्षम." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "सामान्य मोड" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "ऊर्जा बचत मोड अक्षम केला." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "पॉवर जतन करत आहे मोड सक्षम केला." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "अलीकडील अनुप्रयोग" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "अनुप्रयोग जोडण्‍यामध्‍ये अक्षम. अनुप्रयोगांची कमाल संख्‍या (%s) गाठली." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "विजेट जोडण्यास अक्षम. विजेट्सची कमाल संख्‍या (%s) गाठली." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "पृष्‍ठ काढून टाका." + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "हे पृष्ठ आणि त्याची सामग्री काढली जाईल." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "काढून टाका" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "नेटवर्क सेवा एक्सेस करण्या साठी कृपया SIM कार्ड प्रविष्ट करा." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "अवरोध मोड" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "चालू" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "बंद" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "आयटेम हलवला." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "जोडण्‍यासाठी दोनदा टॅप करा." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "विजेट जोडा" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "आयटम जोडला." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "आयटम काढून टाकला." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d पैकी %1$d पृष्‍ठ" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "अधिसूचना बोर्ड आयटम्‍स पुन्‍हा ऑर्डर करू शकत नाही." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "हे %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "%d:%d AM वाजलेले आहेत." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "%d:%d PM वाजलेले आहेत." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d नवीन आयटेम्स" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "विजेट्सची कमाल संख्‍या (%s) गाठली. काही विजेट्स हटवा आणि पुन्हा प्रयत्न करा." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "घड्याळावर परत जाण्‍यासाठी उजवीकडे स्‍वाइप करा." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "विजेट्स पाहण्‍यासाठी डावीकडे स्‍वाइप करा." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "घड्याळावर परत जाण्‍यासाठी डावीकडे स्‍वाइप करा." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "अधिसूचना पाहण्‍यासाठी उजवीकडे स्‍वाइप करा." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s अनइंस्टॉल?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "विजेट्सची कमाल संख्‍या (%s) गाठली." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "अनुप्रयोग ट्रे उघडण्यासाठी दोनदा टॅप करा." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 नवीन आयटम" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "सक्षम करण्‍यासाठी दोनदा टॅप करा." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "घड्याळ" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "उपकरणचे तापमान खूपच जास्‍त आहे." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "मोबाईल उपकरण वापरून गिअर अनुप्रयोग डाउनलोड करा." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "झोपत असताना" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "अधिक अनुप्रयोग प्राप्त करा" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "पॉवर बचत + सक्षम असताना क्रिया उपलब्‍ध नाही." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "स्‍क्रीन रीडर सक्षम असताना %s उपलब्‍ध नसेल." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "व्‍यत्‍यय आणू नका" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "फ्लाइट मोड सक्षम केलेला असताना मोबाईल डेटा चालू करण्यात अक्षम. फ्लाइट मोड अक्षम करा आणि पुन्हा प्रयत्न करा." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "घड्याळावर परत जाण्यासाठी वरच्या दिशेने स्वाइप करा." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "झाले! गिअरमध्ये जा!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "मोबाईल नेटवर्क्स" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "गिअरवर कॉल्स अग्रेषित करा" + +msgid "IDS_ST_BUTTON_START" +msgstr "सुरु करा" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "बाहेर पडा" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "आपले स्वागत आहे! आपले गिअर कसे वापरायचे हे शिकण्यासाठी खालील बटण टॅप करा." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "अक्षम करण्याची विनंती केली" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "सक्षम करण्याची विनंती केली" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "घड्याळावर सूचक आयकॉन्‍स पाहण्यासाठी शीर्ष कडा खाली स्वाइप करा." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "घड्याळावर अनुप्रयोग पाहण्यासाठी तळाची कडा स्वाइप करा." + +msgid "IDS_ST_BUTTON_OK" +msgstr "ठीक" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "मागे जाण्यासाठी शीर्ष कडा खाली स्वाइप करा." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "अनुप्रयोग इन्‍स्‍टॉल किंवा अनइन्‍स्‍टॉल करण्‍यासाठी, आपल्‍या मोबाईल उपकरणावर Samsung Gear अनुप्रयोग वापरा." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "ही मुख्‍य स्‍क्रीनची मूळ रचना आहे." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "रिकामा" diff --git a/home/res/po/ms.po b/home/res/po/ms.po new file mode 100755 index 0000000..5d941bd --- /dev/null +++ b/home/res/po/ms.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplikasi" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Berikut" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Jgn ulang" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Padam semua" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Tidak dapat mengalih keluar." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Ketik dan tahan widget untuk mengalihkannya." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Skrin utama ditukar." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Memuat…" + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Tidak dapat memuatkan data. Ketik untuk mencuba semula." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Tidak dapat menambah aplikasi. Tiada ruang pada skrin utama." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Tidak dapat menambah widget. Tiada ruang pada skrin utama." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplikasi telah wujud." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget telah wujud." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Batal" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Reka letak skrin utama berubah." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Aplikasi ini akan dialih keluar dari skrin utama. Aplikasi ini tidak akan dipadamkan daripada peranti." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Alih keluar aplikasi" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Alih keluar widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Widget ini akan dialih keluar dari skrin utama. Widget ini tidak akan dipadamkan daripada peranti." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Mod p'jimatan kuasa ultra" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Tidak dapat menambah widget. Bilangan maksimum widget (%d) dicapai." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Tidak dapat menambah aplikasi. Bilangan maksimum aplikasi (%d) dicapai." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Tidak dapat menambah halaman." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Mod biasa" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Mod penjimatan kuasa dinyahaktifkan." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Mod penjimatan kuasa diaktifkan." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Apl terkini" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Tidak dapat menambah aplikasi. Bilangan maksimum aplikasi (%s) dicapai." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Tidak dapat menambah widget. Bilangan maksimum widget (%s) dicapai." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Alih keluar halaman" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Halaman ini dan kandungannya akan dialih keluar." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Alih keluar" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Masukkan kad SIM utk mencapai perkhidmatan rangkaian." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Mod sekat" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Hidupkan" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Matikan" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Item dialihkan." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Dwiketik untuk menambah." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Tambah widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Item ditambah." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Item dialih keluar." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Halaman %1$d daripada %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Tidak boleh menyusun semula item papan pemberitahuan." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Ia adalah %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Ia adalah %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Ia adalah %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d item baru" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Bilangan maksimum widget (%s) telah dicapai. Padam beberapa widget dan cuba lagi." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Leret ke kanan untuk kembali ke jam." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Leret ke kiri untuk melihat widget." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Leret ke kiri untuk kembali ke jam." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Leret ke kanan utk lihat pmberitahuan." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Nyahpasang %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Bilangan maksimum widget (%s) dicapai." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Dwiketik untuk membuka bekas aplikasi." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 item baru" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Dwiketik untuk aktifkan." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Jam" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Suhu peranti terlalu tinggi." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Muat turun aplikasi Gear menggunakan peranti mudah alih." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Ketika tidur" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Dapatkan apl selanjutnya" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Tindakan tidak tersedia ketika Jimat kuasa + diaktifkan." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s tidak tersedia apabila Pembaca skrin diaktifkan." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Jangan ganggu" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Tdk dpt hidupkn Data mudah alih ketika Mod penerbangan aktif. Nyhaktf Mod penerbangan dn cuba lg." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Leret ke atas untuk kembali ke jam." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Itu sahaja! Nikmati Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Rangkaian mobile" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Maju pgln ke Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Mula" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Keluar" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Slmt dtg! Ktik butng di bwh utk ketahui cara guna Gear anda." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Diminta untuk dinyahaktifkan" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Diminta untuk diaktifkan" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Leret bhgn ats sisi ke bwh utk lht ikon penunjuk pd jam." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Leret bhgn bwh sisi ke atas utk melihat aplikasi pd jam." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Leret bahagian atas sisi ke bawah untuk kembali." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Untuk memasang atau menyahpasang aplikasi, gunakan aplikasi Samsung Gear di peranti mudah alih anda." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Ini adalah struktur utama skrin utama." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Kosong" diff --git a/home/res/po/my.po b/home/res/po/my.po new file mode 100755 index 0000000..f20e4f6 --- /dev/null +++ b/home/res/po/my.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "အက္ပ္မ်ား" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "ေနာက္ထပ္" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "၀စ္ဂ်စ္တ္" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "ထပ္ခါထပ္ခါ မလုပ္ပါႏွင့္" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "အားလုံး ဖ်က္ပစ္ပါ" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "ျဖဳတ္ရန္ မရႏိုင္ပါ။" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "ဝစ္ဂတ္အား ေရႊ႕ရန္ ဤအား ႏွိပ္ျပီး ကိုင္ထားပါ။" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "မူလ ဖန္သားျပင္ ေျပာင္းထားသည္။" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "အခ်က္အလက္ျဖည့္သြင္းေနပါသည္…" + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "ေဒတာ တင္ရန္ မရႏိုင္ပါ။ ျပန္ၾကိဳးစားရန္ ႏွိပ္ပါ။" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "အပလီေကးရွင္းကို ေပါင္းထည့္လို႔ မရႏိုင္ပါ။ မူလ ဖန္သားျပင္ေပၚ၌ အခန္းလြတ္ေနရာ ေနာက္ထပ္ မရွိေတာ့ပါ။" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ဝစ္ဂက္စ္ကို ေပါင္းထည့္လို႔ မရႏိုင္ပါ။ မူလ ဖန္သားျပင္ေပၚ၌ အခန္းလြတ္ေနရာ ေနာက္ထပ္ မရွိေတာ့ပါ။" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "အပလီေကးရွင္းက ရွိႏွင့္ေနၿပီးသား ျဖစ္သည္။" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "ဝစ္ဂက္စ္က ရွိႏွင့္ေနၿပီးသား ျဖစ္သည္။" + +msgid "IDS_COM_POP_CANCEL" +msgstr "ပယ္ဖ်က္ပါ" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "မူလ ဖန္သားျပင္ပုံစံကို ေျပာင္းထားၿပီးပါၿပီ။" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ဤအပလီေကးရွင္းကို မူလ ဖန္သားျပင္မွ ဖယ္ထုတ္ပါလိမ့္မည္။ ၎ကို ကိရိယာမွ ဖ်က္ထုတ္လိမ့္မည္ မဟုတ္ပါ။" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "အပလီေကးရွင္းကို ဖယ္ထုတ္ပါ" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "ဝစ္ဂတ္ ျဖဳတ္ပါ" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ဤျဖတ္လမ္းကို မူလ ဖန္သားျပင္မွ ျဖဳတ္ထုတ္လိမ့္မည္။ ၎ကို ကိရိယာမွ ဖ်က္ထုတ္လိမ့္မည္ မဟုတ္ပါ။" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "အလြန္ ပါဝါေခြ်တာေရး အေနအထား" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ဝစ္ဂက္ ထည့္မရႏိုင္ပါ။ ဝစ္ဂက္ အမ်ားဆံုး အေရအတြက္ (%d) ေရာက္ပါၿပီ။" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "အပလီေကးရွင္းကို ထည့္လို႔ မရႏိုင္ပါ။ အမ်ားဆံုး အပလီေကးရွင္း အေရအတြက္ (%d) သို႔ ေရာက္ေနပါၿပီ။" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "စာမ်က္ႏွာကုိ ေပါင္းထည့္လို႔ မရႏိုင္ပါ။" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "ရိုးရိုး အေနအထား" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "ပါဝါ ေခၽြတာ အေနအထား ပိတ္ထားသည္။" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "ပါဝါ ေခၽြတာျခင္း အေနအထား ရထားသည္။" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "လတ္တေလာ အပ္မ်ား" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "အပလီေကးရွင္း ထည့္မရႏိုင္ပါ။ အပလီေကးရွင္း အမ်ားဆံုး အေရအတြက္ (%s) ေရာက္ပါၿပီ။" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "ဝစ္ဂက္ ထည့္မရႏိုင္ပါ။ ဝစ္ဂက္ အမ်ားဆံုး အေရအတြက္ (%d) ေရာက္ပါၿပီ။" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "စာမ်က္ႏွာ ျဖဳတ္ပါ" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "ဤစာမ်က္ႏွာႏွင့္ ၎၏ ပါဝင္မႈ ျဖဳတ္မည္။" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "ဖယ္ရွားမလား" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "ကြန္ယက္ ၀န္ေဆာင္မႈမ်ားကုိ ၀င္ေရာက္ရရန္ SIM ကဒ္ကုိ ထည့္ပါ။" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "ပိတ္ဆီး အေနအထား" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "ဖြင့္" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "ပိတ္" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "အရာဝတၳဳကို ေရြ႕ျပီး။" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "ထည့္ရန္ ႏွစ္ခါႏွိပ္ပါ။" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "၀ီဂ်က္ကုိ ထည့္ေပး" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "အရာဝတၳဳ ထည့္ျပီး။" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "အရာဝတၳဳ ေရြ႕ျပီး။" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "စာမ်က္ႏွာ %2$d ၏ %1$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "အေၾကာင္းၾကားစာ ဘုတ္အကြက္ကို ျပန္စီစဥ္လို႔ မရပါ။" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "၎မွာ %1$d:%2$d" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "မနက္ %d.%d AM" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "မြန္းလြဲ %d.%d PM" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "ပစၥည္း အသစ္ %d ခု" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "ဝစ္ဂ်စ္ အမ်ားဆံုးအေရအတြက္ (%s) ကုိ ေရာက္ပါၿပီ။ ဝစ္ဂ်စ္အခ်ိဳ႕ကုိ ဖ်က္ၿပီး ထပ္ၾကိဳးစားပါ။" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "နာရီသုိ႔ ျပန္သြားရန္ ညာဘက္သုိ႔ ပြတ္ဆြဲပါ။" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "ဝစ္ဂ်စ္မ်ားကုိ ၾကည့္ရန္ ဘယ္ဘက္သုိ႔ ပြတ္ဆြဲပါ။" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ေသာ့သုိ႔ျပန္သြားရန္ ဘယ္ဘက္သုိ႔ ပြတ္ဆြဲပါ။" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "အသိေပးခ်က္မ်ားကုိ ၾကည့္ရန္ ညာဘက္သုိ႔ ပြတ္ဆြဲပါ။" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s ကို တပ္ဆင္မည္လား?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ဝစ္ဂ်စ္ အမ်ားဆံုး အေရအတြက္ (%s) သုိ႔ ေရာက္ပါၿပီ။" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "အက္ပ္ ဗန္း ဖြင့္ရန္ ႏွစ္ခ်က္ႏွိပ္ပါ။" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "အေၾကာင္းအရာ အသစ္ ၁ ခု" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "ဖြင့္ရန္ ႏွစ္ခ်က္ႏွိပ္ပါ။" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "နာရီ" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "ကိရိယာ သိပ္ပူလြန္းသည္။" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "မုိဘုိင္းကိရိယာကုိ သံုးၿပီး Gear အပလီေကးရွင္းမ်ားကုိ ေဒါင္းလုပ္ လုပ္ပါ။" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "အိပ္ေနစဥ္" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "ေနာက္ထပ္ အပလီေကးရွင္းမ်ား ရယူျခင္း" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "ပါဝါ ေခြ်တာျခင္း + ကုိ ဖြင့္ထားစဥ္ လုပ္ေဆာင္ခ်က္ မရႏုိင္ပါ။" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "ဖန္သားျပင္ဖတ္စက္ကို ပိတ္ထားစဥ္မွာ %s ကို သုံးလို႔ မရႏိုင္ပါ။" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "အေႏွာင့္အယွက္ မျပဳပါႏွင့္" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "ေလယာဥ္ အေနအထားကုိ ဖြင့္ထားစဥ္ မုိဘုိင္းလ္ ေဒတာကုိ မဖြင့္ႏုိင္ပါ။ ေလယာဥ္ အေနအထားကုိ ပိတ္ၿပီး ထပ္ၾကိဳးစားပါ။" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "နာရီသို႔ ျပန္သြားရန္ အထက္သို႔ ပြတ္ဆြဲပါ။" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "ဤမွ်ပါပဲ! Gear ျဖင့္ လႈပ္ရွားေဆာင္ရြက္ပါ!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "မိုဘိုင္း ကြန္ယက္မ်ား" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "ေခၚဆိုမႈမ်ား ဂီယာသို႔ ဆက္ပို႔ပါ" + +msgid "IDS_ST_BUTTON_START" +msgstr "စတင္ပါ" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "ထြက္ပါ" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "ႀကိဳဆိုပါသည္! သင့္ Gear အသံုးျပဳပံုကုိ သင္ယူရန္ ေအာက္ပါ ခလုတ္ကုိ ႏွိပ္ပါ။" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "ပိတ္ရန္ ေတာင္းဆုိၿပီးပါၿပီ" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "ဖြင့္ရန္ ေတာင္းဆုိၿပီးပါၿပီ" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "နာရီရွိ ညႊန္တံ အုိင္ကြန္မ်ားကုိ ၾကည့္ရန္ ထိပ္အစြန္းကုိ ေအာက္သုိ႔ ပြတ္ဆြဲပါ။" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "နာရီတြင္ အက္ပ္မ်ားၾကည့္ရန္ ေအာက္ဖက္အစြန္းကို အေပၚသုိ႔ ပြတ္ဆြဲပါ။" + +msgid "IDS_ST_BUTTON_OK" +msgstr "အိုေက" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "ျပန္သြားရန္ ထိပ္အစြန္းကုိ ေအာက္သုိ႔ ပြတ္ဆြဲပါ။" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "အပလီေကးရွင္းမ်ားကို တပ္ဆင္ရန္ (သို႔) သြင္းထားျခင္းအား ျပန္ထုတ္ရန္၊ သင့္မိုဘိုင္းကိရိယာေပၚက Samsung Gear အပလီေကးရွင္းကို သုံးပါ။" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "ဒီတစ္ခုက ပင္မ ဖန္သားျပင္၏ အဓိက ဖြဲ႔စည္းပံုျဖစ္သည္။" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "အားလုံးရွင္းထုတ္ပစ္ၿပီး" diff --git a/home/res/po/nb.po b/home/res/po/nb.po new file mode 100755 index 0000000..a12631e --- /dev/null +++ b/home/res/po/nb.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Apper" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Neste" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Ikke gjenta." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Slett alle" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Kan ikke fjerne." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Trykk på og hold en widget for å flytte den." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Startskjerm endret." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Åpner..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Kan ikke laste data. Trykk for å prøve på nytt." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Kan ikke legge til appen. Ikke mer plass på startskjermbildet." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Kan ikke legge til widgeten. Ikke mer plass på startskjermbildet." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Appen finnes allerede." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widgeten finnes allerede." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Avbryt" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Startskjermoppsett er endret." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Denne appen vil bli fjernet fra startskjermbildet. Den vil ikke bli slettet fra enheten." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Fjern app" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Fjern widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Denne widgeten vil bli fjernet fra startskjermbildet. Den vil ikke bli slettet fra enheten." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultra strømsparingsmodus" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Kan ikke legge til widget. Maksimalt antall widgeter (%d) er nådd." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Kan ikke legge til app. Maksimalt antall apper (%d) er nådd." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Kan ikke legge til side." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normal modus" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Strømsparingsmodus er deaktivert." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Strømsparingsmodus er aktivert." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Nylige apper" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Kan ikke legge til app. Maksimalt antall apper (%s) er nådd." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Kan ikke legge til widget. Maksimalt antall widgeter (%s) er nådd." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Fjern side" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Denne siden og dens innhold vil bli fjernet." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Fjern" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Sett inn SIM-kort for å få tilgang til nettverkstjenester." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Sperremodus" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "På" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Av" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Elementet ble flyttet." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Trykk raskt to ganger for å legge til." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Legg til widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Element lagt til." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Element fjernet." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Side %1$d av %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Kan ikke omorganisere varselstavleelementer." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Den er %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Klokken er %d:%d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Klokken er %d:%d." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d nye elementer" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Du har nådd det maksimale antallet widgeter (%s). Slett noen widgeter, og prøv på nytt." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Stryk mot høyre for å gå tilbake til klokken." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Stryk mot venstre for å vise widgeter." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Stryk mot venstre for å gå tilbake til klokken." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Stryk mot høyre for å se varsler." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Avinstallere %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Maksimalt antall widgeter (%s) er nådd." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Trykk raskt to ganger for å åpne appskuffen." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nytt element" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Trykk raskt to ganger for å aktivere." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Klokke" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Enhetens temperatur er for høy." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Last ned Gear-apper med en mobilenhet." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Når du sover" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Skaff deg flere apper" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Handling ikke tilgjengelig mens Strømsparing + er aktivert." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s er ikke tilgjengelig mens Skjermleser er aktivert." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Ikke forstyrr" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Kan ikke slå på mobildata mens Flymodus er aktivert. Deaktiver Flymodus, og prøv på nytt." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Stryk oppover for å gå til klokken." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Det er det! Kom i gang med Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobilnett" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Viderekoble hit" + +msgid "IDS_ST_BUTTON_START" +msgstr "Start" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Avslutt" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Velkommen! Trykk på knapp under og se hvordan Gear brukes." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Bedt om å deaktivere" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Bedt om å aktivere" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Stryk øvre kant ned for å se indikatorikoner på klokke." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Stryk nedre kant opp for å vise apper på klokke." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Stryk øvre kant ned for å gå tilbake." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "For å installere eller avinstallere apper må du bruke Samsung Gear-appen på mobilenheten." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Dette er hovedstrukturen på startskjermbildet." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Tom" diff --git a/home/res/po/ne.po b/home/res/po/ne.po new file mode 100755 index 0000000..6865f6a --- /dev/null +++ b/home/res/po/ne.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "एप्स" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "अर्को" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "विजिट" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "नदोहर्‍याउनुहोस्।" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "सबै मेटाउनुहोस्" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "हटाउन असमर्थ छ।" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "विजेटलाई सार्न ट्याप गरि समात्नुहोस्।" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "गृह स्क्रीन परिवर्तित भयो।" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "लोड हुँदै छ..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "डाटा लोड गर्न सकेन। पुन: प्रयास गर्नुहोस् मा ट्याप गर्नुहोस्।" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "अनुप्रयोग थप्‍न असक्षम। गृह स्क्रीनमा थप स्थान छैन।" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "विजिट थप्न असक्षम। गृह स्क्रीनमा थप स्थान छैन।" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "अनुप्रयोगहरू पहिलेनै अवस्थित छ।" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "विजिट पहिलेनै अवस्थित छ।" + +msgid "IDS_COM_POP_CANCEL" +msgstr "रद्द गर्नुहोस्" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "गृह स्क्रीन लेआउट परिवर्तन गरिएको छ।" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "यो अनुप्रयोग गृह स्क्रीनबाट हटाइने छ। यसलाई यन्त्रबाट मेटाइने छैन।" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "अनुप्रयोग हटाउनुहोस्" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "विजिट हटाउनुहोस्" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "यो विजिट गृह स्क्रीनबाट हटाइने छ। यसलाई यन्त्रबाट मेटाइने छैन।" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "अल्ट्रा पावर बचत मोड" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "विजिट थप्न असक्षम। विजिटहरूको अधिकतम संख्या (%d) पुग्यो।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "अनुप्रयोग थप्‍न असक्षम। अनुप्रयोगहरूको अधिकतम संख्या (%d) पुग्यो।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "पृष्‍ठ थप्‍न असमर्थ।" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "सामान्य मोड" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "पवर बचत मोड असक्षम भयो।" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "पवर बचत गर्ने मोड सक्षम बनाइयो।" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "हालका एप्‍स" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "अनुप्रयोग थप्‍न असक्षम। अनुप्रयोगहरूको अधिकतम संख्या (%s) पुग्यो।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "विजिट थप्न असक्षम। विजिटहरूको अधिकतम संख्या (%s) पुग्यो।" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "पृष्ठ हटाउनुहोस्" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "यो पृष्ठ र यसका सामग्री हटाइनेछ।" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "हटाउनुहोस्" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "नेटवर्क सेवाहरु पहुँच गर्न SIM कार्ड घुसाउनुहोस्।" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "ब्लकिङ मोड" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "अन" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "अफ" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "वस्तु सारियो।" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "थप्न दुई पटक ट्याप गर्नुहोस्।" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "विजेटहरु थप्नुहोस्" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "वस्तु थपियो।" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "वस्तु हटाइयो।" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d को %1$d पृष्ठहरू" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "सूचना बोर्ड वस्तुहरू पुनः क्रमबद्ध गर्न सकिँदैन।" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "यो %1$d:%2$d हो।" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "अहिले %d:%d AM भयो।" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "अहिले %d:%d PM भयो।" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d नयाँ वस्तु" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "विजेटहरूको अधिकतम संख्या (%s) पुगेको छ। केही विजेटहरू मेटाएर फेरि प्रयास गर्नुहोस्।" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "घडीको पछाडि जान दायाँ स्वाइप गर्नुहोस्।" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "विजेटहरू हेर्न बायाँ स्वाइप गर्नुहोस्।" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "घडीमा फर्कन बायाँ स्वाइप गर्नुहोस्।" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "सूचनाहरू हेर्न दायाँ स्वाइप गर्नुहोस्।" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s को स्थापना रद्द गर्ने?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "विजेटहरूको अधिकतम संख्या (%s) पुग्यो।" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "एप ट्रे खोल्न दुईपटक ट्याप गर्नुहोस्।" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 नया चीज" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "सक्षम गर्न दुई पटक ट्याप गर्नुहोस्।" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "घडी" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "यन्त्रको तापक्रम अति उच्च छ।" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "मोबाइल यन्त्र प्रयोग गरेर गियरका अनुप्रयोगहरू डाउनलोड गर्नुहोस्।" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "सुतेको बेला" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "थप अनुप्रयोगहरू प्राप्त गर्नुहोस्" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "वेक-अप + सक्षम गरेको बेला कार्य उपलब्ध छैन।" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "स्क्रीन रिडर सक्षम छँदा %s उपलब्ध हुँदैन।" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "बाधा नपुर्याउनुहोला" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "उडान मोड सक्षम गरिएको बेला मोबाइल डाटा अन गर्न असक्षम। उडान मोडलाई असक्षम गरेर फेरि प्रयास गर्नुहोस्।" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "घडीमा फर्कन माथितिर स्वाइप गर्नुहोस्।" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "त्यति नै हो! गियर प्रयोग गर्न सुरू गर्नुहोस्!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "मोबाइल नेटवर्कहरू" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "गियरमा कलहरू फर्वाड गर्नुहोस्" + +msgid "IDS_ST_BUTTON_START" +msgstr "सुरु" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "बाहिर निस्कनु" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "स्वागतम्! आफ्नो गियर कसरी प्रयोग गर्ने भन्ने बारे सिक्न तलको बटनमा ट्याप गर्नुहोस्।" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "असक्षम गर्न अनुरोध गरियो" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "सक्षम गर्न अनुरोध गरियो" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "घडीमा सूचक प्रतिमाहरू हेर्नको लागि शीर्ष किनारालाई तल स्वाइप गर्नुहोस्।" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "घडीमा एप्स हेर्नको लागि तल्लो किनारालाई माथितिर स्वाइप गर्नुहोस्।" + +msgid "IDS_ST_BUTTON_OK" +msgstr "ठीक छ" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "पछाडि जानको लागि शीर्ष किनारालाई तल स्वाइप गर्नुहोस्।" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "अनुप्रयोगहरू स्थापना गर्न वा स्थापना रद्द गर्न, आफ्नो मोबाइल यन्त्रमा सैमसंग गियर अनुप्रयोग प्रयोग गर्नुहोस्।" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "यो गृह स्क्रीनको मुख्य संरचना हो।" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "खाली" diff --git a/home/res/po/nl.po b/home/res/po/nl.po new file mode 100755 index 0000000..ca4e86b --- /dev/null +++ b/home/res/po/nl.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Apps" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Volgende" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Niet herhalen" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Alles wissen" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Kan niet verwijderen." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Tik op widget en houd vast om deze te verplaatsen." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Startscherm gewijzigd." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Laden..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Kan gegevens niet laden. Tik om opnieuw te proberen." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Kan applicatie niet toevoegen. Geen ruimte meer op startscherm." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Kan widget niet toevoegen. Geen ruimte meer op startscherm." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Applicatie bestaat al." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget bestaat al." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Annul." + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Lay-out startscherm gewijzigd." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "De applicatie wordt uit het startscherm verwijderd. Deze wordt niet van het apparaat verwijderd." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Applic. verwijderen" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Widget verwijderen" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "De widget wordt uit het startscherm verwijderd. Deze wordt niet van het apparaat verwijderd." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Extra energiebespar.stand" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Kan widget niet toevoegen. Maximumaantal widgets (%d) bereikt." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Kan applicatie niet toevoegen. Maximumaantal applicaties (%d) bereikt." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Kan pagina niet toevoegen." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normale stand" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Spaarstand uitgeschakeld." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Spaarstand ingeschakeld." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Recente apps" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Kan applicatie niet toevoegen. Maximumaantal applicaties (%s) bereikt." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Kan widget niet toevoegen. Maximumaantal widgets (%s) bereikt." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Pagina verwijderen" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Deze pagina en de inhoud daarvan worden verwijderd." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Wissen" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Plaats de SIM-kaart voor netwerkdiensten." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blokkeerstand" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Aan" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Uit" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Item verplaatst." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Tik twee keer om toe te voegen." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Widget toevoegen" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Item toegevoegd." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Item verwijderd." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Pagina %1$d van %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Items op het meldingenbord kunnen niet anders worden ingedeeld." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Het is %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Het is %d:%d vm." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Het is %d:%d nm." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d nieuwe items" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Het maximumaantal widgets (%s) is bereikt. Verwijder enkele widgets en probeer het opnieuw." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Veeg rechts en ga terug naar klok." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Veeg links om widgets weer te geven." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Veeg links en ga terug naar klok." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Veeg rechts om meldingen te bekijken." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s verwijderen?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Maximumaantal widgets (%s) bereikt." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Tik tweemaal om appvak te openen." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nieuw item" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Tik twee keer om in te schakelen." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Klok" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Temperatuur van het apparaat is te hoog." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Download Gear-applicaties met een mobiel apparaat." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Tijdens slapen" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Meer applicaties ophalen" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Actie niet beschikbaar als Spaarstand+ is ingeschakeld." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s is niet beschikbaar wanneer Schermlezer is ingeschakeld." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Niet storen" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Mobiele gegevens niet beschikbaar in Vliegtuigstand. Zet Vliegtuigstand uit en probeer opn." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Veeg omhoog om terug te gaan naar klok." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Aan de slag met Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobiele netw." + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Doorsch naar Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Start" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Sluiten" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Welkom! Tik op knop hieronder om uw Gear te leren gebruiken." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Uitschakelen aangevr." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Inschakelen aangevraagd" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Veeg vanaf bovenrand omlaag voor indicatorpict. op klok." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Veeg vanaf onderrand omhoog voor appweergave op klok." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Veeg vanaf bovenrand omlaag om terug te gaan." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Als u applicaties wilt installeren of verwijderen, gebruikt u de applicatie Samsung Gear op uw mobiele apparaat." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Dit is de hoofdstructuur van het startscherm." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Leeg" diff --git a/home/res/po/or.po b/home/res/po/or.po new file mode 100755 index 0000000..4eb6ce6 --- /dev/null +++ b/home/res/po/or.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "ଆପ୍ଲିକେସନଗୁଡିକ" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "ପରବର୍ତ୍ତୀ" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "ୱିଜେଟ୍" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "ପୁନରାବୃତ୍ତି କରନ୍ତୁ ନାହିଁ।" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "ସମସ୍ତ ବିଲୋପ" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "ଅପସାରଣ କରିବାକୁ ଅସମର୍ଥ।" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "ଏହା ଘୁଞ୍ଚାଇବାକୁ ଏକ ୱିଜେଟ୍ ଟ୍ୟାପ୍ କରି ଧରି ରଖନ୍ତୁ।" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "ହୋମ୍ ସ୍କ୍ରିନ୍ ପରିବର୍ତ୍ତନ ହେଲା।" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "ଲୋଡ୍ କରୁଛି..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "ଡାଟା ଲୋଡ୍ କରିବାକୁ ଅସମର୍ଥ। ପୁନଃଚେଷ୍ଟା କରିବାକୁ ଟ୍ୟାପ୍ କରନ୍ତୁ।" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ଆପ୍ଲିକେସନ୍ ଯୋଡିବାକୁ ଅସମର୍ଥ। ହୋମ୍ ସ୍କ୍ରିନରେ ଆଉ ଅଧିକ ପ୍ରକୋଷ୍ଟ ନାହିଁ।" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ୱିଜେଟ୍ ଯୋଡିବାକୁ ଅସମର୍ଥ। ହୋମ୍ ସ୍କ୍ରିନରେ ଆଉ ଅଧିକ ପ୍ରକୋଷ୍ଟ ନାହିଁ।" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "ଆପ୍ଲିକେସନ୍ ପୂର୍ବରୁ ବିଦ୍ୟମାନ ଅଛି।" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "ୱିଜେଟ୍ ପୂର୍ବରୁ ବିଦ୍ୟମାନ ଅଛି।" + +msgid "IDS_COM_POP_CANCEL" +msgstr "ବାତିଲ୍" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "ହୋମ୍ ସ୍କ୍ରିନ୍ ଲେଆଉଟ୍ ବଦଳିଛି।" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ଏହି ଆପ୍ଲିକେସନ୍ ହୋମ୍ ସ୍କ୍ରିନ୍‌ରୁ ଅପସାରିତ ହେବ। ଏହା ଡିଭାଇସ୍ ଠାରୁ ବିଲୋପିତ ହେବନାହିଁ।" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "ଆପ୍ଲିକେସନ୍ ଅପସାରଣ" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "ୱିଜେଟ୍ ଅପସାରଣ କରନ୍ତୁ" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ଏହି ୱିଜେଟ୍ ହୋମ୍ ସ୍କ୍ରିନ୍‌ରୁ ଅପସାରିତ ହେବ। ଏହା ଡିଭାଇସ୍ ଠାରୁ ବିଲୋପିତ ହେବନାହିଁ।" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "ଅଲଟ୍ରା ପାୱାର୍ ସଞ୍ଚୟ ମୋଡ୍" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ୱିଜେଟ୍‌ ଯୋଡିବାକୁ ଅସମର୍ଥ। ସର୍ବାଧିକ ସଂଖ୍ୟାର ୱିଜେଟ୍‌ (%d)ରେ ପହଞ୍ଚିଛି।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "ଆପ୍ଲିକେସନ୍ ଯୋଡିବାକୁ ଅସମର୍ଥ। ସର୍ବାଧିକ ସଂଖ୍ୟକର ଆପ୍ଲିକେସନ୍‌ (%d)ରେ ପହଞ୍ଚିଛି।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "ପୃଷ୍ଠା ଯୋଡିବାକୁ ଅସମର୍ଥ।" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "ସାଧାରଣ ମୋଡ୍" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "ପାୱାର୍ ସଞ୍ଚୟ ମୋଡ୍ ଅକ୍ଷମ ହୋଇଛି।" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "ପାୱାର୍ ସଞ୍ଚୟ ମୋଡ୍ ସକ୍ଷମ ହୋଇଛି।" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "ସମ୍ପ୍ରତି ଆପସ୍" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "ଆପ୍ଲିକେସନ୍ ଯୋଡିବାକୁ ଅସମର୍ଥ। ସର୍ବାଧିକ ସଂଖ୍ୟକର ଆପ୍ଲିକେସନ୍ (%s)ରେ ପହଞ୍ଚିଛି।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "ୱିଜେଟ୍ ଯୋଡିବାକୁ ଅସମର୍ଥ। ସର୍ବାଧିକ ସଂଖ୍ୟକ ୱିଜେଟ୍ (%s)ରେ ପହଞ୍ଚିଛି।" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "ପୃଷ୍ଠା ଅପସାରଣ କରନ୍ତୁ" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "ଏହି ପୃଷ୍ଠା ଏବଂ ଏହାର ବିଷୟବସ୍ତୁ ଅପସାରିତ ହେବ।" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "ଅପସାରଣ" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "ନେଟୱାର୍କ୍‌ ସେବା ପ୍ରବେଶ କରିବାକୁ SIM କାର୍ଡ୍ ସନ୍ନିବେଶ କରନ୍ତୁ।" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "ଅବରୋଧକରଣ ମୋଡ୍" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "ଅନ୍" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "ଅଫ୍" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "ଆଇଟମ୍ ଘୁଞ୍ଚିଛି।" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "ଯୋଡିବାକୁ ଦୁଇଥର ଟ୍ୟାପ୍ କରନ୍ତୁ।" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "ୱିଜେଟକୁ ଯୋଗ କରନ୍ତୁ" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "ଆଇଟମ୍ ଯୋଡି ହୋଇଛି।" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "ଆଇଟମ୍ ଅପସାରିତ ହୋଇଛି।" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d ର %1$d ପୃଷ୍ଠା" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "ସୂଚନା ବୋର୍ଡ ଆଇଟମଗୁଡିକ ପୁନଃଆକୃତି କରାଯାଇ ପାରିବ ନାହିଁ।" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "ଏହା %1$d:%2$d।" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "ଏହା %d:%d AM" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "ଏହା %d:%d PM" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d ନୂତନ ଆଇଟମ୍" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "ସର୍ବାଧିକ ସଂଖ୍ୟକର ୱିଜେଟଗୁଡିକ (%s)ରେ ପହଞ୍ଚିଛି। କିଛି ୱିଜେଟଗୁ. ବିଲୋପ କରନ୍ତୁ ଏବଂ ପୁନଃଚେଷ୍ଟା କରନ୍ତୁ।" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ଘଣ୍ଟାକୁ ଫେରିବାକୁ ଡାହାଣକୁ ସ୍ଵାଇପ୍ କରନ୍ତୁ।" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "ୱିଜେଟଗୁଡିକ ଦେଖିବାକୁ ବାମକୁ ସ୍ଵାଇପ୍ କର.।" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ଘଣ୍ଟାକୁ ଫେରିବାକୁ ବାମକୁ ସ୍ଵାଇପ୍ କରନ୍ତୁ।" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "ବିଜ୍ଞପ୍ତିଗୁ. ଦେଖି. ଡାହାଣକୁ ସ୍ଵାଇ. କର.।" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s ଅଣସଂସ୍ଥାପନ କରିବେ?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ସର୍ବାଧିକ ସଂଖ୍ୟାର ୱିଜେଟ୍‌ (%s)ରେ ପହଞ୍ଚିଛି।" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "ଆପ୍ଲିକେସନ୍‌ ଟ୍ରେ ଖୋଲିବାକୁ ଦୁଇଥର ଟ୍ୟାପ୍‌ କରନ୍ତୁ।" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 ନୂତନ ଆଇଟମ୍" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "ଦୁଇଥର ଟ୍ୟାପ୍ କରି ସକ୍ଷମ କରନ୍ତୁ।" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "ଘଣ୍ଟା" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "ଡିଭାଇସ୍ ତାପମାତ୍ରା ବହୁତ ଅଟେ।" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "ମୋବାଇଲ୍‌ ଡିଭାଇସ୍‌ ବ୍ୟବହାର କରି ଗିଅର୍‌ ଆପ୍ଲିକେସନଗୁଡିକ ଡାଉନଲୋଡ୍‍ କରନ୍ତୁ।" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "ଶୋ‍ଇବା ସମୟରେ" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "ଅଧିକ ଆପ୍ଲିକେସନ୍ ପାଆନ୍ତୁ" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "ପାୱାର୍ ସଞ୍ଚୟ + ସକ୍ଷମ ଥିବାବେଳେ କ୍ରିୟା ଉପଲବ୍ଧ ହୁଏ ନାହିଁ।" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "ସ୍କ୍ରିନ୍ ପାଠକ ସକ୍ଷମ ସମୟରେ %s ଉପଲବ୍ଧ ନାହିଁ।" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "ବିଚଳିତ କରାନ୍ତୁ ନାହିଁ" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "ଫ୍ଲାଇଟ୍ ମୋଡ୍ ସକ୍ଷମ ହୋଇଥିବା ବେଳେ ମୋବାଇଲ୍ ଡାଟା ଅନ୍‌ କରିବାକୁ ଅସମର୍ଥ। ଫ୍ଲାଇଟ୍ ମୋଡ୍ ଅକ୍ଷମ କର. ଏବଂ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "ଘଣ୍ଟାକୁ ଫେରିବାକୁ ଉପରକୁ ସ୍ଵାଇପ୍ କରନ୍ତୁ।" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "ଏହା ଅଟେ! ଗିଅରକୁ ଯାଆନ୍ତୁ!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "ମୋବାଇଲ୍ ନେଟୱାର୍କଗୁଡିକ" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "ଗିଅର୍‌କୁ କଲ୍‍ଗୁଡିକ ଅଗ୍ରଗାମୀ କରନ୍ତୁ" + +msgid "IDS_ST_BUTTON_START" +msgstr "ଆରମ୍ଭ" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "ପ୍ରସ୍ଥାନ" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "ସ୍ଵାଗତ! କିପରି ଆପଣଙ୍କ ଗିଅର୍‌ ବ୍ୟବହାର କରିବେ ସେହି ବିଷୟରେ ଜାଣିବାକୁ ନିମ୍ନର ବଟନ୍‌ ଟ୍ୟାପ୍‌ କରନ୍ତୁ।" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "ଅକ୍ଷମ କରିବାକୁ ଅନୁରୋଧ ହୋଇଛି" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "ସକ୍ଷମ କରିବାକୁ ଅନୁରୋଧ ହୋଇଛି" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "ଘଣ୍ଟାରେ ସୂଚକ ଆଇକନଗୁଡିକ ଦେଖିବାକୁ ଶୀର୍ଷ ପ୍ରାନ୍ତର ନିମ୍ନ ଆଡକୁ ସ୍ଵାଇପ୍ କରନ୍ତୁ।" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "ଘଣ୍ଟାରେ ଆପ୍ଲିକେସନଗୁଡିକ ଦର୍ଶନ କରିବାକୁ ନିମ୍ନ ପ୍ରାନ୍ତ ପର୍ଯ୍ୟନ୍ତ ସ୍ଵାଇପ୍ କରନ୍ତୁ।" + +msgid "IDS_ST_BUTTON_OK" +msgstr "ଓକେ" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "ପଛକୁ ଯିବାକୁ ଶୀର୍ଷ ପ୍ରାନ୍ତର ନିମ୍ନ ଆଡକୁ ସ୍ଵାଇପ୍ କରନ୍ତୁ।" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "ଆପ୍ଲିକେସନଗୁଡିକ ସଂସ୍ଥାପନ କିମ୍ୱା ଅଣସଂସ୍ଥାପନ କରିବାକୁ, ଆପଣଙ୍କ ମୋବାଇଲ୍‌ ଡିଭାଇସରେ ସାମସଙ୍ଗ ଗିଅର୍‌ ଆପ୍ଲିକେସନ୍ ବ୍ୟବହାର କରନ୍ତୁ।" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "ଏହା ହୋମ୍ ସ୍କ୍ରିନର ମୁଖ୍ୟ ଗଠନ।" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ଖାଲି" diff --git a/home/res/po/pa.po b/home/res/po/pa.po new file mode 100755 index 0000000..34bdacb --- /dev/null +++ b/home/res/po/pa.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "ਐਪਸ" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "ਅੱਗੇ" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "ਵਿੱਜੇਟ" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "ਦੁਹਰਾਉ ਨਹੀਂ।" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "ਸਾਰੇ ਮਿਟਾਓ" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "ਹਟਾਉਣ ਵਿੱਚ ਅਸਮਰੱਥ।" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "ਵਿੱਜੇਟ ਨੂੰ ਮੂਵ ਕਰਨ ਲਈ ਟੈਪ ਕਰਕੇ ਰੱਖੋ।" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "ਹੋਮ ਸਕ੍ਰੀਨ ਬਦਲੀ।" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "ਡੈਟਾ ਨੂੰ ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ਅਨੁਪ੍ਰਯੋਗ ਜੋੜਨ ਵਿੱਚ ਅਸਮਰੱਥ। ਹੋਮ ਸਕ੍ਰੀਨ ਵਿੱਚ ਹੋਰ ਥਾਂ ਨਹੀਂ।" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ਵਿੱਜੇਟ ਜੋੜਨ ਵਿੱਚ ਅਸਮਰੱਥ। ਹੋਮ ਸਕ੍ਰੀਨ ਵਿੱਚ ਹੋਰ ਥਾਂ ਨਹੀਂ।" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "ਅਨੁਪ੍ਰਯੋਗ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਮੌਜੂਦ ਹੈ।" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "ਵਿੱਜੇਟ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਮੌਜੂਦ ਹੈ।" + +msgid "IDS_COM_POP_CANCEL" +msgstr "ਰੱਦ ਕਰੋ" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "ਹੋਮ ਸਕ੍ਰੀਨ ਲੇਆਉਟ ਬਦਲਿਆ।" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ਇਸ ਅਨੁਪ੍ਰਯੋਗ ਨੂੰ ਹੋਮ ਸਕ੍ਰੀਨ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਇਹ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਤੋਂ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾਵੇਗਾ।" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "ਅਨੁਪ੍ਰਯੋਗ ਹਟਾਓ" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "ਵਿੱਜੇਟ ਹਟਾਉ" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ਇਸ ਵਿੱਜੇਟ ਨੂੰ ਹੋਮ ਸਕ੍ਰੀਨ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਇਹ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਤੋਂ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾਵੇਗਾ।" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "ਅਲਟ੍ਰਾ ਪਾਵਰ ਸੇਵਿੰਗ ਮੋਡ" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ਵਿੱਜੇਟ ਜੋੜਨ ਵਿੱਚ ਅਸਮਰੱਥ। ਵਿੱਜੇਟਸ ਅਧਿਕਤਮ ਸੰਖਿਆ (%d) ਤੇ ਪਹੁੰਚੇ।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "ਅਨੁਪ੍ਰਯੋਗ ਜੋੜਨ ਵਿੱਚ ਅਸਮਰੱਥ। ਅਨੁਪ੍ਰਯੋਗਾਂ ਦੀ ਅਧਿਕਤਮ ਸੰਖਿਆ (%d) ਤੇ ਪਹੁੰਚ ਗਈ ਹੈ।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "ਪੇਜ ਜੋੜਨ ਵਿੱਚ ਅਸਮਰੱਥ।" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "ਸਧਾਰਨ ਮੋਡ" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "ਪਾਵਰ ਸੇਵਿੰਗ ਮੋਡ ਅਸਮਰੱਥ ਹੋਇਆ।" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "ਪਾਵਰ ਸੇਵਿੰਗ ਮੋਡ ਸਮਰੱਥ ਹੋਇਆ।" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "ਹਾਲ ਹੀ ਦੇ ਐਪਸ" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "ਅਨੁਪ੍ਰਯੋਗ ਜੋੜਨ ਵਿੱਚ ਅਸਮਰੱਥ। ਅਨੁਪ੍ਰਯੋਗ ਅਧਿਕਤਮ ਸੰਖਿਆ (%s) ਤੇ ਪਹੁੰਚ ਗਏ ਹਨ।" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "ਵਿੱਜੇਟ ਜੋੜਨ ਵਿੱਚ ਅਸਮਰੱਥ। ਵਿੱਜੇਟ ਅਧਿਕਤਮ ਸੰਖਿਆ (%s) ਤੇ ਪਹੁੰਚ ਗਏ ਹਨ।" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "ਪੰਨਾ ਹਟਾਉ" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "ਇਹ ਪੰਨਾ ਅਤੇ ਇਸਦੀ ਸਮੱਗਰੀ ਹਟਾ ਦਿੱਤੀ ਜਾਵੇਗੀ।" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "ਹਟਾਉ" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "ਨੈੱਟਵਰਕ ਸੇਵਾਵਾਂ ਐਕਸੈੱਸ ਕਰਨ ਲਈ SIM ਕਾਰਡ ਸੰਮਿਲਤ ਕਰੋ।" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "ਬਲੌਕਿੰਗ ਮੋਡ" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "ਚਾਲੂ" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "ਬੰਦ" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "ਆਈਟਮ ਮੂਵ ਕੀਤੀ ਗਈ।" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "ਜੋੜਨ ਲਈ ਦੋ ਵਾਰ ਟੈਪ ਕਰੋ।" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "ਵਿੱਜੇਟ ਜੋੜੋ" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "ਆਈਟਮ ਜੋੜੀ ਗਈ।" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "ਆਈਟਮ ਹਟਾਈ ਗਈ।" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d ਦਾ %1$d ਪੰਨਾ" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "ਸੂਚਨਾ ਬੋਰਡ ਆਈਟਮਸ ਨੂੰ ਪੁਨਰ ਕ੍ਰਮ ਨਹੀਂ ਦਿੱਤਾ ਜਾ ਸਕਦਾ।" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "ਇਹ %1$d:%2$d ਹੈ।" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "ਹੁਣ %d:%d AM ਹੈ।" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "ਹੁਣ %d:%d PM ਹੈ।" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d ਨਵੀਆਂ ਆਈਟਮਸ" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "ਵਿੱਜੇਟਸ ਦੀ ਅਧਿਕਤਮ ਸੰਖਿਆ (%s) ਤੇ ਪਹੁੰਚ ਗਈ ਹੈ। ਕੁੱਝ ਵਿੱਜੇਟਸ ਮਿਟਾਓ ਅਤੇ ਫਿਰ ਕੋਸ਼ਿਸ ਕਰੋ।" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ਘੜੀ ਤੇ ਵਾਪਸ ਜਾਣ ਲਈ ਸੱਜੇ ਪਾਸੇ ਸਵਾਈਪ ਕਰੋ।" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "ਵਿੱਜੇਟ ਦੇਖਣ ਲਈ ਖੱਬੇ ਪਾਸੇ ਸਵਾਈਪ ਕਰੋ।" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ਘੜੀ ਤੇ ਵਾਪਸ ਜਾਣ ਲਈ ਖੱਬੇ ਪਾਸੇ ਸਵਾਈਪ ਕਰੋ।" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "ਸੂਚਨਾਵਾਂ ਦੇਖਣ ਲਈ ਸੱਜੇ ਪਾਸੇ ਸਵਾਈਪ ਕਰੋ।" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s ਅਸਥਾਪਿਤ ਕਰੀਏ?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ਵਿੱਜੇਟਸ ਅਧਿਕਤਮ ਸੰਖਿਆ (%s) ਤੇ ਪਹੁੰਚ ਗਏ ਹਨ।" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "ਐਪ ਟ੍ਰੇਅ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਡਬਲ ਟੈਪ ਕਰੋ।" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 ਨਵੀਂ ਆਈਟਮ" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "ਸਮਰੱਥ ਕਰਨ ਲਈ ਦੋ ਵਾਰ ਟੈਪ ਕਰੋ।" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "ਘੜੀ" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "ਡਿਵਾਈਸ ਦਾ ਤਾਪਮਾਨ ਬਹੁਤ ਵੱਧ ਹੈ।" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "ਮੋਬਾਈਲ ਡਿਵਾਈਸ ਰਾਹੀਂ ਗੇਅਰ ਅਨੁਪ੍ਰਯੋਗ ਡਾਉਨਲੋਡ ਕਰੋ।" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "ਸੌਂਦੇ ਸਮੇਂ" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "ਹੋਰ ਅਨੁਪ੍ਰਯੋਗ ਪ੍ਰਾਪਤ ਕਰੋ" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "ਪਾਵਰ ਸੇਵਿੰਗ + ਸਮਰੱਥ ਹੋਣ ਤੇ ਕਾਰਜ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "ਸਕ੍ਰੀਨ ਰੀਡਰ ਸਮਰੱਥ ਹੋਣ ਵੇਲੇ %s ਉਪਲਬਧ ਨਹੀਂ ਹੈ।" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "ਫਲਾਈਟ ਮੋਡ ਸਮਰੱਥ ਹੋਣ ਤੇ ਮੋਬਾਈਲ ਡੈਟਾ ਚਾਲੂ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ। ਫਲਾਈਟ ਮੋਡ ਅਸਮਰੱਥ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "ਘੜੀ ਉੱਤੇ ਵਾਪਸ ਜਾਣ ਲਈ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰੋ।" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "ਇਹੀ ਗੱਲ ਹੈ! ਗੇਅਰ ਤੇ ਜਾਓ!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "ਗੇਅਰ ਤੇ ਕਾੱਲਾਂ ਫਾੱਰਵਰਡ ਕਰੋ" + +msgid "IDS_ST_BUTTON_START" +msgstr "ਅਰੰਭ ਕਰੋ" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "ਬਾਹਰ ਜਾਓ" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "ਸੁਆਗਤ ਹੈ! ਆਪਣੇ ਗੇਅਰ ਦਾ ਉਪਯੋਗ ਕਰਨਾ ਸਿੱਖਣ ਲਈ ਹੇਠਾਂ ਦਿੱਤੇ ਬਟਨ ਉੱਤੇ ਟੈਪ ਕਰੋ।" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "ਅਸਮਰੱਥ ਕਰਨ ਲਈ ਬੇਨਤੀ ਕੀਤੀ ਗਈ" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "ਸਮਰੱਥ ਕਰਨ ਲਈ ਬੇਨਤੀ ਕੀਤੀ ਗਈ" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "ਘੜੀ ਤੇ ਸੂਚਕ ਪ੍ਰਤੀਰੂਪਾਂ ਨੂੰ ਦੇਖਣ ਲਈ ਉੱਪਰੀ ਕਿਨਾਰੇ ਨੂੰ ਹੇਠਾਂ ਵੱਲ ਸਵਾਈਪ ਕਰੋ।" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "ਘੜੀ ਤੇ ਐਪਸ ਦੇਖਣ ਲਈ ਹੇਠਲੇ ਕਿਨਾਰੇ ਨੂੰ ਉੱਪਰ ਸਵਾਈਪ ਕਰੋ।" + +msgid "IDS_ST_BUTTON_OK" +msgstr "ਓਕੇ" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "ਵਾਪਸ ਜਾਣ ਲਈ ਉੱਪਰੀ ਕਿਨਾਰੇ ਨੂੰ ਹੇਠਾਂ ਸਵਾਈਪ ਕਰੋ।" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "ਅਨੁਪ੍ਰਯੋਗਾਂ ਨੂੰ ਸਥਾਪਿਤ ਜਾਂ ਅਣਸਥਾਪਿਤ ਕਰਨ ਲਈ, ਸੈਮਸੰਗ ਗੇਅਰ ਅਨੁਪ੍ਰਯੋਗ ਨੂੰ ਆਪਣੇ ਮੋਬਾਈਲ ਡਿਵਾਈਸ ਉੱਤੇ ਉਪਯੋਗ ਕਰੋ।" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "ਇਹ ਹੋਮ ਸਕ੍ਰੀਨ ਦੀ ਮੁੱਖ ਬਣਤਰ ਹੈ।" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ਖਾਲੀ" diff --git a/home/res/po/pl.po b/home/res/po/pl.po new file mode 100755 index 0000000..db6390f --- /dev/null +++ b/home/res/po/pl.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplikacje" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Dalej" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Nie powt." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Usuń wszystko" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Nie można usunąć." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Dotknij widget, przytrzymaj go, aby przesunąć." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Zmieniono ekran startowy." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Ładuję..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Nie można załadować danych. Dotknij, aby spróbować ponownie." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Nie można dodać aplikacji. Na ekranie startowym nie ma już miejsca." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Nie można dodać widgetu. Na ekranie startowym nie ma już miejsca." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplikacja już istnieje." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget już istnieje." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Anuluj" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Zmieniono układ ekranu startowego." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ta aplikacja zostanie usunięta z ekranu startowego. Nie zostanie ona usunięta z urządzenia." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Usuwanie aplikacji" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Usuwanie widgetów" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ten widget zostanie usunięty z ekranu startowego. Nie zostanie on usunięty z urządzenia." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Tryb b. nis. zuż. energii" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Nie można dodać widgetu. Osiągnięto maksymalną liczbę widgetów (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Nie można dodać aplikacji. Osiągnięto maksymalną liczbę aplikacji (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Nie można dodać strony." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Tryb normalny" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Wyłączono Tryb oszczędzania energii." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Włączono tryb oszczędzania energii." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Ost. aplik." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Nie można dodać aplikacji. Osiągnięto maksymalną liczbę aplikacji (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Nie można dodać widgetu. Osiągnięto maksymalną liczbę widgetów (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Usuń stronę" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Ta strona i jej zawartość zostaną usunięte." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Usuń" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Włóż kartę SIM, aby uzyskać dostęp do usług sieciowych." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Tryb blokowania" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Włączony" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Wyłączony" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Element został przeniesiony." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Dotknij dwukrotnie, aby dodać." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Dodaj widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Dodano element." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Element usunięty." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Strona %1$d z %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Nie można zmienić kolejności elementów na tablicy powiadomień." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Godzina %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Godzina %d:%d rano" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Godzina %d:%d po południu" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "Liczba nowych elementów: %d" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Osiągnięto maksymalną liczbę widgetów (%s). Usuń niektóre widgety i spróbuj ponownie." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Przec. w prawo, aby wrócić do zegara." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Przec. w lewo, aby wyświetlić widgety." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Przec. w lewo, aby wrócić do zegara." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Przec. w prawo, aby wyśw. powiadom." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Odinstalować %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Osiągnięto maksymalną liczbę widgetów (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Dotknij dwukrotnie, aby otworzyć zasobnik aplikacji." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "Nowych elementów: 1" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Dotknij dwukrotnie, aby włączyć." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Zegar" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Temperatura urządzenia jest zbyt wysoka." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Pobierz aplikacje zegarka Gear przy użyciu urządzenia przenośnego." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Podczas snu" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Pobierz więcej aplikacji" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Operacja jest niedostępna przy włączonym trybie Oszczędzanie energii +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "Element %s nie jest dostępny, gdy jest włączony jest Czytnik ekranu." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Nie przeszkadzać" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Nie można wł. trans. danych, gdy tryb Offline jest włączony. Wyłącz go i spróbuj ponownie." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Przesuń w górę, aby wrócić do zegara." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Oto zegarek Gear! Daj się oczarować!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Sieci komórkowe" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Przek.poł.do Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Rozpocznij" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Wyjdź" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Witamy! Dotknij przycisku poniżej, aby poznać zegarek Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Zażądano wyłączenia" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Zażądano włączenia" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Aby zobaczyć ikony wskaźników na zegarze, przesuń w dół." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Przesuń w górę od krawędzi, aby wyśw. apl. na zegarze." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Przesuń w dół od górnej krawędzi, aby wrócić." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Aby instalować lub odinstalowywać aplikacje, korzystaj z aplikacji Samsung Gear w urządzeniu przenośnym." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "To jest główna struktura ekranu startowego." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Puste" diff --git a/home/res/po/pt_BR.po b/home/res/po/pt_BR.po new file mode 100755 index 0000000..8cec03d --- /dev/null +++ b/home/res/po/pt_BR.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplicativos" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Avançar" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Não repetir." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Excluir todos" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Impossível remover." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Toque e mantenha pressionada um widget para movê-lo." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Tela de início alterada." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Carregando..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Não é possível carregar os dados. Toque para tentar novamente." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Não é possível adicionar o aplicativo. Nenhum local na tela de início." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Não é possível adicionar o widget. Nenhum local na tela de início." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "O aplicativo já existe." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "O widget já existe." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Cancelar" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Layout da tela de início alterado." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Este aplicativo será removido da tela de início. Ele não será excluído do dispositivo." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Remover aplicativo" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Remover widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Este widget será removido da tela de início. Ele não será excluído do dispositivo." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Modo de Ultra economia" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Não é possível adicionar o widget. Número máximo de widgets (%d) atingido." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Não é possível adicionar aplicativo. Número máximo de aplicativos (%d) atingido." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Não é possível adicionar a página." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Modo normal" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Modo de Economia desativado." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Modo de economia de energia ativado." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Aplic. rec." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Não é possível adicionar aplicativo. Número máximo de aplicativos (%s) atingido." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Não é possível adicionar o widget. Número máximo de widgets (%s) atingido." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Remover página" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Esta página e seu conteúdo serão removidos." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Remover" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Insira um cartão SIM para acessar serviços de rede." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Modo de bloqueio" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Ativado" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Desativado" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Item movido." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Tocar duas vezes para adicionar." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Adicionar widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Item adicionado." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Item removido." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Página %1$d de %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Não é possível reordenar os itens do painel de notificações." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "São %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "São %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "São %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d itens novos" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "O número máximo de widgets (%s) foi atingido. Excluir alguns widgets e tentar novamente." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Desliz. p/dir. p/voltar p/relógio." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Deslize p/esq. p/visualizar widgets." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Deslize p/esq. p/voltar p/relógio." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Desliz. p/dir. p/exibir notificações." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Desinstalar %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Número máximo de widgets (%s) atingido." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Toque duas vezes para abrir a bandeja do aplicativo." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 novo item" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Tocar duas vezes para ativar." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Relógio" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "A temperatura do dispositivo está muito alta." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Baixar aplicativos do Gear usando o dispositivo móvel." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Durante o sono" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Obter mais aplicativos" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Ação não disponível quando a Economia de energia + estiver ativada." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s não está disponível enquanto o Leitor de tela estiver ativado." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Não perturbar" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Impos. ligar Dados móveis quando o Modo Offline estiver ativado. Desative-o e tente novamente." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Deslizar p/cima p/voltar ao relógio." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "É isso aí! Entre no Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Redes móveis" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Encam. cham. Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Iniciar" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Sair" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Bem-vindo! Toque no botão para aprender a usar seu Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Solicitado para desativar" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Solicitado para ativar" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Deslize a borda sup. p/baixo p/ver ícon. indic. relógio." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Deslize a borda inf. p/cima p/ver os aplic. no relógio." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Deslize a borda superior para baixo para retornar." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Para instalar ou desinstalar aplicativos, usar o aplicativo do Samsung Gear no seu dispositivo móvel." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Esta é a estrutura principal da tela de início." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Vazio" diff --git a/home/res/po/pt_PT.po b/home/res/po/pt_PT.po new file mode 100755 index 0000000..999d750 --- /dev/null +++ b/home/res/po/pt_PT.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplicações" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Seguinte" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Não repetir" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Eliminar tudo" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Impossível remover." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Toque, sem soltar, um widget para o mover." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Ecrã principal alterado." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "A carregar..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Impossível carregar dados. Toque para tentar novamente." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Impossível adicionar aplicação. Já não há espaço no ecrã principal." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Impossível adicionar widget. Já não há espaço no ecrã principal." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplicação já existe." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget já existe." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Cancelar" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "A disposição do ecrã principal foi alterada." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Esta aplicação será removida do ecrã principal. Não será eliminada do dispositivo." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Remover aplicação" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Remover widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Este widget será removido do ecrã principal. Não será eliminada do dispositivo." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Modo ultra-econ. energia" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Impossível adicionar widget. Número máximo de widgets (%d) atingido." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Impossível adicionar aplicação. Número máximo de aplicações (%d) atingido." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Impossível adicionar página." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Modo normal" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Modo de economia de energia desactivado." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Modo de economia de energia activado." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Apps recentes" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Impossível adicionar aplicação. Número máximo de aplicações (%s) atingido." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Impossível adicionar widget. Número máximo de widgets (%s) atingido." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Remover página" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Esta página e o respectivo conteúdo serão removidos." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Remover" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Insira o cartão SIM para aceder aos serviços de rede." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Modo de Bloqueio" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Ligar" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Desligar" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Item movido." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Toque duas vezes para adicionar." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Adicionar widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Item adicionado." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Item removido." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Página %1$d de %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Não é possível reordenar os itens do painel de notificações." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "São %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "São %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "São %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d novos itens" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "O número máximo de widgets (%s) foi alcançado. Elimine alguns widgets e tente novamente." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Deslize dedo direita voltar relógio." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Deslize dedo p/ esq p/ ver widgets." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Deslize dedo p/ esq p/ voltar relógio." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Deslize dedo direita ver notificações." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Desinstalar %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Número máximo de widgets (%s) atingido." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Toque duas vezes para abrir o tabuleiro de aplicações." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 item novo" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Toque duas vezes para activar." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Relógio" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "A temperatura do dispositivo está demasiado alta." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Transferir aplicações do Gear utilizando o dispositivo móvel." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Ao dormir" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Obter mais aplicações" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Acção indisponível quando Economia de energia + está activado." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s não está disponível enquanto o Leitor de ecrã estiver activado." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Não incomodar" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Impossível ligar Dados móveis qd Modo de voo activo. Desactive Modo de voo e tente de novo." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Deslize para cima para voltar relógio." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Muito bem! Entre no Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Redes móveis" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Reenc. chmds Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Iniciar" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Sair" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Bem-vindo! Para aprender a usar o Gear, toque botão abaixo." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Feito pedido para desactivar" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Feito pedido para activar" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Deslize bordo sup. p/ ver ícones indicadores no relógio." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Para ver apps no relógio, deslize o bordo inferior." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Para voltar, deslize o bordo superior para baixo." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Para instalar ou desinstalar aplicações, utilize a aplicação Samsung Gear no seu dispositivo móvel." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Esta é a estrutura principal do ecrã principal." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Vazio" diff --git a/home/res/po/ro.po b/home/res/po/ro.po new file mode 100755 index 0000000..7b300eb --- /dev/null +++ b/home/res/po/ro.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplicaţii" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Înainte" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Fără repet." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Şterg. totală" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Imposibil de eliminat" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Ţineţi apăsat pe un widget pentru a-l muta." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Ecranul de pornire s-a modificat." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Încărcare..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Datele nu pot fi încărcate. Atingeţi pentru a reîncerca." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Aplicaţia nu poate fi adăugată. Ecranul de pornire este plin." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Widgetul nu poate fi adăugat. Ecranul de pornire este plin." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplicaţia există deja." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widgetul există deja." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Anulare" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Aspectul ecranului de pornire s-a schimbat." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Aplicaţia va fi eliminată din ecranul de pornire. Aceasta nu va fi ştearsă de pe dispozitiv." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Eliminare aplicaţie" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Eliminare widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Widgetul va fi eliminat din ecranul de pornire. Acesta nu va fi şters de pe dispozitiv." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Mod Econ. maximă energie" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Widgetul nu poate fi adăugat. A fost atins numărul maxim de widgeturi (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Aplicaţia nu poate fi adăugată. A fost atins numărul maxim de aplicaţii (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Pagina nu poate fi adăugată." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Mod normal" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Modul de economisire a energiei a fost dezactivat." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Modul de economisire a energiei a fost activat." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Apl. recente" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Aplicaţia nu poate fi adăugată. A fost atins numărul maxim de aplicaţii (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Widgetul nu poate fi adăugat. A fost atins numărul maxim de widgeturi (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Eliminare pagină" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Pagina şi conţinutul acesteia va fi şters." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Eliminare" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Introduceţi cartela SIM pentru a accesa serviciile de reţea." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Modul Blocare" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Pornit" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Oprit" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Elementul a fost mutat." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Atingeţi de două ori pentru a adăuga." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Adăugare widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Elementul a fost adăugat." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Elementul a fost eliminat." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Pagina %1$d din %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Nu se pot reordona elementele panoului de notificări." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Este %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Este ora %d:%d a.m." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Este ora %d:%d p.m." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d elemente noi" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "A fost atins numărul maxim de widgeturi (%s). Ştergeţi câteva widgeturi şi încercaţi din nou." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Glis. la dr. pt. a reveni la ceas." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Glis. la stânga pt. a vedea widgeturi." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Glis. la stânga pt. a reveni la ceas." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Glis. la stânga pt. a viz. notificări." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Dezinstalaţi %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "S-a atins numărul maxim de widgeturi (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Atingeţi de două ori pentru a deschide bara de aplicaţii." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 element nou" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Atingeţi de două ori pentru a activa." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Ceas" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Temperatura dispozitivului este prea ridicată." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Descărcaţi aplicaţii pentru Gear utilizând dispozitivul mobil." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Când dormiţi" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Obţineţi m. m. aplicaţii" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Acţiunea nu este disponibilă când este activat modul Economisire energie +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s nu este disponibilă când Cititorul de ecran este activat." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Nu deranjaţi" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Datele mob. nu se pot act. când este activ modul Avion. Dezact. modul Avion şi reîncercaţi." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Glisaţi în sus pt. a reveni la ceas." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Gata! Începeţi utilizarea Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Reţele mobile" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Red. apeluri Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Start" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Ieşire" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Bun venit! At. urm. buton pt. a afla cum să utilizaţi Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "S-a solicitat dezactivarea" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "S-a solicitat activarea" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Glis. în jos marg. de sus pt. viz. pe ceas a pictogr. de indicaţii." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Glisaţi în sus marginea de jos pt. a viz. ap. pe ceas." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Glisaţi în jos marginea de sus pentru a reveni." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Pentru a instala sau a dezinstala aplicaţii, utilizaţi aplicaţia Samsung Gear de pe dispozitivul mobil." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Aceasta este structura principală a ecranului Acasă." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Liber" diff --git a/home/res/po/ru_RU.po b/home/res/po/ru_RU.po new file mode 100755 index 0000000..4fb51c4 --- /dev/null +++ b/home/res/po/ru_RU.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Приложения" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Далее" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Виджеты" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Не повторять." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Удалить все" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Невозможно удалить." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Для перемещения виджета нажмите и удерживайте его." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Главный экран изменен." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Загрузка..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Не удалось загрузить данные. Коснитесь для повтора" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Не удалось добавить приложение. Нет места на этом главном экране." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Не удалось добавить виджет. Нет места на этом главном экране." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Приложение уже существует." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Виджет уже существует." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Отмена" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Макет главного экрана изменен." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Это приложение будет удалено с главного экрана. Оно не будет удалено с устройства." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Удалить приложение" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Удалить виджет" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Этот виджет будет удален с главного экрана. Он не будет удален с устройства." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Режим макс. энергосбер." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Не удалось добавить виджет. Достигнуто максимальное количество виджетов (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Не удалось добавить приложение. Достигнуто максимальное количество приложений (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Невозможно добавить страницу." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Обычный режим" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Режим энергосбережения выключен." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Режим энергосбережения включен." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Посл. прил." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Не удалось добавить приложение. Достигнуто максимальное количество приложений (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Не удалось добавить виджет. Достигнуто максимальное количество виджетов (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Удалить страницу" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Эта страница будет удалена вместе со всем содержимым." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Удалить" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Вставьте SIM-карту для доступа к услугам сети." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Режим блокировки" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Включено" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Выключено" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Элемент перемещен." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Дважды нажмите, чтобы добавить." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Добавить виджет" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Элемент добавлен." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Элемент удален." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Страница %1$d из %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Невозможно изменить порядок элементов в области уведомлений." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Сейчас %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Сейчас %d:%d до полудня." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Сейчас %d:%d после полудня." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "Новых элементов: %d" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Достигнуто максимальное число виджетов (%s). Удалите несколько виджетов и повторите попытку." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Проведите вправо для возврата к часам." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Проведите влево для вывода виджетов." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Проведите влево для возврата к часам." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Проведите вправо для просмотра уведомлений." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Удалить %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Достигнуто максимальное количество виджетов (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Дважды нажмите, чтобы открыть область приложений." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 новый элемент" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Дважды нажмите, чтобы включить." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Часы" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Устройство слишком горячее." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Загрузить приложения Gear, используя мобильное устройство." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Во время сна" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Загрузить приложения" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Действие не доступно, если включен режим “Экон. энергии +”." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "Если включено чтение с экрана, функция %s недоступна." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Не беспокоить" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Вкл. моб. данные при вкл. автономн. реж. невозм. Откл. автономн. реж. и повторите попытку." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Проведите вверх для возврата к часам." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Все готово! Можно пользоваться Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Мобильные сети" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Пер. выз. на Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Начало" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Выход" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Добро пожаловать! Нажмите кнопку для обучения работе с Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Отправлен запрос на выключение" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Отправлен запрос на включение" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Проведите сверху вниз для отображения панели состояния." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Проведите снизу вверх для перехода в список приложений." + +msgid "IDS_ST_BUTTON_OK" +msgstr "ОК" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Проведите вниз от верхнего края, чтобы вернуться." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Для установки и удаления приложений воспользуйтесь приложением Samsung Gear на мобильном устройстве." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Здесь представлена основная структура главного экрана." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Пусто" diff --git a/home/res/po/si.po b/home/res/po/si.po new file mode 100755 index 0000000..47cb2d5 --- /dev/null +++ b/home/res/po/si.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "යෙදුම්" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "ඊළඟ" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "වි‍ජෙට්ටුව" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "පුනරා.නය නොකර." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "සියල්ල මකන්න" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "ඉවත් කළ නොහැක." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "විජෙට්ටුව චලනය කිරීමට ඊට තට්ටු කර තබා ගන්න." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "මුල් පිටු තිරය වෙනස් කෙරිණි." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "ප්‍රෙව්ශනය කරමින්..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "දත්ත ප්‍රවේශනය කිරීමට නොහැකිය. යළි උත්සාහ කිරීමට තට්ටු කරන්න" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "යෙදුම එක් කිරීමට නොහැකි විය. මුල්පිටු තිරය මත තවත් ඉඩ නැත." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "විජෙට්ටුවක් එක් කළ නොහැක. මුල්පිටු තිරය මත තවත් ඉඩ නැත." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "යෙදුම දැනටමත් තිබේ." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "විජට්ටුව දැනටමත් පවතී." + +msgid "IDS_COM_POP_CANCEL" +msgstr "අවලංගු කරන්න" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "නිවාස පිටුවේ සැකැස්ම වෙනස් කෙරිණි." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "මෙම යෙදුම මුල්තිරයෙන් ඉවත්වනු ඇත. එය උපාංගයෙන් නොමැකෙනු ඇත." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "යෙදුම ඉවත් කරන්න" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "විජෙට්ටුව ඉවත් කරන්න" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "මෙම කෙටිමඟ මුල්තිරයෙන් ඉවත්වනු ඇත. එය උපාංගයෙන් නොමැකෙනු ඇත." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "අධි බල සුරැකුම් ප්‍රකාරය" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "විජෙට්ටුවක් එක් කළ නොහැක. උපරිම විජෙට්ටු ගණනට (%d) ළඟා විය." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "යෙදුම එක් කළ නොහැක. උපරිම යෙදුම් ගණනට (%d) ළඟා විය." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "පිටුව එක් කළ නොහැක." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "සාමාන්‍ය ප්‍රකාරය" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "බල සුරැකුම් ප්‍රකාරය අක්‍රියයි." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "බල සුරැකුම් ප්‍රකාරය සක්‍රියයි." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "මෑත යෙදුම්" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "යෙදුම එක් කළ නොහැක. උපරිම යෙදුම් ගණන (%s) ළඟා වී ඇත." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "විජට් එක් කළ නොහැක. උපරිම විජට් ගණන (%s) ළඟා වී ඇත." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "පිටුව ඉවත් කරන්න" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "මෙම පිටුව සහ එහි අන්තර්ගතය ඉවත් කෙරෙනු ඇත." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "ඉවත් කරන්න" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "ජාල සේවා වෙත ප්‍රවේශ වීමට SIM කාඩ්පත ඇතුල් කරන්න." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "අවහිර ප්‍රකාරය" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "සක්‍රියයි" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "අක්‍රියයි" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "අයිතමය ගෙන යන ලදී." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "එක් කිරීමට ද්වි තට්ටු කරන්න." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "විජෙට්ටුවක් එක් කරන්න" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "අයිතමය එක් කෙරිණි." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "අයිතමය ඉවත් කෙරිණි." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d න් %1$d වැනි පිටුව" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "දැනුම්දීම් පුවරු අයිතම යළි පිළිවෙළ කළ නොහැකිය." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "එය %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "%d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "%d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "නව අයිතම %d" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "උපරිම විජෙට්ටු ගණන (%s) වෙත ළඟා වී ඇත. විජෙට්ටු කිහිපයක් මකා නැවත උත්සාහ කරන්න." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ඔරලෝසුව වෙත ආපසු යා. දකුණට ස්වයිප් ක." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "විජෙට්ටු බැලීමට වමට ස්වයිප් කරන්න." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ඔරලෝසුව වෙත ආපසු යා. වමට ස්වයිප් ක." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "දැනුම්දීම් බැලීමට දකුණට ස්වයිප් කරන්න." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s අස්ථාපනය කරන්නද?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "උපරිම විජෙට්ටු ගණනට (%s) ළඟා විය." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "යෙදුම් තැටිය විවෘත කිරීමට ද්වි තට්ටු කරන්න." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "නව අයිතම 1" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "සක්‍රිය කිරීමට ද්වි තට්ටු කරන්න." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "ඔරලෝසුව" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "උපාංගයේ උෂ්ණත්වය ඉතා වැඩිය." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "ජංගම උපාංගය භාවිතයෙන් ගියර් යෙදුම් බාගන්න." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "නිදන විට දී" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "තවත් යෙදුම් ලබා ගන්න" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "බල සුරැකුම + සක්‍රිය අතරතුර ක්‍රියාව ලද නොහැකිය." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "තිර කියවනය සක්‍රිය අතරතුර %s ලද නොහැකිය." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "බාධා නොකරන්න" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "පියාසර ප්‍රකාරය සක්‍රිය අතරතුර ජංගම දත්ත ක්‍රියා.ක කළ නොහැක. පියාසර ප්‍රකාරය අක්‍රිය කර නැවත උත්සාහ ක." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "ඔරලෝසුව වෙත ආපසු යාමට උඩු අතට ස්ව. ක." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "දැන් නිමයි! ගියරය භාවිතය අරඹන්න!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "ජංගම ජාල" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "ගියරය වෙත ඇමතුම් ඉදිරි. ක." + +msgid "IDS_ST_BUTTON_START" +msgstr "ආරම්භ කරන්න" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "ඉවත් වන්න" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "සාදරයෙන් පිළිග.! ඔබගේ ගියර් භාවිත ක. කෙසේදැයි හැදෑරීමට පහත බොත්තමට තට්ටු ක." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "අක්‍රිය කිරීමට ඉල්ලා සිටින ලදී" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "සක්‍රිය කිරීමට ඉල්ලා සිටින ලදී" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "ඔරලෝසුව මත දර්ශක අයිකන බැලීමට ඉහළම මායිම පහළට ස්වයිප් ක." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "ඔරලෝසුව මත යෙදුම් බැලීමට පහළ දාරය ඉහළට ස්වයිප් කරන්න." + +msgid "IDS_ST_BUTTON_OK" +msgstr "හරි" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "ආපසු යාමට පහළට ස්වයිප් කරන්න." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "යෙදුම් ස්ථාපනය හෝ අස්ථාපනය කිරීමට, ඔබගේ ජංගම උපාංගයේ සැම්සුං ගියර් යෙදුම භාවිතා කරන්න." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "මෙය මුල් තිරයේ ප්‍රධාන ව්‍යුහයයි." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "හිස්" diff --git a/home/res/po/sk.po b/home/res/po/sk.po new file mode 100755 index 0000000..9ea3bc2 --- /dev/null +++ b/home/res/po/sk.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplikácie" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Ďalej" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Neopakovať" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Odstr. všetky" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Nedá sa odstrániť." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Ťukn. na miniaplikáciu a podržaním ju premiestnite." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Domovská obrazovka sa zmenila." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Načítava sa..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Nemožno načítať údaje. Ťuknutím to môžete skúsiť znova." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Aplikáciu nemožno pridať. Na domovskej obrazovke už nie je voľné miesto." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Miniaplikáciu nemožno pridať. Na domovskej obrazovke už nie je voľné miesto." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplikácia už existuje." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Miniaplikácia už existuje." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Zrušiť" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Rozloženie domovskej obrazovky sa zmenilo." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Táto aplikácia sa odstráni z domovskej obrazovky. Neodstráni sa zo zariadenia." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Odstrániť aplikáciu" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Odstrániť miniaplik." + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Táto miniaplikácia sa odstráni z domovskej obrazovky. Neodstráni sa zo zariadenia." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Režim extr. šetr. energie" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Miniaplikácia sa nedá pridať. Dosiahol sa maximálny počet miniaplikácií (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Aplikáciu nemožno pridať. Dosiahol sa maximálny počet aplikácií (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Stránku nemožno pridať." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normálny režim" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Režim šetrenia energie je vypnutý." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Režim šetrenia energie je zapnutý." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Posledné ap." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Aplikácia sa nedá pridať. Dosiahol sa maximálny počet aplikácií (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Miniaplikácia sa nedá pridať. Dosiahol sa maximálny počet miniaplikácií (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Odstrániť stránku" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Táto stránka spolu s jej obsahom sa odstráni." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Odstrániť" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Vložte SIM kartu na prístup k službám siete." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Režim blokovania" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Zap." + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Vyp." + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Položka bola premiestnená." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Dvojitým ťuknutím môžete vykonať pridanie." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Pridať widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Položka bola pridaná." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Položka bola odstránená." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Strana %1$d z %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Poradie položiek na paneli oznámení sa nedá zmeniť." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Je %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Je %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Je %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "Počet nových položiek: %d" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Dosiahol sa maxim. počet miniaplikácií (%s). Odstráňte niektoré miniaplikácie a skúste to znova." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Potiahnutím doprava zobrazíte hodiny." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Potiahnutím doľava zobrazíte widgety." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Potiahnutím doľava zobrazíte hodiny." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Potiahnite doprava pre Oznámenia." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Odinštalovať program %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Dosiahol sa maximálny počet miniaplikácií (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Dvojitým ťuknutím môžete otvoriť panel aplikácií." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nová položka" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Dvojitým ťuknutím môžete vykonať zapnutie." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Hodiny" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Teplota zariadenia je príliš vysoká." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Stiahnite si aplikácie pre zariadenie Gear použitím mobilného zariadenia." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Počas spánku" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Získať ďalšie aplikácie" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Akcia nie je k dispozícii, kým je zapnutá funkcia Šetrenie energie +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s nie je k dispozícii, kým je zapnutá funkcia Čítačka obrazovky." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Nerušiť" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Pri zap. letovom režime sa nedá zap. mobil. pripojenie. Vyp. letový režim a skúste znova." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Potiahnutím nahor sa vrátite na hodiny." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "A to je všetko! Začnite používať zariadenie Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobilné siete" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Presmerovať hovor" + +msgid "IDS_ST_BUTTON_START" +msgstr "Štart" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Koniec" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Vitajte! Ťuknite na tlačidlo nižšie pre info o ovládaní." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Požiadalo sa o vypnutie" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Požiadalo sa o zapnutie" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Potiahnutím nadol zobrazíte panel indikačných ikon." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Potiahnutím nahor zobrazíte aplikácie." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Potiahnutím od horného okraja nadol sa vrátite späť." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Ak chcete nainštalovať alebo odinštalovať aplikácie, použite aplikáciu Samsung Gear v mobilnom zariadení." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Toto je hlavná štruktúra domovskej obrazovky." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Prázdny" diff --git a/home/res/po/sl.po b/home/res/po/sl.po new file mode 100755 index 0000000..fe0176d --- /dev/null +++ b/home/res/po/sl.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplikacije" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Naprej" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Pripomoček" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Ne ponovi" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Izbriši vse" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Ni mogoče odstraniti." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Pritisnite in držite pripomoček, da ga premaknete." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Domači zaslon je spremenjen." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Nalaganje..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Podatkov ni mogoče naložiti. Pritisnite, da poskusite znova." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Aplikacije ni mogoče dodati. Na domačem zaslonu ni več prostora." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Pripomočka ni mogoče dodati. Na domačem zaslonu ni več prostora." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplikacija že obstaja." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Pripomoček že obstaja." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Prekliči" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Postavitev domačega zaslona je spremenjena." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ta aplikacija bo odstranjena z domačega zaslona. Aplikacija ne bo izbrisana iz naprave." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Odstran. aplikacijo" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Odstran. pripomoček" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ta pripomoček bo odstranjen z domačega zaslona. Pripomoček ne bo izbrisan iz naprave." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Način izr. varč. z energ." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Pripomočka ni mogoče dodati. Doseženo je največje dovoljeno število pripomočkov (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Aplikacije ni mogoče dodati. Doseženo je največje dovoljeno število aplikacij (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Strani ni mogoče dodati." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Običajen način" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Način varčevanja z energijo je onemogočen." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Način varčevanja z energijo je omogočen." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Nedavne apl." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Aplikacije ni mogoče dodati. Doseženo je največje dovoljeno število aplikacij (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Pripomočka ni mogoče dodati. Doseženo je največje dovoljeno število pripomočkov (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Odstranitev strani" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Ta stran in njena vsebina bosta odstranjeni." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Odstrani" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Za dostop do omrežnih storitev vstavite kartico SIM." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Način blokiranja" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Vključeno" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Izključeno" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Element premaknjen." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Dvakrat pritisnite, da dodate." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Dodaj pripomoček" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Element je dodan." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Element je odstranjen." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Stran %1$d od %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Elementov na plošči z obvestili ni mogoče prerazporediti." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Ura je %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Ura je %d:%d dopoldne." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Ura je %d:%d popoldne." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d novih elementov" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Doseženo je največje dovoljeno št. pripomočkov (%s). Izbrišite nekaj pripomočkov in posk. znova." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Za vrnitev na uro podrsajte v desno." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Za prikaz pripomoč. podrsajte v levo." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Za vrnitev na uro podrsajte v levo." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Za prikaz obvestil podrsajte v desno." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Želite odstraniti %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Doseženo je največje dovoljeno število pripomočkov (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Dvakrat pritisnite, da odprete vrstico z aplikacijami." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nov element" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Dvakrat pritisnite, da omogočite." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Ura" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Temperatura naprave je previsoka." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Z mobilno napravo prenesite aplikacije za napravo Gear." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Med spanjem" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Prenesi več aplikacij" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Dejanje ni na voljo, ko je omogočena funkcija Varčevanje z energijo +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "Funkcija %s ni na voljo, ko je omogočena funkcija Bralnik zaslona." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Ne moti" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Pren. pod. prek mob. omr. ni mogoče vklopiti. Onemogočite način letenja in poskusite znova." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Za vrnitev na uro podrsajte navzgor." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "To je to! Začnite uporabljati napravo Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobilna omrežja" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Pos. klic. v Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Začetek" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Izhod" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Pozdravljeni! Za navodila o upor. ure Gear prit. spod. gumb." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Zahtevano, da onemogočite" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Zahtevano, da omogočite" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Za ogled ikon indik. na uri podrs. od zg. roba navzdol." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Za prikaz apl. na uri podrsajte od spodn. roba navzgor." + +msgid "IDS_ST_BUTTON_OK" +msgstr "V redu" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Za vrnitev podrsajte od zgornjega roba navzdol." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Če želite namestiti ali odstraniti aplikacije, uporabite aplikacijo Samsung Gear v mobilni napravi." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "To je glavna struktura domačega zaslona." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Prazno" diff --git a/home/res/po/sq.po b/home/res/po/sq.po new file mode 100755 index 0000000..51fb95a --- /dev/null +++ b/home/res/po/sq.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplikacionet" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Tjetër" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Mini-aplikacion" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Mos përsër." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Hiq të gjitha" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Nuk mund të heqë." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Prek dhe mbaj miniaplikacionin për ta lëvizur." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Ekrani bazë u ndryshua." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Duke ngarkuar..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Nuk mund të ngarkoj të dhëna. Trokit për të riprovuar." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Nuk mund të shtoj aplikacionin. Nuk ka më vend në ekranin bazë." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Nuk mund të shtoj widget-in. Nuk ka më vend në ekranin bazë." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplikacioni ekziston tashmë." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget-i ekziston tashmë." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Anullo" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Struktura e ekranit bazë u ndryshua." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ky aplikacion do të largohet nga ekrani bazë. Nuk do të hiqet nga pajisja." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Largo aplikacionin" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Largo widget-in" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ky widget do të largohet nga ekrani bazë. Nuk do të hiqet nga pajisja." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Regjimi Kurs. ener. ultra" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Nuk mund ta shtoj widget-in. Është arritur numri maksimal i widget-eve (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Nuk mund të shtoj aplikacion. U arrit numri maksimal (%d) i aplikacioneve." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Nuk mund të shtoj faqe." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Regjim normal" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Regjimi kursim energjie u paaftësua." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Regjimi kursim energjie u aftësua." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "App së fundi" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Nuk mund të shtoj aplikacion. U arrit numri maksimal (%s) i aplikacioneve." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Nuk mund ta shtoj widget-in. Është arritur numri maksimal i widget-eve (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Largo faqen" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Kjo faqe dhe materialet që përmban do të hiqen." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Largo" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Fut kartën SIM, për të përdorur shërbime rrjeti." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Regjimi bllokues" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Aktiv" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Fikur" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Artikulli u zhvendos." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Dy-trokit për të shtuar." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Shto mini-aplikacion" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Artikulli u shtua." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Artikulli u hoq." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Faqja %1$d nga %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Nuk mund t'i ri-rendit zërat në tabelën e njoftimeve." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Është %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Është ora %d:%d PD." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Është ora %d:%d MD." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d objekte të reja" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "U arrit numri maksimal i widget-eve (%s). Hiq ndonjë widget dhe provo sërish." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Rrëshqit djathtas për kthim tek ora." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Rrëshqit majtas për të parë widget-et." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Rrëshqit majtas për kthim tek ora." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Rrëshqit djathtas për njoftimet." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Të çinstaloj %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "U arrit numri maksimal i widget-eve (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Dy-trokit për ta hapur tabakanë e app-eve." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 artikull i ri" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Dy-trokit për të aftësuar." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Ora" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Temperatura e pajisjes është tepër e lartë." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Shkarko aplikacione për Gear me anë të pajisjes celulare." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Gjatë gjumit" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Merr app-e të tjera" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Ky veprim nuk mund të kryhet kur është aftësuar Kursim energjie +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s nuk mund të përdoret kur është aftësuar Lexuesi i ekranit." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Mos shqetësoni" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "S'i ndez dot Të dhënat celulare në regjimin Avion. Paaftësoje dhe provo sërish." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Rrëshqit lart për kthim tek ora." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Kaq! Tani fillo me Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Rrj. celulare" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Prc. th. në Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Fillo" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Dil" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Mirë se vjen! Mëso këtu si ta përdorësh Gear-in." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Kërkoi të paaftësohet" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Kërkoi të aftësohet" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Rrëshqit buzën poshtë për ikonat e treguesve tek ora." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Rrëshqit nga poshtë lart për t'i parë app-et tek ora." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Rrëshqit buzën e sipërme poshtë për t'u kthyer." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Për të instaluar ose çinstaluar aplikacione, përdor aplikacionin Samsung Gear në pajisjen tënde celulare." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Kjo është struktura kryesore e ekranit bazë." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Bosh" diff --git a/home/res/po/sr.po b/home/res/po/sr.po new file mode 100755 index 0000000..2750c11 --- /dev/null +++ b/home/res/po/sr.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Aplikacije" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Naredno" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Ne ponavlj." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Izbriši sve" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Nemoguće ukloniti." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Kucni i zadrži widget radi njegovog premeštanja." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Početni ekran je promenjen." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Učitavanje..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Učitavanje podataka nije moguće. Kucni za ponovni pokušaj." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Nije moguće dodati aplikaciju. Nema više mesta na početnom ekranu." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Nije moguće dodati widget. Nema više mesta na početnom ekranu." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Aplikacija već postoji." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget već postoji." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Otkaži" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Izgled početnog ekrana je promenjen." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ova aplikacija će biti uklonjena sa početnog ekrana. Ona neće biti izbrisana iz uređaja." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Ukloni aplikaciju" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Ukloni widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ovaj widget će biti uklonjen sa početnog ekrana. On neće biti izbrisan iz uređaja." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Režim izuzetne ušt. ener." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Nije moguće dodati widget. Dostignut je maksimalan broj widget-a (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Nije moguće dodati aplikaciju. Dostignut je maksimalan broj aplikacija (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Nije moguće dodati stranicu." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normalni režim" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Režim štednje energije je onemogućen." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Režim uštede energije je omogućen." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Nedavne apl." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Nije moguće dodati aplikaciju. Dostignut je maksimalan broj aplikacija (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Nije moguće dodati widget. Dostignut je maksimalan broj widget-a (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Ukloni stranicu" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Ova stranica i njen sadržaj će biti uklonjeni." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Ukloni" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Ubaci SIM karticu da bi mogao/la da koristiš mrežne usluge." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Režim blokiranja" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Uključeno" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Isključeno" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Stavka je premeštena." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Dvaput kucni za dodavanje." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Dodaj widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Stavka je dodata." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Stavka je uklonjena." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Strana %1$d od %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Nije moguće promeniti redosled stavki na tabli sa obaveštenjima." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Sada je %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Sad je %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Sad je %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d novih stavki" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Dostignut je maksimalan broj widget-a (%s). Izbriši neke widget-e i pokušaj ponovo." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Prevuci udesno za povratak na sat." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Prevuci ulevo za prikaz widget-a." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Prevuci ulevo za povratak na sat." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Prevuci udesno za prikaz obaveštenja." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Deinstalirati %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Dostignut je maksimalan broj widget-a (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Dvaput kucni radi otvaranja trake sa aplikacijama." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nova stavka" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Dvaput kucni za omogućavanje." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Sat" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Temperatura uređaja je previsoka." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Preuzmi Gear aplikacije koristeći mobilni uređaj." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Tokom spavanja" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Nabavi još aplikacija" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Radnja nije dostupna kada je omogućena opcija Ušteda energije+." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s nije dostupan/na kada je Čitač ekrana omogućen." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Ne uznemiravaj" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Nije moguće uklj. mob. pod. kada je omogućen Avionski režim. Onemogući ga i pokušaj ponovo." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Prevuci nagore za povratak na sat." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Vreme je! Počni da koristiš Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobilne mreže" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Pr. poz. na Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Start" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Izađi" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Dobro došli! Kucni na donje dugme da saznaš više o Gear-u." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Zahtev da se onemogući" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Zahtev da se omogući" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Prevuci gornju ivicu nadole za ikone indikatora na satu." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Prevuci nagore od donje ivice za prikaz aplik. na satu." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Prevuci gornju ivicu nadole za povratak." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Da bi instalirao/la ili deinstalirao/la aplikacije, koristi aplikaciju Samsung Gear na mobilnom uređaju." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Ovo je glavna struktura početnog ekrana." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Prazno" diff --git a/home/res/po/sv.po b/home/res/po/sv.po new file mode 100755 index 0000000..59f5d58 --- /dev/null +++ b/home/res/po/sv.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Program" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Nästa" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Uppr. inte." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Radera alla" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Det går inte att ta bort." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Tryck på och håll ned en widget för att flytta den." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Startsidan har ändrats." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Laddar..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Det går inte att läsa in data. Tryck om du vill försöka igen." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Kan inte lägga till program. Det finns ingen mer plats på hemskärmen." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Kan inte lägga till widget. Det finns ingen mer plats på hemskärmen." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Programmet finns redan." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widgeten finns redan." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Avbryt" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Layouten för hemskärmen har ändrats." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Detta program kommer att tas bort från hemskärmen. Det kommer inte att tas bort från enheten." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Ta bort program" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Ta bort widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Denna widget kommer att tas bort från hemskärmen. Den kommer inte att tas bort från enheten." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultraenergisparläge" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Det går inte att lägga till widget. Högsta antalet widgetar (%d) har uppnåtts." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Det går inte att lägga till program. Högsta antal tillåtna program (%d) har uppnåtts." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Det går inte att lägga till sida." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normalt läge" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Energisparläget har inaktiverats." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Energisparläge aktiverat." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Senaste prog" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Det går inte att lägga till program. Högsta antal tillåtna program (%s) har uppnåtts." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Det går inte att lägga till widget. Högsta antalet widgetar (%s) har uppnåtts." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Ta bort sida" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Den här sidan och dess innehåll kommer att tas bort." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Ta bort" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Sätt in SIM-kort för att få tillgång till nätverkstjänster." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blockerings-\nläge" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "På" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Av" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Objekt har flyttats." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Dubbeltryck för att lägga till." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Lägg till widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Objekt har lagts till." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Objekt har tagits bort." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Sida %1$d av %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Det går inte att ändra ordning på objekt i aviseringspanelen." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Klockan är %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Klockan är %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Klockan är %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d nya objekt" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Det högsta antalet sparade widgetar (%s) har nåtts. Ta bort några widgetar och försök igen." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Gå tillbaka t. klockan med högersvep." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Svep åt vänster för att visa widgetar." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Gå tillb. t. klockan med vänstersvep." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Svep åt höger f. att visa aviseringar." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Avinstallera %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Högsta tillåtna antalet widgetar (%s) har uppnåtts." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Dubbeltryck för att öppna programfacket." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 nytt objekt" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Dubbeltryck för aktivering." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Klocka" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Enhetstemperaturen är för hög." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Hämta program till Gear med hjälp av den mobila enheten." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Vid sömn" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Skaffa fler program" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Åtgärden är inte tillgänglig när Energiläge+ är aktiverat." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s är inte tillgängligt när Skärmläsare är aktiverat." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Stör ej" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Kan inte slå på mobildata när Flygläge är aktiverat. Inaktivera Flygläge och försök igen." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Svep uppåt f. a. gå tillb. t. klockan." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Det är allt! Kom in till Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobilnät" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "V.kop.samt t Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Starta" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Avsluta" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Välkommen! Tryck på knappen nedan och se hur Gear används." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Begäran om att inaktivera" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Begäran om att aktivera" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Svep överkan. nedåt så visas indikatorikoner på klockan." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Svep nederkanten uppåt så visas program på klockan." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Svep överkanten nedåt om du vill gå tillbaka." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Om du vill installera eller avinstallera program använder du programmet Samsung Gear på den mobila enheten." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Detta är huvudstrukturen på hemskärmen." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Tom" diff --git a/home/res/po/ta.po b/home/res/po/ta.po new file mode 100755 index 0000000..de898ef --- /dev/null +++ b/home/res/po/ta.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "ப.பாடுகள்" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "அடுத்து" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "விட்ஜெட்" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "மீ.காட்ட வேண்டாம்." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "எல்லாம் நீக்கு" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "அகற்ற முடியவில்லை." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "ஒரு விட்ஜெட்டை இதற்கு நகர்த்த டேப் செய்து வைத்திருக்கவும்." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "முகப்புத் திரை மாற்றப்பட்டது." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "லோடிங்..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "தரவை ஏற்ற இயலவில்லை. மீண்டும் முயலவென டேப் செய்க." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "பயன்பாட்டை சேர்க்க இயலவில்லை. முகப்புத் திரையில் இடமில்லை." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "விட்ஜெட்டைச் சேர்க்க இயலவில்லை. முகப்புத் திரையில் இடமில்லை." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "பயன்பாடு முன்பே உள்ளது." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "விட்ஜெட் முன்பே உள்ளது." + +msgid "IDS_COM_POP_CANCEL" +msgstr "ரத்து" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "முகப்புத் திரை தளவமைப்பு மாற்றப்பட்டது." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "இந்த பயன்பாடு முகப்புத் திரையிலிருந்து நீக்கப்படும். அது சாதனத்திலிருந்து நீக்கப்படாது." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "பயன்பாட்டை நீக்குக" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "விட்ஜெட்டை நீக்குக" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "இந்த விட்ஜெட் முகப்புத் திரையிலிருந்து நீக்கப்படும். அது சாதனத்திலிருந்து நீக்கப்படாது." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "அல்ட்ரா பவர் சேமிப்பு முறை" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "விட்ஜெட்டைச் சேர்க்க இயலவில்லை. விட்ஜெட்களின் அதிகபட்ச எண்ணிக்கையை (%d) அடைந்தது." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "பயன்பாட்டைச் சேர்க்க இயலவில்லை. பயன்பாடுகளின் அதிகபட்ச எண்ணிக்கையை (%d) அடைந்தது." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "பக்கத்தை சேர்க்க இயலவில்லை." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "இயல்பான முறை" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "பவர் சேமிப்பு முறை செயல்நீக்கப்பட்டது." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "பவர் சேமிப்பு முறை செயல்படுத்தப்பட்டது." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "சமீப. பயன்பாடுகள்" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "பயன்பாட்டைச் சேர்க்க இயலவில்லை. அதிகபட்ச பயன்பாடுகளின் எண்ணிக்கை (%s) எட்டப்பட்டது." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "விட்ஜெட்டைச் சேர்க்க இயலவில்லை. அதிகபட்ச விட்ஜெட்களின் எண்ணிக்கை (%s) எட்டப்பட்டது." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "பக்கத்தை அகற்றுக" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "இந்தப் பக்கமும் அதன் உள்ளடக்கமும் அகற்றப்படும்." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "நீக்குக" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "நெட்வர்க் சேவையை அணுக SIM அட்டையை நுழைக்கவும்." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "தடுப்பு முறை" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "ஆன்" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "ஆஃப்" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "உருப்படி நகர்த்தப்பட்டது." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "சேர்க்க இருமுறை டேப் செய்யவும்." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "விட்ஜெட் சேர்." + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "உருப்படி சேர்க்கப்பட்டது." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "உருப்படி நீக்கப்பட்டது." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "பக்கம் %2$d என்பதில் %1$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "அறிவிப்பு பலகை உருப்படிகளை மறுஒழுங்குபடுத்த முடியாது." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "அது %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "இப்போது %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "இப்போது %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d புதிய உருப்படிகள்" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "விட்ஜெட்களின் அதிகபட்ச எண்ணிக்கையை (%s) அடைந்தது. சில விட்ஜெட்களை நீக்கி மீண்டும் முயலுக." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "கடிகாரத்திற்குச் செல்ல, வலதுபுறம் ஸ்வைப் செய்யவும்." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "விட்ஜெட்டுகளைக் காண, இடதுபுறம் ஸ்வைப் செய்யவும்." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "கடிகாரத்திற்குச் செல்ல, இடதுபுறம் ஸ்வைப் செய்யவும்." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "அறிவிப்புகளைக் காண வலதுபுறம் ஸ்வைப் செய்யவும்." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s நிறுவல் நீக்கவா?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "விட்ஜெட்களின் அதிகபட்ச எண்ணிக்கை (%s) அடைந்தது." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "பயன்பாட்டு ட்ரேவை திறக்கவென இருமுறை டேப் செய்க." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 புதிய உருப்படி" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "செயல்படுத்த இருமுறை டேப் செய்யவும்." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "கடிகாரம்" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "சாதன வெப்பநிலை மிகவும் அதிகமாகவுள்ளது." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "மொபைல் சாதனத்தை உபயோகித்து கியர் பயன்பாடுகளை பதிவிறக்கவும்." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "உறங்கும்போது" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "மேலும் ப.பாடுகள் பெறவும்" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "பவர் சேமிப்பு + செயல்படுத்தப்பட்டிருக்கும்போது செயல் கிடைக்காது." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "திரை ரீடர் செயல்படுத்தப்பட்டிருக்கும்போது %s கிடைக்காது." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "இடையூறு வேண்டாம்" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "ஃப்ளைட் முறை செயல்படுத்தப்பட்டிருக்கும் போது மொபைல் தரவை ஆன் செய்ய இயலாது. ஃப்ளைட் முறையை செயல்நீக்கிவிட்டு மீண்டும் முயலுக." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "கடிகார. திரும்ப மேல்நோ. ஸ்வைப் செய்க." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "முடிந்தது! கியரில் நுழையவும்!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "மொபைல் நெட்வொர்க்குகள்" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "அழைப்புகளை கியருக்குப் பகிர்க" + +msgid "IDS_ST_BUTTON_START" +msgstr "துவங்." + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "வெளியே" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "வரவேற்கிறோம்! கியரை ப.படுத்துவது எப்படி என அறிய பொத்தான் டேப் செய்க." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "செயல்நீக்குமாறு கோரப்பட்டுள்ளது" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "செயல்படுத்துமாறு கோரப்பட்டுள்ளது" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "கடிகாரத்தில் சுட்டிகாட்டிச் சின்னங்களைக் காண, மேல் முனையிலிருந்து கீழ்நோக்கி ஸ்வைப் செய்யவும்." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "கடிகாரத்தில் பயன்பாடுகளைக் காண, அடிப்பகுதியின் முனையிலிருந்து மேல்நோக்கி ஸ்வைப் செய்யவும்." + +msgid "IDS_ST_BUTTON_OK" +msgstr "சரி" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "திரும்பிச் செல்ல, மேல் முனையிலிருந்து கீழ்நோக்கி ஸ்வைப் செய்யவும்." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "பயன்பாடுகளை நிறுவ அல்லது நிறுவல்நீக்க, உங்கள் மொபைல் சாதனத்தில் சாம்சங் கியர் பயன்பாட்டைப் பயன்படுத்தவும்." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "இது முகப்புத் திரையின் முக்கிய கட்டமைப்பாகும்." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "காலி" diff --git a/home/res/po/te.po b/home/res/po/te.po new file mode 100755 index 0000000..fadf7f4 --- /dev/null +++ b/home/res/po/te.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "ఆప్స్" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "తర్వాత" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "విడ్జెట్" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "పునరావృతం చేయవద్దు." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "అన్నింటినీ తొలగించు" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "తీసివేయడం సాధ్యం కాదు." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "దీన్ని తరలించేందుకు ఒక విడ్జెట్‌ను నొక్కి పట్టి ఉంచండి." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "హోమ్ స్క్రీన్ మారింది." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "లోడ్ అవుతోంది..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "డేటాను లోడ్ చేయడం సాధ్యం కాదు. మళ్లీ ప్రయత్నించడానికి ట్యాప్ చేయండి." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "అప్లికేషన్‌ని జోడించడం సాధ్యం కాదు. హోమ్ స్క్రీన్‌లో గది లేదు." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "విడ్జెట్‌ను జోడించడం సాధ్యం కాదు. హోమ్ స్క్రీన్‌లో గది లేదు." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "అప్లికేషన్ ఇప్పటికే ఉంది." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "విడ్జెట్ ఇప్పటికే ఉంది." + +msgid "IDS_COM_POP_CANCEL" +msgstr "రద్దు" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "హోమ్ స్క్రీన్ లేఅవుట్ మార్చబడింది." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ఈ అప్లికేషన్ హోమ్ స్క్రీన్ నుండి తీసివేయబడుతుంది. ఇది పరికరం నుండి తొలగించబడదు." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "అప్లికేషన్‌ని తీసివేయి" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "విడ్జెట్‌ని తీసివేయి" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "ఈ విడ్జెట్ హోమ్ స్క్రీన్ నుండి తీసివేయబడుతుంది. ఇది పరికరం నుండి తొలగించబడదు." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "అసాధారణ శక్తి ఆదా మోడ్" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "విడ్జెట్‌ను జోడించడం సాధ్యం కాదు. విడ్జెట్‌ల గరిష్ట సంఖ్యను (%d) చేరుకున్నారు." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "అప్లికేషన్‌ని జోడించడం సాధ్యం కాదు. అప్లికేషన్‌ల గరిష్ట సంఖ్యను (%d) చేరుకున్నారు." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "పేజీని జోడించడం సాధ్యం కాదు." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "సాధారణ మోడ్" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "శక్తి ఆదా మోడ్ నిలిపివేయబడింది." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "శక్తి ఆదా మోడ్ ప్రారంభించబడింది." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "ఇటీవలి అప్లికేషన్‌లు" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "అప్లికేషన్‌ని జోడించడం సాధ్యం కాదు. అప్లికేషన్‌ల గరిష్ట సంఖ్యను (%s) చేరుకున్నారు." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "విడ్జెట్‌ను జోడించడం సాధ్యం కాదు. విడ్జెట్‌ల గరిష్ట సంఖ్యను (%s) చేరుకున్నారు." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "పేజీని తీసివేయి" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "ఈ పేజీ మరియు దీని కంటెంట్ తీసివేయబడుతుంది." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "తీసివేయి" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "నెట్వర్క్ సేవలను ప్రాప్తి చేసేందుకు SIM కార్డును చొప్పించండి." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "నిరోధిత మోడ్" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "ఆన్" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "ఆఫ్" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "ఐటెమ్ తరలించబడింది." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "జోడించడానికి రెండుసార్లు నొక్కండి." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "విడ్జెట్‌ను జోడించండి" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "ఐటెమ్ జోడించబడింది." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "ఐటెమ్ తరలించబడింది." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "%2$d లో %1$d పేజీ" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "నోటిఫికేషన్ బోర్డ్ అంశాల క్రమాన్ని మార్చలేరు." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "ఇది %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "ఇప్పుడు %d:%d AM." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "ఇప్పుడు %d:%d PM." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d కొత్త ఐటెమ్‌లు" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "విడ్జెట్‌ల గరిష్ట సంఖ్యను (%s) చేరుకున్నారు. కొన్ని విడ్జెట్‌లను తొలగించి, మళ్లీ ప్రయత్నించండి." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "గడియారానికి తిరిగి వెళ్లడానికి కుడివైపుకి స్వైప్ చేయండి." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "విడ్జెట్‌లను వీక్షించడానికి ఎడమవైపుకి స్వైప్ చేయండి." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "గడియారానికి తిరిగి వెళ్లడానికి ఎడమవైపుకి స్వైప్ చేయండి." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "నోటిఫికేషన్‌లను వీక్షించడానికి కుడివైపుకి స్వైప్ చేయండి." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s వ్యవస్థాపనను తొలగించబడాలా?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "విడ్జెట్‌ల గరిష్ట సంఖ్యను (%s) చేరుకున్నారు." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "అప్లికేషన్ ట్రేని తెరవడానికి డబుల్ ట్యాప్ చేయండి." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 కొత్త ఐటెమ్" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "ప్రారంభించడానికి రెండుసార్లు ట్యాప్ చేయండి." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "గడియారం" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "పరికర ఉష్ణోగ్రత చాలా ఎక్కువగా ఉంది." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "మొబైల్ పరికరాన్ని ఉపయోగించి గేర్ అప్లికేషన్‌లను డౌన్‌లోడ్ చేయండి." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "నిద్రపోతున్నప్పుడు" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "మరిన్ని అప్లికేషన్‌లను పొందండి" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "శక్తి ఆదా + ప్రారంభించబడినప్పుడు చర్య అందుబాటులో ఉండదు." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "స్క్రీన్ రీడర్ ప్రారంభించబడినప్పుడు %s అందుబాటులో ఉండదు." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "అంతరాయం కలిగించవద్దు" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "వైమానిక మోడ్ ప్రారంభించబడినప్పుడు మొబైల్ డేటాని ఆన్ చేయడం సాధ్యం కాదు. వైమానిక మోడ్‌ను నిలిపివేసి, మళ్లీ ప్రయత్నించండి." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "గడియారానికి తిరిగి వెళ్లడానికి ఎగువకు స్వైప్ చేయండి." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "అంతే! గేర్‌లో ప్రవేశించండి!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "మొబైల్ నెట్‌వర్క్‌లు" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "గేర్‌కు కాల్‌లను ఫార్వార్డ్ చేయి" + +msgid "IDS_ST_BUTTON_START" +msgstr "మొదలు" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "నిష్క్రమణ" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "స్వాగతం! మీ గేర్‌ను ఎలా ఉపయోగించాలో తెలుసుకోవడానికి దిగువ బటన్‌ను ట్యాప్ చేయండి." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "నిలిపివేయడానికి అభ్యర్థించబడింది" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "ప్రారంభించడానికి అభ్యర్థించబడింది" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "గడియారంలో సూచిక చిహ్నాలను చూడటానికి ఎగువ అంచును దిగువకు స్వైప్ చేయండి." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "గడియారంలో అప్లికేషన్‌లను వీక్షించడానికి దిగువ అంచును ఎగువకు స్వైప్ చేయండి." + +msgid "IDS_ST_BUTTON_OK" +msgstr "సరే" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "వెనుకకు వెళ్లడానికి ఎగువ అంచును దిగువకు స్వైప్ చేయండి." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "అప్లికేషన్‌లను ఇన్‌స్టాల్ లేదా అన్ఇన్‌స్టాల్ చేయడానికి, మీ మొబైల్ పరికరంలో Samsung Gear అప్లికేషన్‌ను ఉపయోగించండి." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "ఇది హోమ్ స్క్రీన్ యొక్క ప్రధాన నిర్మాణం." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ఖాళీ" diff --git a/home/res/po/tg_TJ.po b/home/res/po/tg_TJ.po new file mode 100755 index 0000000..6568ebf --- /dev/null +++ b/home/res/po/tg_TJ.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Барномаҳо" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Навбатӣ" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Виҷет" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Такрор нак." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Несткунии ҳама" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Хориҷ карда наметавонад." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Барои ҷумбондани видҷети дилхоҳ, онро зарба зада нигоҳ доред." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Экрани асосӣ тағйир ёфт." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Боркунӣ..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Unable to load data. Tap to retry." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Илова кардани барнома ғайриимкон аст. Дар экрани асосӣ ҷои холӣ намондааст." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Илова кардани видҷеӣ ғайриимкон аст. Дар экрани асосӣ ҷои холӣ намондааст." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Барнома аллакай вуҷуд дорад." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Видҷет аллакай вуҷуд дорад." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Бекор кардан" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Тарҳбандии экрани асосӣ тағйир ёфт." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ин барнома аз экрани асосии шумо нест карда мешавад. Он аз дастгоҳ нест карда намешавад." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Нест кардани барнома" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Нест кардани видҷет" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ин видҷет аз экрани асосии шумо нест карда мешавад. Он аз дастгоҳ нест карда намешавад." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Реҷаи сарфаи мукаммали қувва" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Илова кардани видҷет ғайриимкон аст. Шумораи зиёдтарини видҷетҳо (%d) истифода шуд." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Илова кардани барнома ғайриимкон аст. Шумораи зиёдтарини барномаҳо (%d) афзуда шуд." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Илова кардани саҳифа ғайриимкон аст." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Реҷаи одатӣ" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Реҷаи сарфаи қувва ғайрифаъол карда шуд." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Реҷаи сарфаи қувва фаъол карда шуд." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Барномаҳои охирин" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Илова кардани барнома ғайриимкон аст. Шумораи зиёдтарини барномаҳои иҷозатшуда (%s) илова карда шудаанд." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Илова кардани видҷет ғайриимкон аст. Шумораи зиёдтарини видҷетҳо (%s) истифода шуд." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Нест кардани саҳифа" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Ин саҳифа ва таркиби он нест карда мешавад." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Нест кардан" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Барои дастрас кардани хизматрасониҳои шабака SIM-кортро гузоред." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Реҷаи блоконӣ" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Фаъол" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Ғайрифаъол" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Чиз кӯчонида шуд." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Барои илова кардан, ду маротиба зарба занед." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Илова кардани видҷет" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Чиз илова карда шуд." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Чиз нест карда шуд." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Page %1$d of %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Ҷузъҳои лавҳаи огоҳиро аз нав мураттаб карда наметавонад." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Соат %1$d:%2$d" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Соат %d:%d пеш аз нисфирӯзӣ" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Соат %d:%d баъд аз нисфирӯзӣ" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d ҷузъҳои нав" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Шумораи зиёдтарини видҷетҳо (%s) истифода шуд. Якчанд видҷетро нест карда, кӯшишро такрор кунед." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Барои бозгаштан ба соат ба рост молед." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Барои дидани видҷетҳо ба чап молед." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Барои бозгаштан ба соат ба чап молед." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Барои дидани огоҳиҳо ба рост молед." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Насби %s-ро қатъ мекунед?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Ба шумораи максималии видҷетҳо (%s) расидед." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Барои кушодани лавҳаи барномаҳо ду бор зарба занед." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 объекти нав" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Барои фаъол кардан ду бор зарба занед." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Соат" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Ҳарорати дастгоҳ хеле баланд аст." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Бо истифодаи дастгоҳи мобилӣ барномаҳои Gear-ро боргирӣ кунед." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Ҳангоми хоб" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Барномаҳои бештар" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Амал дастнорас аст, вақте ки сарфаи барқи + фаъол аст." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s ҳангоми фаъол будани Хонандаи экран дастнорас мешавад." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Ташвиш надиҳед" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Вақти фаъ. б реҷаи Парвоз Ит-ти моб-ро ист. б. намет. Реҷаи Парвозро ғайриф, аз нав кӯш. к." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Барои бозгаштан ба соат ба боло молед." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Тамом! Gear пурра аз шумост!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Шабакаҳои мобилӣ" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Бозф. знг ба Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Оғоз" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Хуруҷ" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Марҳабо! Барои тафсилоти Gear, тугмаи зеринро зарба занед." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Барои ғайрифаъолсозӣ дархост шуд" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Барои фаъолсозӣ дархост шуд" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Барои д-ни ни-ҳо дар соат, канори болоиро ба поён молед." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Барои д-ни брнмҳо дар соат, канор поёниро ба боло молед." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Барои ба қафо рафтан, канори болоиро ба поён молед." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Барои насб кардан ё қатъ кардани насби барномаҳо, барномаи Samsung Gear-ро дар дастгоҳи мобилии худ истифода баред." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Ин сохтори асосии экрани асосӣ аст." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Холӣ" diff --git a/home/res/po/th.po b/home/res/po/th.po new file mode 100755 index 0000000..96f926a --- /dev/null +++ b/home/res/po/th.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "แอพ" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "ถัด​ไป" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "อย่าแสดงซ้ำ" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "ลบทั้งหมด" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "ลบ​ไม่​ได้" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "สัมผัส​ Widget ​ค้าง​ไว้​เพื่อ​เลื่อน" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "เปลี่ยนหน้าจอหลักแล้ว" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "โหลด..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "ไม่สามารถโหลดข้อมูลได้ สัมผัสเพื่อลองอีกครั้ง" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ไม่สามารถเพิ่มแอพพลิเคชั่นได้ ไม่มีที่ว่างเพิ่มในหน้าจอหลัก" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ไม่สามารถเพิ่มวิดเจ็ท ไม่มีที่ว่างเพิ่มในหน้าจอหลัก" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "มีแอพพลิเคชั่นอยู่แล้ว" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "มีวิดเจ็ทอยู่แล้ว" + +msgid "IDS_COM_POP_CANCEL" +msgstr "ยกเลิก" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "เปลี่ยนรูปแบบหน้าจอหลักแล้ว" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "แอพพลิเคชั่นนี้ จะถูกลบออกจากหน้าจอหลัก แต่จะไม่ถูกลบออกจากอุปกรณ์" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "ลบแอพพลิเคชั่นออก" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "ลบวิดเจ็ท" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "วิดเจ็ทนี้จะถูกลบออกจากหน้าจอหลัก แต่จะไม่ถูกลบออกจากอุปกรณ์" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "โหมดประหยัดพลังงานสูงสุด" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ไม่สามารถเพิ่ม Widget ถึงจำนวนวิดเจ็ทสูงสุด (%d) แล้ว" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "ไม่สามารถเพิ่มแอพพลิเคชั่นได้ ถึงจำนวนแอพพลิเคชั่นสูงสุด (%d) แล้ว" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "ไม่สามารถเพิ่มหน้าได้" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "โหมด​ปกติ" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "ปิดใช้งานโหมดประหยัดพลังงานแล้ว" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "เปิดใช้งานโหมดประหยัดพลังงานแล้ว" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "แอพล่าสุด" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "ไม่สามารถเพิ่มแอพพลิเคชั่นได้ ถึงจำนวนสูงสุดของแอพพลิเคชั่น (%s) แล้ว" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "ไม่สามารถเพิ่มวิดเจ็ท ถึงจำนวนสูงสุดของวิดเจ็ท (%s) แล้ว" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "ลบหน้า" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "หน้านี้และคอนเทนท์ในหน้าจะถูกลบ" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "ลบ" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "ใส่ SIM การ์ด เพื่อใช้งาน\nเครือข่าย" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "โหมดการห้าม" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "เปิด" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "ปิด" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "ย้ายรายการแล้ว" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "สัมผัสสองครั้ง เพื่อเพิ่ม" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "เพิ่ม Widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "เพิ่มรายการแล้ว" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "ย้ายรายการแล้ว" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "หน้า %1$d จาก %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "ไม่สามารถเรียงลำดับรายการบนกระดานการแจ้งเตือนใหม่" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "ขณะนี้เวลา %1$d:%2$d" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "เวลา %d:%d ​AM" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "เวลา %d:%d ​PM" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d ​รายการ​ใหม่" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "ถึงจำนวนสูงสุด ของวิดเจ็ท (%s) แล้ว ลบบางวิดเจ็ท และลองอีกครั้ง" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ปัดขวาเพื่อกลับไปที่นาฬิกา" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "ปัดซ้ายเพื่อดูวิดเจ็ท" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "ปัดซ้ายเพื่อกลับไปที่นาฬิกา" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "ปัดขวาเพื่อดูการแจ้งเตือน" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "ถอนการติดตั้ง %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ถึงจำนวนวิดเจ็ทสูงสุด (%s) แล้ว" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "สัมผัสสองครั้งเพื่อเปิดถาดแอพ" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 รายการใหม่" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "สัมผัสสองครั้งเพื่อเปิดใช้งาน" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "นาฬิกา" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "อุณหภูมิอุปกรณ์สูงเกินไป" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "ดาวน์โหลดแอพพลิเคชั่น Gear โดยใช้อุปกรณ์มือถือ" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "ขณะนอนหลับ" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "โหลดแอพพลิเคชั่นเพิ่ม" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "การทำงานไม่พร้อมใช้งาน ขณะเปิดใช้งาน การประหยัดพลังงาน + อยู่" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s ไม่พร้อมใช้งาน ขณะเปิดใช้งาน ตัวอ่านหน้าจอ อยู่" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "ห้ามรบกวน" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "ไม่สามารถเปิดใช้ข้อมูลมือถือได้ ในขณะที่เปิดโหมดการบินอยู่ ปิดใช้งานโหมดการบิน แล้วลองอีกครั้ง" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "ปัดขึ้นด้านบน เพื่อกลับไปยังนาฬิกา" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "นั่นล่ะ! สนุกไปกับ Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "เครือ​ข่าย​มือ​ถือ" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "โอนสายไปยัง Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "เริ่ม" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "ปิด" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "ยินดีต้อนรับ! สัมผัสปุ่มด้านล่าง เพื่อเรียนรู้วิธีใช้งาน Gear" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "ร้องขอให้ปิดการใช้งาน" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "ร้องขอให้เปิดการใช้งาน" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "ปัดขอบบนลงเพื่อดูไอคอนตัวบ่งชี้บนนาฬิกา" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "ปัดขอบล่างขึ้นเพื่อดูแอพบนนาฬิกา" + +msgid "IDS_ST_BUTTON_OK" +msgstr "ตกลง" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "ปัดขอบบนลงเพื่อย้อนกลับ" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "ใช้แอพพลิเคชั่น Samsung Gear บนอุปกรณ์มือถือของคุณ เพื่อติดตั้ง หรือถอนการติดตั้งแอพพลิเคชั่น" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "นี่คือโครงสร้างหลักของหน้าจอหลัก" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "ว่าง" diff --git a/home/res/po/tk_TM.po b/home/res/po/tk_TM.po new file mode 100755 index 0000000..a9e57b2 --- /dev/null +++ b/home/res/po/tk_TM.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Goll" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Indiki" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widjet" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Gaýtalamaň." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Baryny pozuň" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Aýryp bolmaýar." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Widjedi süýşürmek üçin ona basyp sakla." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Öý ekrany üýtgedi." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Ýükleýär..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Unable to load data. Tap to retry." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Amaly programmany goşup bolanok. Baş ekranda başga ýer ýok." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Kömekçi programmany goşup bolanok. Baş ekranda başga ýer ýok." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Amaly programma öňden bar." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Kömekçi programma öňden bar." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Ýatyr" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Baş ekran ýerleşişi üýtgedi." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Bu amaly programma baş ekrandan aýrylar. Ol enjamdan pozulmaz." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Programmany aýyr" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Kömekçi prog. aýyr" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Bu kömekçi programma baş ekrandan aýrylar. Ol enjamdan pozulmaz." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ýokary derejede güýç tygşytlama tertibi" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Widjet goşmak başardanok. Widjetleriň aňrybaş sanyna ýetildi (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Gollanmany açyp bolanok. Golanmalar maksimum sanyna (%d) ýetdi." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Sahypany goşup bolanok." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Adaty režim" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Güýç tygşytlama tertibi işlemeýän edildi." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Güýç tygşytlaýyş režimi işjeňleşdirildi." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Soňky goşundylar" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Gollanmany açyp bolanok. Gollanmalaryň iň köp sanyna (%s) ýetildi." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Widjet goşup bolanok. Widjetleriň iň ýokary sanyna (%s) ýetildi." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Sahypany aýyryň" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Bu sahypa we onuň içindäkiler aýrylar." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Aýyr" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Hyzmatlar toruna girmek üçin SIM karta dakyň" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blokirleme tertibi" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Açyk" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Öçük" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Madda geçirildi." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Goşmak üçin barmagyňyzy iki gezek degriň." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Widjet goşuň" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Madda goşuldy." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Madda aýyryldy." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Page %1$d of %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Habarnama tagtasyndaky elementleri saýhallap bolmaýar." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Bu %1$d:%2$d" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Bu %d:%d günortana çenli" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Bu %d:%d günortandan soň" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d täze zat" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Wijetleriň maksimum sanyna (%s) ýetildi. Käbir wijetleri pozuň we gaýtadan synanyşyň." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Yza sagada gitmek üçin saga syryň." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Widžetleri görmek üçin çepe syryň." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Yza sagada gitmek üçin çepe syryň." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Widžetleri görmek üçin saga syryň." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s aýyrmalymy?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Maksimum wijet sanyna (%s) ýetildi." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Goýma tekjesini açmak üçin iki gezek basyň." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 täze madda" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Işletmek üçin iki gezek basyň." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Sagat" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Enjamyň gyzgynlygy aşa ýokary." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Mobil enjamy ulanmak bilen Gear goýmalaryny göçürip alyň." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Ukudaka" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Goşmaça goýma alyň" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Güýç tygşytlaýjy + işledilen mahaly hereket elýeterli däl." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "Ekran okaýjy açykka %s elýeterli däl." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Bimaza etmäň" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Uçuş tertibinde, mobil maglumaty açyp bolmaýar. Uçuş tertibini ýapyp, täzeden synanyşyň." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Sagada dolanmak üçin, ýokaryk syryň." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Ine boldy! Gear-y ulanmaga başlaň!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobil ulgamlar" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Jaňl Gear-e gönk." + +msgid "IDS_ST_BUTTON_START" +msgstr "Başla" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Çyk" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Hoş geldiňiz! Gear-i ulanmagy öwrenmek üçin, şu düwmä basyň." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Ýapmak soraldy" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Işletmek soraldy" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Sagatda görkeziji görm. üçin, ýokarky gyrany aşak syryň." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Sagatda goýmalary görm. üçin aşaky gyrany ýokaryk syryň." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Dolanmak üçin ýokarky gyrany aşaklygyna syryň." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Goýmalary gurnamak ýa-da gurnawdan aýyrmak üçin, mobil enjamyňyzda Samsung Gear goýmasyny ulanyň." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Bu öý ekranyň esasy gurluşy." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Boş" diff --git a/home/res/po/tl.po b/home/res/po/tl.po new file mode 100755 index 0000000..bb1d81d --- /dev/null +++ b/home/res/po/tl.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Apps" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Susunod" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Wag ulitin" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Delete lahat" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Hindi maalis." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Tap and hold a widget to move it." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Pinalitan ang home screen." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Naglo-load..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Hindi ma-load ang data. I-tap upang subukang muli." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Hindi maidagdag ang application. Wala nang espasyo sa home screen." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Hindi maidagdag ang widget. Wala nang espasyo sa home screen." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Umiiral na ang application." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Umiiral na ang widget." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Kanselahin" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Binago ang layout ng home screen." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Aalisin ang application na ito sa home screen. Hindi ito ide-delete sa device." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Alisin application" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Alisin ang widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Aalisin ang widget na ito sa home screen. Hindi ito ide-delete sa device." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultra power saving mode" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Hindi makapagdagdag ng widget. Naabot na ang maximum na bilang ng mga widget (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Hindi makapagdagdag ng application. Naabot na ang maximum na bilang ng mga application (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Hindi maidagdag ang pahina." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normal mode" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Hindi pinagana ang Power saving mode." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Pinagana ang Power saving mode." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Recent apps" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Hindi makapagdagdag ng application. Naabot na ang maximum na bilang ng mga application (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Hindi makapagdagdag ng widget. Naabot na ang maximum na bilang ng mga widget (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Alisin ang pahina" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Aalisin ang pahinang ito at ang content nito." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Alisin" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Magpasok ng SIM card upang ma-access ang mga serbisyo sa network." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Blocking mode" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Naka-on" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Naka-off" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Inilipat ang item." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "I-tap nang dalawang beses upang magdagdag." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Magdagdag ng widget." + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Naidagdag na ang item." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Inalis na ang item." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Pahina %1$d ng %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Hindi maisaayos ang mga item sa notification board." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Ito ay %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Alas-%d:%d AM na." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Alas-%d:%d PM na." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d (na) bagong item" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Naabot na ang maximum na bilang ng mga widget (%s). Magtanggal ng ilang widget at subukang muli." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Mag-swipe pakanan bumalik sa orasan." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Mag-swipe pakaliwa tumingin ng widget." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Mag-swipe pakaliwa bumalik sa orasan." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Mag-swipe pakanan tingin notification." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "I-uninstall ang %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Naabot na ang maximum na bilang ng widget (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "I-tap nang dalawang beses para buksan ang app tray." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 bagong item" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "I-tap nang dalawang beses upang paganahin." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Orasan" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Masyadong mainit ang device." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Mag-download ng mga Gear application gamit ang mobile device." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Habang natutulog" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Kumuha pa ng mga application" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Hindi available ang aksyon habang pinapagana ang Power saving +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s ay hindi available habang pinagana ang screen reader." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Huwag istorbohin" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Hindi ma-on ang Mobile data habang pinagana ang Flight mode. Huwag paganahin ang Flight mode at subukang muli." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "I-swipe paitaas para bumalik sa orasan." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Yan iyon! Pumunta sa Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobile network" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "I-fwd ang mga tawag sa Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Simulan" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Lumabas" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Welcome! I-tap ang button sa ibaba upang malaman kung paano gamitin ang iyong Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Hiniling na huwag paganahin" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Hiniling na paganahin" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "I-swipe pababa ang itaas para makita ang mga icon na tagapaghiwatig sa orasan." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "I-swipe pataas ang ilalim na gilid para tingnan ang mga app sa orasan." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "I-swipe pababa ang itaas na gilid para bumalik." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Para mag-install o mag-uninstall ng mga application, gamitin ang application na Samsung Gear sa iyong mobile device." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Ito ang pangunahing istraktura ng home screen." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Walang laman" diff --git a/home/res/po/tr_TR.po b/home/res/po/tr_TR.po new file mode 100755 index 0000000..942c1e4 --- /dev/null +++ b/home/res/po/tr_TR.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Uygulamalar" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "İleri" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Tekrarlama" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Tümünü sil" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Kaldırılamıyor." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Bir widget'ı taşımak için dokunun ve bırakmayın." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Ana ekran değişti." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Yükleniyor..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Veri yüklenemiyor. Tekrar denemek için dokunun." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Uygulama eklenemiyor. Ana sayfa ekranında yer yok." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Widget eklenemiyor. Ana sayfa ekranında yer yok." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Uygulama zaten mevcut." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget zaten mevcut." + +msgid "IDS_COM_POP_CANCEL" +msgstr "İptal" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Ana ekran düzeni değiştirildi." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Bu uygulama ana ekrandan kaldırılacak. Uygulama cihazdan silinmeyecektir." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Uygulamayı kaldır" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Widget'ı kaldır" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Bu widget ana ekrandan kaldırılacak. Widget cihazdan silinmeyecektir." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultra güç tasarrufu modu" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Widget eklenemiyor. Maksimum widget sayısına (%d) ulaşıldı." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Uygulama eklenemiyor. Maksimum uygulama sayısına (%d) ulaşıldı." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Sayfa eklenemiyor." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normal mod" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Güç tasarrufu modu devre dışı." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Güç tasarrufu modu etkin." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Son uygulmlr" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Uygulama eklenemiyor. Maksimum uygulama sayısına (%s) ulaşıldı." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Widget eklenemiyor. Maksimum widget sayısına (%s) ulaşıldı." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Sayfayı kaldır" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Bu sayfa ve içeriği kaldırılacak." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Kaldır" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Şebeke servislerine erişmek için SIM kartını takın." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Engelleme modu" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Açık" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Kapalı" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Öğe taşındı." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Eklemek için çift dokunun." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Widget ekle" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Öğe eklendi." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Öğe kaldırıldı." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Sayfa %1$d / %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Bildirim panosu öğeleri yeniden sıralanamaz." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Saat %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Saat öğleden önce %d:%d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Saat öğleden sonra %d:%d." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d yeni öğe" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Maksimum widget sayısına (%s) ulaşıldı. Bazı widget'ları silip tekrar deneyin." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Saate dönmek için sağa kaydırın." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Widget'ları görmek için sola kaydırın." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Saate dönmek için sola kaydırın." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Bildirimleri görmek için sağa kaydırn." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s kaldırılsın mı?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Maksimum widget sayısına (%s) ulaşıldı." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Uygulama tepsisini açmak için çift dokunun." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 yeni öğe" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Etkinleştirmek için çift dokunun." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Saat" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Cihaz sıcaklığı çok yüksek" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Mobil cihazı kullanarak Gear uygulamalarını indirin." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Uyurken" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Daha fazla uygulama al" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Güç tasarrufu + etkinken eylem kullanılamaz." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s Ekran okuyucu etkinken kullanılamaz." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Rahatsız etmeyin" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Uçuş modu etkinken Mobil verisi açılamaz. Uçuş modunu devre dışı bırakıp tekrar deneyin." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Saate dönmek için yukarı kaydırın." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "İşte bu! Kendinizi Gear'a kaptırın!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobil ağlar" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Ara. Gear'a ynldr" + +msgid "IDS_ST_BUTTON_START" +msgstr "Başlat" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Çıkış" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Hoş geldnz! Gear'ınzı kullanmyı öğrnmk içn aşğdki tuşa doknn." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Devre dışı bırakılması istendi" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Etkinleştirilmesi istendi" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Göstrge simglrni saatte grmk içn üst kenarı aşağı kydrn." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Uygulamlrı saatte görntlmk için alt kenarı yukarı kydrn." + +msgid "IDS_ST_BUTTON_OK" +msgstr "Tamam" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Geri dönmek için üst kenarı aşağı kaydırın." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Uygulamaları yüklemek veya kaldırmak için mobil cihazınızda Samsung Gear uygulamasını kullanın." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Bu, ana ekranın temel yapısıdır." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Boş" diff --git a/home/res/po/uk.po b/home/res/po/uk.po new file mode 100755 index 0000000..88f9fd9 --- /dev/null +++ b/home/res/po/uk.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Програми" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Далі" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Віджет" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Не повтор." + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Видалити всі" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Неможливо видалити." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Натисніть і утримуйте віджет, щоб перемістити його." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Головний екран змінено." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Завантаження..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Неможливо завантажити дані. Натисніть, щоб спробувати ще раз" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Неможливо додати програму. На цьому екрані оформлення більше немає місця." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Неможливо додати віджет. На цьому екрані оформлення більше немає місця." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Така програма вже існує." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Такий віджет уже існує." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Скасувати" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Фон екрана оформлення змінено." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Цю програму буде видалено з екрана оформлення. Вона не видалятиметься із пристрою." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Видалити програму" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Видалити віджет" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Цей віджет буде видалено з екрана оформлення. Він не видалятиметься із пристрою." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Удоск. режим енергозб." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Неможливо додати віджет. Досягнуто максимальної кількості віджетів: %d." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Неможливо додати програму. Досягнуто максимальної кількості програм (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Неможливо додати сторінку." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Звичайний режим" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Режим енергозбереження вимкнено." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Режим енергозбереження ввімкнено." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Ост.програми" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Неможливо додати програму. Досягнуто максимальної кількості програм: %s." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Неможливо додати віджет. Досягнуто максимальної кількості віджетів: %s." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Видалити сторінку" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Цю сторінку та її вміст буде видалено." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Видалити" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Щоб отримати доступ до послуг мережі, вставте SIM-карту." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Режим блокування" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Увімкнено" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Вимкнено" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Об'єкт переміщено." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Двічі натисніть, щоб додати." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Додавання віджета" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Об’єкт додано." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Об'єкт видалено." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Сторінка %1$d з %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Не можна упорядкувати об’єкти дошки сповіщень." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Зараз %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Зараз %d:%d до полудня." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Зараз %d:%d після полудня." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "Нових об’єктів: %d" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Досягнуто максимальної кількості віджетів (%s). Видаліть деякі віджети та спробуйте ще раз." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Проведіть праворуч для повернення до годинника." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Проведіть вліво для перегляду віджетів." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Проведіть вліво для повернення до годиника." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Проведіть вправо для перегляду сповіщень." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Видалити %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Досягнуто максимальної кількості віджетів: %s." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Двічі натисніть, щоб відкрити трей програми." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 новий об’єкт" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Двічі торкніться, щоб увімкнути." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Годинник" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Температура пристрою зависока." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Завантажити програми Gear за допомогою мобільного пристрою." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Під час сну" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Отримати інші програми" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Дія недоступна в разі ввімкнення режиму енергозбереження +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s недоступно за ввімкненої програми читання з екрана." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Не турбувати" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Неможливо увімк. викор. моб. даних за увімкн. режиму без зв’язку. Вимкніть і спроб. ще раз." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Проведіть вгору, щоб відкрити годинник." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Все готово! Пристрій Gear готовий до використання!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Мобільні мережі" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Переадр. на Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Запустити" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Вихід" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Вітаємо! Торкніться кнопки нижче, щоб дізнатися про Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Зроблено запит на вимкнення" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Зроблено запит на увімкнення" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Пров. від верх.краю екр.вниз, щоб пер.знач.індик.на год." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Провед.від ниж.краю вгору, щоб перег.прогр.на годиннику." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Провед. від верх. краю екр. вниз, щоб повернутися назад." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Для встановлення та видалення програм використовуйте програму Samsung Gear на мобільному пристрої." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Основна структура головного екрана." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Пусто" diff --git a/home/res/po/update-po.sh b/home/res/po/update-po.sh new file mode 100755 index 0000000..dc707ad --- /dev/null +++ b/home/res/po/update-po.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +PACKAGE=volume +SRCROOT=../src +POTFILES=POTFILES.in + +#ALL_LINGUAS= ar bg ca cs da de_DE el_GR en en_GB en_US es_ES fi fr_FR he hi hr hu id it_IT ja_JP ko_KR lt lv ms nl_NL no pl pt_PT ro ru_RU sk sl sr sv th tr_TR uk vi zh_CN zh_HK zh_TW +ALL_LINGUAS="ar bg ca cs da de_DE el_GR en en_GB en_US es_ES fi fr_FR he hi hr hu id it_IT ja_JP ko_KR lt lv ms nl_NL no pl pt_PT ro ru_RU sk sl sr sv th tr_TR uk vi zh_CN zh_HK zh_TW" + +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 +if [ $? -ne 0 ]; then + echo "xgettext error" + exit 1 +fi + +if [ ! -f ${PACKAGE}.po ]; then + echo "No such file: ${PACKAGE}.po" + exit 1 +fi + +rm -f ${PACKAGE}.pot && mv ${PACKAGE}.po ${PACKAGE}.pot +echo "done" + +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/home/res/po/ur.po b/home/res/po/ur.po new file mode 100755 index 0000000..3d7aa1d --- /dev/null +++ b/home/res/po/ur.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "ایپلیکیشنز" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "اگلا" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "وڈجیٹ" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "نہ دہرائیں" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "سب حذف کریں" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "ہٹانے سے قاصر۔" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "اسے منتقل کرنے کے لیے کسی وجٹ کو دبائیں یا دبا کر رکھیں" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "ہوم اسکرین تبدیل ہوگئی۔" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "لوڈنگ..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "ڈیٹا لوڈ کرنے سے قاصر۔ پھرکوشش کرنے کے لئے تھپتھپائیں۔" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "اپلیکیشن شامل کرنے سے قاصر۔ ہوم اسکرین پر مزید جگہ نہیں ہے۔" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "ویجٹ لوڈ کرنے سے قاصر۔ ہوم اسکرین پر مزید جگہ نہیں ہے۔" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "اپلیکیشن پہلے سے ہی موجود ہے۔" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "ویجٹ پہلے سے ہی موجود ہے۔" + +msgid "IDS_COM_POP_CANCEL" +msgstr "منسوخ" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "ہوم اسکرین کا خاکہ تبدیل ہوگیا۔" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "یہ اپلیکیشن ہوم اسکرین سے ہٹا دیاجائے گا۔ یہ آلے سے حذف نہیں ہوگا۔" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "اپلیکیشن ہٹائیں" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "ویجٹ ہٹائیں" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "یہ ویجٹ ہوم اسکرین سے ہٹا دیاجائے گا۔ یہ آلے سے حذف نہیں ہوگا۔" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "الٹرا پاور کی بچت کرنے والی وضع" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "ویجیٹ شامل کرنے سے قاصر۔ ویجیٹس کی زیادہ سے زیادہ تعداد (%d) کو پہنچ گیا۔" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "ایپلی کیشن شامل کرنے سے قاصر۔ ایپلی کیشنز کی زیادہ سے زیادہ تعداد (%d) تک پہنچ گئے ہیں۔" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "صفحہ شامل کرنے سے قاصر۔" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "نارمل موڈ" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "پاور بچت وضع غیر فعال ہے۔" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "بچلی کی بچت کی وضع فعال ہے۔" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "حالیہ ایپلیکیشنز" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "ایپلی کیشن شامل کرنے میں ناکامی۔ زیادہ سے زیادہ ایپلی کیشنوں کی حد (%s) پہنچ گئی۔" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "ویجٹ شامل کرنے میں ناکامی۔ زیادہ سے زیادہ ویجٹ کی حد (%s) پہنچ گئی۔" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "صفحہ ہٹائیں" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "یہ صفحہ اور اس کا مواد ہٹا دیا جائے گا۔" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "ہٹائیں" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "نیٹورک سروس استعمال کے لیے SIM کارڈ ڈالیں" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "مسدود کرنے والی وضع" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "آن" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "آف" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "شے منتقل کی گئی۔" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "شامل کرنے کے لیےدوہری تھپکی دیں۔" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "وجیٹ اضافہ کریں" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "شے اضافہ کی گئی۔" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "شے ہٹادی گئی۔" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "صفحہ %1$d از %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "اطلاعاتی بورڈ اشیاء کو دوبارہ ترتیب نہیں دے سکتا۔" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "یہ ہے %1$d:%2$d" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "اب وقت ہوا ہے %d:%d AM" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "اب وقت ہوا ہے %d:%d PM" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d نئی آئٹم" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "وجیٹس کی زیادہ سے زیادہ تعداد (%s) کو پہنچ گیا ہے۔ کچھ وجیٹس حذف کریں اور دوبارہ کوشش کریں۔" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "گھڑی پر واپس جانے کے لیے دائیں سوائپ کریں۔" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "ویجٹس دیکھنے کیلئے بائیں سوائپ کریں۔" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "گھڑی پر واپس جانے کے لیے بائیں سوائپ کریں۔" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "اطلاعات دیکھنے کے لیے دائیں سوائپ کریں۔" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s نا تنصیب کریں؟" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "وجیٹس کی زیادہ سے زیادہ تعداد (%s) کو پہنچ گیا۔" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "ایپ ٹرے کھولنے کیلئے دو بار تھپتھپائیں۔" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1نئی شے" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "اہل کرنے کیلئے دو بار تھپتھپائیں۔" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "گھڑی" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "آلہ کا درجہ حرارت بہت زیادہ ہے" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "موبائل آلے کا استعمال کرتے ہوئے Gear ایپلیکیشن ڈاؤن لوڈ کریں۔" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "سوتے وقت" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "مزید ایپلیکیشن حاصل کریں" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "جب پاور بچت + اہل ہو تو یہ عمل دستیاب نہیں ہے۔" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s اسکرین ریڈر اہل ہونے کے دوران دستیاب نہیں ہے۔" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "پریشان نہ کریں" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "فلائٹ موڈ اہل ہونے کی صورت میں موبائل ڈیٹا چالو کرنے سے قاصر۔ فلائٹ موڈ نااہل کریں اور دوبارہ کوشش کریں۔" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "گھڑی پر واپس جانے کے لیے اوپر کی جانب سوائپ کریں۔" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "بالکل درست! Gear میں داخل ہوں!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "موبائل نیٹ ورکس" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "گیئر کو کالز فارورڈ کریں" + +msgid "IDS_ST_BUTTON_START" +msgstr "شروع" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "نکلنا" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "خوش آمدید! اپنا Gear استعمال کرنے کا طریقہ جاننے کے لیے ذیل کے بٹن پر تھپکی دیں۔" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "نااہل کرنے کی درخواست کی گئی" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "اہل بنانے کے لئے درخواست کی گئی" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "گھڑی پر انڈیکیٹر آئیکنز دیکھنے کے لیے اوپری کنارے کو نیچے کی جانب سوائپ کریں۔" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "گھڑی پر ایپس دیکھنے کے لیے نچلے سرے کو اوپر سوائپ کریں۔" + +msgid "IDS_ST_BUTTON_OK" +msgstr "ٹھیک ہے" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "واپس جانے کے لیے اوپری کنارے کو نیچے جانب سوائپ کریں۔" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "ایپلیکیشنز کی تنصیب یا نا تنصیب کرنے کے لیے، اپنے آلہ پر Samsung Gear ایپلیکیشن کا استعمال کریں۔" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "یہ ہوم اسکرین کی مرکزی بناوٹ ہے۔" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "خالی" diff --git a/home/res/po/uz.po b/home/res/po/uz.po new file mode 100755 index 0000000..97da246 --- /dev/null +++ b/home/res/po/uz.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Ilovalar" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Keyingi" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Vidjet" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Takrorlama" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Barini yo‘q/q" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Olib tashlab bo‘lmaydi." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Vidjetni ko‘chirish uchun uni bosib turing." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Asosiy ekran o‘zgartirildi." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Yuklanmoqda..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Ma’lumotni yuklab bo‘lmaydi. Qayta urinib ko‘rish uchun cherting" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Ilovani qo‘shib bo‘lmaydi. Asosiy ekranda boshqa joy yo‘q." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Vidjetni qo‘shib bo‘lmaydi. Asosiy ekranda boshqa joy yo‘q." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Ilova avvaldan mavjud." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Vidjet oldindan mavjud." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Bekor qilish" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Asosiy ekran tuzilishi o‘zgardi." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ushbu ilova asosiy ekrandan olib tashlanadi. U qurilmadan yo‘q qilinmaydi." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Ilovani olib tashla" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Vidjetni olib tashla" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Ushbu vidjet asosiy ekrandan olib tashlanadi. U qurilmadan yo‘q qilinmaydi." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Ultra quv/tejash rejimi" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Vidjetni qo‘shib bo‘lmaydi. Vidjetlar soni maksimal miqdorga (%d) yetdi." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Ilovani qo‘shib bo‘lmaydi. Ilovalar soni ruxsat etilgan maksimal miqdorga (%d) yetdi." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Sahifa qo‘shib bo‘lmaydi." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Normal rejim" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Quvvat tejash rejimi o‘chirildi." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Quvvat tejash rejimi yoqildi." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Oxirgi ilova" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Ilovani qo‘shib bo‘lmaydi. Ilovalar soni maksimal miqdorga (%s) yetdi." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Vidjetni qo‘shib bo‘lmaydi. Vidjetlar soni maksimal miqdorga (%s) yetdi." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Sahifani olib tashla" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Ushbu sahifa va uning tarkibi olib tashlanadi." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Ol/tashla" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Tarmoq xizmatlariga kirish uchun SIM-karta kiriting." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Bloklash rejimi" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Yoq." + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "O‘ch." + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Element ko‘chirildi." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Qo‘shish uchun ikki marta teging." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Vidjet qo‘shish" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Element qo‘shildi." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Element olib tashlandi." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Sahifa %1$d/%2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Bildirishnoma taxtasi elementlari tartibini o‘zgartirib bo‘lmaydi." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "U %1$d:%2$d" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Bu %d:%d Tushdan avvalgi." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Bu %d:%d Tushdan so‘ng." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d yangi element" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Vidjetlar soni maks. miqdorga (%s) yetdi. Ba’zi vidjetlarni yo‘q qiling va qayta urinib ko‘ring." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Soatga qaytish uchun o‘ngga suring." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Vidjet-ni ko‘rish u-n chapga suring." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Soatga qaytish uchun chapga suring." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Bldrsh-ni ko‘rish u-n o‘ngga suring." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "%s olib tashlansinmi?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Vidjetlar soni maksimal miqdorga (%s) yetdi." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Ilova treyni ochish uchun ikki marta teging." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1ta yangi element" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Yoqish uchun ikki marta teging." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Soat" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Qurilma harorati juda yuqori." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Mobil qurilma yordamida Gear ilovalarini yuklab oling." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Uxlayotganda" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Ko‘proq ilovalar olish" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Quvvat tejash + yoqilgan vaqtda amaldan foydalanib bo‘lmaydi." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "Ekranni o‘qish vositasi yoqilganda, %sdan foydalanib bo‘lmaydi." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Bezovta qilmang" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Uchish rjm yoqilganda Mobil ma’l-ni yoqib bo‘lmaydi. Uchish rjm-ni o‘chir va qayta urin." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Soatga qaytish uchun yuqoriga suring." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Tayyor! Gear-ga o‘ting!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mobil tarmoqlar" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Qo‘n. Gearga ynlt" + +msgid "IDS_ST_BUTTON_START" +msgstr "Boshlash" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Chiqish" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Marhamat! Gear ishl. haq. ma’l. ol. u-n quy. tgm. teging." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "O‘chirish so‘raldi" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Yoqish so‘raldi" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Soat indktr ikon-ni ko‘rish u-n yuqori chet. pastga sur." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Soatda ilovani ko‘rish u-n quyi chetni yuqoriga suring." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Orqaga qaytish uchun yuqori chetni pastga suring." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Ilovalarni o‘rnatish yoki olib tashlash uchun mobil qurilmangizda Samsung Gear ilovasidan foydalaning." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Bu asosiy ekranning asosiy tuzilishi." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Bo‘sh" diff --git a/home/res/po/vi.po b/home/res/po/vi.po new file mode 100755 index 0000000..9a83eeb --- /dev/null +++ b/home/res/po/vi.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Ứng dụng" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "Tiếp" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "Không lặp lại" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "Xóa tất cả" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "Không thể xóa." + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "Chạm và giữ để di chuyển widget." + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "Màn hình chờ đã thay đổi." + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "Đang tải…" + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "Không thể tải dữ liệu. Hãy chạm để thử lại." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Không thể thêm ứng dụng. Không còn chỗ trên màn hình chờ." + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "Không thể thêm widget. Không còn chỗ trên màn hình chờ." + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "Ứng dụng đã tồn tại." + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget đã tồn tại." + +msgid "IDS_COM_POP_CANCEL" +msgstr "Thoát" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "Bố cục màn hình chờ đã thay đổi." + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Sẽ xóa ứng dụng này khỏi màn hình chờ. Nó sẽ không bị xóa khỏi thiết bị." + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "Xóa ứng dụng" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "Xóa widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "Sẽ xóa widget này khỏi màn hình chờ. Nó sẽ không bị xóa khỏi thiết bị." + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "Chế độ siêu tiết kiệm pin" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Không thể thêm widget. Đã đạt đến số widget tối đa (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "Không thể thêm ứng dụng. Đã đạt số ứng dụng tối đa (%d)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "Không thể thêm trang." + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "Chế độ Bình thường" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "Đã tắt chế độ tiết kiệm pin." + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "Đã bật chế độ tiết kiệm pin." + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "Ứng dụng gần đây" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "Không thể thêm ứng dụng. Đã đạt đến số ứng dụng tối đa (%s)." + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "Không thể thêm widget. Đã đạt đến số widget tối đa (%s)." + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "Xóa trang" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "Trang này và nội dung của trang sẽ bị xóa." + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "Gỡ bỏ" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "Gắn thẻ SIM để truy cập mạng." + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "Chế độ chặn" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "Bật" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "Tắt" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "Đã di chuyển mục." + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "Chạm hai lần để thêm." + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "Thêm widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "Mục đã được thêm." + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "Mục đã bị xóa." + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "Trang %1$d / %2$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "Không thể sắp xếp lại các mục trên bảng thông báo." + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "Bây giờ là %1$d:%2$d." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "Bây giờ là %d:%d SA." + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "Bây giờ là %d:%d CH." + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d mục mới" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "Đã đạt số widget tối đa (%s). Hãy xóa một số widget và thử lại." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Vuốt sang phải để trở về đồng hồ." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "Vuốt sang trái để xem widget." + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "Vuốt sang trái để trở về đồng hồ." + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "Vuốt sang phải để xem thông báo." + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "Gỡ cài đặt %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "Đã đạt số widget tối đa (%s)." + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "Chạm hai lần để mở khay ứng dụng." + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 mục mới" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "Chạm hai lần để bật." + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "Đồng hồ" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "Nhiệt độ thiết bị quá cao." + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "Tải về ứng dụng Gear bằng thiết bị di động." + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "Khi đang ngủ" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "Tải thêm ứng dụng" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "Không có Hành động khi đang bật Tiết kiệm pin +." + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s không khả dụng khi đang bật Trình đọc màn hình." + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "Không làm phiền" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "Không thể bật Dữ liệu di động khi đang bật chế độ Máy bay. Hãy tắt chế độ Máy bay và thử lại." + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "Vuốt lên để trở về đồng hồ." + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "Xong rồi! Hãy bắt đầu trải nghiệm Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "Mạng di động" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "Ch.tiếp c.gọi đến Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "Bắt đầu" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "Đóng" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "Chào mừng bạn! Hãy chạm phím bên dưới để học cách sử dụng Gear." + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "Đã yêu cầu tắt" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "Đã yêu cầu bật" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "Vuốt từ cạnh trên cùng xuống để xem các biểu tượng chỉ báo trên đồng hồ." + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "Vuốt từ cạnh dưới cùng lên để xem các ứng dụng trên đồng hồ." + +msgid "IDS_ST_BUTTON_OK" +msgstr "OK" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "Vuốt từ cạnh trên cùng xuống để trở về." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "Trên đồng hồ, vuốt xuống từ cạnh trên cùng để đến biểu tượng chỉ báo." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "Trên đồng hồ, vuốt lên từ cạnh dưới cùng để xem ứng dụng." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "Từ đồng hồ, vuốt sang phải để xem thông báo." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Vuốt sang trái để trở về đồng hồ." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "Từ đồng hồ, vuốt sang trái để xem widget." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Vuốt sang phải để trở về đồng hồ." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "Từ đồng hồ, vuốt lên để xem ứng dụng." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Vuốt xuống để trở về đồng hồ." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "Từ đồng hồ, vuốt xuống để xem thanh Khoảnh khắc." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Vuốt lên để trở về đồng hồ." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "Đồng hồ là màn hình chờ của bạn. Chạm vào bên dưới để bắt đầu." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "Để cài đặt hoặc gỡ cài đặt ứng dụng, hãy dùng ứng dụng Samsung Gear trên thiết bị di động." + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "Đây là cấu trúc chính của màn hình chờ." + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "Đây là bố trí màn hình chờ của bạn." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "Trống" diff --git a/home/res/po/zh_CN.po b/home/res/po/zh_CN.po new file mode 100755 index 0000000..69579b4 --- /dev/null +++ b/home/res/po/zh_CN.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "应用程序" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "下一步" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "桌面小组件" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "不重复" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "删除全部" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "无法移除。" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "点击并按住小组件以进行移动" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "主屏已更改。" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "载入中…" + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "无法载入数据。轻敲以重试。" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "无法添加应用程序。主屏幕无更多空间。" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "无法添加小组件。主屏幕无更多空间。" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "应用程序已存在。" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "小组件已存在。" + +msgid "IDS_COM_POP_CANCEL" +msgstr "取消" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "主屏幕布局已更改。" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "该应用程序将从主屏幕移除。它不会从设备删除。" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "移除应用程序" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "移除小组件" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "该小组件将从主屏幕移除。它不会从设备删除。" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "超级省电模式" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "无法添加小组件。已达到最大小组件数 (%d)。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "无法添加应用程序。已达到最大应用程序数 (%d)。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "无法添加页面。" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "普通模式" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "省电模式已禁用" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "已启动省电模式" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "最近应用程序" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "无法添加应用程序。已达到最大应用程序数 (%s)。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "无法添加小组件。已达到最大小组件数 (%s)。" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "移除页面" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "将移除该页面及其内容。" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "移除" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "插入 SIM 卡以访问网络服务。" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "阻止模式" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "打开" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "关闭" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "项目已移动。" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "双击以添加。" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "添加小组件" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "项目已添加。" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "项目已移除。" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "第 %1$d 页,共 %2$d 页" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "无法重新排列通知板项目" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "现在时间 %1$d:%2$d。" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "上午 %d点 %d分。" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "下午 %d点 %d分。" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d 个新项目" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "已达到最大小组件数量 (%s)。删除部分小组件并重试。" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "向右滑动以返回时钟。" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "向左滑动以查看小组件。" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "向左滑动以返回时钟。" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "向右滑动以查看通知。" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "是否卸载 %s?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "已达到最大小组件数 (%s)" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "双击以打开应用程序托盘。" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 个新项目" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "双击以启用。" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "时钟" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "设备温度过高。" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "使用移动设备下载 Gear 应用程序" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "睡眠时" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "获得更多应用程序" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "省电模式 + 启用时无法使用动作" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "%s 在屏幕阅读器启用时不可用。" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "请勿打扰" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "飞行模式启用时无法打开移动数据。禁用飞行模式并重试。" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "向上滑动以返回时钟。" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "就是这样!欢迎使用 Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "移动网络" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "转移呼叫至 Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "开始" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "退出" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "欢迎!点击下方的按钮以了解如何使用您的 Gear。" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "已请求禁用" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "已请求启用" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "向下滑动顶部边缘以在时钟上查看指示图标。" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "向上滑动底部边缘以在时钟上查看应用程序。" + +msgid "IDS_ST_BUTTON_OK" +msgstr "确定" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "向下滑动顶部边缘以返回。" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "在时钟上,从顶部边缘向下滑动以显示指示图标。" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "在时钟上,从底部边缘向上滑动以查看应用程序。" + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "从时钟向右滑动以查看通知。" + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "向左滑动以返回时钟。" + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "从时钟向左滑动以查看小组件。" + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "向右滑动以返回时钟。" + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "从时钟向上滑动以查看应用程序。" + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "向下滑动以返回时钟。" + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "从时钟向下滑动以查看时刻栏。" + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "向上滑动以返回时钟。" + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "时钟为您的主屏幕。点击下方以开始。" + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "若要安装或卸载应用程序,请在您的移动设备上使用 Samsung Gear 应用程序。" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "这是主屏幕的主要结构。" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "这是您的主屏布局。" + +msgid "IDS_ST_BODY_EMPTY" +msgstr "空白" diff --git a/home/res/po/zh_HK.po b/home/res/po/zh_HK.po new file mode 100755 index 0000000..40bd17d --- /dev/null +++ b/home/res/po/zh_HK.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "應用程式" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "下一步" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "不要重複。" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "全部刪除" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "無法移除。" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "輕觸並按住 Widget 以移動。" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "主螢幕已變更。" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "正在載入..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "無法載入數據。輕觸以重試。" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "無法加入應用程式。主螢幕空間不足。" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "無法加入 Widget。主螢幕空間不足。" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "應用程式已存在。" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "Widget 已存在。" + +msgid "IDS_COM_POP_CANCEL" +msgstr "取消" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "主螢幕配置已變更。" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "此應用程式將從主螢幕移除。它不會從裝置刪除。" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "移除應用程式" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "移除 Widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "此 Widget 將從主螢幕移除。它不會從裝置刪除。" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "超級省電模式" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "無法加入 Widget。已達 Widget 數量上限 (%d)。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "無法加入應用程式。已達應用程式數量上限 (%d)。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "無法加入頁面。" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "正常模式" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "省電模式已停用。" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "省電模式已啟用。" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "最近使用的應用程式" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "無法加入應用程式。已達應用程式數量上限 (%s)。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "無法加入 Widget。已達 Widget 數量上限 (%s)。" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "移除頁面" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "將移除此頁面及其內容。" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "移除" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "插入 SIM 卡以存取網絡服務。" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "封鎖模式" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "開" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "關" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "項目已移動。" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "輕觸兩下以加入。" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "加入widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "項目已加入。" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "項目已移除。" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "第 %2$d 頁,共 %1$d 頁" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "無法重新排序通知板項目。" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "現在時間是 %1$d:%2$d。" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "現在是上午 %d:%d。" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "現在是下午 %d:%d。" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d 個新項目" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "已達 Widget 數量上限 (%s)。刪除部分 Widget 並重試。" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "向右滑動以返回至時鐘。" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "向左滑動以檢視 Widget。" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "向左滑動以返回至時鐘。" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "向右滑動以檢視通知。" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "解除安裝 %s 嗎?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "已達 Widget 數量上限 (%s)。" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "輕觸兩下以開啟應用程式工具列。" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 個新項目" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "輕觸兩下以啟用。" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "時鐘" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "裝置溫度過高。" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "使用流動裝置下載 Gear 應用程式。" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "睡眠時" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "取得更多應用程式" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "省電模式 + 已啟用時無法使用動作。" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "當螢幕閱讀器已啟用時,%s 不可用。" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "請勿打擾" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "飛行模式啟用時無法開啟流動數據。請停用飛行模式並重試。" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "向上滑動以返回至時鐘。" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "就是它了!歡迎來到 Gear!" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "流動網絡" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "轉駁來電至 Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "開始" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "退出" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "歡迎!輕觸下方的按鍵以瞭解如何使用您的 Gear。" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "已請求停用" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "已請求啟用" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "向下滑動頂部邊緣以於時鐘查看指示圖示。" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "向上滑動底部邊緣以於時鐘檢視應用程式。" + +msgid "IDS_ST_BUTTON_OK" +msgstr "確定" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "向下滑動頂部邊緣以返回。" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "若要安裝或解除安裝應用程式,請在您的流動裝置上使用 Samsung Gear 應用程式。" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "這是主螢幕的主要結構。" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "空白" diff --git a/home/res/po/zh_TW.po b/home/res/po/zh_TW.po new file mode 100755 index 0000000..6f672cb --- /dev/null +++ b/home/res/po/zh_TW.po @@ -0,0 +1,284 @@ +msgid "IDS_IDLE_BODY_APPS" +msgstr "Apps" + +msgid "IDS_ST_BUTTON_NEXT" +msgstr "下一頁" + +msgid "IDS_IDLE_HEADER_WIDGET" +msgstr "Widget" + +msgid "IDS_CLOCK_BODY_DONT_REPEAT_ABB" +msgstr "不再顯示" + +msgid "IDS_WNOTI_BODY_DELETE_ALL_ABB2" +msgstr "全部刪除" + +msgid "IDS_IM_POP_UNABLE_TO_REMOVE" +msgstr "無法刪除。" + +msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB" +msgstr "輕觸並按住 Widget 以移動。" + +msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB" +msgstr "主螢幕已變更。" + +msgid "IDS_IDLE_POP_LOADING_ING" +msgstr "正在載入..." + +msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" +msgstr "無法載入資料。輕觸以重試。" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "無法新增應用程式。主螢幕空間不足。" + +msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN" +msgstr "無法新增 widget。主螢幕空間不足。" + +msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS" +msgstr "應用程式已存在。" + +msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS" +msgstr "widget 已存在。" + +msgid "IDS_COM_POP_CANCEL" +msgstr "取消" + +msgid "IDS_HS_TPOP_HOME_SCREEN_LAYOUT_CHANGED" +msgstr "主螢幕版面配置已變更。" + +msgid "IDS_HS_POP_THIS_APPLICATION_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "此應用程式將自主螢幕移除。將不會自裝置刪除。" + +msgid "IDS_HS_HEADER_REMOVE_APPLICATION_ABB" +msgstr "移除應用程式" + +msgid "IDS_HS_HEADER_REMOVE_WIDGET_ABB" +msgstr "移除 widget" + +msgid "IDS_HS_POP_THIS_WIDGET_WILL_BE_REMOVED_FROM_THE_HOME_SCREEN_IT_WILL_NOT_BE_DELETED_FROM_THE_DEVICE" +msgstr "此 widget 將自主螢幕移除。將不會自裝置刪除。" + +msgid "IDS_ST_MBODY_ULTRA_POWER_SAVING_MODE" +msgstr "使用超省電模式" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "無法新增 widget。已達 widget 數量上限 (%d)。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPD_REACHED" +msgstr "無法新增應用程式。已達應用程式數量上限 (%d)。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_PAGE" +msgstr "無法新增頁面。" + +msgid "IDS_ST_BODY_NORMAL_MODE" +msgstr "基本模式" + +msgid "IDS_SMR_TPOP_POWER_SAVING_MODE_DISABLED" +msgstr "已停用省電模式。" + +msgid "IDS_ST_TPOP_POWER_SAVING_MODE_ENABLED" +msgstr "省電模式已啟動。" + +msgid "IDS_ST_OPT_RECENT_APPS_ABB" +msgstr "最近的應用程式" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_APPLICATION_MAXIMUM_NUMBER_OF_APPLICATIONS_HPS_REACHED" +msgstr "無法新增應用程式。已達應用程式數量上限 (%s)。" + +msgid "IDS_HS_TPOP_UNABLE_TO_ADD_WIDGET_MAXIMUM_NUMBER_OF_WIDGETS_HPS_REACHED" +msgstr "無法新增 widget。已達 widget 數量上限 (%s)。" + +msgid "IDS_HS_BODY_REMOVE_PAGE" +msgstr "移除頁面" + +msgid "IDS_HS_POP_THIS_PAGE_AND_ITS_CONTENT_WILL_BE_REMOVED" +msgstr "將移除此頁面與其中內容。" + +msgid "IDS_COM_BUTTON_REMOVE_ABB" +msgstr "移除" + +msgid "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES" +msgstr "請插入 SIM 卡以存取網路服務。" + +msgid "IDS_ST_BUTTON2_BLOCKING_MODE" +msgstr "封鎖模式" + +msgid "IDS_COM_BODY_ON_M_STATUS" +msgstr "開" + +msgid "IDS_COM_BODY_OFF_M_STATUS" +msgstr "關" + +msgid "IDS_TTS_BODY_ITEM_MOVED" +msgstr "項目已移動。" + +msgid "IDS_KM_BODY_DOUBLE_TAP_TO_ADD" +msgstr "輕觸兩下以新增。" + +msgid "IDS_HS_BODY_ADD_WIDGET" +msgstr "增加 widget" + +msgid "IDS_TTS_BODY_ITEM_ADDED" +msgstr "項目已新增。" + +msgid "IDS_TTS_BODY_ITEM_REMOVED" +msgstr "項目已移除。" + +msgid "IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS" +msgstr "頁 %2$d 之 %1$d" + +msgid "IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS" +msgstr "無法重新排序通知看板項目。" + +msgid "IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS" +msgstr "現在時間是 %1$d:%2$d。" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_AM" +msgstr "現在是上午 %d:%d。" + +msgid "IDS_TTS_BODY_IT_IS_PD_CPD_PM" +msgstr "現在是下午 %d:%d。" + +msgid "IDS_TTS_BODY_PD_NEW_ITEMS" +msgstr "%d 個新項目" + +msgid "IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB" +msgstr "已達 widget 數量上限 (%s)。請刪除部分 widget 並重試。" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "向右滑動以返回到時鐘。" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB" +msgstr "向左滑動以檢視 widget。" + +msgid "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB" +msgstr "向左滑動以返回到時鐘。" + +msgid "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB" +msgstr "向右滑動以檢視通知。" + +msgid "IDS_AT_POP_UNINSTALL_PS_Q" +msgstr "解除安裝 %s 嗎?" + +msgid "IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED" +msgstr "已達 widget 數量上限 (%s)。" + +msgid "IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS" +msgstr "輕觸兩下來開啟應用程式工具列。" + +msgid "IDS_TTS_BODY_1_NEW_ITEM" +msgstr "1 個新項目" + +msgid "IDS_HS_BODY_DOUBLE_TAP_TO_ENABLE_TTS" +msgstr "輕觸兩下來啟用。" + +msgid "IDS_ST_BUTTON2_CLOCK" +msgstr "時鐘" + +msgid "IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH" +msgstr "裝置溫度過高。" + +msgid "IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB" +msgstr "使用行動裝置下載 Gear 應用程式。" + +msgid "IDS_HEALTH_OPT_WHILE_SLEEPING_ABB" +msgstr "睡覺時" + +msgid "IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2" +msgstr "取得更多應用程式" + +msgid "IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED" +msgstr "啟用省電 + 時無法使用動作。" + +msgid "IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED" +msgstr "螢幕閱讀器啟用時無法使用 %s。" + +msgid "IDS_ST_MBODY_DO_NOT_DISTURB_ABB" +msgstr "停用模式" + +msgid "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB" +msgstr "無法在飛航模式啟用時開啟行動數據。停用飛航模式並重試。" + +msgid "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB" +msgstr "向上滑動以返回到時鐘。" + +msgid "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E" +msgstr "完成了!歡迎使用 Gear !" + +msgid "IDS_ST_MBODY_MOBILE_NETWORKS_ABB" +msgstr "行動網路" + +msgid "IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB" +msgstr "轉接來電至 Gear" + +msgid "IDS_ST_BUTTON_START" +msgstr "開啟" + +msgid "IDS_ST_BUTTON_EXIT" +msgstr "退出" + +msgid "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB" +msgstr "歡迎!輕觸下方按鈕以瞭解如何使用 Gear。" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_DISABLE" +msgstr "已要求停用" + +msgid "IDS_WMGR_NPBODY_REQUESTED_TO_ENABLE" +msgstr "已要求啟用" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB" +msgstr "向下滑動頂端邊框來查看時鐘上的指針圖示。" + +msgid "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB" +msgstr "從底部邊緣向上滑動以於時鐘上檢視應用程式。" + +msgid "IDS_ST_BUTTON_OK" +msgstr "確認" + +msgid "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB" +msgstr "向下滑動頂端邊框來返回。" + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_DOWN_FROM_TOP_EDGE_FOR_INDICATOR_ICONS_VZW" +msgstr "On clock, swipe down from top edge for indicator icons." + +msgid "IDS_WNOTI_BODY_ON_CLOCK_SWIPE_UP_FROM_BOTTOM_EDGE_TO_VIEW_APPS_VZW" +msgstr "On clock, swipe up from bottom edge to view apps." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_RIGHT_TO_SEE_NOTIFICATIONS_ATNT" +msgstr "From the clock, swipe right to see notifications." + +msgid "IDS_WNOTI_BODY_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe left to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_LEFT_TO_SEE_WIDGETS_ATNT" +msgstr "From the clock, swipe left to see widgets." + +msgid "IDS_WNOTI_BODY_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe right to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_UP_TO_VIEW_APPS_ATNT" +msgstr "From the clock, swipe up to view apps." + +msgid "IDS_WNOTI_BODY_SWIPE_DOWN_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe down to go back to the clock." + +msgid "IDS_WNOTI_BODY_FROM_THE_CLOCK_SWIPE_DOWN_TO_SEE_THE_MOMENTS_BAR_ATNT" +msgstr "From the clock, swipe down to see the Moments bar." + +msgid "IDS_WNOTI_BODY_SWIPE_UP_TO_GO_BACK_TO_THE_CLOCK_ATNT" +msgstr "Swipe up to go back to the clock." + +msgid "IDS_WNOTI_BODY_THE_CLOCK_IS_YOUR_HOME_SCREEN_TAP_BELOW_TO_GET_STARTED_ATNT" +msgstr "The clock is your home screen. Tap below to get started." + +msgid "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE" +msgstr "若要安裝或解除安裝應用程式,請在行動裝置上使用三星 Gear 應用程式。" + +msgid "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN" +msgstr "這是主螢幕的主要架構。" + +msgid "IDS_TTRL_BODY_THIS_IS_YOUR_HOME_SCREEN_LAYOUT_VZW" +msgstr "This is your home screen layout." + +msgid "IDS_ST_BODY_EMPTY" +msgstr "空白" diff --git a/home/src/add-viewer.c b/home/src/add-viewer.c new file mode 100644 index 0000000..e752139 --- /dev/null +++ b/home/src/add-viewer.c @@ -0,0 +1,1118 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "add-viewer.h" +#include "add-viewer_pkgmgr.h" +#include "add-viewer_ucol.h" +#include "add-viewer_package.h" +#include "add-viewer_debug.h" +#include "add-viewer_util.h" +#include "conf.h" + +#include "bg.h" + +#if defined(LOG_TAG) +#undef LOG_TAG +#endif +#define LOG_TAG "ADD_VIEWER" +#define ADD_VIEWER_CLASS_NAME "add-viewer" + +int errno; + +static struct { + Evas_Smart_Class sc; + Evas_Smart *smart; + Eina_List *add_viewer_list; + int enable_dnd; +} s_info = { + .sc = EVAS_SMART_CLASS_INIT_NAME_VERSION(ADD_VIEWER_CLASS_NAME), + .smart = NULL, + .add_viewer_list = NULL, + .enable_dnd = 0, +}; + +struct widget_data { + Evas *e; + Evas_Object *stage; + + Evas_Object *add_viewer; + Evas_Object *parent; + + Evas_Object *scroller; + + Evas_Object *bg; +}; + +struct click { + struct widget_data *widget_data; + struct add_viewer_package *package; + int size; + Ecore_Timer *long_press_timer; + int x; + int y; + + struct dnd { + Evas_Object *obj; + } dnd; + + struct geo { + Evas_Object *obj; + int x; + int y; + } geo; +}; + +static Evas_Object *winset_preview_add(struct widget_data *widget_data, Evas_Object *parent, struct add_viewer_package *package, const char *name, int type, int no_event); + +static inline void append_padding(Evas_Object *box, int padding) +{ + Evas_Object *pad; + + pad = elm_box_add(box); + if (!pad) { + ErrPrint("Failed to create a pad\n"); + return; + } + + evas_object_resize(pad, ADD_VIEWER_PREVIEW_WIDTH, padding); + evas_object_size_hint_min_set(pad, ADD_VIEWER_PREVIEW_WIDTH, padding); + evas_object_show(pad); + elm_box_pack_end(box, pad); +} + +static Eina_Bool normal_loader_cb(struct widget_data *widget_data, void *container) +{ + struct add_viewer_package *package; + Evas_Object *thumb_item; + Eina_List *l; + char *name; + char *filter; + + l = (Eina_List *)evas_object_data_get(container, "list"); + if (!l) { + l = add_viewer_package_list_handle(); + if (!l) { + goto cancel; + } + + evas_object_data_set(container, "list", l); + } + + package = add_viewer_package_list_item(l); + + l = add_viewer_package_list_next(l); + evas_object_data_set(container, "list", l); + if (!package) { + ErrPrint("Package list is not valid\n"); + goto out; + } + + filter = evas_object_data_get(container, "filter"); + if (filter) { + name = (char *)add_viewer_package_list_name(package); + if (add_viewer_ucol_case_search(name, filter) < 0) { + goto out; + } + + name = add_viewer_util_highlight_keyword(name, filter); + DbgPrint("Filtered: %s\n", name); + } else { + name = elm_entry_utf8_to_markup(add_viewer_package_list_name(package)); + } + + thumb_item = winset_preview_add(widget_data, container, package, name, WIDGET_SIZE_TYPE_2x2, 0); + free(name); + evas_object_data_set(thumb_item, "package", package); + elm_box_pack_end(container, thumb_item); + +out: + if (l) { + return ECORE_CALLBACK_RENEW; + } + DbgPrint("Loading is finished\n"); + +cancel: + (void)evas_object_data_del(container, "list"); + (void)evas_object_data_del(container, "loader"); + + l = elm_box_children_get(container); + if (!l) { + /* TODO: "No content" show */ + } else { + eina_list_free(l); + /* TODO: "No content" hide */ + + append_padding(container, 96); + } + + return ECORE_CALLBACK_CANCEL; +} + +static int reload_list_cb(struct add_viewer_package *package, void *data) +{ + Eina_List *children; + Eina_List *l; + Evas_Object *tmp; + Ecore_Timer *timer; + Evas_Object *container; + struct widget_data *widget_data = data; + + container = elm_object_content_get(widget_data->scroller); + if (!container) { + return WIDGET_ERROR_FAULT; + } + + /*! + * \note + * Delete all thumbnail objects + */ + children = elm_box_children_get(container); + EINA_LIST_FREE(children, tmp) { + elm_box_unpack(container, tmp); + evas_object_del(tmp); + } + + timer = evas_object_data_del(container, "loader"); + if (timer) { + ecore_timer_del(timer); + (void)evas_object_data_del(container, "list"); + } + + append_padding(container, ADD_VIEWER_PREVIEW_PAD_TOP); + + l = add_viewer_package_list_handle(); + if (l) { + elm_object_part_text_set(widget_data->bg, "empty", ""); + while (normal_loader_cb(widget_data, container) == ECORE_CALLBACK_RENEW); + } else { + elm_object_part_text_set(widget_data->bg, "empty", _("IDS_ST_BODY_EMPTY")); + } + + /* To set the first focus */ + evas_object_smart_callback_call(widget_data->scroller, "scroll", NULL); + + return WIDGET_ERROR_NONE; +} + +static void widget_add(Evas_Object *add_viewer) +{ + struct widget_data *widget_data; + + widget_data = calloc(1, sizeof(*widget_data)); + if (!widget_data) { + ErrPrint("Failed to allocate heap: %d\n", errno); + return; + } + + widget_data->e = evas_object_evas_get(add_viewer); + if (!widget_data->e) { + ErrPrint("Failed to get Evas\n"); + free(widget_data); + return; + } + + widget_data->stage = evas_object_rectangle_add(widget_data->e); + if (!widget_data->stage) { + ErrPrint("Failed to create a stage\n"); + free(widget_data); + return; + } + + widget_data->add_viewer = add_viewer; + + evas_object_color_set(widget_data->stage, 255, 255, 255, 255); + evas_object_smart_data_set(widget_data->add_viewer, widget_data); + evas_object_smart_member_add(widget_data->stage, widget_data->add_viewer); + + s_info.add_viewer_list = eina_list_append(s_info.add_viewer_list, widget_data); + + add_viewer_package_list_add_event_callback(NULL, PACKAGE_LIST_EVENT_RELOAD, reload_list_cb, widget_data); + /* widget_data->parent is not yet initialized */ +} + +/** + * \note + * This callback can be called while initializing a widget. + * It means, the element of a structure could be null. + * so we have to validate it before delete it. + */ +static void widget_del(Evas_Object *add_viewer) +{ + struct widget_data *widget_data; + + widget_data = evas_object_smart_data_get(add_viewer); + if (!widget_data) { + ErrPrint("Invalid widget\n"); + return; + } + + add_viewer_package_list_del_event_callback(NULL, PACKAGE_LIST_EVENT_RELOAD, reload_list_cb, widget_data); + + s_info.add_viewer_list = eina_list_remove(s_info.add_viewer_list, widget_data); + + if (widget_data->scroller) { + evas_object_smart_member_del(widget_data->scroller); + evas_object_del(widget_data->scroller); + } + + if (widget_data->stage) { + evas_object_smart_member_del(widget_data->stage); + evas_object_del(widget_data->stage); + } + + if (widget_data->bg) { + evas_object_smart_member_del(widget_data->bg); + evas_object_del(widget_data->bg); + } + + free(widget_data); +} + +static void widget_move(Evas_Object *add_viewer, Evas_Coord x, Evas_Coord y) +{ + struct widget_data *widget_data; + + widget_data = evas_object_smart_data_get(add_viewer); + if (!widget_data) { + ErrPrint("Invalid widget\n"); + return; + } + + evas_object_move(widget_data->scroller, x, y); + evas_object_move(widget_data->stage, x, y); + evas_object_move(widget_data->bg, x, y); +} + +static void widget_resize(Evas_Object *add_viewer, Evas_Coord w, Evas_Coord h) +{ + struct widget_data *widget_data; + + widget_data = evas_object_smart_data_get(add_viewer); + if (!widget_data) { + ErrPrint("Invalid widget\n"); + return; + } + + evas_object_resize(widget_data->scroller, w, h); + evas_object_resize(widget_data->stage, w, h); + evas_object_resize(widget_data->bg, w, h); +} + +static void widget_show(Evas_Object *add_viewer) +{ + struct widget_data *widget_data; + + widget_data = evas_object_smart_data_get(add_viewer); + if (!widget_data) { + ErrPrint("Invalid widget\n"); + return; + } + + evas_object_show(widget_data->stage); +} + +static void widget_hide(Evas_Object *add_viewer) +{ + struct widget_data *widget_data; + + widget_data = evas_object_smart_data_get(add_viewer); + if (!widget_data) { + ErrPrint("Invalid widget\n"); + return; + } + + evas_object_hide(widget_data->stage); +} + +static void widget_color_set(Evas_Object *add_viewer, int r, int g, int b, int a) +{ + struct widget_data *widget_data; + + widget_data = evas_object_smart_data_get(add_viewer); + if (!widget_data) { + ErrPrint("Invalid widget\n"); + return; + } + + evas_object_color_set(widget_data->stage, r, g, b, a); +} + +static void widget_clip_set(Evas_Object *add_viewer, Evas_Object *clip) +{ + struct widget_data *widget_data; + + widget_data = evas_object_smart_data_get(add_viewer); + if (!widget_data) { + ErrPrint("Invalid widget\n"); + return; + } + + evas_object_clip_set(widget_data->stage, clip); +} + +static void widget_clip_unset(Evas_Object *add_viewer) +{ + struct widget_data *widget_data; + + widget_data = evas_object_smart_data_get(add_viewer); + if (!widget_data) { + ErrPrint("Invalid widget\n"); + return; + } + + evas_object_clip_unset(widget_data->stage); +} + +HAPI void evas_object_add_viewer_init(void) +{ + add_viewer_ucol_init(); + (void)add_viewer_package_init(); + +} + +HAPI void evas_object_add_viewer_fini(void) +{ + (void)add_viewer_package_fini(); + add_viewer_ucol_fini(); +} + +static Eina_Bool register_access_object_for_edje_part(Evas_Object *object, const char *part_name) +{ + Evas_Object *edje; + Evas_Object *content; + Elm_Access_Action_Info info; + Elm_Access_Action_Type action; + + edje = evas_object_data_get(object, "edje"); + if (!edje) { + return EINA_TRUE; + } + + content = elm_object_part_content_get(edje, part_name); + if (!content) { + return EINA_TRUE; + } + + memset(&info, 0, sizeof(info)); + + action = ELM_ACCESS_ACTION_HIGHLIGHT_NEXT; + info.highlight_cycle = EINA_FALSE; + return elm_access_action(content, action, &info); +} + +static inline int make_clicked_event(Evas_Object *part_obj) +{ + Evas_Object *ao; + Evas *e; + int x; + int y; + int w; + int h; + double timestamp; + + ao = evas_object_data_get(part_obj, "access,object"); + if (!ao) { + ErrPrint("Access object is not exists\n"); + return EINA_FALSE; + } + + e = evas_object_evas_get(part_obj); + if (!e) { + ErrPrint("evas is not valid\n"); + return EINA_FALSE; + } + + evas_object_geometry_get(part_obj, &x, &y, &w, &h); + x += w / 2; + y += h / 2; + + timestamp = ecore_time_get(); + + evas_event_feed_mouse_move(e, x, y, timestamp, NULL); + evas_event_feed_mouse_down(e, 1, EVAS_BUTTON_NONE, timestamp + 10, NULL); + evas_event_feed_mouse_move(e, x, y, timestamp + 15, NULL); + evas_event_feed_mouse_up(e, 1, EVAS_BUTTON_NONE, timestamp + 20, NULL); + + return EINA_TRUE; +} + +static Eina_Bool activate_cb(void *part_name, Evas_Object *ao, Elm_Access_Action_Info *action_info) +{ + Eina_Bool ret; + Evas_Object *part_object; + + part_object = evas_object_data_get(ao, "part,object"); + if (!part_object) { + return EINA_FALSE; + } + + if (part_name) { + ret = register_access_object_for_edje_part(part_object, part_name); + } else { + ret = make_clicked_event(part_object); + } + + return ret; +} + +static char *_access_tab_to_add_cb(void *data, Evas_Object *obj) +{ + char *tmp; + + tmp = strdup(_("IDS_KM_BODY_DOUBLE_TAP_TO_ADD")); + if (!tmp) { + ErrPrint("tmp is not exist\n"); + return NULL; + } + + return tmp; +} + + +HAPI void winset_access_object_add(Evas_Object *parent, Evas_Object *layout, const char *size, const char *name) +{ + Evas_Object *ao; + Evas_Object *part; + char *text; + int len; + + len = strlen(name) + (size ? strlen(size) : 0) + 2; + text = malloc(len); + if (!text) { + ErrPrint("Heap : %d\n", errno); + return; + } + + strcpy(text, name); + + ao = evas_object_data_get(layout, "access,object"); + if (ao) { + elm_access_info_set(ao, ELM_ACCESS_INFO, text); + free(text); + return; + } + + Evas_Object *edje; + edje = elm_layout_edje_get(layout); + part = (Evas_Object *)edje_object_part_object_get(edje, "preview,dbg"); + ao = elm_access_object_register(part, layout); + if (!ao) { + free(text); + return; + } + + elm_access_info_set(ao, ELM_ACCESS_INFO, text); + free(text); + + elm_access_info_set(ao, ELM_ACCESS_TYPE, _("IDS_IDLE_HEADER_WIDGET")); + + elm_access_info_cb_set(ao, ELM_ACCESS_CONTEXT_INFO, _access_tab_to_add_cb, NULL); + + elm_object_focus_custom_chain_append(layout, ao, NULL); + + evas_object_data_set(ao, "part,object", layout); + evas_object_data_set(ao, "parent", parent); + + elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_ACTIVATE, activate_cb, NULL); + + evas_object_data_set(layout, "access,object", ao); +} + +static void _change_focus(Evas_Object *scroller, Evas_Object *focus_widget) +{ + Evas_Object *pre_focus = NULL; + + pre_focus = evas_object_data_get(scroller, "focused"); + if (pre_focus == focus_widget) return; + + elm_object_signal_emit(focus_widget, "show", "line"); + evas_object_data_set(scroller, "focused", focus_widget); + + if (pre_focus && pre_focus != focus_widget) { + elm_object_signal_emit(pre_focus, "hide", "line"); + } +} + +static void _widget_scroll_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *box = data; + Evas_Object *scroller = obj; + Evas_Object *focus_widget = NULL; + Eina_List *list = NULL; + int h_page = 0; + Evas_Coord y; + + DbgPrint("========== Widget Scroll CB is called (%p)\n", obj); + + if (!scroller) { + ErrPrint("Failed to load the widget scroller\n"); + return; + } + + if (!box) { + return; + } + + list = elm_box_children_get(box); + if (!list) { + return; + } + + evas_object_geometry_get(box, NULL, &y, NULL, NULL); + y -= (ADD_VIEWER_PAGE_HEIGHT >> 1); + h_page = -(y / ADD_VIEWER_PAGE_HEIGHT); + + focus_widget = eina_list_nth(list, h_page + 1); + eina_list_free(list); + + if (!focus_widget) { + ErrPrint("Failed to get the focused page in scroller\n"); + return; + } + + _change_focus(scroller, focus_widget); +} + +static int widget_data_setup(struct widget_data *widget_data, Evas_Object *parent) +{ + Evas_Object *box; + + widget_data->parent = parent; + + widget_data->bg = elm_layout_add(widget_data->parent); + if (!widget_data->bg) { + return WIDGET_ERROR_FAULT; + } + + if (elm_layout_file_set(widget_data->bg, EDJE_FILE, "bg") != EINA_TRUE) { + evas_object_del(widget_data->bg); + widget_data->bg = NULL; + return WIDGET_ERROR_FAULT; + } + + widget_data->scroller = elm_scroller_add(widget_data->parent); + if (!widget_data->scroller) { + evas_object_del(widget_data->bg); + widget_data->bg = NULL; + return WIDGET_ERROR_FAULT; + } + + box = elm_box_add(widget_data->scroller); + if (!box) { + evas_object_del(widget_data->bg); + widget_data->bg = NULL; + + evas_object_del(widget_data->scroller); + widget_data->scroller = NULL; + return WIDGET_ERROR_FAULT; + } + + elm_box_horizontal_set(box, EINA_FALSE); + elm_box_homogeneous_set(box, EINA_FALSE); + evas_object_size_hint_fill_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_padding_set(box, ADD_VIEWER_PREVIEW_PAD_LEFT, ADD_VIEWER_PREVIEW_PAD_TOP); + elm_box_align_set(box, 0.0, 0.0); + evas_object_show(box); + + elm_scroller_policy_set(widget_data->scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + elm_scroller_propagate_events_set(widget_data->scroller, EINA_TRUE); + elm_scroller_bounce_set(widget_data->scroller, EINA_FALSE, EINA_TRUE); + elm_object_style_set(widget_data->scroller, "effect"); + + elm_scroller_page_size_set(widget_data->scroller, ADD_VIEWER_PAGE_WIDTH, ADD_VIEWER_PAGE_HEIGHT); + + elm_object_content_set(widget_data->scroller, box); + + evas_object_smart_callback_add(widget_data->scroller, "scroll", _widget_scroll_cb, box); + + evas_object_show(widget_data->scroller); + evas_object_show(widget_data->bg); + + evas_object_smart_member_add(widget_data->bg, widget_data->add_viewer); + evas_object_clip_set(widget_data->bg, widget_data->stage); + + evas_object_smart_member_add(widget_data->scroller, widget_data->add_viewer); + evas_object_clip_set(widget_data->scroller, widget_data->stage); + return WIDGET_ERROR_NONE; +} + +static void del_cb(void *data, Evas *e, Evas_Object *container, void *event_info) +{ + free(data); +} + +static Eina_Bool long_press_cb(void *data) +{ + struct click *cbdata = data; + int x; + int y; + + evas_object_geometry_get(cbdata->geo.obj, &x, &y, NULL, NULL); + + if (cbdata->geo.x == x && cbdata->geo.y == y) { + const char *name; + Evas_Coord w; + Evas_Coord h; + struct add_viewer_event_info info = { + .pkg_info = { + .widget_id = add_viewer_package_list_pkgname(cbdata->package), + .content = NULL, + .size_type = cbdata->size, + }, + .move = { + .obj = NULL, + }, + }; + + name = add_viewer_package_list_name(cbdata->package); + + info.move.obj = winset_preview_add(cbdata->widget_data, cbdata->geo.obj, cbdata->package, name, cbdata->size, 1); + if (!info.move.obj) { + ErrPrint("Failed to create a preview object\n"); + } else { + /* Register the DnD object to Click CB Data to move it from move function */ + cbdata->dnd.obj = info.move.obj; + + evas_object_smart_member_add(cbdata->dnd.obj, cbdata->widget_data->add_viewer); + evas_object_clip_set(cbdata->dnd.obj, cbdata->widget_data->stage); + + elm_object_signal_emit(cbdata->geo.obj, "reset", "preview,dbg"); + + evas_object_hide(cbdata->widget_data->scroller); + evas_object_hide(cbdata->widget_data->bg); + + evas_object_resize(cbdata->dnd.obj, 222, 336); + evas_object_geometry_get(cbdata->dnd.obj, NULL, NULL, &w, &h); + + evas_object_move(cbdata->dnd.obj, cbdata->x - (w >> 1), cbdata->y - (h >> 1)); + + evas_object_smart_callback_call(cbdata->widget_data->add_viewer, "dnd", &info); + + } + } else { + DbgPrint("Object is moved\n"); + } + + cbdata->long_press_timer = NULL; + return ECORE_CALLBACK_CANCEL; +} + +static void add_to_home_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + struct click *cbdata = data; + struct add_viewer_event_info info = { + .move = { + .obj = NULL, + }, + + .pkg_info = { + .widget_id = add_viewer_package_list_pkgname(cbdata->package), + .content = NULL, + .size_type = cbdata->size, + .duplicated = add_viewer_package_is_skipped(cbdata->package), + .image = elm_object_part_content_unset(obj, "preview"), + } + }; + + evas_object_smart_callback_call(cbdata->widget_data->add_viewer, "selected", &info); + + elm_access_say(_("IDS_TTS_BODY_ITEM_ADDED")); +} + +static void preview_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + struct click *cbdata = data; + Evas_Event_Mouse_Down *down = event_info; + + evas_object_geometry_get(obj, &cbdata->geo.x, &cbdata->geo.y, NULL, NULL); + cbdata->geo.obj = obj; + + if (s_info.enable_dnd) { + int delay; + double fdelay; + + delay = SYSTEM_SETTINGS_TAP_AND_HOLD_DELAY_SHORT; /* default 0.5 sec */ + if (system_settings_get_value_int(SYSTEM_SETTINGS_KEY_TAP_AND_HOLD_DELAY, &delay) != 0) { + delay = SYSTEM_SETTINGS_TAP_AND_HOLD_DELAY_SHORT; + } + + fdelay = ((double)delay / 1000.0f); + DbgPrint("Long press: %lf\n", fdelay); + + cbdata->long_press_timer = ecore_timer_add(fdelay, long_press_cb, cbdata); + if (!cbdata->long_press_timer) { + ErrPrint("Failed to add timer\n"); + } + } + + cbdata->x = down->canvas.x; + cbdata->y = down->canvas.y; +} + +static void preview_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + struct click *cbdata = data; + + if (cbdata->long_press_timer) { + DbgPrint("Long press timer object found\n"); + ecore_timer_del(cbdata->long_press_timer); + cbdata->long_press_timer = NULL; + add_to_home_cb(data, NULL, NULL, NULL); + } else { + if (cbdata->dnd.obj) { + add_to_home_cb(data, NULL, NULL, NULL); + evas_object_smart_member_del(cbdata->dnd.obj); + evas_object_del(cbdata->dnd.obj); + cbdata->dnd.obj = NULL; + + evas_object_show(cbdata->widget_data->scroller); + evas_object_show(cbdata->widget_data->bg); + } + } + DbgPrint("Return\n"); +} + +static void preview_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + struct click *cbdata = data; + Evas_Event_Mouse_Move *move = event_info; + int dx; + int dy; + int x; + int y; + + evas_object_geometry_get(obj, &x, &y, NULL, NULL); + + dx = move->cur.canvas.x - move->prev.canvas.x; + dy = move->cur.canvas.y - move->prev.canvas.y; + + if ((abs(dx) > 5 || abs(dy) > 2 || cbdata->geo.x != x || cbdata->geo.y != y) && cbdata->long_press_timer) { + ecore_timer_del(cbdata->long_press_timer); + cbdata->long_press_timer = NULL; + } + + cbdata->x = move->cur.canvas.x; + cbdata->y = move->cur.canvas.y; + + if (cbdata->dnd.obj) { + Evas_Coord w; + Evas_Coord h; + + evas_object_geometry_get(cbdata->dnd.obj, NULL, NULL, &w, &h); + + evas_object_move(cbdata->dnd.obj, move->cur.canvas.x - (w >> 1), move->cur.canvas.y - (h >> 1)); + } +} + +static Evas_Object *winset_preview_add(struct widget_data *widget_data, Evas_Object *parent, struct add_viewer_package *package, const char *name, int type, int no_event) +{ + const char *size_str; + const char *icon_group; + Evas_Object *preview; + Evas_Object *thumbnail; + int w; + int h; + int ret; + int idx; + char *filename; + Evas_Object *bg; + + filename = widget_service_get_preview_image_path(add_viewer_package_list_pkgname(package), type); + + switch (type) { + case WIDGET_SIZE_TYPE_1x1: + size_str = "preview,1x1"; + icon_group = "default,1x1"; + idx = 8; + break; + case WIDGET_SIZE_TYPE_2x2: + size_str = "preview,2x2"; + icon_group = "default,2x2"; + idx = 8; + break; + case WIDGET_SIZE_TYPE_2x1: + case WIDGET_SIZE_TYPE_4x1: + case WIDGET_SIZE_TYPE_4x2: + case WIDGET_SIZE_TYPE_4x3: + case WIDGET_SIZE_TYPE_4x4: + case WIDGET_SIZE_TYPE_4x5: + case WIDGET_SIZE_TYPE_4x6: + case WIDGET_SIZE_TYPE_EASY_1x1: + case WIDGET_SIZE_TYPE_EASY_3x1: + case WIDGET_SIZE_TYPE_EASY_3x3: + default: + /* Unsupported */ + free(filename); + return NULL; + } + + preview = elm_layout_add(parent); + if (!preview) { + ErrPrint("Failed to add a new layout\n"); + free(filename); + return NULL; + } + + ret = elm_layout_file_set(preview, EDJE_FILE, size_str); + if (ret != EINA_TRUE) { + ErrPrint("Failed to load a layout file\n"); + evas_object_del(preview); + free(filename); + return NULL; + } + + bg = evas_object_rectangle_add(widget_data->e); + if (bg) { + elm_object_part_content_set(preview, "bg", bg); + bg_register_object(preview); + } + + /* Load image */ + if (filename) { + thumbnail = evas_object_image_filled_add(evas_object_evas_get(preview)); + if (!thumbnail) { + ErrPrint("Failed to add an image\n"); + evas_object_del(preview); + free(filename); + return NULL; + } + + evas_object_image_file_set(thumbnail, filename, NULL); + ret = evas_object_image_load_error_get(thumbnail); + if (ret != EVAS_LOAD_ERROR_NONE) { + ErrPrint("Failed to set file: %s\n", filename); + evas_object_image_file_set(thumbnail, UNKNOWN_ICON, NULL); + ret = evas_object_image_load_error_get(thumbnail); + if (ret != EVAS_LOAD_ERROR_NONE) { + ErrPrint("Failed to set file: %s\n", UNKNOWN_ICON); + evas_object_del(thumbnail); + evas_object_del(preview); + free(filename); + return NULL; + } + } + evas_object_image_size_get(thumbnail, &w, &h); + evas_object_image_fill_set(thumbnail, 0, 0, w, h); + free(filename); + } else { + Evas_Object *icon_image; + + filename = (char *)add_viewer_package_list_icon(package); + name = add_viewer_package_list_name(package); + + DbgPrint("Image file: [%s] (%s)\n", filename, name); + icon_image = evas_object_image_filled_add(evas_object_evas_get(preview)); + if (!icon_image) { + evas_object_del(preview); + return NULL; + } + + evas_object_image_file_set(icon_image, filename, NULL); + ret = evas_object_image_load_error_get(icon_image); + if (ret != EVAS_LOAD_ERROR_NONE) { + evas_object_image_file_set(icon_image, UNKNOWN_ICON, NULL); + ret = evas_object_image_load_error_get(icon_image); + if (ret != EVAS_LOAD_ERROR_NONE) { + ErrPrint("Failed to set file\n"); + evas_object_del(icon_image); + evas_object_del(preview); + return NULL; + } + } + evas_object_image_size_get(icon_image, &w, &h); + evas_object_image_fill_set(icon_image, 0, 0, w, h); + //evas_object_image_preload(icon_image, EINA_TRUE); + + thumbnail = elm_layout_add(parent); + if (!thumbnail) { + evas_object_del(icon_image); + evas_object_del(preview); + ErrPrint("Failed to create a layout\n"); + return NULL; + } + + if (elm_layout_file_set(thumbnail, EDJE_FILE, icon_group) != EINA_TRUE) { + ErrPrint("Failed to load a file\n"); + evas_object_del(icon_image); + evas_object_del(preview); + evas_object_del(thumbnail); + return NULL; + } + + elm_object_part_content_set(thumbnail, "icon", icon_image); + elm_object_part_text_set(thumbnail, "text", name); + } + + elm_object_part_content_set(preview, "preview", thumbnail); + + if (!name) { + name = add_viewer_package_list_name(package); + } + + elm_object_part_text_set(preview, "title", name); + + DbgPrint("[%s] Image %dx%d\n", name, w, h); + edje_object_size_min_calc(elm_layout_edje_get(preview), &w, &h); + evas_object_size_hint_min_set(preview, w, h); + DbgPrint("[%s] Image min %dx%d\n", name, w, h); + + if (!no_event) { + struct click *click_cbdata; + + click_cbdata = calloc(1, sizeof(*click_cbdata)); + if (!click_cbdata) { + ErrPrint("Heap: %d \n", errno); + evas_object_del(thumbnail); + evas_object_del(preview); + return NULL; + } + + click_cbdata->package = package; + click_cbdata->size = type; + click_cbdata->widget_data = widget_data; + elm_object_signal_callback_add(preview, "clicked", "preview", add_to_home_cb, click_cbdata); + evas_object_event_callback_add(preview, EVAS_CALLBACK_MOUSE_DOWN, preview_down_cb, click_cbdata); + evas_object_event_callback_add(preview, EVAS_CALLBACK_MOUSE_MOVE, preview_move_cb, click_cbdata); + evas_object_event_callback_add(preview, EVAS_CALLBACK_MOUSE_UP, preview_up_cb, click_cbdata); + evas_object_event_callback_add(preview, EVAS_CALLBACK_DEL, del_cb, click_cbdata); + + winset_access_object_add(parent, preview, size_str + idx, add_viewer_package_list_name(package)); + } + elm_object_signal_emit(preview, "hide,im", "line"); + elm_object_signal_emit(preview, add_viewer_package_is_skipped(package) ? "show" : "hide", "duplicated"); + edje_object_message_signal_process(elm_layout_edje_get(preview)); + + evas_object_show(preview); + return preview; +} + +HAPI Evas_Object *evas_object_add_viewer_add(Evas_Object *parent) +{ + struct widget_data *widget_data; + Evas_Object *add_viewer; + Evas *e; + + if (!s_info.smart) { + s_info.sc.add = widget_add; + s_info.sc.del = widget_del; + s_info.sc.move = widget_move; + s_info.sc.resize = widget_resize; + s_info.sc.show = widget_show; + s_info.sc.hide = widget_hide; + s_info.sc.color_set = widget_color_set; + s_info.sc.clip_set = widget_clip_set; + s_info.sc.clip_unset = widget_clip_unset; + + s_info.smart = evas_smart_class_new(&s_info.sc); + if (!s_info.smart) { + ErrPrint("Failed to create a new smart class\n"); + return NULL; + } + } + + e = evas_object_evas_get(parent); + if (!e) { + ErrPrint("Failed to get \"Evas\"\n"); + return NULL; + } + + /* + * Invoke widget_add callback + */ + add_viewer = evas_object_smart_add(e, s_info.smart); + if (!add_viewer) { + ErrPrint("Failed to create a new object\n"); + return NULL; + } + + widget_data = evas_object_smart_data_get(add_viewer); + if (!widget_data) { + ErrPrint("Failed to get smart data\n"); + evas_object_del(add_viewer); + return NULL; + } + + if (widget_data_setup(widget_data, parent) < 0) { + ErrPrint("Failed to initiate the widget_data\n"); + evas_object_del(add_viewer); + return NULL; + } + + reload_list_cb(NULL, widget_data); + + return add_viewer; +} + +HAPI void evas_object_add_viewer_conf_set(int type, int flag) +{ + switch (type) { + case ADD_VIEWER_CONF_DND: + s_info.enable_dnd = flag; + break; + default: + break; + } +} + +HAPI int evas_object_add_viewer_access_action(Evas_Object *obj, int type, void *info) +{ + struct widget_data *widget_data; + + if (!evas_object_smart_type_check(obj, ADD_VIEWER_CLASS_NAME)) { + return WIDGET_ERROR_INVALID_PARAMETER; + } + + widget_data = evas_object_smart_data_get(obj); + if (!widget_data) { + return WIDGET_ERROR_FAULT; + } + + elm_access_action(widget_data->scroller, type, info); + + return WIDGET_ERROR_NONE; +} + +HAPI int evas_object_add_viewer_reload(void) +{ + Eina_List *l; + Eina_List *n; + struct widget_data *widget_data; + + add_viewer_package_reload_name(); + + EINA_LIST_FOREACH_SAFE(s_info.add_viewer_list, l, n, widget_data) { + reload_list_cb(NULL, widget_data); + } + + return 0; +} + +/* End of a file */ diff --git a/home/src/add-viewer_package.c b/home/src/add-viewer_package.c new file mode 100644 index 0000000..865a0aa --- /dev/null +++ b/home/src/add-viewer_package.c @@ -0,0 +1,898 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#if defined(CHECK_PRELOAD) +#include +#endif + +#if defined(LOG_TAG) +#undef LOG_TAG +#endif +#define LOG_TAG "ADD_VIEWER" + +#include "add-viewer_package.h" +#include "add-viewer_debug.h" +#include "add-viewer_ucol.h" +#include "add-viewer_pkgmgr.h" + +static struct info { + Eina_List *package_list; + Eina_List *event_list; + int initialized; +} s_info = { + .package_list = NULL, + .event_list = NULL, + .initialized = 0, +}; + +struct package_list_event { + enum pkg_evt_type event; + struct add_viewer_package *package; + int (*cb)(struct add_viewer_package *package, void *data); + void *data; +}; + +struct add_viewer_preview { + int size_type; + void *data; +}; + +struct add_viewer_package { + enum { + PACKAGE_VALID = 0xbeefbeef, + PACKAGE_INVALID = 0xdeaddead, + } valid; + + char *name; /*!< Display name */ + char *pkgname; /*!< Package name */ + char *icon; + int disabled; + int skipped; + char *pkgid; + + struct { + char *key; + char *data; + } extra; + + enum package_type type; + Eina_List *preview_list; + + void *data; +}; + +static inline int sort_cb(const void *a, const void *b) +{ + int ret; + + ret = add_viewer_ucol_compare(add_viewer_package_list_name((struct add_viewer_package *)a), add_viewer_package_list_name((struct add_viewer_package *)b)); + return ret; +} + +#if defined(CHECK_PRELOAD) +static int is_preloaded(const char *pkgid) +{ + int ret; + bool preload; + pkgmgrinfo_pkginfo_h handle; + + ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle); + if (ret != PMINFO_R_OK) { + return 0; + } + + ret = pkgmgrinfo_pkginfo_is_preload(handle, &preload); + if (ret != PMINFO_R_OK) { + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + return 0; + } + + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + return preload == true ? 1 : 0; +} +#endif + +static int load_name_and_icon(struct add_viewer_package *item) +{ + item->name = widget_service_get_name(item->pkgname, NULL); + item->icon = widget_service_get_icon(item->pkgname, NULL); + if (item->icon && access(item->icon, R_OK) != 0) { + char *new_icon; + ErrPrint("%s - %s\n", item->icon, strerror(errno)); + new_icon = strdup(RESDIR"/image/unknown.png"); + if (new_icon) { + free(item->icon); + item->icon = new_icon; + } else { + ErrPrint("Heap: %s\n", strerror(errno)); + } + } + + if (!item->name || !item->icon) { + char *pkgname; + ail_appinfo_h ai; + int ret; + + pkgname = widget_service_get_main_app_id(item->pkgname); + if (!pkgname) { + ErrPrint("%s has no appid\n", item->pkgname); + return -EINVAL; + } + + ret = ail_get_appinfo(pkgname, &ai); + free((char *)pkgname); + + if (ret != AIL_ERROR_OK) { + ErrPrint("Failed to get appinfo: %s\n", add_viewer_package_list_pkgname(item)); + if (!item->name) { + ret = add_viewer_package_list_set_name(item, add_viewer_package_list_pkgname(item)); + if (ret != 0) { + return ret; + } + } + + if (!item->icon) { + ret = add_viewer_package_list_set_icon(item, RESDIR"/image/unknown.png"); + if (ret != 0) { + return ret; + } + } + + s_info.package_list = eina_list_sorted_insert(s_info.package_list, sort_cb, item); + return 0; + } + + if (!item->icon) { + char *icon; + ret = ail_appinfo_get_str(ai, AIL_PROP_ICON_STR, &icon); + if (ret != AIL_ERROR_OK || !icon || access(icon, R_OK) != 0) { + ErrPrint("Fail to get the icon path %s - %d\n", icon, errno); + icon = RESDIR"/image/unknown.png"; + } + + ret = add_viewer_package_list_set_icon(item, icon); + if (ret != 0) { + ail_destroy_appinfo(ai); + return ret; + } + } + + if (!item->name) { + char *name; + ret = ail_appinfo_get_str(ai, AIL_PROP_NAME_STR, &name); + if (ret != AIL_ERROR_OK || !name) { + name = item->pkgname; + } + + ret = add_viewer_package_list_set_name(item, name); + if (ret != 0) { + ail_destroy_appinfo(ai); + return ret; + } + } + + ail_destroy_appinfo(ai); + } + + return 0; +} + +static int widget_list_callback(const char *appid, const char *widget_id, int is_prime, void *data) +{ + struct add_viewer_package *item; + int cnt; + int *size_types; + int ret; + int valid_size; + struct add_viewer_preview *preview; + Eina_List *preview_list = NULL; + + if (!widget_id || !appid) { + ErrPrint("widget_id(%p) appid(%p) is not valid", widget_id, appid); + return 0; + } + + if (widget_service_get_nodisplay(widget_id) == 1) { + DbgPrint("NoDisplay: %s\n", widget_id); + return 0; + } + + cnt = WIDGET_NR_OF_SIZE_LIST; + ret = widget_service_get_supported_size_types(widget_id, &cnt, &size_types); + if (ret != WIDGET_ERROR_NONE) { + ErrPrint("Size is not valid: %s\n", widget_id); + return 0; + } + +#if defined(CHECK_PRELOAD) + int preloaded = 0; + if (cnt > 0) { + /*! + * If there are small size box, + * we should check whether it is preloaded or not. + * If it is preloaded packages, we have not to display it on the list. + */ + switch (size_types[0]) { + case WIDGET_SIZE_TYPE_1x1: + case WIDGET_SIZE_TYPE_2x1: + case WIDGET_SIZE_TYPE_2x2: + preloaded = is_preloaded(appid); + break; + default: + break; + } + } +#endif + + valid_size = 0; + while (--cnt >= 0) { + preview = NULL; + + switch (size_types[cnt]) { + case WIDGET_SIZE_TYPE_1x1: + case WIDGET_SIZE_TYPE_2x1: + case WIDGET_SIZE_TYPE_2x2: +#if defined(CHECK_PRELOAD) + if (preloaded) { + continue; + } +#endif + case WIDGET_SIZE_TYPE_4x1: + case WIDGET_SIZE_TYPE_4x2: + case WIDGET_SIZE_TYPE_4x3: + case WIDGET_SIZE_TYPE_4x4: + case WIDGET_SIZE_TYPE_4x5: + case WIDGET_SIZE_TYPE_4x6: + preview = calloc(1, sizeof(*preview)); + if (!preview) { + ErrPrint("Heap: %s\n", strerror(errno)); + EINA_LIST_FREE(preview_list, preview) { + free(preview); + } + free(size_types); + return -ENOMEM; + } + + valid_size++; + preview->size_type = size_types[cnt]; + preview->data = NULL; + preview_list = eina_list_append(preview_list, preview); + break; + case WIDGET_SIZE_TYPE_EASY_1x1: + case WIDGET_SIZE_TYPE_EASY_3x1: + case WIDGET_SIZE_TYPE_EASY_3x3: + break; + default: + break; + } + } + + if (!valid_size) { + DbgPrint("Has no valid size: %s\n", widget_id); + free(size_types); + return 0; + } + + item = calloc(1, sizeof(*item)); + if (!item) { + ErrPrint("Heap: %s\n", strerror(errno)); + EINA_LIST_FREE(preview_list, preview) { + free(preview); + } + free(size_types); + return -ENOMEM; + } + + item->pkgname = strdup(widget_id); + if (!item->pkgname) { + ErrPrint("Heap: %s\n", strerror(errno)); + free(item); + EINA_LIST_FREE(preview_list, preview) { + free(preview); + } + free(size_types); + return -ENOMEM; + } + + item->pkgid = strdup(appid); + if (!item->pkgid) { + ErrPrint("Heap: %s\n", strerror(errno)); + free(item->pkgname); + free(item); + EINA_LIST_FREE(preview_list, preview) { + free(preview); + } + free(size_types); + return -ENOMEM; + } + + item->type = PACKAGE_TYPE_BOX; + item->preview_list = preview_list; + ret = load_name_and_icon(item); + if (ret < 0) { + free(item->pkgid); + free(item->name); + free(item->icon); + free(item->pkgname); + free(item); + EINA_LIST_FREE(preview_list, preview) { + free(preview); + } + free(size_types); + return ret; + } + item->valid = PACKAGE_VALID; + s_info.package_list = eina_list_sorted_insert(s_info.package_list, sort_cb, item); + free(size_types); + return 0; +} + +static void invoke_update_event_callback(struct add_viewer_package *package) +{ + struct package_list_event *item; + Eina_List *l; + Eina_List *n; + + EINA_LIST_FOREACH_SAFE(s_info.event_list, l, n, item) { + if (item->package == package && item->event == PACKAGE_LIST_EVENT_UPDATE) { + if (item->cb(package, item->data) < 0) { + s_info.event_list = eina_list_remove(s_info.event_list, item); + free(item); + } + } + } +} + +static void invoke_del_event_callback(struct add_viewer_package *package) +{ + struct package_list_event *item; + Eina_List *l; + Eina_List *n; + + EINA_LIST_FOREACH_SAFE(s_info.event_list, l, n, item) { + if (item->package == package && item->event == PACKAGE_LIST_EVENT_DEL) { + if (item->cb(package, item->data) < 0) { + s_info.event_list = eina_list_remove(s_info.event_list, item); + free(item); + } + } + } +} + +static void invoke_reload_event_callback(void) +{ + struct package_list_event *item; + Eina_List *l; + Eina_List *n; + + EINA_LIST_FOREACH_SAFE(s_info.event_list, l, n, item) { + if (item->event == PACKAGE_LIST_EVENT_RELOAD) { + if (item->cb(NULL, item->data) < 0) { + s_info.event_list = eina_list_remove(s_info.event_list, item); + free(item); + } + } + } +} + +static void package_delete(struct add_viewer_package *package) +{ + struct add_viewer_preview *preview; + + s_info.package_list = eina_list_remove(s_info.package_list, package); + + DbgPrint("%s is deleted\n", package->pkgname); + + free(package->name); + free(package->pkgid); + free(package->pkgname); + free(package->icon); + free(package->extra.key); + free(package->extra.data); + + EINA_LIST_FREE(package->preview_list, preview) { + free(preview); + } + + free(package); +} + +static int widget_add_by_pkgid_cb(const char *widget_id, int is_prime, void *data) +{ + Eina_List *l; + struct add_viewer_package *item; + int exists = 0; + + DbgPrint("Add [%s]\n", widget_id); + + EINA_LIST_FOREACH(s_info.package_list, l, item) { + if (!strcmp(item->pkgname, widget_id)) { + exists = 1; + break; + } + } + + if (!exists) { + char *appid; + + appid = widget_service_get_package_id(widget_id); + if (appid) { + widget_list_callback(appid, widget_id, is_prime, NULL); + free(appid); + } + + EINA_LIST_FOREACH(s_info.package_list, l, item) { + if (!strcmp(item->pkgname, widget_id)) { + invoke_update_event_callback(item); + break; + } + } + } + + return 0; +} + +static int widget_del_by_pkgid_cb(const char *widget_id, int is_prime, void *data) +{ + Eina_List *l; + Eina_List *n; + struct add_viewer_package *item; + + DbgPrint("Del [%s]\n", widget_id); + + EINA_LIST_FOREACH_SAFE(s_info.package_list, l, n, item) { + if (!strcmp(item->pkgname, widget_id)) { + add_viewer_package_list_del(item); + break; + } + } + + return 0; +} + +static void widget_del_by_appid(const char *appid) +{ + Eina_List *l; + Eina_List *n; + struct add_viewer_package *item; + + DbgPrint("Del [%s]\n", appid); + EINA_LIST_FOREACH_SAFE(s_info.package_list, l, n, item) { + if (!strcmp(item->pkgid, appid)) { + DbgPrint("> Del [%s]\n", item->pkgname); + add_viewer_package_list_del(item); + /** + * A pakcage can manage the several widgets + * So we have to clean them all up + * Don't break this loop until clear all of them. + */ + } + } +} + +static int pkgmgr_install_cb(const char *pkgname, enum pkgmgr_status status, double value, void *data) +{ + if (status != PKGMGR_STATUS_END) { + return 0; + } + + widget_service_get_widget_list_by_pkgid(pkgname, widget_add_by_pkgid_cb, NULL); + + invoke_reload_event_callback(); + return 0; +} + +static int pkgmgr_uninstall_cb(const char *pkgname, enum pkgmgr_status status, double value, void *data) +{ + if (status != PKGMGR_STATUS_START) { + return 0; + } + + if (widget_service_get_widget_list_by_pkgid(pkgname, widget_del_by_pkgid_cb, NULL) <= 0) { + widget_del_by_appid(pkgname); + } + + invoke_reload_event_callback(); + return 0; +} + +static int pkgmgr_update_cb(const char *pkgname, enum pkgmgr_status status, double value, void *data) +{ + if (status == PKGMGR_STATUS_START) { + widget_service_get_widget_list_by_pkgid(pkgname, widget_del_by_pkgid_cb, NULL); + } else if (status == PKGMGR_STATUS_END) { + widget_service_get_widget_list_by_pkgid(pkgname, widget_add_by_pkgid_cb, NULL); + } + + invoke_reload_event_callback(); + return 0; +} + +HAPI int add_viewer_package_init(void) +{ + int ret; + int cnt = 0; + + if (s_info.initialized) { + return 0; + } + + s_info.initialized = 1; + + ret = add_viewer_pkgmgr_init(); + if (ret != WIDGET_ERROR_NONE && ret != WIDGET_ERROR_ALREADY_STARTED) { + ErrPrint("Failed to initialize the pkgmgr\n"); + } + + ret = widget_service_get_widget_list(widget_list_callback, NULL); + if (ret > 0) { + cnt += ret; + } + + add_viewer_pkgmgr_add_event_callback(PKGMGR_EVENT_INSTALL, pkgmgr_install_cb, NULL); + add_viewer_pkgmgr_add_event_callback(PKGMGR_EVENT_UPDATE, pkgmgr_update_cb, NULL); + add_viewer_pkgmgr_add_event_callback(PKGMGR_EVENT_UNINSTALL, pkgmgr_uninstall_cb, NULL); + + return 0; +} + +HAPI int add_viewer_package_fini(void) +{ + struct add_viewer_package *item; + struct add_viewer_preview *preview; + + if (!s_info.initialized) { + return 0; + } + + add_viewer_pkgmgr_del_event_callback(PKGMGR_EVENT_INSTALL, pkgmgr_install_cb, NULL); + add_viewer_pkgmgr_del_event_callback(PKGMGR_EVENT_UPDATE, pkgmgr_update_cb, NULL); + add_viewer_pkgmgr_del_event_callback(PKGMGR_EVENT_UNINSTALL, pkgmgr_uninstall_cb, NULL); + + s_info.initialized = 0; + + EINA_LIST_FREE(s_info.package_list, item) { + free(item->name); + free(item->pkgid); + free(item->pkgname); + free(item->icon); + free(item->extra.key); + free(item->extra.data); + + EINA_LIST_FREE(item->preview_list, preview) { + free(preview); + } + + item->valid = PACKAGE_INVALID; + free(item); + } + + (void)add_viewer_pkgmgr_fini(); + + return 0; +} + +HAPI void *add_viewer_package_list_handle(void) +{ + return s_info.package_list; +} + +HAPI struct add_viewer_package *add_viewer_package_list_item(void *handle) +{ + return eina_list_data_get(handle); +} + +HAPI void *add_viewer_package_list_next(void *handle) +{ + handle = eina_list_next(handle); + + if (!handle || s_info.package_list == handle) { + return NULL; + } + + return handle; +} + +HAPI void *add_viewer_package_list_prev(void *handle) +{ + if (!handle || handle == s_info.package_list) { + return NULL; + } + + return eina_list_prev(handle); +} + +HAPI int add_viewer_package_list_add_event_callback(struct add_viewer_package *package, int event, int (*cb)(struct add_viewer_package *package, void *data), void *data) +{ + struct package_list_event *item; + + item = calloc(1, sizeof(*item)); + if (!item) { + ErrPrint("Heap: Fail to calloc - %d\n", errno); + return -ENOMEM; + } + + item->event = event; + item->package = package; + item->cb = cb; + item->data = data; + + s_info.event_list = eina_list_append(s_info.event_list, item); + return 0; +} + +HAPI int add_viewer_package_list_del_event_callback(struct add_viewer_package *package, int event, int (*cb)(struct add_viewer_package *package, void *data), void *data) +{ + Eina_List *l; + Eina_List *n; + struct package_list_event *item; + int cnt = 0; + + EINA_LIST_FOREACH_SAFE(s_info.event_list, l, n, item) { + if (item->package == package && item->cb == cb && item->data == data && item->event == event) { + cnt++; + + s_info.event_list = eina_list_remove(s_info.event_list, item); + free(item); + } + } + + return cnt > 0 ? 0 : -ENOENT; +} + +HAPI void add_viewer_package_list_del(struct add_viewer_package *package) +{ + invoke_del_event_callback(package); + package_delete(package); +} + +HAPI const char *add_viewer_package_list_name(struct add_viewer_package *package) +{ + return package->name; +} + +HAPI const char *add_viewer_package_list_pkgname(struct add_viewer_package *package) +{ + return package->pkgname; +} + +HAPI const char *add_viewer_package_list_icon(struct add_viewer_package *package) +{ + return package->icon; +} + +HAPI int add_viewer_package_list_type(struct add_viewer_package *package) +{ + return package->type; +} + +HAPI const char *add_viewer_package_list_extra_key(struct add_viewer_package *package) +{ + return package->extra.key; +} + +HAPI const char *add_viewer_package_list_extra_data(struct add_viewer_package *package) +{ + return package->extra.data; +} + +HAPI int add_viewer_package_is_valid(struct add_viewer_package *package) +{ + return package->valid == PACKAGE_VALID; +} + +HAPI int add_viewer_package_list_set_name(struct add_viewer_package *package, const char *name) +{ + char *new_name; + + if (name) { + new_name = strdup(name); + if (!new_name) { + ErrPrint("Heap: Fail to strdup - %d \n", errno); + return -ENOMEM; + } + } else { + new_name = NULL; + } + + if (package->name) { + free(package->name); + } + + package->name = new_name; + return 0; +} + +HAPI int add_viewer_package_list_set_pkgname(struct add_viewer_package *package, const char *pkgname) +{ + char *new_name; + + if (pkgname) { + new_name = strdup(pkgname); + if (!new_name) { + ErrPrint("Heap: Fail to strdup - %d \n", errno); + return -ENOMEM; + } + } else { + new_name = NULL; + } + + if (package->pkgname) { + free(package->pkgname); + } + + package->pkgname = new_name; + return 0; +} + +HAPI int add_viewer_package_list_set_icon(struct add_viewer_package *package, const char *icon) +{ + char *new_name; + + if (icon) { + new_name = strdup(icon); + if (!new_name) { + ErrPrint("Heap: Fail to strdup - %d\n", errno); + return -ENOMEM; + } + } else { + new_name = NULL; + } + + if (package->icon) { + free(package->icon); + } + + package->icon = new_name; + return 0; +} + +HAPI void *add_viewer_package_list_preview_list(struct add_viewer_package *package) +{ + return package->preview_list; +} + +HAPI struct add_viewer_preview *add_viewer_package_list_preview(struct add_viewer_package *package, void *handle) +{ + return eina_list_data_get(handle); +} + +HAPI void *add_viewer_package_list_preview_next(struct add_viewer_package *package, void *handle) +{ + handle = eina_list_next(handle); + if (!handle || handle == package->preview_list) { + return NULL; + } + + return handle; +} + +HAPI void *add_viewer_package_list_preview_prev(struct add_viewer_package *package, void *handle) +{ + if (!handle || handle == package->preview_list) { + return NULL; + } + + handle = eina_list_prev(handle); + return handle; +} + +HAPI int add_viewer_package_list_preview_size(struct add_viewer_preview *preview) +{ + return preview->size_type; +} + +HAPI void *add_viewer_package_list_preview_data(struct add_viewer_preview *preview) +{ + return preview->data; +} + +HAPI void add_viewer_package_list_preview_set_data(struct add_viewer_preview *preview, void *data) +{ + preview->data = data; +} + +HAPI int add_viewer_package_is_disabled(struct add_viewer_package *package) +{ + return package->disabled; +} + +HAPI void add_viewer_package_set_disabled(struct add_viewer_package *package, int flag) +{ + package->disabled = flag; +} + +HAPI void add_viewer_package_set_skip(struct add_viewer_package *package, int skip) +{ + if (skip == 0) { + if (package->skipped > 0) { + package->skipped--; + } + } else { + package->skipped++; + } +} + +HAPI int add_viewer_package_is_skipped(struct add_viewer_package *package) +{ + return package->skipped; +} + +HAPI void *add_viewer_package_data(struct add_viewer_package *package) +{ + return package->data; +} + +HAPI void add_viewer_package_set_data(struct add_viewer_package *package, void *data) +{ + package->data = data; +} + +HAPI struct add_viewer_package *add_viewer_package_find(const char *widget_id) +{ + Eina_List *l; + struct add_viewer_package *package; + + EINA_LIST_FOREACH(s_info.package_list, l, package) { + if (!strcmp(package->pkgname, widget_id)) { + return package; + } + } + + return NULL; +} + +HAPI int add_viewer_package_reload_name(void) +{ + char *name; + char *icon; + struct add_viewer_package *package; + Eina_List *new_list = NULL; + + EINA_LIST_FREE(s_info.package_list, package) { + name = package->name; + icon = package->icon; + if (load_name_and_icon(package) < 0) { + ErrPrint("Unable to reload name: %s\n", package->pkgid); + package->name = name; + package->icon = icon; + } else { + free(name); + free(icon); + } + + new_list = eina_list_sorted_insert(new_list, sort_cb, package); + } + + s_info.package_list = new_list; + return 0; +} + +/* End of a file */ diff --git a/home/src/add-viewer_pkgmgr.c b/home/src/add-viewer_pkgmgr.c new file mode 100755 index 0000000..037938f --- /dev/null +++ b/home/src/add-viewer_pkgmgr.c @@ -0,0 +1,639 @@ +/* + * Samsung API + * Copyright (c) 2013 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 /* util.h */ +#include /* util.h */ + +#include "add-viewer_package.h" /* util.h */ +#include "add-viewer_util.h" +#include "add-viewer_debug.h" +#include "add-viewer_pkgmgr.h" + +#define DbgFree(a) free(a) + +#if defined(LOG_TAG) +#undef LOG_TAG +#endif +#define LOG_TAG "ADD_VIEWER" + +struct item { + char *pkgname; + char *icon; + + enum pkgmgr_event_type type; + enum pkgmgr_status status; +}; + +static struct { + pkgmgr_client *listen_pc; + Eina_List *item_list; + + Eina_List *install_event; + Eina_List *uninstall_event; + Eina_List *update_event; + Eina_List *download_event; + Eina_List *recover_event; +} s_info = { + .listen_pc = NULL, + .item_list = NULL, + + .install_event = NULL, + .uninstall_event = NULL, + .update_event = NULL, + .download_event = NULL, + .recover_event = NULL, +}; + +struct event_item { + int (*cb)(const char *pkgname, enum pkgmgr_status status, double value, void *data); + void *data; +}; + +static inline void invoke_install_event_handler(const char *pkgname, enum pkgmgr_status status, double value) +{ + Eina_List *l; + struct event_item *item; + + EINA_LIST_FOREACH(s_info.install_event, l, item) { + if (item->cb) { + item->cb(pkgname, status, value, item->data); + } + } +} + +static inline void invoke_uninstall_event_handler(const char *pkgname, enum pkgmgr_status status, double value) +{ + Eina_List *l; + struct event_item *item; + + EINA_LIST_FOREACH(s_info.uninstall_event, l, item) { + if (item->cb) { + item->cb(pkgname, status, value, item->data); + } + } +} + +static inline void invoke_update_event_handler(const char *pkgname, enum pkgmgr_status status, double value) +{ + Eina_List *l; + struct event_item *item; + + EINA_LIST_FOREACH(s_info.update_event, l, item) { + if (item->cb) { + item->cb(pkgname, status, value, item->data); + } + } +} + +static inline void invoke_download_event_handler(const char *pkgname, enum pkgmgr_status status, double value) +{ + Eina_List *l; + struct event_item *item; + + EINA_LIST_FOREACH(s_info.download_event, l, item) { + if (item->cb) { + item->cb(pkgname, status, value, item->data); + } + } +} + +static inline void invoke_recover_event_handler(const char *pkgname, enum pkgmgr_status status, double value) +{ + Eina_List *l; + struct event_item *item; + + EINA_LIST_FOREACH(s_info.recover_event, l, item) { + if (item->cb) { + item->cb(pkgname, status, value, item->data); + } + } +} + +static inline void invoke_callback(const char *pkgname, struct item *item, double value) +{ + switch (item->type) { + case PKGMGR_EVENT_DOWNLOAD: + invoke_download_event_handler(pkgname, item->status, value); + break; + case PKGMGR_EVENT_UNINSTALL: + invoke_uninstall_event_handler(pkgname, item->status, value); + break; + case PKGMGR_EVENT_INSTALL: + invoke_install_event_handler(pkgname, item->status, value); + break; + case PKGMGR_EVENT_UPDATE: + invoke_update_event_handler(pkgname, item->status, value); + break; + case PKGMGR_EVENT_RECOVER: + invoke_recover_event_handler(pkgname, item->status, value); + break; + default: + ErrPrint("Unknown type: %d\n", item->type); + break; + } +} + +static inline int is_valid_status(struct item *item, const char *status) +{ + const char *expected_status; + + switch (item->type) { + case PKGMGR_EVENT_DOWNLOAD: + expected_status = "download"; + break; + case PKGMGR_EVENT_UNINSTALL: + expected_status = "uninstall"; + break; + case PKGMGR_EVENT_INSTALL: + expected_status = "install"; + break; + case PKGMGR_EVENT_UPDATE: + expected_status = "update"; + break; + case PKGMGR_EVENT_RECOVER: + expected_status = "recover"; + break; + default: + return 0; + } + + return !strcasecmp(status, expected_status); +} + +static struct item *find_item(const char *pkgname) +{ + Eina_List *l; + struct item *item; + + if (!pkgname) { + ErrPrint("Package name is not valid\n"); + return NULL; + } + + EINA_LIST_FOREACH(s_info.item_list, l, item) { + if (strcmp(item->pkgname, pkgname)) { + continue; + } + + return item; + } + + DbgPrint("Package %s is not found\n", pkgname); + return NULL; +} + +static int start_cb(const char *pkgname, const char *val, void *data) +{ + struct item *item; + + DbgPrint("[%s] %s\n", pkgname, val); + + item = calloc(1, sizeof(*item)); + if (!item) { + ErrPrint("Heap: %s\n", strerror(errno)); + return WIDGET_ERROR_OUT_OF_MEMORY; + } + + item->pkgname = strdup(pkgname); + if (!item->pkgname) { + ErrPrint("Heap: %s\n", strerror(errno)); + DbgFree(item); + return WIDGET_ERROR_OUT_OF_MEMORY; + } + + item->status = PKGMGR_STATUS_START; + + if (!strcasecmp(val, "download")) { + item->type = PKGMGR_EVENT_DOWNLOAD; + } else if (!strcasecmp(val, "uninstall")) { + item->type = PKGMGR_EVENT_UNINSTALL; + } else if (!strcasecmp(val, "install")) { + item->type = PKGMGR_EVENT_INSTALL; + } else if (!strcasecmp(val, "update")) { + item->type = PKGMGR_EVENT_UPDATE; + } else if (!strcasecmp(val, "recover")) { + item->type = PKGMGR_EVENT_RECOVER; + } else { + DbgFree(item->pkgname); + DbgFree(item); + ErrPrint("Invalid val: %s\n", val); + return WIDGET_ERROR_INVALID_PARAMETER; + } + + s_info.item_list = eina_list_append(s_info.item_list, item); + + invoke_callback(pkgname, item, 0.0f); + return WIDGET_ERROR_NONE; +} + +static int icon_path_cb(const char *pkgname, const char *val, void *data) +{ + struct item *item; + + DbgPrint("[%s] %s\n", pkgname, val); + + item = find_item(pkgname); + if (!item) { + return WIDGET_ERROR_NOT_EXIST; + } + + if (item->icon) { + DbgFree(item->icon); + } + + item->icon = strdup(val); + if (!item->icon) { + ErrPrint("Heap: %s\n", strerror(errno)); + return WIDGET_ERROR_OUT_OF_MEMORY; + } + + return WIDGET_ERROR_NONE; +} + +static int command_cb(const char *pkgname, const char *val, void *data) +{ + struct item *item; + + DbgPrint("[%s] %s\n", pkgname, val); + + item = find_item(pkgname); + if (!item) { + return WIDGET_ERROR_NOT_EXIST; + } + + if (!is_valid_status(item, val)) { + DbgPrint("Invalid status: %d, %s\n", item->type, val); + return WIDGET_ERROR_INVALID_PARAMETER; + } + + item->status = PKGMGR_STATUS_COMMAND; + invoke_callback(pkgname, item, 0.0f); + return WIDGET_ERROR_NONE; +} + +static int error_cb(const char *pkgname, const char *val, void *data) +{ + /* val = error */ + struct item *item; + + DbgPrint("[%s] %s\n", pkgname, val); + + item = find_item(pkgname); + if (!item) { + return WIDGET_ERROR_NOT_EXIST; + } + + item->status = PKGMGR_STATUS_ERROR; + invoke_callback(pkgname, item, 0.0f); + return WIDGET_ERROR_NONE; +} + +static int change_pkgname_cb(const char *pkgname, const char *val, void *data) +{ + struct item *item; + char *new_pkgname; + + DbgPrint("[%s] %s\n", pkgname, val); + + item = find_item(pkgname); + if (!item) { + return WIDGET_ERROR_NOT_EXIST; + } + + new_pkgname = strdup(val); + if (!new_pkgname) { + ErrPrint("Heap: %s\n", strerror(errno)); + return WIDGET_ERROR_OUT_OF_MEMORY; + } + + DbgFree(item->pkgname); + item->pkgname = new_pkgname; + return WIDGET_ERROR_NONE; +} + +static int download_cb(const char *pkgname, const char *val, void *data) +{ + /* val = integer */ + struct item *item; + double value; + + DbgPrint("[%s] %s\n", pkgname, val); + + item = find_item(pkgname); + if (!item) { + DbgPrint("ITEM is not started from the start_cb\n"); + return WIDGET_ERROR_INVALID_PARAMETER; + } + + if (item->type != PKGMGR_EVENT_DOWNLOAD) { + DbgPrint("TYPE is not \"download\" : %d\n", item->type); + item->type = PKGMGR_EVENT_DOWNLOAD; + } + + switch (item->status) { + case PKGMGR_STATUS_START: + case PKGMGR_STATUS_COMMAND: + item->status = PKGMGR_STATUS_PROCESSING; + case PKGMGR_STATUS_PROCESSING: + break; + default: + ErrPrint("Invalid state [%s, %s]\n", pkgname, val); + return WIDGET_ERROR_INVALID_PARAMETER; + } + + if (val) { + if (sscanf(val, "%lf", &value) != 1) { + value = (double)WIDGET_ERROR_INVALID_PARAMETER; + } + } else { + value = (double)WIDGET_ERROR_INVALID_PARAMETER; + } + + invoke_download_event_handler(pkgname, item->status, value); + return WIDGET_ERROR_NONE; +} + +static int progress_cb(const char *pkgname, const char *val, void *data) +{ + /* val = integer */ + struct item *item; + double value; + + DbgPrint("[%s] %s\n", pkgname, val); + + item = find_item(pkgname); + if (!item) { + ErrPrint("ITEM is not started from the start_cb\n"); + return WIDGET_ERROR_INVALID_PARAMETER; + } + + switch (item->status) { + case PKGMGR_STATUS_START: + case PKGMGR_STATUS_COMMAND: + item->status = PKGMGR_STATUS_PROCESSING; + case PKGMGR_STATUS_PROCESSING: + break; + default: + ErrPrint("Invalid state [%s, %s]\n", pkgname, val); + return WIDGET_ERROR_INVALID_PARAMETER; + } + + if (val) { + if (sscanf(val, "%lf", &value) != 1) { + value = (double)WIDGET_ERROR_INVALID_PARAMETER; + } + } else { + value = (double)WIDGET_ERROR_INVALID_PARAMETER; + } + + invoke_callback(pkgname, item, value); + return WIDGET_ERROR_NONE; +} + +static int end_cb(const char *pkgname, const char *val, void *data) +{ + struct item *item; + + DbgPrint("[%s] %s\n", pkgname, val); + + item = find_item(pkgname); + if (!item) { + return WIDGET_ERROR_NOT_EXIST; + } + + item->status = !strcasecmp(val, "ok") ? PKGMGR_STATUS_END : PKGMGR_STATUS_ERROR; + + invoke_callback(pkgname, item, 0.0f); + + s_info.item_list = eina_list_remove(s_info.item_list, item); + DbgFree(item->icon); + DbgFree(item->pkgname); + DbgFree(item); + return WIDGET_ERROR_NONE; +} + +static struct pkgmgr_handler { + const char *key; + int (*func)(const char *package, const char *val, void *data); +} handler[] = { + { "install_percent", progress_cb }, + { "download_percent", download_cb }, + { "start", start_cb }, + { "end", end_cb }, + { "change_pkg_name", change_pkgname_cb }, + { "icon_path", icon_path_cb }, + { "command", command_cb }, + { "error", error_cb }, + { NULL, NULL }, +}; + +static int pkgmgr_cb(int req_id, const char *type, const char *pkgname, const char *key, const char *val, const void *pmsg, void *data) +{ + register int i; + int ret; + + for (i = 0; handler[i].key; i++) { + if (strcasecmp(key, handler[i].key)) { + continue; + } + + ret = handler[i].func(pkgname, val, data); + if (ret < 0) { + DbgPrint("REQ[%d] pkgname[%s], type[%s], key[%s], val[%s], ret = %d\n", + req_id, pkgname, type, key, val, ret); + } + } + + return WIDGET_ERROR_NONE; +} + +HAPI int add_viewer_pkgmgr_init(void) +{ + if (s_info.listen_pc) { + return WIDGET_ERROR_ALREADY_STARTED; + } + + s_info.listen_pc = pkgmgr_client_new(PC_LISTENING); + if (!s_info.listen_pc) { + ErrPrint("Failed to client_new\n"); + return WIDGET_ERROR_FAULT; + } + + if (pkgmgr_client_listen_status(s_info.listen_pc, pkgmgr_cb, NULL) != PKGMGR_R_OK) { + ErrPrint("Failed to add listener\n"); + return WIDGET_ERROR_FAULT; + } + + return WIDGET_ERROR_NONE; +} + +HAPI int add_viewer_pkgmgr_fini(void) +{ + struct event_item *item; + struct item *ctx; + + if (!s_info.listen_pc) { + return WIDGET_ERROR_INVALID_PARAMETER; + } + + if (pkgmgr_client_free(s_info.listen_pc) != PKGMGR_R_OK) { + return WIDGET_ERROR_FAULT; + } + + s_info.listen_pc = NULL; + + EINA_LIST_FREE(s_info.download_event, item) { + DbgFree(item); + } + + EINA_LIST_FREE(s_info.uninstall_event, item) { + DbgFree(item); + } + + EINA_LIST_FREE(s_info.install_event, item) { + DbgFree(item); + } + + EINA_LIST_FREE(s_info.update_event, item) { + DbgFree(item); + } + + EINA_LIST_FREE(s_info.recover_event, item) { + DbgFree(item); + } + + EINA_LIST_FREE(s_info.item_list, ctx) { + DbgFree(ctx->pkgname); + DbgFree(ctx->icon); + DbgFree(ctx); + } + + return WIDGET_ERROR_NONE; +} + +HAPI int add_viewer_pkgmgr_add_event_callback(enum pkgmgr_event_type type, int (*cb)(const char *pkgname, enum pkgmgr_status status, double value, void *data), void *data) +{ + struct event_item *item; + + item = calloc(1, sizeof(*item)); + if (!item) { + ErrPrint("Heap: Fail to calloc - %d \n", errno); + return WIDGET_ERROR_OUT_OF_MEMORY; + } + + item->cb = cb; + item->data = data; + + switch (type) { + case PKGMGR_EVENT_DOWNLOAD: + s_info.download_event = eina_list_prepend(s_info.download_event, item); + break; + case PKGMGR_EVENT_UNINSTALL: + s_info.uninstall_event = eina_list_prepend(s_info.uninstall_event, item); + break; + case PKGMGR_EVENT_INSTALL: + s_info.install_event = eina_list_prepend(s_info.install_event, item); + break; + case PKGMGR_EVENT_UPDATE: + s_info.update_event = eina_list_prepend(s_info.update_event, item); + break; + case PKGMGR_EVENT_RECOVER: + s_info.recover_event = eina_list_prepend(s_info.recover_event, item); + break; + default: + DbgFree(item); + return WIDGET_ERROR_INVALID_PARAMETER; + } + + return WIDGET_ERROR_NONE; +} + +HAPI void *add_viewer_pkgmgr_del_event_callback(enum pkgmgr_event_type type, int (*cb)(const char *pkgname, enum pkgmgr_status status, double value, void *data), void *data) +{ + struct event_item *item; + Eina_List *l; + void *cbdata = NULL; + + switch (type) { + case PKGMGR_EVENT_DOWNLOAD: + EINA_LIST_FOREACH(s_info.download_event, l, item) { + if (item->cb == cb && item->data == data) { + s_info.download_event = eina_list_remove(s_info.download_event, item); + cbdata = item->data; + DbgFree(item); + break; + } + } + break; + case PKGMGR_EVENT_UNINSTALL: + EINA_LIST_FOREACH(s_info.uninstall_event, l, item) { + if (item->cb == cb && item->data == data) { + s_info.uninstall_event = eina_list_remove(s_info.uninstall_event, item); + cbdata = item->data; + DbgFree(item); + break; + } + } + break; + case PKGMGR_EVENT_INSTALL: + EINA_LIST_FOREACH(s_info.install_event, l, item) { + if (item->cb == cb && item->data == data) { + s_info.install_event = eina_list_remove(s_info.install_event, item); + cbdata = item->data; + DbgFree(item); + break; + } + } + break; + case PKGMGR_EVENT_UPDATE: + EINA_LIST_FOREACH(s_info.update_event, l, item) { + if (item->cb == cb && item->data == data) { + s_info.update_event = eina_list_remove(s_info.update_event, item); + cbdata = item->data; + DbgFree(item); + break; + } + } + break; + case PKGMGR_EVENT_RECOVER: + EINA_LIST_FOREACH(s_info.recover_event, l, item) { + if (item->cb == cb && item->data == data) { + s_info.recover_event = eina_list_remove(s_info.recover_event, item); + cbdata = item->data; + DbgFree(item); + break; + } + } + break; + default: + ErrPrint("Invalid type\n"); + break; + } + + return cbdata; +} + +/* End of a file */ diff --git a/home/src/add-viewer_ucol.c b/home/src/add-viewer_ucol.c new file mode 100755 index 0000000..ce31a62 --- /dev/null +++ b/home/src/add-viewer_ucol.c @@ -0,0 +1,785 @@ +/* + * Samsung API + * Copyright (c) 2013 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 _GNU_SOURCE + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include "add-viewer_debug.h" +#include "add-viewer_ucol.h" +#include "add-viewer_package.h" +#include "add-viewer_util.h" + +#if defined(LOG_TAG) +#undef LOG_TAG +#endif +#define LOG_TAG "ADD_VIEWER" + +static struct info { + UCollator *coll; + enum LANGUAGE lang; + char *env_lang; +} s_info = { + .coll = NULL, + .lang = LANG_ENGLISH, + .env_lang = NULL, +}; + +HAPI int add_viewer_ucol_init(void) +{ + const char *env; + UErrorCode status = U_ZERO_ERROR; + + env = getenv("LANG"); + if (env) { + if (!strcasecmp(env, "en_US.utf-8")) { + s_info.lang = LANG_ENGLISH; + s_info.env_lang = "en_US.utf-8"; + } else if (!strcasecmp(env, "ja_JP.utf-8")) { + s_info.lang = LANG_JAPANESS; + s_info.env_lang = "ja_JP.utf-8"; + } else if (!strcasecmp(env, "ko_KR.utf-8")) { + s_info.lang = LANG_KOREAN; + s_info.env_lang = "ko_KR.utf-8"; + } + } + + s_info.coll = ucol_open(NULL, &status); + if (U_FAILURE(status)) { + ErrPrint("Failed to open ucol (%d)\n", status); + ucol_close(s_info.coll); + s_info.coll = NULL; + } + + status = U_ZERO_ERROR; + ucol_setAttribute(s_info.coll, UCOL_NORMALIZATION_MODE, UCOL_ON, &status); + if (U_FAILURE(status)) { + ErrPrint("Failed to open ucol (%d)\n", status); + ucol_close(s_info.coll); + s_info.coll = NULL; + } + + ucol_setStrength(s_info.coll, UCOL_PRIMARY); + return 0; +} + +static inline UChar *to_UTF16(const char *src, int *out_len) +{ + UChar *res; + UErrorCode status = U_ZERO_ERROR; + int len; + + u_strFromUTF8(NULL, 0, &len, src, -1, &status); + + res = malloc((len + 1) * sizeof(*res)); + if (!res) { + ErrPrint("Heap: %s\n", strerror(errno)); + return NULL; + } + + status = U_ZERO_ERROR; + u_strFromUTF8(res, len + 1, &len, src, -1, &status); + if (U_FAILURE(status)) { + ErrPrint("Unable to convert(%s) to UTF16(%s)\n", src, u_errorName(status)); + free(res); + return NULL; + } + res[len] = (UChar)0; + + if (out_len) { + *out_len = len; + } + return res; +} + +static inline char *to_UTF8(UChar *src, int *out_len) +{ + char *res; + UErrorCode status = U_ZERO_ERROR; + int len; + + u_strToUTF8(NULL, 0, &len, src, -1, &status); + + res = malloc((len + 1) * sizeof(*res)); + if (!res) { + ErrPrint("Heap: %s\n", strerror(errno)); + return NULL; + } + + status = U_ZERO_ERROR; + u_strToUTF8(res, len + 1, &len, src, -1, &status); + if (U_FAILURE(status)) { + ErrPrint("Unable to convert to UTF8(%s)\n", u_errorName(status)); + free(res); + return NULL; + } + res[len] = '\0'; + + if (out_len) { + *out_len = len; + } + + return res; +} + +static inline int hangul_to_jamo(const char *index) +{ + Eina_Unicode *ret; + Eina_Unicode tmp = 0; + int base = 0xAC00; + int last = 0xD79F; + int a; + static int table[] = { + 0x00003131, 0x00003131, + 0x00003134, + 0x00003137, 0x00003137, + 0x00003139, + 0x00003141, + 0x00003142, 0x00003142, + 0x00003145, 0x00003145, + 0x00003147, + 0x00003148, 0x00003148, + 0x0000314a, + 0x0000314b, + 0x0000314c, + 0x0000314d, + 0x0000314e, + /* + 0xb184e3, 0xb284e3, 0xb484e3, 0xb784e3, 0xb884e3, 0xb984e3, + 0x8185e3, 0x8285e3, 0x8385e3, 0x8585e3, 0x8685e3, 0x8785e3, + 0x8885e3, 0x8985e3, 0x8a85e3, 0x8b85e3, 0x8c85e3, 0x8d85e3, + 0x8e85e3, + */ + }; + + ret = eina_unicode_utf8_to_unicode(index, &a); + if (ret) { + tmp = *ret; + free(ret); + } + + if (tmp < base || tmp > last) { + return tmp; + } + + tmp = tmp - base; + a = tmp / (21 * 28); + return table[a]; +} + +#define __isalpha(a) (((a) >= 'a' && (a) <= 'z') || ((a) >= 'A' && (a) <= 'Z')) +#define __tolower(a) (((a) >= 'A' && (a) <= 'Z') ? (a) + 32 : (a)) + +HAPI int add_viewer_ucol_compare_first_letters(const char *name, const char *letters) +{ + if (!letters) { + ErrPrint("letter is NULL"); + return -1; + } + + if (s_info.lang == LANG_KOREAN) { + int jamo_name; + int jamo_letters = 0; + Eina_Unicode *ucs; + + jamo_name = hangul_to_jamo(name); + + ucs = eina_unicode_utf8_to_unicode(letters, &jamo_letters); + if (ucs) { + jamo_letters = (int)*ucs; + free(ucs); + } + + if (__isalpha(jamo_letters)) { + if (!__isalpha(jamo_name)) { + //DbgPrint("%d - %d (%s, %s)\n", jamo_name, jamo_letters, name, letters); + return -1; + } + + return __tolower(jamo_name) - __tolower(jamo_letters); + } + + return jamo_name - jamo_letters; + } + + return add_viewer_ucol_ncompare(name, letters, strlen(letters)); +} + +HAPI int add_viewer_ucol_is_alpha(const char *name) +{ + Eina_Unicode *ucs; + int len; + int letter = 0; + + ucs = eina_unicode_utf8_to_unicode(name, &len); + if (ucs) { + letter = (int)*ucs; + free(ucs); + } + + return __isalpha(letter); +} + +HAPI int add_viewer_ucol_detect_lang(int ch) +{ +// int result; + int lang; +// int status; +// int size; + + /* + u_strToUpper((UChar *)&ch, 1, (UChar *)&result, -1, NULL, &status); + if (U_FAILURE(status)) { + ErrPrint("u_strToLower: %s\n", u_errorName(status)); + return LANG_UNKNOWN; + } + + size = unorm_normalize((UChar *)&result, 1, UNORM_NFD, 0, (UChar *)&result, 1, &status); + if (U_FAILURE(status)) { + ErrPrint("unorm_normalize: %s\n", u_errorName(status)); + return LANG_UNKNOWN; + } + */ + + lang = ublock_getCode(ch); + switch (lang) { + case UBLOCK_HIRAGANA: + case UBLOCK_KATAKANA: + case UBLOCK_KATAKANA_PHONETIC_EXTENSIONS: + case UBLOCK_JAVANESE: + case UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS: + lang = LANG_JAPANESS; + break; + case UBLOCK_HANGUL_JAMO: + case UBLOCK_HANGUL_COMPATIBILITY_JAMO: + case UBLOCK_HANGUL_SYLLABLES: + case UBLOCK_HANGUL_JAMO_EXTENDED_A: + case UBLOCK_HANGUL_JAMO_EXTENDED_B: + lang = LANG_KOREAN; + break; + case UBLOCK_BASIC_LATIN: // = 1, /*[0000]*/ + case UBLOCK_LATIN_1_SUPPLEMENT: // =2, /*[0080]*/ + case UBLOCK_LATIN_EXTENDED_A: // =3, /*[0100]*/ + case UBLOCK_LATIN_EXTENDED_B: // =4, /*[0180]*/ + case UBLOCK_LATIN_EXTENDED_ADDITIONAL: // =38, /*[1E00]*/ + lang = LANG_ENGLISH; + break; + case UBLOCK_CJK_RADICALS_SUPPLEMENT: //=58, /*[2E80]*/ + case UBLOCK_CJK_SYMBOLS_AND_PUNCTUATION: //=61, /*[3000]*/ + case UBLOCK_ENCLOSED_CJK_LETTERS_AND_MONTHS: //=68, /*[3200]*/ + case UBLOCK_CJK_STROKES: // =130, /*[31C0]*/ + case UBLOCK_CJK_COMPATIBILITY: // =69, /*[3300]*/ + case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A: //=70, /*[3400]*/ + case UBLOCK_CJK_UNIFIED_IDEOGRAPHS: //=71, /*[4E00]*/ + case UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS: //=79, /*[F900]*/ + case UBLOCK_CJK_COMPATIBILITY_FORMS: //=83, /*[FE30]*/ + case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B : // =94, /*[20000]*/ + case UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT: // =95, /*[2F800]*/ + case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C: // =197, /*[2A700]*/ + case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D: // =209, /*[2B740]*/ + lang = LANG_CHINESS; + break; + default: + DbgPrint("Detected unknown: %d\n", lang); + lang = LANG_UNKNOWN; + break; + } + + return lang; +} + +static char *ucol_toupper(const char *haystack) +{ + UChar *_haystack; + UChar *u_haystack; + int haystack_len; + UErrorCode status = U_ZERO_ERROR; + int ret; + char *utf8_ret; + + u_haystack = to_UTF16(haystack, &haystack_len); + if (!u_haystack) { + // Error will be printed by to_UTF16 + return NULL; + } + + haystack_len = u_strToUpper(NULL, 0, u_haystack, -1, NULL, &status); + + _haystack = malloc(sizeof(*_haystack) * (haystack_len + 1)); + if (!_haystack) { + ErrPrint("Heap: %s\n", strerror(errno)); + free(u_haystack); + return NULL; + } + + //ret = u_strFoldCase((UChar *)_haystack, haystack_len, (UChar *)haystack, -1, U_FOLD_CASE_DEFAULT, &status); + status = U_ZERO_ERROR; + ret = u_strToUpper(_haystack, haystack_len + 1, u_haystack, -1, NULL, &status); + free(u_haystack); + if (U_FAILURE(status)) { + ErrPrint("upper: %s\n", u_errorName(status)); + free(_haystack); + return NULL; + } + + utf8_ret = to_UTF8(_haystack, &ret); + free(_haystack); + + return utf8_ret; +} + +HAPI int add_viewer_ucol_case_ncompare(const char *src, const char *dest, int len) +{ + char *_src; + char *_dest; + int ret; + + if (!src || !dest || len <= 0) { + return -EINVAL; + } + + if (!s_info.coll) { + ErrPrint("Fallback to strncasecmp\n"); + return strncasecmp(src, dest, len); + } + + _src = ucol_toupper(src); + if (!_src) { + return -EFAULT; + } + + _dest = ucol_toupper(dest); + if (!_dest) { + free(_src); + return -EFAULT; + } + + ret = add_viewer_ucol_ncompare(_src, _dest, len); + + free(_src); + free(_dest); + return ret; +} + +HAPI int add_viewer_ucol_ncompare(const char *src, const char *dest, int len) +{ + UChar *src_uni; + UChar *dest_uni; + UCollationResult res; + int32_t dest_len; + int32_t src_len; + char *tmp; + + if (!src || !dest || len <= 0) { + return -EINVAL; + } + + if (!s_info.coll) { + ErrPrint("Fallback to strcmp\n"); + return strncmp(src, dest, len); + } + + tmp = malloc(len + 1); + if (!tmp) { + ErrPrint("Heap: Fail to malloc - %d \n", errno); + return strncmp(src, dest, len); + } + strncpy(tmp, dest, len); + tmp[len] = '\0'; + + /* To get the ucs16 len */ + src_uni = to_UTF16(tmp, &len); + free(tmp); + if (!src_uni) { + ErrPrint("Failed get utf16\n"); + return strncmp(src, dest, len); + } + free(src_uni); + + src_uni = to_UTF16(src, &src_len); + if (!src_uni) { + ErrPrint("SRC: Failed to convert to UTF16\n"); + return strncmp(src, dest, len); + } + + dest_uni = to_UTF16(dest, &dest_len); + if (!dest_uni) { + ErrPrint("DEST: Failed to convert to UTF16\n"); + free(src_uni); + return strncmp(src, dest, len); + } + + switch (s_info.lang) { + case LANG_JAPANESS: + if (__isalpha(*src_uni) && !__isalpha(*dest_uni)) { + res = UCOL_GREATER; + } else if (!__isalpha(*src_uni) && __isalpha(*dest_uni)) { + res = UCOL_LESS; + } else { + int src_lang; + int dest_lang; + + src_lang = add_viewer_ucol_detect_lang(*src_uni); + dest_lang = add_viewer_ucol_detect_lang(*dest_uni); + + if (src_lang == LANG_JAPANESS && dest_lang != LANG_JAPANESS) { + res = UCOL_LESS; + } else if (src_lang != LANG_JAPANESS && dest_lang == LANG_JAPANESS) { + res = UCOL_GREATER; + } else { + res = ucol_strcoll(s_info.coll, (UChar *)src_uni, len, (UChar *)dest_uni, len); + } + } + break; + case LANG_KOREAN: + if (__isalpha(*src_uni) && !__isalpha(*dest_uni)) { + res = UCOL_GREATER; + } else if (!__isalpha(*src_uni) && __isalpha(*dest_uni)) { + res = UCOL_LESS; + } else { + int src_lang; + int dest_lang; + + src_lang = add_viewer_ucol_detect_lang(*src_uni); + dest_lang = add_viewer_ucol_detect_lang(*dest_uni); + + if (src_lang == LANG_KOREAN && dest_lang != LANG_KOREAN) { + res = UCOL_LESS; + } else if (src_lang != LANG_KOREAN && dest_lang == LANG_KOREAN) { + res = UCOL_GREATER; + } else { + res = ucol_strcoll(s_info.coll, (UChar *)src_uni, len, (UChar *)dest_uni, len); + } + } + break; + case LANG_ENGLISH: + default: + /* + if (__isalpha(*src_uni) && !__isalpha(*dest_uni)) { + res = UCOL_LESS; + } else if (!__isalpha(*src_uni) && __isalpha(*dest_uni)) { + res = UCOL_GREATER; + } else { + */ + res = ucol_strcoll(s_info.coll, (UChar *)src_uni, len, (UChar *)dest_uni, len); + /* + } + */ + } + + free(src_uni); + free(dest_uni); + + switch (res) { + case UCOL_LESS: + return -1; + + case UCOL_EQUAL: + return 0; + + case UCOL_GREATER: + return 1; + + default: + DbgPrint("%s ? %s\n", src, dest); + return 0; + } +} + +HAPI int add_viewer_ucol_case_compare(const char *src, const char *dest) +{ + char *_src; + char *_dest; + int ret; + + if (!src || !dest) { + return -EINVAL; + } + + if (!s_info.coll) { + ErrPrint("Fallback to strcasecmp\n"); + return strcasecmp(src, dest); + } + + _src = ucol_toupper(src); + if (!_src) { + return -EFAULT; + } + + _dest = ucol_toupper(dest); + if (!_dest) { + free(_src); + return -EFAULT; + } + + ret = add_viewer_ucol_compare(_src, _dest); + free(_src); + free(_dest); + return ret; +} + +HAPI int add_viewer_ucol_compare(const char *src, const char *dest) +{ + UChar *src_uni; + UChar *dest_uni; + UCollationResult res; + int32_t dest_len; + int32_t src_len; + int len; + + if (!src || !dest) { + return -EINVAL; + } + + if (!s_info.coll) { + ErrPrint("Fallback to strcmp\n"); + return strcmp(src, dest); + } + + src_uni = to_UTF16(src, &src_len); + if (!src_uni) { + ErrPrint("SRC: Failed to convert to UTF16\n"); + return strcmp(src, dest); + } + + dest_uni = to_UTF16(dest, &dest_len); + if (!dest_uni) { + ErrPrint("DEST: Failed to convert to UTF16\n"); + free(src_uni); + return strcmp(src, dest); + } + + len = src_len > dest_len ? dest_len : src_len; + + switch (s_info.lang) { + case LANG_JAPANESS: + if (__isalpha(*src_uni) && !__isalpha(*dest_uni)) { + res = UCOL_GREATER; + } else if (!__isalpha(*src_uni) && __isalpha(*dest_uni)) { + res = UCOL_LESS; + } else { + int src_lang; + int dest_lang; + + src_lang = add_viewer_ucol_detect_lang(*src_uni); + dest_lang = add_viewer_ucol_detect_lang(*dest_uni); + + if (src_lang == LANG_JAPANESS && dest_lang != LANG_JAPANESS) { + res = UCOL_LESS; + } else if (src_lang != LANG_JAPANESS && dest_lang == LANG_JAPANESS) { + res = UCOL_GREATER; + } else { + res = ucol_strcoll(s_info.coll, (UChar *)src_uni, len, (UChar *)dest_uni, len); + } + } + break; + case LANG_KOREAN: + if (__isalpha(*src_uni) && !__isalpha(*dest_uni)) { + res = UCOL_GREATER; + } else if (!__isalpha(*src_uni) && __isalpha(*dest_uni)) { + res = UCOL_LESS; + } else { + int src_lang; + int dest_lang; + + src_lang = add_viewer_ucol_detect_lang(*src_uni); + dest_lang = add_viewer_ucol_detect_lang(*dest_uni); + + if (src_lang == LANG_KOREAN && dest_lang != LANG_KOREAN) { + res = UCOL_LESS; + } else if (src_lang != LANG_KOREAN && dest_lang == LANG_KOREAN) { + res = UCOL_GREATER; + } else { + res = ucol_strcoll(s_info.coll, (UChar *)src_uni, len, (UChar *)dest_uni, len); + } + } + break; + case LANG_ENGLISH: + default: + if (__isalpha(*src_uni) && !__isalpha(*dest_uni)) { + res = UCOL_LESS; + } else if (!__isalpha(*src_uni) && __isalpha(*dest_uni)) { + res = UCOL_GREATER; + } else { + res = ucol_strcoll(s_info.coll, (UChar *)src_uni, len, (UChar *)dest_uni, len); + } + } + + free(src_uni); + free(dest_uni); + + switch (res) { + case UCOL_LESS: + return -1; + + case UCOL_EQUAL: + if (src_len > dest_len) { + return 1; + } else if (src_len == dest_len) { + return 0; + } + + return -1; + + case UCOL_GREATER: + return 1; + + default: + DbgPrint("%s ? %s\n", src, dest); + return 0; + } +} + +HAPI int add_viewer_ucol_case_search(const char *haystack, const char *needle) +{ + char *_haystack; + char *_needle; + const char *ptr; + int len; + int needle_len; + int idx; + int ret; + + if (!haystack || !needle) { + return -EINVAL; + } + + if (!s_info.coll) { + ErrPrint("Fallback to strcasestr\n"); + ptr = strcasestr(haystack, needle); + if (!ptr) { + return -ENOENT; + } + + return (int)(ptr - haystack); + } + + _haystack = ucol_toupper(haystack); + if (!_haystack) { + // Error will be printed by ucol_toupper + return -EFAULT; + } + + _needle = ucol_toupper(needle); + if (!_needle) { + // Error will be printed by ucol_toupper + free(_haystack); + return -EFAULT; + } + + needle_len = strlen(_needle); + len = strlen(_haystack) - needle_len; + if (len == 0) { + ret = add_viewer_ucol_compare(_haystack, _needle); + free(_needle); + free(_haystack); + return ret == 0 ? 0 : -ENOENT; + } else if (len < 0) { + free(_haystack); + free(_needle); + return -ENOENT; + } + + for (idx = 0; idx <= len; ) { + ret = add_viewer_ucol_ncompare(_haystack + idx, _needle, needle_len); + if (ret == 0) { + free(_haystack); + free(_needle); + return idx; + } + + idx += add_viewer_util_get_utf8_len(_haystack[idx]); + } + + free(_haystack); + free(_needle); + return -ENOENT; +} + +HAPI int add_viewer_ucol_search(const char *haystack, const char *needle) +{ + int ret; + int len; + const char *ptr; + int idx; + int needle_len; + + if (!haystack || !needle) { + return -EINVAL; + } + + if (!s_info.coll) { + ErrPrint("Fallback to strstr\n"); + ptr = strstr(haystack, needle); + if (!ptr) { + return -ENOENT; + } + + return (int)(ptr - haystack); + } + + needle_len = strlen(needle); + len = strlen(haystack) - needle_len; + if (len == 0) { + return add_viewer_ucol_compare(haystack, needle) == 0 ? 0 : -ENOENT; + } else if (len < 0) { + return -ENOENT; + } + + for (idx = 0; idx < len;) { + ret = add_viewer_ucol_ncompare(haystack + idx, needle, needle_len); + if (ret == 0) { + return idx; + } + + idx += add_viewer_util_get_utf8_len(haystack[idx]); + } + + return -ENOENT; +} + +HAPI int add_viewer_ucol_fini(void) +{ + if (s_info.coll) { + ucol_close(s_info.coll); + s_info.coll = NULL; + } + return 0; +} + +HAPI const int add_viewer_ucol_current_lang(void) +{ + return s_info.lang; +} + +/* End of a file */ diff --git a/home/src/add-viewer_util.c b/home/src/add-viewer_util.c new file mode 100755 index 0000000..f0d47aa --- /dev/null +++ b/home/src/add-viewer_util.c @@ -0,0 +1,391 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#if defined(USE_APP_MANAGER) +#include +#endif + +#include + +#include "add-viewer_debug.h" +#include "add-viewer_package.h" +#include "add-viewer_util.h" +#include "add-viewer_ucol.h" + +#if defined(LOG_TAG) +#undef LOG_TAG +#endif +#define LOG_TAG "ADD_VIEWER" + +#define MATCH_COLOR "#ee00eeff" + +static struct { + char *setup; + struct { + int r; + int g; + int b; + int a; + } matched_color; +} s_info = { + .setup = NULL, + .matched_color = { + .r = 0xee, + .g = 0x00, + .b = 0xee, + .a = 0xff, + }, +}; + +struct result_data { + struct add_viewer_package *package; + int size; +}; + +extern int appsvc_allow_transient_app(bundle *b, Ecore_X_Window id); + +#if defined(USE_APP_MANAGER) +static void app_ctx_cb(app_context_h app_context, app_context_event_e event, void *user_data) +{ + char *pkgname = NULL; + + if (app_context_get_app_id(app_context, &pkgname) != APP_MANAGER_ERROR_NONE) { + ErrPrint("Failed to get pkgname\n"); + return; + } + + if (!pkgname) { + ErrPrint("Failed to get package name\n"); + return; + } + + switch (event) { + case APP_CONTEXT_EVENT_LAUNCHED: + break; + case APP_CONTEXT_EVENT_TERMINATED: + /*! + * \note + * This must be called later than response callback + */ + if (s_info.setup && !strcmp(pkgname, s_info.setup)) { + ErrPrint("Setup app is terminated [%s]\n", s_info.setup); + free(s_info.setup); + s_info.setup = NULL; + elm_exit(); + } + break; + default: + break; + } + + free(pkgname); + return; +} +#else +#include + +extern int aul_listen_app_dead_signal(int (*func)(int signal, void *data), void *data); + +int _dead_cb(int pid, void *data) +{ + char pkgname[256]; + + if (aul_app_get_pkgname_bypid(pid, pkgname, sizeof(pkgname)) != AUL_R_OK) { + ErrPrint("Failed to get pkgname for %d\n", pid); + return 0; + } + + if (s_info.setup && !strcmp(pkgname, s_info.setup)) { + ErrPrint("Setup app is terminated [%s]\n", s_info.setup); + free(s_info.setup); + s_info.setup = NULL; + elm_exit(); + } + + return 0; +} +#endif + +HAPI int add_viewer_util_init(void) +{ +#if defined(USE_APP_MANAGER) + app_manager_set_app_context_event_cb(app_ctx_cb, NULL); +#else + aul_listen_app_dead_signal(_dead_cb, NULL); +#endif + return 0; +} + +HAPI int add_viewer_util_fini(void) +{ +#if defined(USE_APP_MANAGER) + app_manager_unset_app_context_event_cb(); +#endif + return 0; +} + +static void response_callback(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data) +{ + struct result_data *res_data = user_data; + char *content_info = NULL; + + if (s_info.setup) { + free(s_info.setup); + s_info.setup = NULL; + } + + if (result != APP_CONTROL_RESULT_SUCCEEDED) { + ErrPrint("Operation is canceled: %d\n", result); + elm_exit(); + return; + } + + app_control_get_extra_data(reply, EXTRA_KEY_CONTENT_INFO , &content_info); + + /** + * \TODO + * Use this content_info to add a new widget + */ + + free(res_data); + + /** + * If the box is successfully added, do we need to terminate this? + */ +} + +HAPI int add_viewer_util_add_to_home(struct add_viewer_package *package, int size, int use_noti) +{ + int ret = -EINVAL; + char *setup; + + setup = widget_service_get_app_id_of_setup_app(add_viewer_package_list_pkgname(package)); + if (setup) { + app_control_h service; + struct result_data *res_data; + + if (s_info.setup) { + ErrPrint("Setup is already launched: %s\n", s_info.setup); + free(s_info.setup); + s_info.setup = NULL; + } + + DbgPrint("Setup App: %s\n", setup); + + res_data = malloc(sizeof(*res_data)); + if (!res_data) { + free(setup); + return -ENOMEM; + } + + res_data->package = package; + res_data->size = size; + + ret = app_control_create(&service); + if (ret != APP_CONTROL_ERROR_NONE) { + free(setup); + free(res_data); + return -EFAULT; + } + + ret = app_control_set_app_id(service, setup); + if (ret != APP_CONTROL_ERROR_NONE) { + free(setup); + free(res_data); + app_control_destroy(service); + return -EFAULT; + } + + ret = app_control_set_operation(service, SERVICE_OPERATION_WIDGET_SETUP); + if (ret != APP_CONTROL_ERROR_NONE) { + free(setup); + free(res_data); + app_control_destroy(service); + return -EFAULT; + } + + ret = app_control_send_launch_request(service, response_callback, res_data); + + app_control_destroy(service); + + if (ret != APP_CONTROL_ERROR_NONE) { + free(res_data); + free(setup); + } else { + s_info.setup = setup; + } + } else { + /** + * \TODO + * Create a new widget without content_info + */ + } + + return ret; +} + +HAPI int add_viewer_util_is_lcd_off(void) +{ + display_state_e state; + + if (device_display_get_state(&state) != 0) { + ErrPrint("Idle lock state is not valid\n"); + state = DISPLAY_STATE_NORMAL; /* UNLOCK */ + } + + return state == DISPLAY_STATE_SCREEN_OFF; +} + +HAPI char *add_viewer_util_highlight_keyword(const char *name, const char *filter) +{ + char *highlighted_name; + int filter_len; + int name_len; + int target_idx = 0; + int tag_len; + int ret_len; + const int amp_len = strlen("&"); + const char *org_name = name; + + if (!name) { + ErrPrint("Cannot get name"); + return NULL; + } + + if (!filter) { + ErrPrint("Cannot get filter"); + return NULL; + } + + filter_len = strlen(filter); + name_len = strlen(name); + tag_len = strlen(""); + ret_len = name_len + 1; + + highlighted_name = malloc(ret_len); + if (!highlighted_name) { + ErrPrint("Heap: %s\n", strerror(errno)); + return NULL; + } + + while (*name) { + if (*name == '&') { + char *tmp; + + ret_len += amp_len; + tmp = realloc(highlighted_name, ret_len); + if (!tmp) { + ErrPrint("Heap: Fail to realloc - %d \n", errno); + free(highlighted_name); + return NULL; + } + highlighted_name = tmp; + + /*! + * Manipulate tagging + */ + strncpy(highlighted_name + target_idx, "&", amp_len); + target_idx += amp_len; + name++; + } else if ((name_len - (int)(name - org_name)) < filter_len) { + int idx_len; + + idx_len = name_len - (int)(name - org_name); + + strncpy(highlighted_name + target_idx, name, idx_len); + target_idx += idx_len; + name += idx_len; + } else if (!add_viewer_ucol_case_ncompare(name, filter, filter_len)) { + char *tmp; + + ret_len += tag_len; + tmp = realloc(highlighted_name, ret_len); + if (!tmp) { + ErrPrint("Heap: %s\n", strerror(errno)); + free(highlighted_name); + return NULL; + } + highlighted_name = tmp; + + /*! + * Manipulate tagging + */ + tmp = malloc(filter_len + 1); + if (!tmp) { + ErrPrint("Heap: Fail to malloc - %d \n", errno); + free(highlighted_name); + return NULL; + } + strncpy(tmp, name, filter_len); /* Keep original string */ + tmp[filter_len] = '\0'; + + target_idx += snprintf(highlighted_name + target_idx, ret_len - target_idx, + "%s", + s_info.matched_color.r, + s_info.matched_color.g, + s_info.matched_color.b, + s_info.matched_color.a, + tmp + ); + free(tmp); + name += filter_len; + } else { + int idx_len; + + idx_len = add_viewer_util_get_utf8_len(*name); + strncpy(highlighted_name + target_idx, name, idx_len); + target_idx += idx_len; + name += idx_len; + } + } + + highlighted_name[target_idx] = '\0'; + return highlighted_name; +} + +HAPI int add_viewer_util_get_utf8_len(char ch) +{ + int idx_len; + if ((ch & 0x80) == 0x00) { + idx_len = 1; + } else if ((ch & 0xE0) == 0xC0) { + idx_len = 2; + } else if ((ch & 0xF0) == 0xE0) { + idx_len = 3; + } else if ((ch & 0xFC) == 0xF8) { + idx_len = 4; + } else if ((ch & 0xFE) == 0xFC) { + idx_len = 5; + } else if ((ch & 0xFF) == 0xFE) { + idx_len = 6; + } else { + idx_len = 1; + } + + return idx_len; +} + +/* End of a file */ diff --git a/home/src/apps/apps_main.c b/home/src/apps/apps_main.c new file mode 100755 index 0000000..c316cbc --- /dev/null +++ b/home/src/apps/apps_main.c @@ -0,0 +1,931 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#include +#include + +#include "log.h" +#include "util.h" +#include "tutorial.h" +#include "apps/bg.h" +#include "apps/db.h" +#include "apps/effect.h" +#include "apps/item_info.h" +#include "apps/lang.h" +#include "apps/layout.h" +#include "apps/list.h" +#include "apps/apps_main.h" +#include "apps/pkgmgr.h" +#include "apps/scroller.h" +#include "apps/scroller_info.h" +#include "apps/xml.h" +#include "wms.h" +#include "noti_broker.h" + + +#define LAYOUT_EDJE EDJEDIR"/apps_layout.edj" +#define LAYOUT_GROUP_NAME "layout" +#define VCONFKEY_APPS_IS_FIRST_BOOT "db/private/org.tizen.w-home/apps_first_boot" + +#define PRIVATE_DATA_KEY_EFFECT_ENABLE_ID "k_ef_en" +#define PRIVATE_DATA_KEY_EFFECT_POS_ID "k_ef_ps" + +#define PRIVATE_DATA_KEY_FOCUS_IN_EVENT_HANDLER "k_fi_ev_hd" +#define PRIVATE_DATA_KEY_FOCUS_OUT_EVENT_HANDLER "k_fo_ev_hd" + + +static apps_main_s apps_main_info = { + .instance_list = NULL, + .theme = NULL, + .color_theme = NULL, + .font_theme = NULL, + .first_boot = 0, + .tts = 0, + .longpress_edit_disable = false, +}; + + + +typedef struct { + apps_error_e (*result_cb)(void *); + void *result_data; +} cb_s; + + + +static void _init_theme(instance_info_s *info) +{ + apps_main_info.theme = elm_theme_new(); + elm_theme_ref_set(apps_main_info.theme, NULL); + elm_theme_extension_add(apps_main_info.theme, EDJEDIR"/apps_grid.edj"); + + /* Default Changeable UI State : off */ + ea_theme_changeable_ui_enabled_set(EINA_FALSE); + + if (!apps_main_info.color_theme) { + apps_main_info.color_theme = ea_theme_color_table_new(PREFIX"/shared/res/tables/org.tizen.w-home_apps_ChangeableColorInfo.xml"); + ret_if (!apps_main_info.color_theme); + } + /* Default Theme Style : DEFAULT */ + ea_theme_style_set(EA_THEME_STYLE_DEFAULT); + ea_theme_colors_set(apps_main_info.color_theme, EA_THEME_STYLE_DEFAULT); + + if (!apps_main_info.font_theme) { + apps_main_info.font_theme = ea_theme_font_table_new(PREFIX"/shared/res/tables/org.tizen.w-home_apps_ChangeableFontInfo.xml"); + ret_if(!apps_main_info.font_theme); + } + ea_theme_fonts_set(apps_main_info.font_theme); + + ea_theme_system_colors_apply(); + ea_theme_system_fonts_apply(); +} + + + +static void _destroy_theme(instance_info_s *info) +{ + elm_theme_extension_del(apps_main_info.theme, EDJEDIR"/apps_grid.edj"); + elm_theme_free(apps_main_info.theme); + apps_main_info.theme = NULL; + + if (apps_main_info.color_theme) { + ea_theme_color_table_free(apps_main_info.color_theme); + apps_main_info.color_theme = NULL; + } + if (apps_main_info.font_theme) { + ea_theme_font_table_free(apps_main_info.font_theme); + apps_main_info.font_theme = NULL; + } +} + + + +static apps_error_e _rotate_cb(instance_info_s *info, int angle) +{ + Evas_Object *layout = NULL; + + _APPS_D("Enter _rotate_cb, angle is %d", angle); + info->angle = angle; + + switch (angle) { + case 0: + _APPS_D("Portrait normal"); + info->is_rotated = 0; + break; + case 90: + _APPS_D("Landscape reverse"); + info->is_rotated = 1; + break; + case 180: + _APPS_D("Portrait reverse"); + info->is_rotated = 0; + break; + case 270: + _APPS_D("Landscape normal"); + info->is_rotated = 1; + break; + default: + _APPS_E("Cannot reach here, angle is %d", angle); + } + + layout = evas_object_data_get(info->win, DATA_KEY_LAYOUT); + retv_if(NULL == layout, APPS_ERROR_FAIL); + apps_layout_rotate(layout, info->is_rotated); + + return APPS_ERROR_NONE; +} + + + +static void _rotation_changed_cb(void *data, Evas_Object *obj, void *event) +{ + instance_info_s *info = data; + int changed_ang = elm_win_rotation_get(info->win); + + _APPS_D("Angle: %d", changed_ang); + + if (changed_ang != info->angle) { + _rotate_cb(info, changed_ang); + } +} + + + +static apps_error_e _init_layout(instance_info_s *info) +{ + Evas_Object *bg = NULL; + int angle; + + retv_if(!info, APPS_ERROR_INVALID_PARAMETER); + + info->layout = evas_object_data_get(info->win, DATA_KEY_LAYOUT); + retv_if(info->layout, APPS_ERROR_FAIL); + + info->layout = apps_layout_create(info->win, LAYOUT_EDJE, LAYOUT_GROUP_NAME); + retv_if(!info->layout, APPS_ERROR_FAIL); + + evas_object_data_set(info->win, DATA_KEY_LAYOUT, info->layout); + evas_object_resize(info->layout, info->root_w, info->root_h); + evas_object_show(info->layout); + + if (APPS_ERROR_FAIL == apps_effect_init()) { + _APPS_E("Failed to init effect sound"); + } + + bg = apps_bg_create(info->win, info->root_w, info->root_h); + if (!bg) { + _APPS_E("Cannot create bg"); + } + + angle = elm_win_rotation_get(info->win); + _APPS_D("Angle: %d\n", angle); + + if (APPS_ERROR_NONE != _rotate_cb(info, angle)) { + _APPS_E("Rotate error."); + } + evas_object_smart_callback_add(info->win, "wm,rotation,changed", _rotation_changed_cb, info); + + info->state = APPS_APP_STATE_RESET; + + return APPS_ERROR_NONE; +} + + + +static void _destroy_layout(instance_info_s *info) +{ + evas_object_smart_callback_del(info->win, "wm,rotation,changed", _rotation_changed_cb); + + apps_bg_destroy(info->win); + + apps_effect_fini(); + evas_object_data_del(info->win, DATA_KEY_LAYOUT); + if (info->layout) apps_layout_destroy(info->layout); +} + + + +#if 0 /* EFL private features */ +static void _apps_slide_down_effect_add(instance_info_s *info) +{ + Evas_Object *win = NULL; + int xwin; + int angle = 0; + int size = 0; + char *buf = NULL; + int id = 0; + + win = info->win; + ret_if(!win); + + xwin = elm_win_xwindow_get(win); + + id = elm_win_aux_hint_add(win, "wm.comp.win.effect.enable", "1"); + if (-1 == id) _APPS_E("Failed to get effect enable id"); + else evas_object_data_set(win, PRIVATE_DATA_KEY_EFFECT_ENABLE_ID, (void *)id); + + id = 0; + angle = elm_win_rotation_get(win); + size = snprintf(NULL, 0, "%x.%d.%d.%d.%d.%d", xwin, angle, 0, info->root_h, info->root_w, info->root_h) + 1; + buf = (char *)malloc(sizeof(char) * size); + if (buf) { + snprintf(buf, size, "%x.%d.%d.%d.%d.%d", xwin, angle, 0, info->root_h, info->root_w, info->root_h); + id = elm_win_aux_hint_add(win, "wm.comp.win.effect.launch.pos", buf); + if (-1 == id) _APPS_E("Failed to get effect id"); + else evas_object_data_set(win, PRIVATE_DATA_KEY_EFFECT_POS_ID, (void *)id); + + free(buf); + } +} + + + +static void _apps_slide_down_effect_del(instance_info_s *info) +{ + int id; + + id = (int) evas_object_data_get(info->win, PRIVATE_DATA_KEY_EFFECT_ENABLE_ID); + elm_win_aux_hint_del(info->win, id); + id = (int) evas_object_data_get(info->win, PRIVATE_DATA_KEY_EFFECT_POS_ID); + elm_win_aux_hint_del(info->win, id); +} +#endif + + + +static Eina_Bool _window_focus_in_cb(void *data, int type, void *event) +{ + instance_info_s *info = data; + Ecore_X_Event_Window_Focus_In *ev = event; + + Ecore_X_Window xWin = elm_win_xwindow_get(info->win); + if(xWin == ev->win) { + _APPS_D("focus in"); + noti_broker_event_fire_to_plugin(EVENT_SOURCE_VIEW, EVENT_TYPE_APPS_SHOW, NULL); + apps_main_resume(); + } + else { + _APPS_E("win[%d], ev->win[%d]", xWin, ev->win); + } + + return ECORE_CALLBACK_PASS_ON; +} + + + +static Eina_Bool _window_focus_out_cb(void *data, int type, void *event) +{ + instance_info_s *info = data; + Ecore_X_Event_Window_Focus_Out *ev = event; + + Ecore_X_Window xWin = elm_win_xwindow_get(info->win); + if(xWin == ev->win) { + _APPS_D("focus out"); + noti_broker_event_fire_to_plugin(EVENT_SOURCE_VIEW, EVENT_TYPE_APPS_HIDE, NULL); + apps_main_pause(); + } + else { + _APPS_E("win[%d], ev->win[%d]", xWin, ev->win); + } + + return ECORE_CALLBACK_PASS_ON; +} + + + +#define ROTATION_TYPE_NUMBER 1 +static apps_error_e _init_app_win(instance_info_s *info, const char *name, const char *title) +{ + unsigned int opaque_val = 0; + Ecore_X_Atom opaque_atom; + Ecore_X_Window xwin; + Ecore_X_Window root_win; + + retv_if(!name, APPS_ERROR_INVALID_PARAMETER); + retv_if(!title, APPS_ERROR_INVALID_PARAMETER); + + /* Open GL backend */ + elm_config_accel_preference_set("opengl"); + + root_win = ecore_x_window_root_first_get(); + ecore_x_window_size_get(root_win, &info->root_w, &info->root_h); + + info->win = elm_win_add(NULL, name, ELM_WIN_BASIC); + retv_if(!info->win, APPS_ERROR_FAIL); + apps_main_info.instance_list = eina_list_append(apps_main_info.instance_list, info); + + elm_win_alpha_set(info->win, EINA_FALSE); // This order is important + elm_win_role_set(info->win, "no-effect"); + +#if 0 /* EFL private features */ + _apps_slide_down_effect_add(info); +#endif + + opaque_atom = ecore_x_atom_get("_E_ILLUME_WINDOW_REGION_OPAQUE"); + xwin = elm_win_xwindow_get(info->win); + ecore_x_window_prop_card32_set(xwin, opaque_atom, &opaque_val, 1); + ecore_x_vsync_animator_tick_source_set(xwin); + + if (elm_win_wm_rotation_supported_get(info->win)) { + const int rots[ROTATION_TYPE_NUMBER] = {0}; + elm_win_wm_rotation_available_rotations_set(info->win, rots, ROTATION_TYPE_NUMBER); + } + + evas_object_color_set(info->win, 0, 0, 0, 0); + evas_object_resize(info->win, info->root_w, info->root_h); + evas_object_hide(info->win); + evas_object_data_set(info->win, DATA_KEY_INSTANCE_INFO, info); + + elm_win_title_set(info->win, title); + elm_win_borderless_set(info->win, EINA_TRUE); + + info->e = evas_object_evas_get(info->win); + if (!info->e) { + _APPS_E("[%s] Failed to get the e object", __func__); + } + + info->ee = ecore_evas_ecore_evas_get(info->e); + if (!info->ee) { + _APPS_E("[%s] Failed to get ecore_evas object", __func__); + } + + Ecore_Event_Handler *handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, _window_focus_in_cb, info); + evas_object_data_set(info->win, PRIVATE_DATA_KEY_FOCUS_IN_EVENT_HANDLER, handler); + + handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _window_focus_out_cb, info); + evas_object_data_set(info->win, PRIVATE_DATA_KEY_FOCUS_OUT_EVENT_HANDLER, handler); + + return APPS_ERROR_NONE; +} + + + +static void _destroy_app_win(instance_info_s *info) +{ + ret_if(!info); + + evas_object_data_del(info->win, DATA_KEY_INSTANCE_INFO); + + Ecore_Event_Handler *handler = evas_object_data_del(info->win, PRIVATE_DATA_KEY_FOCUS_IN_EVENT_HANDLER); + if (handler) ecore_event_handler_del(handler); + + handler = evas_object_data_del(info->win, PRIVATE_DATA_KEY_FOCUS_OUT_EVENT_HANDLER); + if (handler) ecore_event_handler_del(handler); + +#if 0 /* EFL private features */ + _apps_slide_down_effect_del(info); +#endif + + evas_object_del(info->win); + info->win = NULL; + apps_main_info.instance_list = eina_list_remove(apps_main_info.instance_list, info); +} + + + +HAPI apps_main_s *apps_main_get_info(void) +{ + return &apps_main_info; +} + + +HAPI apps_error_e apps_main_register_cb( + instance_info_s *info, + int state, + apps_error_e (*result_cb)(void *), void *result_data) +{ + cb_s *cb = NULL; + + retv_if(NULL == result_cb, APPS_ERROR_INVALID_PARAMETER); + + cb = calloc(1, sizeof(cb_s)); + retv_if(NULL == cb, APPS_ERROR_FAIL); + + cb->result_cb = result_cb; + cb->result_data = result_data; + + info->cbs_list[state] = eina_list_append(info->cbs_list[state], cb); + retv_if(NULL == info->cbs_list[state], APPS_ERROR_FAIL); + + return APPS_ERROR_NONE; +} + + + +HAPI void apps_main_unregister_cb( + instance_info_s *info, + int state, + apps_error_e (*result_cb)(void *)) +{ + const Eina_List *l; + const Eina_List *n; + cb_s *cb; + EINA_LIST_FOREACH_SAFE(info->cbs_list[state], l, n, cb) { + continue_if(NULL == cb); + if (result_cb != cb->result_cb) continue; + info->cbs_list[state] = eina_list_remove(info->cbs_list[state], cb); + free(cb); + return; + } +} + + + +static void _execute_cbs(instance_info_s *info, int state) +{ + const Eina_List *l; + const Eina_List *n; + cb_s *cb; + EINA_LIST_FOREACH_SAFE(info->cbs_list[state], l, n, cb) { + continue_if(NULL == cb); + continue_if(NULL == cb->result_cb); + + if (APPS_ERROR_NONE != cb->result_cb(cb->result_data)) _APPS_E("There are some problems"); + } +} + + +HAPI void apps_main_init() +{ + _APPS_D("APPS INIT"); + + /* Data set */ + instance_info_s *info = NULL; + if(eina_list_count(apps_main_info.instance_list) == 0) { + info = calloc(1, sizeof(instance_info_s)); + ret_if(NULL == info); + } else { + _APPS_E(""); + return; + } + + info->state = APPS_APP_STATE_CREATE; + + appcore_measure_start(); + + apps_pkgmgr_init(); + + if (vconf_get_int(VCONFKEY_APPS_IS_FIRST_BOOT, &apps_main_info.first_boot) < 0) { + _APPS_E("Cannot get the vconf for %s", VCONFKEY_APPS_IS_FIRST_BOOT); + } + vconf_set_int(VCONFKEY_APPS_IS_FIRST_BOOT, 0); + + apps_main_info.scale = elm_config_scale_get(); + + if (vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &apps_main_info.tts) < 0) { + _APPS_E("Cannot get the vconf for %s", VCONFKEY_SETAPPL_ACCESSIBILITY_TTS); + } + + apps_main_info.longpress_edit_disable = true; + + _execute_cbs(info, APPS_APP_STATE_CREATE); + appcore_set_i18n(PROJECT, LOCALEDIR); + + ret_if(APPS_ERROR_FAIL == _init_app_win(info, "__APPS__", "__APPS__")); + ret_if(APPS_ERROR_FAIL == _init_layout(info)); + + /* After creating a window */ + _init_theme(info); + + return; +} + +HAPI void apps_main_fini() +{ + instance_info_s *info = eina_list_nth(apps_main_get_info()->instance_list, 0); + ret_if(NULL == info); + + info->state = APPS_APP_STATE_TERMINATE; + _execute_cbs(info, APPS_APP_STATE_TERMINATE); + + _destroy_layout(info); + _destroy_app_win(info); + _destroy_theme(info); +} + + + +static void _toast_popup_destroy_cb(Evas_Object *parent, Evas_Object *popup) +{ + ret_if(!popup); + ret_if(!parent); + + evas_object_del(popup); + evas_object_data_del(parent, DATA_KEY_CHECK_POPUP); +} + + + +static Eina_Bool _destroy_animator_cb(void *data) +{ + Evas_Object *parent = data; + Evas_Object *popup = NULL; + + retv_if(!parent, ECORE_CALLBACK_CANCEL); + + popup = evas_object_data_get(parent, DATA_KEY_CHECK_POPUP); + retv_if(!popup, ECORE_CALLBACK_CANCEL); + + _toast_popup_destroy_cb(parent, popup); + + return ECORE_CALLBACK_CANCEL; +} + + + +static void _popup_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *popup = NULL; + Evas_Object *check = NULL; + Evas_Object *parent = NULL; + int state = 0; + + parent = data; + ret_if(!parent); + + popup = evas_object_data_get(parent, DATA_KEY_CHECK_POPUP); + ret_if(!popup); + check = evas_object_data_del(popup, DATA_KEY_CHECK); + ret_if(!check); + + state = (int)elm_check_state_get(check); + _D("check state is %d", state); + + if (state) vconf_set_int(VCONFKEY_APPS_IS_INITIAL_POPUP, 0); + + ecore_animator_add(_destroy_animator_cb, parent); +} + + + +HAPI void apps_main_launch(int launch_type) +{ + _APPS_D("APPS LAUNCH"); + + if(eina_list_count(apps_main_info.instance_list) == 0) { + apps_main_init(); + } + instance_info_s *info = eina_list_nth(apps_main_get_info()->instance_list, 0); + ret_if(!info); + + if (launch_type == APPS_LAUNCH_EDIT) { + _APPS_D("Edit the Apps"); + + apps_layout_edit(info->layout); + + if (APPS_ERROR_FAIL == apps_layout_show(info->win, EINA_TRUE)) { + _APPS_E("Cannot show tray"); + } + } else if (launch_type == APPS_LAUNCH_HIDE) { + _APPS_D("Hide the Apps"); + if (info->win) { + _APPS_D("There is a window already"); + apps_layout_show(info->win, EINA_FALSE); + return; + } + + /* Standalone */ + if (APPS_ERROR_FAIL == apps_layout_show(info->win, EINA_FALSE)) { + _APPS_E("Cannot show tray"); + } + } else if (launch_type == APPS_LAUNCH_SHOW) { + int initial_popup; + _APPS_D("Show the Apps"); + if (vconf_get_int(VCONFKEY_APPS_IS_INITIAL_POPUP, &initial_popup) < 0) { + _APPS_E("Cannot get the vconf for %s", VCONFKEY_APPS_IS_INITIAL_POPUP); + initial_popup = 1; + } + + if (info->win) { + _APPS_D("There is a window already"); + apps_layout_show(info->win, EINA_TRUE); + if (!tutorial_is_exist() && initial_popup) { + util_create_check_popup(info->win, NULL, _popup_clicked_cb); + } + return; + } + + /* Standalone */ + if (APPS_ERROR_FAIL == apps_layout_show(info->win, EINA_TRUE)) { + _APPS_E("Cannot show tray"); + } + if (!tutorial_is_exist() && initial_popup) { + util_create_check_popup(info->win, NULL, _popup_clicked_cb); + } + } + + _execute_cbs(info, APPS_APP_STATE_RESET); +} + + +HAPI void apps_main_pause() +{ + if(eina_list_count(apps_main_info.instance_list) == 0) { + _APPS_E("Pause starts"); + return; + } + + instance_info_s *info = eina_list_nth(apps_main_get_info()->instance_list, 0); + ret_if(!info); + + _APPS_D("Pause starts"); + if(info->state == APP_STATE_PAUSE) { + _APPS_E("paused already"); + return; + } + + if (apps_layout_is_edited(info->layout)) { + apps_layout_unedit(info->layout); + } + + info->state = APPS_APP_STATE_PAUSE; + _execute_cbs(info, APPS_APP_STATE_PAUSE); + + + int isOrderChange = (int)evas_object_data_get(info->win, DATA_KEY_IS_ORDER_CHANGE); + if(isOrderChange) { + wms_change_apps_order(W_HOME_WMS_BACKUP); + evas_object_data_set(info->win, DATA_KEY_IS_ORDER_CHANGE, (void*)0); + } + + _APPS_D("Pause done"); + + return; +} + + + +HAPI void apps_main_resume() +{ + if(eina_list_count(apps_main_info.instance_list) == 0) { + _APPS_E("Resume starts"); + return; + } + + instance_info_s *info = eina_list_nth(apps_main_get_info()->instance_list, 0); + ret_if(!info); + + _APPS_D("Resume starts"); + if(info->state == APP_STATE_RESUME) { + _APPS_E("resumed already"); + return; + } + + info->state = APPS_APP_STATE_RESUME; + _execute_cbs(info, APPS_APP_STATE_RESUME); + + return; +} + + +HAPI void apps_main_language_chnage() +{ + const Eina_List *l, *ln; + char *lang = NULL; + instance_info_s *info; + + _APPS_D("Language is changed"); + + EINA_LIST_FOREACH_SAFE(apps_main_info.instance_list, l, ln, info) { + Evas_Object *scroller = NULL; + scroller_info_s *scroller_info = NULL; + + continue_if(!info); + continue_if(!info->layout); + + scroller = evas_object_data_get(info->layout, DATA_KEY_SCROLLER); + continue_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + continue_if(!scroller_info); + + apps_item_info_list_change_language(scroller_info->list); + apps_scroller_change_language(scroller); + } + + lang = vconf_get_str(VCONFKEY_LANGSET); + if (!lang) { + return; + } + elm_language_set(lang); + free(lang); + + return; +} + + +HAPI void apps_main_theme_chnage() +{ + ea_theme_style_set(EA_THEME_STYLE_DEFAULT); + ret_if (!apps_main_info.color_theme); + ea_theme_colors_set(apps_main_info.color_theme, EA_THEME_STYLE_DEFAULT); +} + + + +HAPI Eina_Bool apps_main_is_visible() +{ + instance_info_s *info = eina_list_nth(apps_main_get_info()->instance_list, 0); + retv_if(NULL == info, EINA_FALSE); + + Eina_Bool bShow = evas_object_visible_get(info->win); + _APPS_D("bShow:[%d]", bShow); + + return bShow; +} + +#define APPS_ORDER_XML_PATH DATADIR"/apps_order.xml" +HAPI void apps_main_list_backup() +{ + instance_info_s *info = eina_list_nth(apps_main_get_info()->instance_list, 0); + ret_if(!info); + + Evas_Object *layout = evas_object_data_get(info->win, DATA_KEY_LAYOUT); + ret_if(!layout); + + Evas_Object *scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + ret_if(!scroller); + + apps_scroller_write_list(scroller); + + scroller_info_s *scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + if(APPS_ERROR_NONE != apps_db_read_list(scroller_info->list)) { + _APPS_E(""); + } + + if(APPS_ERROR_NONE != apps_xml_read_list(APPS_ORDER_XML_PATH, scroller_info->list)) { + _APPS_E(""); + } +} + + +static int _sort_by_order_cb(const void *d1, const void *d2) +{ + const item_info_s *v1 = d1; + const item_info_s *v2 = d2; + + if (v1->ordering < 0) return 1; + else if (v2->ordering < 0) return -1; + + if(v1->ordering > v2->ordering) + return 1; + else if(v1->ordering < v2->ordering) + return -1; + else + return 0; +} + + +HAPI void apps_main_list_restore() +{ + instance_info_s *info = eina_list_nth(apps_main_get_info()->instance_list, 0); + ret_if(!info); + + Evas_Object *layout = evas_object_data_get(info->win, DATA_KEY_LAYOUT); + ret_if(!layout); + + if(apps_layout_is_edited(layout)) { + _APPS_E("Apps is editing"); + return; + } + + Evas_Object *scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + ret_if(!scroller); + + Eina_List *restore_list = apps_xml_write_list(APPS_ORDER_XML_PATH); + ret_if(!restore_list); + + restore_list = eina_list_sort(restore_list, eina_list_count(restore_list), _sort_by_order_cb); + ret_if(!restore_list); + + if(APPS_ERROR_NONE != apps_scroller_read_list(scroller, restore_list)) { + _APPS_E(""); + } + + apps_scroller_write_list(scroller); + + scroller_info_s *scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + Eina_List *layout_list = evas_object_data_get(layout, DATA_KEY_LIST); + eina_list_free(layout_list); + layout_list = eina_list_clone(scroller_info->list); + evas_object_data_set(layout, DATA_KEY_LIST, layout_list); + + if(APPS_ERROR_NONE != apps_db_read_list(scroller_info->list)) { + _APPS_E(""); + } + + if(APPS_ERROR_NONE != apps_xml_read_list(APPS_ORDER_XML_PATH, scroller_info->list)) { + _APPS_E(""); + } +} + + +HAPI void apps_main_list_reset() +{ + instance_info_s *info = eina_list_nth(apps_main_get_info()->instance_list, 0); + ret_if(!info); + + Evas_Object *layout = evas_object_data_get(info->win, DATA_KEY_LAYOUT); + ret_if(!layout); + + if(apps_layout_is_edited(layout)) { + _APPS_E("Apps is editing"); + return; + } + + Evas_Object *scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + ret_if(!scroller); + + Eina_List *reset_list = apps_item_info_list_create(ITEM_INFO_LIST_TYPE_XML); + ret_if(!reset_list); + + if(APPS_ERROR_NONE != apps_scroller_read_list(scroller, reset_list)) { + _APPS_E(""); + } + + apps_scroller_write_list(scroller); + + scroller_info_s *scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + Eina_List *layout_list = evas_object_data_get(layout, DATA_KEY_LIST); + eina_list_free(layout_list); + layout_list = eina_list_clone(scroller_info->list); + evas_object_data_set(layout, DATA_KEY_LIST, layout_list); + + if(APPS_ERROR_NONE != apps_db_read_list(scroller_info->list)) { + _APPS_E(""); + } + + if(APPS_ERROR_NONE != apps_xml_read_list(APPS_ORDER_XML_PATH, scroller_info->list)) { + _APPS_E(""); + } +} + + +HAPI void apps_main_list_tts(int is_tts) +{ + _D("tts is [%d]", is_tts); + + apps_main_get_info()->tts = is_tts; +} + + +#define VCONKEY_HOME_APPS_SHOW_COUNT "db/private/org.tizen.w-home/apps_flickup_count" +HAPI void apps_main_show_count_add(void) +{ + int val = 0; + + if (vconf_get_int(VCONKEY_HOME_APPS_SHOW_COUNT, &val) == 0) { + val++; + if (vconf_set_int(VCONKEY_HOME_APPS_SHOW_COUNT, val) != 0) { + _E("Failed to set apps show count vconf"); + } + } else { + _E("Failed to get apps show count vconf"); + } +} + + +HAPI int apps_main_show_count_get(void) +{ + int val = 0, ret = 99; + + if (vconf_get_int(VCONKEY_HOME_APPS_SHOW_COUNT, &val) == 0) { + ret = val; + } else { + _E("Failed to get apps show count vconf"); + } + + return ret; +} +// End of a file diff --git a/home/src/apps/bg.c b/home/src/apps/bg.c new file mode 100755 index 0000000..f21571b --- /dev/null +++ b/home/src/apps/bg.c @@ -0,0 +1,217 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" + + + +#define VCONFKEY_WMS_BG_MODE "db/wms/home_bg_mode" +#define VCONFKEY_WMS_BG_PALETTE "db/wms/home_bg_palette" +#define BG_TYPE_COLOR 0 +#define BG_TYPE_IMAGE 1 +#define BG_TYPE_GALLERY 2 + +#if 0 // There is no conformant in the wearable. +static Evas_Object *_create_conformant(Evas_Object *win) +{ + Evas_Object *conformant = NULL; + conformant = (Evas_Object *) app_get_preinitialized_conformant(); + if (!conformant) conformant = elm_conformant_add(win); + retv_if(NULL == conformant, NULL); + + evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, conformant); + + elm_object_signal_emit(conformant, "elm,state,indicator,overlap", "elm"); + elm_object_signal_emit(conformant, "elm,state,virtualkeypad,disable", ""); + elm_object_signal_emit(conformant, "elm,state,clipboard,disable", ""); + + evas_object_data_set(conformant, DATA_KEY_WIN, win); + evas_object_data_set(win, DATA_KEY_CONFORMANT, conformant); + evas_object_show(conformant); + + return conformant; +} + + + +void _destroy_conformant(Evas_Object *win) +{ + Evas_Object *conformant = NULL; + ret_if(!win); + + conformant = evas_object_data_del(win, DATA_KEY_CONFORMANT); + ret_if(!conformant); + + evas_object_data_del(conformant, DATA_KEY_WIN); + evas_object_del(conformant); +} +#endif + + + +#define DEFAULT_HOME_BG_PATH "/opt/share/settings/Wallpapers/Home_default.png" +char *_bg_filename(void) +{ + char *buf; + + buf = vconf_get_str(VCONFKEY_BGSET); + if (!buf) { + buf = strdup(DEFAULT_HOME_BG_PATH); + } + + return buf; +} + + +static int _get_bg_type(void) +{ + /* 0 : Color, 1 : Image, 2 : Gallery */ + int val = -1; + + if(vconf_get_int(VCONFKEY_WMS_BG_MODE, &val) < 0) { + _APPS_E("Failed to get WMS_HOME_BG_MODE"); + return BG_TYPE_IMAGE; + } + + return val; +} + + + +static void _change_bg(keynode_t *node, void *data) +{ + int bg_type = BG_TYPE_IMAGE; + Evas_Object *bg = data; + char *buf = NULL; + + ret_if(!bg); + + bg_type = _get_bg_type(); + _APPS_D("bg_type:%d", bg_type); + switch(bg_type) + { + case BG_TYPE_COLOR: + { + buf = vconf_get_str(VCONFKEY_WMS_BG_PALETTE); + + if (buf) { + int rgb = strtoul(buf, NULL, 16); + elm_bg_color_set(bg, + (rgb >> 16) & 0xFF, + (rgb >> 8) & 0xFF, + (rgb) & 0xFF); + elm_bg_file_set(bg, NULL, NULL); + } + } + break; + case BG_TYPE_IMAGE: + case BG_TYPE_GALLERY: + { + buf = _bg_filename(); + ret_if(!buf); + + _APPS_D("Change the background[%s]", buf); + + elm_bg_file_set(bg, buf, NULL); + } + break; + default: + _APPS_E("bg_type[%d] is unknown", bg_type); + break; + } + + free(buf); +} + + + +static void _bg_down_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info) +{ + _APPS_D("BG is pressed"); +} + + + +static void _bg_up_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info) +{ + _APPS_D("BG is released"); +} + + + +Evas_Object *apps_bg_create(Evas_Object *win, int w, int h) +{ + Evas_Object *layout = NULL; + Evas_Object *bg = NULL; + + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + retv_if(!layout, NULL); + +#if 0 + bg = app_get_preinitialized_background(); + if (!bg) bg = elm_bg_add(win); +#else + bg = elm_bg_add(win); +#endif + retv_if(!bg, NULL); + + elm_bg_option_set(bg, ELM_BG_OPTION_SCALE); + elm_object_part_content_set(layout, "container", bg); + + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_min_set(bg, w, h); + evas_object_show(bg); + + evas_object_data_set(win, DATA_KEY_BG, bg); + evas_object_event_callback_add(bg, EVAS_CALLBACK_MOUSE_DOWN, _bg_down_cb, NULL); + evas_object_event_callback_add(bg, EVAS_CALLBACK_MOUSE_UP, _bg_up_cb, NULL); + + if (vconf_notify_key_changed(VCONFKEY_WMS_BG_MODE, _change_bg, bg) < 0) { + _APPS_E("Failed to register the VCONFKEY_WMS_BG_MODE callback"); + } + + /* Changing the bg after setting DATA_KEY_BG */ + _change_bg(NULL, bg); + + return bg; +} + + + +void apps_bg_destroy(Evas_Object *win) +{ + Evas_Object *bg = NULL; + + if (vconf_ignore_key_changed(VCONFKEY_WMS_BG_MODE, _change_bg) < 0) { + _APPS_E("Failed to ignore the VCONFKEY_WMS_BG_MODE callback"); + } + + evas_object_event_callback_del(bg, EVAS_CALLBACK_MOUSE_DOWN, _bg_down_cb); + evas_object_event_callback_del(bg, EVAS_CALLBACK_MOUSE_UP, _bg_up_cb); + bg = evas_object_data_del(win, DATA_KEY_BG); + ret_if(!bg); + evas_object_del(bg); +} + + + +// End of a file diff --git a/home/src/apps/db.c b/home/src/apps/db.c new file mode 100755 index 0000000..851e0a6 --- /dev/null +++ b/home/src/apps/db.c @@ -0,0 +1,836 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "apps/db.h" +#include "apps/item_info.h" +#include "apps/list.h" + + + + +#define retv_with_dbmsg_if(expr, val) do { \ + if (expr) { \ + _APPS_E("%s", sqlite3_errmsg(db_info.db)); \ + return (val); \ + } \ +} while (0) + +static struct { + sqlite3 *db; +} db_info = { + .db = NULL, +}; + +struct stmt { + sqlite3_stmt *stmt; +}; + + + +HAPI apps_error_e apps_db_open(const char *db_file) +{ + int ret; + + retv_if(NULL == db_file, APPS_ERROR_INVALID_PARAMETER); + if (db_info.db) { + return APPS_ERROR_NONE; + } + + ret = db_util_open(db_file, &db_info.db, DB_UTIL_REGISTER_HOOK_METHOD); + if (ret != SQLITE_OK) _APPS_E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, APPS_ERROR_FAIL); + + return APPS_ERROR_NONE; +} + + + +HAPI stmt_h *apps_db_prepare(const char *query) +{ + int ret; + stmt_h *handle; + + retv_if(NULL == query, NULL); + + handle = calloc(1, sizeof(stmt_h)); + retv_if(NULL == handle, NULL); + + ret = sqlite3_prepare_v2(db_info.db, query, strlen(query), &(handle->stmt), NULL); + if (ret != SQLITE_OK) { + free(handle); + _APPS_E("%s, %s", query, sqlite3_errmsg(db_info.db)); + return NULL; + } + + return handle; +} + + + +HAPI apps_error_e apps_db_bind_bool(stmt_h *handle, int idx, bool value) +{ + int ret; + + retv_if(NULL == handle, APPS_ERROR_FAIL); + + ret = sqlite3_bind_int(handle->stmt, idx, (int) value); + if (ret != SQLITE_OK) _APPS_E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, APPS_ERROR_FAIL); + + return APPS_ERROR_NONE; +} + + + +HAPI apps_error_e apps_db_bind_int(stmt_h *handle, int idx, int value) +{ + int ret; + + retv_if(NULL == handle, APPS_ERROR_FAIL); + + ret = sqlite3_bind_int(handle->stmt, idx, value); + if (ret != SQLITE_OK) _APPS_E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, APPS_ERROR_FAIL); + + return APPS_ERROR_NONE; +} + + + +HAPI apps_error_e apps_db_bind_str(stmt_h *handle, int idx, const char *str) +{ + int ret; + + retv_if(NULL == handle, APPS_ERROR_INVALID_PARAMETER); + retv_if(NULL == str, APPS_ERROR_INVALID_PARAMETER); + + ret = sqlite3_bind_text(handle->stmt, idx, str, strlen(str), SQLITE_TRANSIENT); + if (ret != SQLITE_OK) _APPS_E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, APPS_ERROR_FAIL); + + return APPS_ERROR_NONE; +} + + + +HAPI apps_error_e apps_db_next(stmt_h *handle) +{ + int ret; + + retv_if(NULL == handle, APPS_ERROR_FAIL); + + ret = sqlite3_step(handle->stmt); + switch (ret) { + case SQLITE_ROW: + return APPS_ERROR_NONE; + case SQLITE_DONE: + return APPS_ERROR_NO_DATA; + default: + _APPS_E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(1, APPS_ERROR_FAIL); + } +} + + + +HAPI bool apps_db_get_bool(stmt_h *handle, int index) +{ + retv_if(NULL == handle, false); + return (bool) sqlite3_column_int(handle->stmt, index); +} + + + +HAPI int apps_db_get_int(stmt_h *handle, int index) +{ + retv_if(NULL == handle, 0); + return sqlite3_column_int(handle->stmt, index); +} + + +HAPI const char *apps_db_get_str(stmt_h *handle, int index) +{ + retv_if(NULL == handle, NULL); + return (const char *) sqlite3_column_text(handle->stmt, index); +} + + + +HAPI apps_error_e apps_db_reset(stmt_h *handle) +{ + int ret; + + retv_if(NULL == handle, APPS_ERROR_INVALID_PARAMETER); + retv_if(NULL == handle->stmt, APPS_ERROR_INVALID_PARAMETER); + + ret = sqlite3_reset(handle->stmt); + if (ret != SQLITE_OK) _APPS_E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, APPS_ERROR_FAIL); + + sqlite3_clear_bindings(handle->stmt); + + return APPS_ERROR_NONE; +} + + + +HAPI apps_error_e apps_db_finalize(stmt_h *handle) +{ + int ret; + + retv_if(NULL == handle, APPS_ERROR_INVALID_PARAMETER); + retv_if(NULL == handle->stmt, APPS_ERROR_INVALID_PARAMETER); + + ret = sqlite3_finalize(handle->stmt); + if (ret != SQLITE_OK) _APPS_E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, APPS_ERROR_FAIL); + free(handle); + + return APPS_ERROR_NONE; +} + + + +HAPI apps_error_e apps_db_exec(const char *query) +{ + retv_if(NULL == query, APPS_ERROR_INVALID_PARAMETER); + retv_if(NULL == db_info.db, APPS_ERROR_FAIL); + + stmt_h *handle = apps_db_prepare(query); + retv_if(NULL == handle, APPS_ERROR_FAIL); + + goto_if(APPS_ERROR_FAIL == apps_db_next(handle), ERROR); + if (APPS_ERROR_NONE != apps_db_finalize(handle)) return APPS_ERROR_FAIL; + + return APPS_ERROR_NONE; + +ERROR: + if (handle) apps_db_finalize(handle); + return APPS_ERROR_FAIL; +} + + + +HAPI void apps_db_close(void) +{ + ret_if(!db_info.db); + sqlite3_close(db_info.db); + db_info.db = NULL; +} + + + +HAPI apps_error_e apps_db_begin_transaction(void) +{ + int ret = -1; + + ret = sqlite3_exec(db_info.db, "BEGIN IMMEDIATE TRANSACTION", NULL, NULL, NULL); + + while (SQLITE_BUSY == ret) { + sleep(1); + ret = sqlite3_exec(db_info.db, "BEGIN IMMEDIATE TRANSACTION", NULL, NULL, NULL); + } + + if (SQLITE_OK != ret) { + _APPS_E("sqlite3_exec() Failed(%d)", ret); + return APPS_ERROR_FAIL; + } + + return APPS_ERROR_NONE; +} + + + +#define COMMIT_TRY_MAX 3 +HAPI apps_error_e apps_db_end_transaction(bool success) +{ + int ret = -1; + int i = 0; + char *errmsg = NULL; + + if (success) { + ret = sqlite3_exec(db_info.db, "COMMIT TRANSACTION", NULL, NULL, &errmsg); + if (SQLITE_OK != ret) { + _APPS_E("sqlite3_exec(COMMIT) Failed(%d, %s)", ret, errmsg); + sqlite3_free(errmsg); + + while (SQLITE_BUSY == ret && i < COMMIT_TRY_MAX) { + i++; + sleep(1); + ret = sqlite3_exec(db_info.db, "COMMIT TRANSACTION", NULL, NULL, NULL); + } + + if (SQLITE_OK != ret) { + _APPS_E("sqlite3_exec() Failed(%d)", ret); + ret = sqlite3_exec(db_info.db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); + if (SQLITE_OK != ret) { + _APPS_E("sqlite3_exec() Failed(%d)", ret); + } + + return APPS_ERROR_FAIL; + } + } + } else { + ret = sqlite3_exec(db_info.db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); + if (SQLITE_OK != ret) { + _APPS_E("sqlite3_exec() Failed(%d)", ret); + return APPS_ERROR_FAIL; + } + } + + return APPS_ERROR_NONE; +} + + + +#define APPS_DB_FILE DATADIR"/.apps.db" +#define APPS_TABLE "apps" +#define QUERY_CREATE_TABLE "CREATE TABLE IF NOT EXISTS "APPS_TABLE" ("\ + "id TEXT NOT NULL PRIMARY KEY, "\ + "ordering INTEGER "\ + ");" + +#define QUERY_INSERT_ITEM "INSERT INTO "APPS_TABLE" "\ + "(id, ordering) "\ + "VALUES "\ + "('%s', %d);" + +HAPI apps_error_e apps_db_init(void) +{ + char *query = NULL; + + retv_if(APPS_ERROR_NONE != + apps_db_open(APPS_DB_FILE), -1); + + query = sqlite3_mprintf(QUERY_CREATE_TABLE); + retv_if(query == NULL, -1); + + if (apps_db_exec(query) != APPS_ERROR_NONE) { + _APPS_E("Cannot execute query.[%s]", query); + sqlite3_free(query); + return APPS_ERROR_DB_FAILED; + } + + return APPS_ERROR_NONE; +} + +HAPI int apps_db_insert_item(const char *id, int ordering) +{ + char *query = NULL; + + retv_if(!id, -1); + _APPS_D("Insert the item[%s:%d]", id, ordering); + + retv_if(APPS_ERROR_NONE != + apps_db_open(APPS_DB_FILE), -1); + + query = sqlite3_mprintf(QUERY_INSERT_ITEM, id, ordering); + retv_if(query == NULL, -1); + + if (apps_db_exec(query) != APPS_ERROR_NONE) { + _APPS_E("Cannot execute query.[%s]", query); + sqlite3_free(query); + return -1; + } + + sqlite3_free(query); + + /* keep the home DB opened */ + + return 0; +} + + + +#define QUERY_UPDATE_ITEM "UPDATE "APPS_TABLE" SET ordering=%d WHERE id='%s'" +HAPI int apps_db_update_item(const char *id, int ordering) +{ + char *query = NULL; + + retv_if(!id, -1); + _APPS_D("Update the item[%s:%d]", id, ordering); + + retv_if(APPS_ERROR_NONE != + apps_db_open(APPS_DB_FILE), -1); + + query = sqlite3_mprintf(QUERY_UPDATE_ITEM, ordering, id); + retv_if(query == NULL, -1); + + if (apps_db_exec(query) != APPS_ERROR_NONE) { + _APPS_E("Cannot execute query.[%s]", query); + sqlite3_free(query); + return -1; + } + + sqlite3_free(query); + + /* keep the home DB opened */ + + return 0; +} + + + +#define QUERY_REMOVE_ITEM "DELETE FROM "APPS_TABLE" WHERE id='%s'" +HAPI int apps_db_remove_item(const char *id) +{ + char *query = NULL; + + retv_if(!id, -1); + + _APPS_D("Remove the item[%s]", id); + + retv_if(APPS_ERROR_NONE != + apps_db_open(APPS_DB_FILE), -1); + + query = sqlite3_mprintf(QUERY_REMOVE_ITEM, id); + retv_if(query == NULL, -1); + + if (apps_db_exec(query) != APPS_ERROR_NONE) { + _APPS_E("Cannot execute query.[%s]", query); + sqlite3_free(query); + return -1; + } + + sqlite3_free(query); + + /* keep the home DB opened */ + + return 0; +} + + + +#define QUERY_COUNT_ITEM "SELECT COUNT(*) FROM "APPS_TABLE" WHERE id=?" +HAPI int apps_db_count_item(const char *id) +{ + stmt_h *st; + int count; + + retv_if(id == NULL, -1); + + retv_if(APPS_ERROR_NONE != + apps_db_open(APPS_DB_FILE), -1); + + st = apps_db_prepare(QUERY_COUNT_ITEM); + retv_if(st == NULL, -1); + + if (apps_db_bind_str(st, 1, id) != APPS_ERROR_NONE) { + _APPS_E("db_bind_str error"); + apps_db_finalize(st); + return -1; + } + + if (apps_db_next(st) == APPS_ERROR_FAIL) { + _APPS_E("db_next error"); + apps_db_finalize(st); + return -1; + } + + count = apps_db_get_int(st, 0); + apps_db_finalize(st); + + /* keep the home DB opened */ + + return count; +} + + + +HAPI apps_error_e apps_db_read_list(Eina_List *item_info_list) +{ + const Eina_List *l, *ln; + item_info_s *item_info = NULL; + + retv_if(!item_info_list, APPS_ERROR_INVALID_PARAMETER); + + EINA_LIST_FOREACH_SAFE(item_info_list, l, ln, item_info) { + int count; + continue_if(!item_info); + continue_if(!item_info->appid); + count = apps_db_count_item(item_info->appid); + if (count > 0) { + apps_db_update_item(item_info->appid, item_info->ordering); + } else { + apps_db_init(); + apps_db_insert_item(item_info->appid, item_info->ordering); + } + } + + return APPS_ERROR_NONE; +} + + + +#define QUERY_SELECT_ORDERING_ITEM "SELECT id, ordering FROM "APPS_TABLE" ORDER BY ordering ASC" +HAPI Eina_List *apps_db_write_list(void) +{ + stmt_h *st = NULL; + Eina_List *list = NULL; + + retv_if(APPS_ERROR_NONE != + apps_db_open(APPS_DB_FILE), NULL); + + st = apps_db_prepare(QUERY_SELECT_ORDERING_ITEM); + if (!st) { + _APPS_E("Cannot prepare the DB"); + apps_db_finalize(st); + return NULL; + } + + while (APPS_ERROR_NONE == apps_db_next(st)) { + item_info_s *item_info = NULL; + char *appid = (char *) apps_db_get_str(st, 0); + continue_if(!appid); + + item_info = apps_item_info_create(appid); + continue_if(!item_info); + item_info->ordering = apps_db_get_int(st, 1); + + list = eina_list_append(list, item_info); + } + + apps_db_finalize(st); + + return list; +} + + + +#define QUERY_SELECT_ORDERING_ITEM "SELECT id, ordering FROM "APPS_TABLE" ORDER BY ordering ASC" +static Eina_List *_db_write_list_direct(void) +{ + stmt_h *st = NULL; + Eina_List *list = NULL; + + retv_if(APPS_ERROR_NONE != + apps_db_open(APPS_DB_FILE), NULL); + + st = apps_db_prepare(QUERY_SELECT_ORDERING_ITEM); + if (!st) { + _APPS_E("Cannot prepare the DB"); + apps_db_finalize(st); + return NULL; + } + + while (APPS_ERROR_NONE == apps_db_next(st)) { + item_info_s *item_info = NULL; + char *appid = (char *) apps_db_get_str(st, 0); + continue_if(!appid); + + item_info = calloc(1, sizeof(item_info_s)); + continue_if(!item_info); + + item_info->appid = strdup(appid); + if (!item_info->appid) { + _E("Cannot copy appid"); + free(item_info); + continue; + } + item_info->ordering = apps_db_get_int(st, 1); + + list = eina_list_append(list, item_info); + } + + apps_db_finalize(st); + + return list; +} + + + +static int _sort_by_name_cb(const void *d1, const void *d2) +{ + const item_info_s *info1 = d1; + const item_info_s *info2 = d2; + + if (NULL == info1 || NULL == info1->name) return 1; + else if (NULL == info2 || NULL == info2->name) return -1; + + return strcmp(info1->name, info2->name); +} + + + +#define QUERY_SELECT_ITEM "SELECT id, ordering FROM "APPS_TABLE"" +HAPI Eina_List *apps_db_write_list_by_name(void) +{ + stmt_h *st = NULL; + Eina_List *list = NULL; + + retv_if(APPS_ERROR_NONE != + apps_db_open(APPS_DB_FILE), NULL); + + st = apps_db_prepare(QUERY_SELECT_ITEM); + if (!st) { + _APPS_E("Cannot prepare the DB"); + apps_db_finalize(st); + return NULL; + } + + while (APPS_ERROR_NONE == apps_db_next(st)) { + item_info_s *item_info = NULL; + char *appid = (char *) apps_db_get_str(st, 0); + continue_if(!appid); + + item_info = apps_item_info_create(appid); + continue_if(!item_info); + item_info->ordering = apps_db_get_int(st, 1); + + list = eina_list_append(list, item_info); + } + + apps_db_finalize(st); + + list = eina_list_sort(list, eina_list_count(list), _sort_by_name_cb); + + return list; +} + + + +#define QUERY_SELECT_ITEM_ORDER_BY_ASC "SELECT id, ordering FROM "APPS_TABLE" ORDER BY id ASC" +HAPI Eina_List *_db_write_list_direct_by_name(void) +{ + stmt_h *st = NULL; + Eina_List *list = NULL; + + retv_if(APPS_ERROR_NONE != + apps_db_open(APPS_DB_FILE), NULL); + + st = apps_db_prepare(QUERY_SELECT_ITEM_ORDER_BY_ASC); + if (!st) { + _APPS_E("Cannot prepare the DB"); + apps_db_finalize(st); + return NULL; + } + + while (APPS_ERROR_NONE == apps_db_next(st)) { + item_info_s *item_info = NULL; + char *appid = (char *) apps_db_get_str(st, 0); + continue_if(!appid); + + item_info = calloc(1, sizeof(item_info_s)); + continue_if(!item_info); + + item_info->appid = strdup(appid); + if (!item_info->appid) { + _E("Cannot copy appid"); + free(item_info); + continue; + } + item_info->ordering = apps_db_get_int(st, 1); + + list = eina_list_append(list, item_info); + } + + apps_db_finalize(st); + + return list; +} + + + +#define QUERY_ITEM_COUNT_ITEM "SELECT COUNT(*) FROM "APPS_TABLE +HAPI int apps_db_count_item_in(void) +{ + stmt_h *st = NULL; + int count = 0; + + retv_if(APPS_ERROR_NONE != apps_db_open(APPS_DB_FILE), -1); + st = apps_db_prepare(QUERY_ITEM_COUNT_ITEM); + retv_if(!st, -1); + + if (APPS_ERROR_FAIL == apps_db_next(st)) { + _APPS_E("db_next error"); + apps_db_finalize(st); + return -1; + } + count = apps_db_get_int(st, 0); + apps_db_finalize(st); + + return count; +} + + + +#define QUERY_ITEM_GET_MAX_POSITION "SELECT MAX(ordering) FROM "APPS_TABLE +HAPI apps_error_e apps_db_find_empty_position(int *pos) +{ + stmt_h *st = NULL; + *pos = 0; + + if (0 == apps_db_count_item_in()) { + return APPS_ERROR_NONE; + } + + retv_if(APPS_ERROR_NONE != apps_db_open(APPS_DB_FILE), APPS_ERROR_FAIL); + + st = apps_db_prepare(QUERY_ITEM_GET_MAX_POSITION); + retv_if(!st, APPS_ERROR_FAIL); + + if (APPS_ERROR_FAIL == apps_db_next(st)) { + _APPS_E("db_next error"); + apps_db_finalize(st); + return -1; + } + + *pos = apps_db_get_int(st, 0) +1; + + apps_db_finalize(st); + return APPS_ERROR_NONE; +} + + + +static void _free_list(Eina_List *list) +{ + item_info_s *data; + + if (NULL == list) return; + EINA_LIST_FREE(list, data) { + if (data) apps_item_info_destroy(data); + } +} + + + +HAPI apps_error_e apps_db_trim(void) +{ + Eina_List *list = NULL; + item_info_s *item = NULL; + register int i; + int position = 0; + + list = _db_write_list_direct(); + retv_if (!list, APPS_ERROR_FAIL); + + for (i = 0; true; i++) { + item = eina_list_nth(list, i); + if (!item) break; + if (item->ordering == position) { + position ++; + continue; + } + + if (APPS_ERROR_NONE != apps_db_update_item(item->appid, position)) { + _APPS_E("cannot set an item(%s)'s position(%d)", item->appid, position); + _free_list(list); + return APPS_ERROR_FAIL; + } + _APPS_D("Trim the DB : %s (%d->%d)", item->appid, item->ordering, position); + position ++; + } + _free_list(list); + + return APPS_ERROR_NONE; +} + + + +HAPI apps_error_e apps_db_sync(void) +{ + int pos = 0; + app_list *pkg_list = NULL; + Eina_List *db_list = NULL; + item_info_s *db_item = NULL; + item_info_s *pkg_item = NULL; + + _APPS_D("apps db sync"); + + pkg_list = list_create_by_appid(); + retv_if(!pkg_list, APPS_ERROR_FAIL); + + db_list = _db_write_list_direct_by_name(); + goto_if(!db_list, ERROR); + + pkg_item = eina_list_nth(pkg_list->list, 0); + db_item = eina_list_nth(db_list, 0); + + while (1) { + int serial = 0; + + if (pkg_item && !db_item) { + goto_if(!pkg_item->appid, ERROR); + serial = -1; + } else if (!pkg_item && db_item) { + goto_if(!db_item->appid, ERROR); + serial = 1; + } else if (!pkg_item && !db_item) { + break; + } else { + goto_if(!pkg_item->appid, ERROR); + goto_if(!db_item->appid, ERROR); + serial = strcmp(pkg_item->appid, db_item->appid); + } + + if (serial < 0) { + if (APPS_ERROR_NONE != apps_db_find_empty_position(&pos)) { + _APPS_E("Cannot find an empty position."); + break; + } + + if (APPS_ERROR_NONE != apps_db_insert_item(pkg_item->appid, pos)) { + _APPS_E("Cannot add a package."); + break; + } + + pkg_list->list = eina_list_next(pkg_list->list); + pkg_item = eina_list_data_get(pkg_list->list); + } else if (serial > 0) { + if (APPS_ERROR_NONE != apps_db_remove_item(db_item->appid)) { + _APPS_E("Cannot remove a package."); + break; + } + + db_list = eina_list_next(db_list); + db_item = eina_list_data_get(db_list); + } else { + pkg_list->list = eina_list_next(pkg_list->list); + pkg_item = eina_list_data_get(pkg_list->list); + + db_list = eina_list_next(db_list); + db_item = eina_list_data_get(db_list); + } + } + + list_destroy(pkg_list); + _free_list(db_list); + + retv_if(APPS_ERROR_NONE != apps_db_trim(), APPS_ERROR_FAIL); + + return APPS_ERROR_NONE; + +ERROR: + if (pkg_list) list_destroy(pkg_list); + if (db_list) _free_list(db_list); + + return APPS_ERROR_FAIL; +} + + + +// End of file. diff --git a/home/src/apps/effect.c b/home/src/apps/effect.c new file mode 100755 index 0000000..300cc02 --- /dev/null +++ b/home/src/apps/effect.c @@ -0,0 +1,103 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "apps/apps_main.h" + + + +static struct { + int sound_status; + int is_feedback_initialized; +} effect_info = { + .sound_status = 0, + .is_feedback_initialized = 0, +}; + + + +HAPI inline void apps_effect_set_sound_status(int status) +{ + effect_info.sound_status = status; +} + + + +HAPI inline int apps_effect_get_sound_status(void) +{ + return effect_info.sound_status; +} + + + +HAPI apps_error_e apps_effect_init(void) +{ + retv_if(1 == effect_info.is_feedback_initialized, APPS_ERROR_NONE); + retv_if(0 != feedback_initialize(), APPS_ERROR_FAIL); + retv_if(vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &effect_info.sound_status) < 0, APPS_ERROR_FAIL); + + effect_info.is_feedback_initialized = 1; + + return APPS_ERROR_NONE; +} + + + +HAPI void apps_effect_fini(void) +{ + ret_if(0 == effect_info.is_feedback_initialized); + ret_if(0 != feedback_deinitialize()); + + effect_info.is_feedback_initialized = 0; +} + + + +HAPI void apps_effect_play_sound(void) +{ + if (effect_info.is_feedback_initialized == 0) { + apps_effect_init(); + } + + ret_if(vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &effect_info.sound_status) < 0); + + if (effect_info.sound_status) { + feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_TOUCH_TAP); + } + else { + _APPS_E("effect_info.sound_status: [%d]", effect_info.sound_status); + } +} + + + +HAPI void apps_effect_play_vibration(void) +{ + if (effect_info.is_feedback_initialized == 0) { + apps_effect_init(); + } + + feedback_play_type(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_HOLD); +} + + + +// End of a file diff --git a/home/src/apps/grid.c b/home/src/apps/grid.c new file mode 100755 index 0000000..867bf95 --- /dev/null +++ b/home/src/apps/grid.c @@ -0,0 +1,408 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "apps/apps_conf.h" +#include "apps/grid.h" +#include "apps/layout.h" +#include "apps/list.h" +#include "apps/apps_main.h" + +#define PRIVATE_DATA_KEY_ITEM_INFO_LIST_APPENDED "p_iil_and" +#define PRIVATE_DATA_KEY_ITEM_INFO_LIST_INDEX "p_iil_idx" +#define PRIVATE_DATA_KEY_ITEM_INFO_LIST_TIMER "p_iil_tm" + + +HAPI void grid_destroy(Evas_Object *win, Evas_Object *grid) +{ + Ecore_Timer *timer = NULL; + Elm_Gengrid_Item_Class *gic = NULL; + + evas_object_data_del(grid, DATA_KEY_WIN); + evas_object_data_del(grid, DATA_KEY_LAYOUT); + evas_object_data_del(grid, DATA_KEY_INSTANCE_INFO); + evas_object_data_del(grid, DATA_KEY_ITEM_ICON_WIDTH); + evas_object_data_del(grid, DATA_KEY_ITEM_ICON_HEIGHT); + evas_object_data_del(grid, DATA_KEY_ITEM_WIDTH); + evas_object_data_del(grid, DATA_KEY_ITEM_HEIGHT); + evas_object_data_del(grid, DATA_KEY_CURRENT_ITEM); + evas_object_data_del(grid, DATA_KEY_LIST_INDEX); + evas_object_data_del(grid, DATA_KEY_LIST); + gic = evas_object_data_del(grid, DATA_KEY_GIC); + if (gic) elm_gengrid_item_class_free(gic); + + timer = evas_object_data_del(grid, DATA_KEY_TIMER); + if (timer) { + ecore_timer_del(timer); + timer = NULL; + } + + evas_object_data_del(win, DATA_KEY_GRID); + + ret_if(NULL == grid); + evas_object_del(grid); +} + + + +static char *_text_get(void *data, Evas_Object *obj, const char *part) +{ + item_info_s *item_info = data; + retv_if(NULL == item_info, NULL); + + if (!strcmp(part, "txt")) { + retv_if(!item_info->name, NULL); + return strdup(item_info->name); + } + + return NULL; +} + + + +static Evas_Object *_add_icon(Evas_Object *parent, const char *file) +{ + const char *real_icon_file = NULL; + Evas_Object *icon = NULL; + int w, h; + + real_icon_file = file; + if (access(real_icon_file, R_OK) != 0) { + _APPS_E("Failed to access an icon(%s)", real_icon_file); + real_icon_file = DEFAULT_ICON; + } + + icon = elm_icon_add(parent); + retv_if(NULL == icon, NULL); + + if (elm_image_file_set(icon, real_icon_file, NULL) == EINA_FALSE) { + _APPS_E("Icon file is not accessible (%s)", real_icon_file); + evas_object_del(icon); + return NULL; + } + + w = (int) evas_object_data_get(parent, DATA_KEY_ITEM_ICON_WIDTH); + h = (int) evas_object_data_get(parent, DATA_KEY_ITEM_ICON_HEIGHT); + evas_object_size_hint_min_set(icon, w, h); + + elm_image_preload_disabled_set(icon, EINA_TRUE); + elm_image_smooth_set(icon, EINA_TRUE); + elm_image_no_scale_set(icon, EINA_FALSE); + + return icon; +} + + +static Evas_Object *_content_get(void *data, Evas_Object *obj, const char *part) +{ + Evas_Object *bg = NULL; + + item_info_s *item_info = data; + retv_if(NULL == item_info, NULL); + + if (!strcmp(part, "bg")) { + bg = evas_object_rectangle_add(evas_object_evas_get(obj)); + retv_if(NULL == bg, NULL); + + int w = (int) evas_object_data_get(obj, DATA_KEY_ITEM_WIDTH); + int h = (int) evas_object_data_get(obj, DATA_KEY_ITEM_HEIGHT); + + evas_object_size_hint_min_set(bg, w, h); + evas_object_color_set(bg, 0, 0, 0, 0); + evas_object_show(bg); + return bg; + } else if (!strcmp(part, "icon_image")) { + retv_if(NULL == item_info->icon, NULL); + + return _add_icon(obj, item_info->icon); + } + + return NULL; +} + + + +static void _item_selected(void *data, Evas_Object *obj, void *event_info) +{ + item_info_s *item_info = data; + + ret_if(NULL == data); + + _APPS_D("Selected an item[%s]", item_info->appid); + + util_launch_main_operation(NULL, item_info->appid, item_info->name); + elm_gengrid_item_selected_set(item_info->item, EINA_FALSE); +} + + + +static void _del(void *data, Evas_Object *obj) +{ + _APPS_D("Delete an item[%p]", obj); +} + + + +Eina_Bool _init_timer_cb(void *data) +{ + Evas_Object *grid = data; + Elm_Gengrid_Item_Class *gic = NULL; + Eina_List *list = NULL; + item_info_s *item_info = NULL; + int index, count; + + retv_if(!grid, ECORE_CALLBACK_CANCEL); + + list = evas_object_data_get(grid, DATA_KEY_LIST); + retv_if(!list, ECORE_CALLBACK_CANCEL); + + index = (int) evas_object_data_get(grid, DATA_KEY_LIST_INDEX); + count = eina_list_count(list); + if (index == count) goto OUT; + + gic = evas_object_data_get(grid, DATA_KEY_GIC); + goto_if(!gic, OUT); + + item_info = eina_list_nth(list, index); + goto_if(!item_info, OUT); + + item_info->item = elm_gengrid_item_append(grid, gic, item_info, _item_selected, item_info); + item_info->ordering = index; + + index ++; + if (index == count) goto OUT; + evas_object_data_set(grid, DATA_KEY_LIST_INDEX, (void *) index); + + return ECORE_CALLBACK_RENEW; + +OUT: + _APPS_D("Loading apps is done"); + + Elm_Object_Item *first_it = elm_gengrid_first_item_get(grid); + if (first_it) { + elm_gengrid_item_bring_in(first_it, ELM_GENGRID_ITEM_SCROLLTO_TOP); + evas_object_data_set(grid, DATA_KEY_CURRENT_ITEM, first_it); + } + evas_object_data_del(grid, DATA_KEY_LIST_INDEX); + evas_object_data_del(grid, DATA_KEY_TIMER); + + index = 0; + + return ECORE_CALLBACK_CANCEL; +} + + + +#define ITEM_STYLE "recent-apps" +HAPI Evas_Object *grid_create(Evas_Object *win, Evas_Object *parent) +{ + Evas_Object *grid = NULL; + Elm_Gengrid_Item_Class *gic = NULL; + Ecore_Timer *timer = NULL; + instance_info_s *info = NULL; + Eina_List *list = evas_object_data_get(parent, DATA_KEY_LIST); + int count = eina_list_count(list); + double scale = elm_config_scale_get(); + int w = (int)(ITEM_WIDTH * scale); + int h = (int)(ITEM_HEIGHT * scale); + int icon_w = (int)(ITEM_ICON_WIDTH * scale); + int icon_h = (int)(ITEM_ICON_HEIGHT * scale); + + if (0 == count) return NULL; + + info = evas_object_data_get(win, DATA_KEY_INSTANCE_INFO); + retv_if(!info, NULL); + + grid = elm_gengrid_add(parent); + goto_if(NULL == grid, ERROR); + elm_object_theme_set(grid, apps_main_get_info()->theme); + + evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_min_set(grid, info->root_w, GRID_EDIT_HEIGHT); + evas_object_resize(grid, info->root_w, info->root_h); + + elm_gengrid_item_size_set(grid, w, h); + elm_gengrid_align_set(grid, 0.5, 0.0); + elm_gengrid_horizontal_set(grid, EINA_FALSE); + elm_gengrid_multi_select_set(grid, EINA_FALSE); + + evas_object_data_set(grid, DATA_KEY_WIN, win); + evas_object_data_set(grid, DATA_KEY_LAYOUT, parent); + evas_object_data_set(grid, DATA_KEY_INSTANCE_INFO, info); + evas_object_data_set(grid, DATA_KEY_ITEM_ICON_WIDTH, (void *) icon_w); + evas_object_data_set(grid, DATA_KEY_ITEM_ICON_HEIGHT, (void *) icon_h); + evas_object_data_set(grid, DATA_KEY_ITEM_WIDTH, (void *) w); + evas_object_data_set(grid, DATA_KEY_ITEM_HEIGHT, (void *) h); + evas_object_data_set(grid, DATA_KEY_LIST, list); + evas_object_data_set(grid, DATA_KEY_LIST_INDEX, NULL); + + gic = elm_gengrid_item_class_new(); + goto_if(NULL == gic, ERROR); + gic->item_style = ITEM_STYLE; + gic->func.text_get = _text_get; + gic->func.content_get = _content_get; + gic->func.state_get = NULL; + gic->func.del = _del; + evas_object_data_set(grid, DATA_KEY_GIC, gic); + + timer = ecore_timer_add(0.02f, _init_timer_cb, grid); + goto_if(NULL == timer, ERROR); + + evas_object_data_set(grid, DATA_KEY_TIMER, timer); + evas_object_data_set(win, DATA_KEY_GRID, grid); + + return grid; + +ERROR: + if (grid) grid_destroy(win, grid); + return NULL; +} + + + +HAPI void grid_refresh(Evas_Object *grid) +{ + Ecore_Timer *timer; + + ret_if(!grid); + + /* 1. Clear all items in the gengrid */ + elm_gengrid_clear(grid); + + /* 2. Append items to the gengrid */ + timer = evas_object_data_get(grid, DATA_KEY_TIMER); + if (timer) { + ecore_timer_del(timer); + evas_object_data_set(grid, DATA_KEY_TIMER, NULL); + } + + timer = ecore_timer_add(0.02f, _init_timer_cb, grid); + ret_if(!timer); + evas_object_data_set(grid, DATA_KEY_TIMER, timer); +} + + + +HAPI void grid_show_top(Evas_Object *grid) +{ + Elm_Object_Item *item; + + ret_if(!grid); + + item = elm_gengrid_first_item_get(grid); + ret_if(!item); + + elm_gengrid_item_show(item, ELM_GENGRID_ITEM_SCROLLTO_TOP); +} + + + +Eina_Bool _append_items_timer_cb(void *data) +{ + Evas_Object *grid = data; + Elm_Gengrid_Item_Class *gic = NULL; + Eina_List *list = NULL; + item_info_s *item_info = NULL; + int index, count; + + retv_if(!grid, ECORE_CALLBACK_CANCEL); + + list = evas_object_data_get(grid, PRIVATE_DATA_KEY_ITEM_INFO_LIST_APPENDED); + retv_if(!list, ECORE_CALLBACK_CANCEL); + + index = (int) evas_object_data_get(grid, PRIVATE_DATA_KEY_ITEM_INFO_LIST_INDEX); + count = eina_list_count(list); + if (index == count) goto OUT; + + gic = evas_object_data_get(grid, DATA_KEY_GIC); + goto_if(!gic, OUT); + + item_info = eina_list_nth(list, index); + goto_if(!item_info, OUT); + + item_info->item = elm_gengrid_item_append(grid, gic, item_info, _item_selected, item_info); + item_info->ordering = index; + + index ++; + if (index == count) goto OUT; + evas_object_data_set(grid, PRIVATE_DATA_KEY_ITEM_INFO_LIST_INDEX, (void *) index); + + return ECORE_CALLBACK_RENEW; + +OUT: + _APPS_D("Loading apps is done"); + + Elm_Object_Item *first_it = elm_gengrid_first_item_get(grid); + if (first_it) { + elm_gengrid_item_bring_in(first_it, ELM_GENGRID_ITEM_SCROLLTO_TOP); + evas_object_data_set(grid, DATA_KEY_CURRENT_ITEM, first_it); + } + evas_object_data_del(grid, PRIVATE_DATA_KEY_ITEM_INFO_LIST_TIMER); + evas_object_data_del(grid, PRIVATE_DATA_KEY_ITEM_INFO_LIST_INDEX); + evas_object_data_del(grid, PRIVATE_DATA_KEY_ITEM_INFO_LIST_APPENDED); + + index = 0; + + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI void grid_append_list(Evas_Object *grid, Eina_List *list) +{ + Ecore_Timer *timer = NULL; + + ret_if(!grid); + ret_if(!list); + + timer = evas_object_data_del(grid, PRIVATE_DATA_KEY_ITEM_INFO_LIST_TIMER); + if (timer) ecore_timer_del(timer); + + timer = ecore_timer_add(0.01f, _append_items_timer_cb, grid); + ret_if(!timer); + evas_object_data_set(grid, PRIVATE_DATA_KEY_ITEM_INFO_LIST_TIMER, timer); + evas_object_data_set(grid, PRIVATE_DATA_KEY_ITEM_INFO_LIST_INDEX, NULL); + evas_object_data_set(grid, PRIVATE_DATA_KEY_ITEM_INFO_LIST_APPENDED, list); +} + + + +HAPI void grid_remove_list(Evas_Object *grid, Eina_List *list) +{ + const Eina_List *l, *ln; + item_info_s *item_info = NULL; + + ret_if(!grid); + ret_if(!list); + + EINA_LIST_FOREACH_SAFE(list, l, ln, item_info) { + continue_if(!item_info); + if (item_info->item) elm_object_item_del(item_info->item); + item_info->item = NULL; + } +} + + + +// End of a file diff --git a/home/src/apps/item.c b/home/src/apps/item.c new file mode 100755 index 0000000..b93f5da --- /dev/null +++ b/home/src/apps/item.c @@ -0,0 +1,1095 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "apps/apps_conf.h" +#include "apps/effect.h" +#include "apps/item.h" +#include "apps/item_badge.h" +#include "apps/item_info.h" +#include "apps/layout.h" +#include "apps/apps_main.h" +#include "apps/pkgmgr.h" +#include "apps/scroller.h" +#include "apps/scroller_info.h" +#include "apps/page.h" + +#define PRIVATE_DATA_KEY_CALL_X_FOR_MOVING "p_c_x_mv" +#define PRIVATE_DATA_KEY_CALL_Y_FOR_MOVING "p_c_y_mv" +#define PRIVATE_DATA_KEY_ITEM_LONGPRESS_TIMER "p_i_lp_t" +#define PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING "p_it_ani_mv" +#define PRIVATE_DATA_KEY_ITEM_PRESSED "p_i_p" +#define PRIVATE_DATA_KEY_ITEM_DOWN_X "p_i_dx" +#define PRIVATE_DATA_KEY_ITEM_DOWN_Y "p_i_dy" +#define PRIVATE_DATA_KEY_ITEM_X_FOR_MOVING "p_i_x_mv" +#define PRIVATE_DATA_KEY_ITEM_Y_FOR_MOVING "p_i_y_mv" +#define PRIVATE_DATA_KEY_ITEM_X_FOR_ANIM "p_i_x" +#define PRIVATE_DATA_KEY_ITEM_Y_FOR_ANIM "p_i_y" +#define PRIVATE_DATA_KEY_ITEM_W "p_i_w" +#define PRIVATE_DATA_KEY_ITEM_H "p_i_h" +#define PRIVATE_DATA_KEY_ITEM_INNER "p_i_i" +#define PRIVATE_DATA_KEY_SCROLLER_PRESS_ITEM "p_sc_p" +#define PRIVATE_DATA_KEY_SCROLLER_Y "p_sc_y" +#define PRIVATE_DATA_KEY_ITEM_IS_LONGPRESS "p_i_lp" +#define PRIVATE_DATA_KEY_IS_VIRTUAL_ITEM "p_is_vi" +#define PRIVATE_DATA_KEY_ITEM_ANIM_FOR_DIMMING "p_anim_dm" + +#define MOVE_THRESHOLD 5 +#define CALL_THRESHOLD 50 + + + +static void _clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *item = data; + item_info_s *item_info = NULL; + + _APPS_E("Clicked"); + + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + int isEdit = apps_layout_is_edited(item_info->layout); + if(isEdit) { + _APPS_E("Do not launch because of edit mode"); + return; + } + + /* Widget has to be launched by aul_launch_app */ + + if (!evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_IS_LONGPRESS)) { + apps_effect_play_sound(); + + if (apps_main_get_info()->tts && !item_info->tts) { + char tmp[NAME_LEN] = {0,}; + snprintf(tmp, sizeof(tmp), _("IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED"), item_info->name); + char *text = strdup(tmp); + util_create_toast_popup(item_info->layout, text); + return; + } + + if (item_info->open_app) { + _APPS_D("item(%s) launched to aul_open", item_info->type); + apps_util_launch(item_info->win, item_info->appid, item_info->name); + } else { + _APPS_D("item(%s) launched to aul_launch", item_info->type); + apps_util_launch_main_operation(item_info->win, item_info->appid, item_info->name); + } + } else { + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_IS_LONGPRESS, (void*)0); + } +} + + + +static Evas_Object *_content_set_item_inner(Evas_Object *item) +{ + Evas_Object *item_inner = NULL; + item_info_s *item_info = NULL; + + item_inner = evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_INNER); + retv_if(!item_inner, NULL); + + elm_object_part_content_set(item, "item_inner", item_inner); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + retv_if(!item_info, NULL); + apps_scroller_unfreeze(item_info->scroller); + + return item; +} + + + +static Evas_Object *_content_unset_item_inner(Evas_Object *item) +{ + Evas_Object *item_inner = NULL; + item_info_s *item_info = NULL; + + item_inner = elm_object_part_content_unset(item, "item_inner"); + retv_if(!item_inner, NULL); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_INNER, item_inner); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + retv_if(!item_info, NULL); + + apps_scroller_freeze(item_info->scroller); + + return item; +} + + + +#define ANIM_RATE 3 +#define ANIM_RATE_SPARE ANIM_RATE - 1 +static Eina_Bool _anim_move_item_to_empty_position(void *data) +{ + Evas_Object *item = data; + item_info_s *item_info = NULL; + Evas_Object *scroller = NULL; + Evas_Object *item_inner = evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_INNER); + int cur_x, cur_y, end_x, end_y; + int vec_x, vec_y; + + goto_if(!data, ERROR); + if(!item_inner) { + _APPS_D("item_inner was not unset"); + goto ERROR; + } + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + goto_if(!item_info, ERROR); + scroller = item_info->scroller; + + evas_object_geometry_get(item_inner, &cur_x, &cur_y, NULL, NULL); + end_x = (int)evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_X_FOR_ANIM); + end_y = (int)evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_Y_FOR_ANIM); + + if (cur_y == end_y && cur_x == end_x) { + goto_if (NULL == _content_set_item_inner(item), ERROR); + /* unfreeze the scroller after setting the content */ + if (scroller) apps_scroller_unfreeze(scroller); + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_X_FOR_ANIM); + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_Y_FOR_ANIM); + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING); + + if (apps_layout_is_edited(item_info->layout) && !apps_main_get_info()->longpress_edit_disable) { + apps_layout_unedit(item_info->layout); + } + + return ECORE_CALLBACK_CANCEL; + } + + vec_y = (end_y - cur_y)/ANIM_RATE; + if (0 == vec_y) { + if (end_y - cur_y < 0) vec_y = -1; + else if (end_y - cur_y > 0) vec_y = 1; + } + cur_y += vec_y; + + vec_x = (end_x - cur_x)/ANIM_RATE; + if (0 == vec_x) { + if (end_x - cur_x < 0) vec_x = -1; + else if (end_x - cur_x > 0) vec_x = 1; + } + cur_x += vec_x; + + evas_object_move(item_inner, cur_x, cur_y); + + return ECORE_CALLBACK_RENEW; + +ERROR: + if (item) { + if (scroller) apps_scroller_unfreeze(scroller); + + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_IS_LONGPRESS, (void *) 0); + + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING); + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_X_FOR_ANIM); + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_Y_FOR_ANIM); + + } + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _longpress_timer_cb(void *data) +{ + Evas_Object *item = NULL; + item_info_s *item_info = NULL; + Ecore_Timer *timer; + + item = data; + retv_if(!item, ECORE_CALLBACK_CANCEL); + + _APPS_D("longpress start"); + + apps_effect_play_vibration(); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + retv_if(!item_info, ECORE_CALLBACK_CANCEL); + + if (!apps_layout_is_edited(item_info->layout)) { + apps_layout_edit(item_info->layout); + } + + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_IS_LONGPRESS, (void *) 1); + + timer = evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_LONGPRESS_TIMER); + if (timer) ecore_timer_del(timer); + else return ECORE_CALLBACK_CANCEL; + + retv_if(!evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_PRESSED), ECORE_CALLBACK_CANCEL); + retv_if(!_content_unset_item_inner(item), ECORE_CALLBACK_CANCEL); + + elm_object_signal_emit(item_info->item_inner, "name,hide", "item_inner"); + elm_object_signal_emit(item_info->layout, "show", "checker"); + + return ECORE_CALLBACK_CANCEL; + +} + + + +static Eina_Bool _move_timer_cb(void *data) +{ + Evas_Object *item = data; + Evas_Object *pressed_item = NULL; + item_info_s *item_info = NULL; + int idx_above_item = -1; + int idx_below_item = -1; + int x, y, w, h, sy; + + retv_if(!item, ECORE_CALLBACK_CANCEL); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + retv_if(!item_info, ECORE_CALLBACK_CANCEL); + + idx_below_item = apps_scroller_seek_item_position(item_info->scroller, item); + retv_if(-1 == idx_below_item, ECORE_CALLBACK_CANCEL); + + pressed_item = evas_object_data_get(item_info->scroller, PRIVATE_DATA_KEY_SCROLLER_PRESS_ITEM); + retv_if(!pressed_item, ECORE_CALLBACK_CANCEL); + + idx_above_item = apps_scroller_seek_item_position(item_info->scroller, pressed_item); + retv_if(-1 == idx_above_item, ECORE_CALLBACK_CANCEL); + + evas_object_geometry_get(item_info->center, &x, &y, &w, &h); + x = x + (w /2); + y = y + (h /2); + + evas_object_data_set(pressed_item, PRIVATE_DATA_KEY_ITEM_X_FOR_ANIM, (void *) x); + evas_object_data_set(pressed_item, PRIVATE_DATA_KEY_ITEM_Y_FOR_ANIM, (void *) y); + + elm_scroller_region_get(item_info->scroller, NULL, &sy, NULL, NULL); + sy += y; + evas_object_data_set(item_info->scroller, PRIVATE_DATA_KEY_SCROLLER_Y, (void *) sy); + + if (idx_above_item < idx_below_item) { + apps_scroller_move_item_prev(item_info->scroller, pressed_item, item, pressed_item); + } else { + apps_scroller_move_item_next(item_info->scroller, item, pressed_item, pressed_item); + } + + _APPS_D("Move an item(%s, %d) to (%d)", item_info->name, idx_below_item, idx_above_item); + evas_object_data_del(item_info->scroller, DATA_KEY_EVENT_UPPER_TIMER); + + return ECORE_CALLBACK_CANCEL; +} + + + +#define TIME_MOVE_ITEM 0.1f +static void _upper_start_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *item = data; + Ecore_Timer *timer = NULL; + item_info_s *item_info = NULL; + + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + _APPS_D("Upper start : %s", item_info->name); + + timer = evas_object_data_del(item_info->scroller, DATA_KEY_EVENT_UPPER_TIMER); + if (timer) ecore_timer_del(timer); + + timer = ecore_timer_add(TIME_MOVE_ITEM, _move_timer_cb, item); + if (timer) evas_object_data_set(item_info->scroller, DATA_KEY_EVENT_UPPER_TIMER, timer); + else _APPS_E("Cannot add a timer"); +} + + + +static void _upper_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *item = data; + item_info_s *item_info = NULL; + + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); +} + + + +static void _upper_end_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *item = data; + item_info_s *item_info = NULL; + Ecore_Timer *timer = NULL; + + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + _APPS_D("Upper end : %s", item_info->name); + + timer = evas_object_data_del(item_info->scroller, DATA_KEY_EVENT_UPPER_TIMER); + if (timer) ecore_timer_del(timer); +} + + + +static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Object *item = NULL; + Evas_Object *item_inner = NULL; + Evas_Event_Mouse_Down *ei = event_info; + int x = ei->output.x; + int y = ei->output.y; + int center_x, center_y, center_w, center_h; + int sy; + Ecore_Timer *timer = NULL; + Ecore_Animator *move_anim = NULL; + Ecore_Animator *dim_anim = NULL; + item_info_s *item_info = NULL; + + item = data; + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + int pos_x, pos_y, width, height; + evas_object_geometry_get(item, &pos_x, &pos_y, &width, &height); + _APPS_D("Down (%s,%p) (%d, %d), item pos(%d,%d,%d,%d)", item_info->name, obj, x, y, pos_x, pos_y, width, height); + + if (apps_scroller_is_scrolling(item_info->scroller)) return; + + dim_anim = evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_DIMMING); + if (dim_anim) return; + + move_anim = evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING); + if (move_anim) return; + + item_inner = elm_object_part_content_get(item, "item_inner"); + if (!item_inner) { + item_inner = evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_INNER); + ret_if(!item_inner); + elm_object_part_content_set(item, "item_inner", item_inner); + } + + evas_object_data_set(item_info->scroller, PRIVATE_DATA_KEY_SCROLLER_PRESS_ITEM, item); + + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_PRESSED, (void *) 1); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_DOWN_X, (void *) x); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_DOWN_Y, (void *) y); + + evas_object_data_set(item, PRIVATE_DATA_KEY_CALL_X_FOR_MOVING, (void *)x); + evas_object_data_set(item, PRIVATE_DATA_KEY_CALL_Y_FOR_MOVING, (void *)y); + + evas_object_geometry_get(item_info->center, ¢er_x, ¢er_y, ¢er_w, ¢er_h); + center_x += (center_w /2); + center_y += (center_h /2); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_X_FOR_ANIM, (void *) center_x); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_Y_FOR_ANIM, (void *) center_y); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_X_FOR_MOVING, (void *) center_x); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_Y_FOR_MOVING, (void *) center_y); + + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_W, (void *) center_w); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_H, (void *) center_h); + + elm_scroller_region_get(item_info->scroller, NULL, &sy, NULL, NULL); + sy += center_y; + evas_object_data_set(item_info->scroller, PRIVATE_DATA_KEY_SCROLLER_Y, (void *) sy); + + item_is_pressed(item); + + if(apps_main_get_info()->longpress_edit_disable) { + _APPS_E("longpress edit mode disable"); + int isEdit = apps_layout_is_edited(item_info->layout); + if(isEdit) { + timer = ecore_timer_add(LONGPRESS_TIME, _longpress_timer_cb, item); + if (timer) evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_LONGPRESS_TIMER, timer); + else _APPS_E("Cannot add a timer"); + } + } + else { + timer = ecore_timer_add(LONGPRESS_TIME, _longpress_timer_cb, item); + if (timer) evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_LONGPRESS_TIMER, timer); + else _APPS_E("Cannot add a timer"); + } +} + + + +static void _call_object(Evas_Object *item, int cur_x, int cur_y) +{ + Evas_Object *scroller = NULL; + Evas_Object *parent = NULL; + Evas_Object *tmp = NULL; + item_info_s *item_info = NULL; + Eina_List *obj_list = NULL; + const Eina_List *l, *ln; + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + scroller = item_info->scroller; + + evas_object_data_set(item_info->win, DATA_KEY_IS_ORDER_CHANGE, (void*)1); + + obj_list = evas_tree_objects_at_xy_get(item_info->instance_info->e, NULL, cur_x, cur_y); + ret_if(!obj_list); + + EINA_LIST_FOREACH_SAFE(obj_list, l, ln, tmp) { + parent = tmp; + while (parent) { + if (evas_object_data_get(parent, DATA_KEY_EVENT_UPPER_IS_ON)) { + Evas_Object *old_obj = evas_object_data_get(scroller, DATA_KEY_EVENT_UPPER_ITEM); + if (old_obj != parent) { + evas_object_smart_callback_call(old_obj, "upper_end", NULL); + evas_object_smart_callback_call(parent, "upper_start", NULL); + evas_object_data_set(scroller, DATA_KEY_EVENT_UPPER_ITEM, parent); + } else { + evas_object_smart_callback_call(parent, "upper", NULL); + } + return; + } + + parent = evas_object_smart_parent_get(parent); + if (parent == scroller) { + Evas_Object *old_obj = evas_object_data_get(scroller, DATA_KEY_EVENT_UPPER_ITEM); + if (old_obj != scroller) evas_object_smart_callback_call(old_obj, "upper_end", NULL); + evas_object_data_set(scroller, DATA_KEY_EVENT_UPPER_ITEM, parent); + break; + } + } + } + + eina_list_free(obj_list); +} + + + +static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Move *ei = event_info; + Evas_Object *item = data; + Evas_Object *item_inner = NULL; + Ecore_Timer *timer = NULL; + item_info_s *item_info = NULL; + + int down_x, down_y, center_x, center_y; + int cur_x, cur_y, vec_x, vec_y; + int move_x, move_y; + + ret_if(!item); + if (!evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_PRESSED)) { + return; + } + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + cur_x = ei->cur.output.x; + cur_y = ei->cur.output.y; + + down_x = (int) evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_DOWN_X); + down_y = (int) evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_DOWN_Y); + + center_x = (int) evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_X_FOR_MOVING); + center_y = (int) evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_Y_FOR_MOVING); + + move_x = (int) evas_object_data_get(item, PRIVATE_DATA_KEY_CALL_X_FOR_MOVING); + move_y = (int) evas_object_data_get(item, PRIVATE_DATA_KEY_CALL_Y_FOR_MOVING); + + vec_x = cur_x - down_x; + vec_y = cur_y - down_y; + + center_x += vec_x; + center_y += vec_y; + + timer = evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_LONGPRESS_TIMER); + if (timer && (abs(vec_x) >= 20 || abs(vec_y) >= 20)) { + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_LONGPRESS_TIMER); + ecore_timer_del(timer); + return; + } + item_inner = evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_INNER); + if (!item_inner) return; + + evas_object_move(item_inner, center_x, center_y); + + vec_x = cur_x - move_x; + vec_y = cur_y - move_y; + + if (abs(vec_x) >= CALL_THRESHOLD || abs(vec_y) >= CALL_THRESHOLD) { + _call_object(item, cur_x, cur_y); + evas_object_data_set(item, PRIVATE_DATA_KEY_CALL_X_FOR_MOVING, (void *)cur_x); + evas_object_data_set(item, PRIVATE_DATA_KEY_CALL_Y_FOR_MOVING, (void *)cur_y); + } +} + + + +static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Object *item = data; + Evas_Object *old_obj; + Evas_Event_Mouse_Up *ei = event_info; + Ecore_Timer *timer = NULL; + item_info_s *item_info = NULL; + Ecore_Animator *move_anim = NULL; + Ecore_Animator *dim_anim = NULL; + + int x = ei->output.x; + int y = ei->output.y; + int down_sy, sy, sh; + int center_x, center_y; + + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + int pos_x, pos_y, width, height; + evas_object_geometry_get(item, &pos_x, &pos_y, &width, &height); + _APPS_D("Up (%s,%p) (%d, %d), item pos(%d,%d,%d,%d)", item_info->name, obj, x, y, pos_x, pos_y, width, height); + + item_is_released(item); + + //after apps_scroller_move_item_prev(), up_cb is comming again why??? + if(evas_object_data_get(item, PRIVATE_DATA_KEY_IS_VIRTUAL_ITEM)) { + evas_object_data_del(item, PRIVATE_DATA_KEY_IS_VIRTUAL_ITEM); + return; + } + + dim_anim = evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_DIMMING); + if (dim_anim) { + ecore_animator_del(dim_anim); + dim_anim = NULL; + } + + move_anim = evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING); + if (move_anim) return; + + evas_object_data_del(item_info->scroller, PRIVATE_DATA_KEY_SCROLLER_PRESS_ITEM); + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_PRESSED); + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_DOWN_X); + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_DOWN_Y); + center_x = (int) evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_X_FOR_MOVING); + center_y = (int) evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_Y_FOR_MOVING); + evas_object_data_del(item, PRIVATE_DATA_KEY_CALL_X_FOR_MOVING); + evas_object_data_del(item, PRIVATE_DATA_KEY_CALL_Y_FOR_MOVING); + + + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_W); + evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_H); + + old_obj = evas_object_data_del(item_info->scroller, DATA_KEY_EVENT_UPPER_ITEM); + if (old_obj) { + evas_object_smart_callback_call(old_obj, "upper_end", NULL); + } + + timer = evas_object_data_del(item_info->scroller, DATA_KEY_EVENT_UPPER_TIMER); + if (timer) ecore_timer_del(timer); + + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_IS_LONGPRESS, (void *) 0); + timer = evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_LONGPRESS_TIMER); + if (timer) { + ecore_timer_del(timer); + timer = NULL; + return; + } + + elm_scroller_region_get(item_info->scroller, NULL, &sy, NULL, &sh); + down_sy = (int)evas_object_data_del(item_info->scroller, PRIVATE_DATA_KEY_SCROLLER_Y); + + if (down_sy <= sy){ + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_Y_FOR_ANIM, (void *)-200); + } else if (down_sy >= (sy + sh)) { + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_Y_FOR_ANIM, (void *)1000); + } else { + int cur_x, cur_y, cur_w, cur_h; + evas_object_geometry_get(item_info->center, &cur_x, &cur_y, &cur_w, &cur_h); + cur_x += (cur_w /2); + cur_y += (cur_h /2); + if (cur_x != center_x || cur_y != center_y) { + _APPS_D("cur_x,cur_y: [%d, %d]", cur_x, cur_y); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_X_FOR_ANIM, (void *)cur_x); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_Y_FOR_ANIM, (void *)cur_y); + } + } + + //Check the virtual item + Evas_Object *virtual_item = apps_page_get_item_at(item_info->page, 0); + if(virtual_item != item) + { + int bIsVirtual = (int)evas_object_data_get(virtual_item, DATA_KEY_IS_VIRTUAL_ITEM); + if(bIsVirtual) + { + item_info_s *virtual_item_info = evas_object_data_get(virtual_item, DATA_KEY_ITEM_INFO); + ret_if(!virtual_item_info); + int cur_x, cur_y, cur_w, cur_h; + evas_object_geometry_get(virtual_item_info->center, &cur_x, &cur_y, &cur_w, &cur_h); + cur_x += (cur_w /2); + cur_y += (cur_h /2); + _APPS_D("cur_x,cur_y: [%d, %d]", cur_x, cur_y); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_X_FOR_ANIM, (void *)cur_x); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_Y_FOR_ANIM, (void *)cur_y); + evas_object_data_set(item, PRIVATE_DATA_KEY_IS_VIRTUAL_ITEM, (void *)EINA_TRUE); + + apps_scroller_move_item_prev(item_info->scroller, virtual_item, item, virtual_item); + } + } +#if 0 + move_anim = evas_object_data_del(item, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING); + if (move_anim) { + ecore_animator_del(move_anim); + move_anim = NULL; + } +#endif + move_anim = ecore_animator_add(_anim_move_item_to_empty_position, item); + ret_if(!move_anim); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING, move_anim); + + elm_object_signal_emit(item_info->item_inner, "name,show", "item_inner"); + elm_object_signal_emit(item_info->layout, "hide", "checker"); +} + + +HAPI void item_destroy(Evas_Object *item) +{ + Evas_Object *icon = NULL; + item_info_s *item_info = NULL; + + ret_if(!item); + + item_badge_destroy(item); + + item_info = evas_object_data_del(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + if (APPS_ERROR_NONE != apps_pkgmgr_item_list_remove_item(item_info->pkgid, item_info->appid, item)) { + _APPS_E("Cannot remove item in the item_list"); + } + + icon = elm_object_part_content_unset(item_info->item_inner, "icon"); + if (icon) evas_object_del(icon); + if (item_info->center) { + evas_object_data_del(item_info->center, DATA_KEY_EVENT_UPPER_IS_ON); + evas_object_del(item_info->center); + } + evas_object_del(item_info->item_inner); + evas_object_del(item); +} + + + +static char *_access_info_cb(void *data, Evas_Object *obj) +{ + Evas_Object *item = data; + item_info_s *item_info = NULL; + char *tmp = NULL; + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + retv_if(!item_info, NULL); + + tmp = strdup(item_info->name); + retv_if(!tmp, NULL); + return tmp; +} + + + +static char *_access_item_badge_cb(void *data, Evas_Object *obj) +{ + Evas_Object *item = data; + char *tmp = NULL; + char number[BUFSZE]; + + int nBadgeCount = item_badge_count(item); + if(nBadgeCount == 1) { + snprintf(number, sizeof(number), _("IDS_TTS_BODY_1_NEW_ITEM")); + } + else if(nBadgeCount > 1) { + snprintf(number, sizeof(number), _("IDS_TTS_BODY_PD_NEW_ITEMS"), nBadgeCount); + } + else { + return NULL; + } + + tmp = strdup(number); + retv_if(!tmp, NULL); + + return tmp; +} + + + +#define ITEM_EDJE_FILE EDJEDIR"/apps_item.edj" +HAPI Evas_Object *item_create(Evas_Object *scroller, item_info_s *item_info) +{ + Evas_Object *item = NULL; + Evas_Object *item_inner = NULL; + Evas_Object *icon = NULL; + Evas_Object *center = NULL; + Evas_Object *focus = NULL; + + scroller_info_s *scroller_info = NULL; + instance_info_s *instance_info = NULL; + + double scale = elm_config_scale_get(); + int w = (int)(ITEM_WIDTH * scale); + int h = (int)(ITEM_HEIGHT * scale); + int w_ef, h_ef; + + retv_if(!scroller, NULL); + retv_if(!item_info, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + instance_info = scroller_info->instance_info; + + /* Item outer */ + item = elm_layout_add(scroller); + retv_if(NULL == item, NULL); + elm_layout_file_set(item, ITEM_EDJE_FILE, "item"); + evas_object_repeat_events_set(item, EINA_TRUE); + evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(item); + + /* Item inner */ + item_inner = elm_layout_add(scroller); + goto_if(NULL == item_inner, ERROR); + elm_layout_file_set(item_inner, ITEM_EDJE_FILE, "item_inner"); + evas_object_repeat_events_set(item_inner, EINA_TRUE); + evas_object_size_hint_weight_set(item_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(item_inner); + elm_object_part_content_set(item, "item_inner", item_inner); + + /* Center */ + center = elm_layout_add(scroller); + retv_if(NULL == center, NULL); + elm_layout_file_set(center, ITEM_EDJE_FILE, "center"); + evas_object_size_hint_min_set(center, w, h); + evas_object_show(center); + evas_object_smart_callback_add(center, "upper_start", _upper_start_cb, item); + evas_object_smart_callback_add(center, "upper", _upper_cb, item); + evas_object_smart_callback_add(center, "upper_end", _upper_end_cb, item); + evas_object_data_set(center, DATA_KEY_EVENT_UPPER_IS_ON, (void *) 1); + + /* Icon & Text */ + icon = evas_object_image_add(instance_info->e); + goto_if(NULL == icon, ERROR); + evas_object_repeat_events_set(icon, EINA_TRUE); + evas_object_image_file_set(icon, item_info->icon, NULL); + evas_object_image_filled_set(icon, EINA_TRUE); + evas_object_show(icon); + + //Apply image effect + ea_effect_h *ea_effect_stroke = ea_image_effect_create(); + ea_image_effect_add_outer_shadow(ea_effect_stroke, 0, 1.0, 1.5, 0x4C000000); + ea_object_image_effect_set(icon, ea_effect_stroke); + ea_image_effect_destroy(ea_effect_stroke); + + ea_effect_h *ea_effect = ea_image_effect_create(); + ea_image_effect_add_outer_shadow(ea_effect, -90, 4.0, 1.5, 0x4C000000); + ea_object_image_effect_set(icon, ea_effect); + ea_image_effect_destroy(ea_effect); + + /* We have to check the icon size after ea_effect */ + evas_object_image_size_get(icon, &w_ef, &h_ef); + _APPS_D("Icon size after ea_effect (%d:%d)", w_ef, h_ef); + + elm_object_part_content_set(item_inner, "icon", icon); + elm_object_part_text_set(item_inner, "name", item_info->name); + + focus = elm_button_add(item); + retv_if(NULL == focus, NULL); + + elm_object_style_set(focus, "focus"); + elm_object_part_content_set(item, "focus", focus); + elm_access_info_cb_set(focus, ELM_ACCESS_INFO, _access_info_cb, item); + elm_access_info_cb_set(focus, ELM_ACCESS_TYPE, NULL, NULL); + elm_access_info_cb_set(focus, ELM_ACCESS_STATE, _access_item_badge_cb, item); + elm_object_focus_allow_set(focus, EINA_FALSE); + evas_object_smart_callback_add(focus, "clicked", _clicked_cb, item); + evas_object_event_callback_add(focus, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, item); + evas_object_event_callback_add(focus, EVAS_CALLBACK_MOUSE_MOVE, _move_cb, item); + evas_object_event_callback_add(focus, EVAS_CALLBACK_MOUSE_UP, _up_cb, item); + + /* Item info */ + item_info->win = scroller_info->win; + item_info->layout = scroller_info->layout; + item_info->instance_info = instance_info; + + item_info->scroller = scroller; + item_info->box = scroller_info->box; + + item_info->item = item; + item_info->item_inner = item_inner; + item_info->center = center; + + evas_object_data_set(item, DATA_KEY_ITEM_INFO, item_info); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_IS_LONGPRESS, (void *) 0); + + if (APPS_ERROR_NONE != item_badge_init(item)) _APPS_E("Cannot register badge"); + if (APPS_ERROR_NONE != apps_pkgmgr_item_list_append_item(item_info->pkgid, item_info->appid, item)) { + _APPS_E("Cannot append item into the item_list"); + } + + return item; + +ERROR: + item_destroy(item); + return NULL; +} + + + +HAPI Evas_Object *item_virtual_create(Evas_Object *scroller) +{ + Evas_Object *item = NULL; + Evas_Object *item_inner = NULL; + Evas_Object *center = NULL; + + scroller_info_s *scroller_info = NULL; + instance_info_s *instance_info = NULL; + + double scale = elm_config_scale_get(); + int w = (int)(ITEM_WIDTH * scale); + int h = (int)(ITEM_HEIGHT * scale); + + retv_if(!scroller, NULL); + + item_info_s *item_info = calloc(1, sizeof(item_info_s)); + retv_if(!item_info, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + if (!scroller_info) { + _E("cannot get the scroller_info"); + free(item_info); + return NULL; + } + instance_info = scroller_info->instance_info; + + /* Item outer */ + item = elm_layout_add(scroller); + if (NULL == item) { + _E("cannot add a layout"); + free(item_info); + return NULL; + } + elm_layout_file_set(item, ITEM_EDJE_FILE, "item"); + evas_object_repeat_events_set(item, EINA_TRUE); + evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(item); + evas_object_data_set(item, DATA_KEY_ITEM_INFO, item_info); + + /* Item inner */ + item_inner = elm_layout_add(scroller); + goto_if(NULL == item_inner, ERROR); + elm_layout_file_set(item_inner, ITEM_EDJE_FILE, "item_inner"); + evas_object_repeat_events_set(item_inner, EINA_TRUE); + evas_object_size_hint_weight_set(item_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(item_inner); + elm_object_part_content_set(item, "item_inner", item_inner); + + /* Center */ + center = elm_layout_add(scroller); + goto_if(NULL == center, ERROR); + elm_layout_file_set(center, ITEM_EDJE_FILE, "center"); + evas_object_size_hint_min_set(center, w, h); + evas_object_show(center); + evas_object_smart_callback_add(center, "upper_start", _upper_start_cb, item); + evas_object_smart_callback_add(center, "upper", _upper_cb, item); + evas_object_smart_callback_add(center, "upper_end", _upper_end_cb, item); +// evas_object_event_callback_add(center, EVAS_CALLBACK_MOUSE_DOWN, _center_down_cb, item); +// evas_object_event_callback_add(center, EVAS_CALLBACK_MOUSE_UP, _center_up_cb, item); + evas_object_data_set(center, DATA_KEY_EVENT_UPPER_IS_ON, (void *) 1); + + /* Item info */ + item_info->icon = NULL; + item_info->name = NULL; + + item_info->win = scroller_info->win; + item_info->layout = scroller_info->layout; + item_info->instance_info = instance_info; + + item_info->scroller = scroller; + item_info->box = scroller_info->box; + + item_info->item = item; + item_info->item_inner = item_inner; + item_info->center = center; + + return item; + +ERROR: + item_virtual_destroy(item); + return NULL; +} + + + +HAPI void item_virtual_destroy(Evas_Object *item) +{ + item_info_s *item_info = NULL; + + ret_if(!item); + + item_info = evas_object_data_del(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + if (item_info->center) { + evas_object_data_del(item_info->center, DATA_KEY_EVENT_UPPER_IS_ON); + evas_object_del(item_info->center); + } + evas_object_del(item_info->item_inner); + evas_object_del(item); + free(item_info); +} + + + +HAPI void item_change_language(Evas_Object *item) +{ + item_info_s *item_info = NULL; + + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + ret_if(!item_info->item_inner); + + elm_object_part_text_set(item_info->item_inner, "name", item_info->name); +} + + + +HAPI void item_edit(Evas_Object *item) +{ + item_info_s *item_info = NULL; + + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + ret_if(!item_info->item_inner); + +// elm_object_signal_emit(item_info->item, "edit", "item"); +// elm_object_signal_emit(item_info->item_inner, "edit", "item_inner"); +} + + + +HAPI void item_unedit(Evas_Object *item) +{ + item_info_s *item_info = NULL; + + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + ret_if(!item_info->item_inner); + +// elm_object_signal_emit(item_info->item, "unedit", "item"); +// elm_object_signal_emit(item_info->item_inner, "unedit", "item_inner"); +} + + + +HAPI Evas_Object* item_get_press_item(Evas_Object *scroller) +{ + retv_if(!scroller, NULL); + return (Evas_Object*) evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_PRESS_ITEM); +} + + + +HAPI int item_is_longpressed(Evas_Object *item) +{ + retv_if(!item, 0); + return (int) evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_IS_LONGPRESS); +} + + +static Eina_Bool _anim_item_pressed_cb(void *data) +{ + item_info_s *item_info = data; + retv_if(!item_info, ECORE_CALLBACK_CANCEL); + retv_if(!item_info->scroller, ECORE_CALLBACK_CANCEL); + retv_if(!item_info->item_inner, ECORE_CALLBACK_CANCEL); + + if (apps_scroller_is_scrolling(item_info->scroller)) { + _APPS_E("apps_scroller_is_scrolling"); + return ECORE_CALLBACK_CANCEL; + } + + _APPS_W("item is pressed"); + + elm_object_signal_emit(item_info->item_inner, "item,pressed", "item_inner"); + edje_message_signal_process(); + + evas_object_data_del(item_info->item, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_DIMMING); + + return ECORE_CALLBACK_CANCEL; +} + +HAPI void item_is_pressed(Evas_Object *item) +{ + ret_if(!item); + + item_info_s *item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + Ecore_Animator *dim_anim = ecore_animator_add(_anim_item_pressed_cb, item_info); + ret_if(!dim_anim); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_DIMMING, dim_anim); +} + + +static Eina_Bool _anim_item_released_cb(void *data) +{ + item_info_s *item_info = data; + retv_if(!item_info, ECORE_CALLBACK_CANCEL); + retv_if(!item_info->item_inner, ECORE_CALLBACK_CANCEL); + + _APPS_W("item is released"); + + elm_object_signal_emit(item_info->item_inner, "item,released", "item_inner"); + edje_message_signal_process(); + + return ECORE_CALLBACK_CANCEL; +} + + +HAPI void item_is_released(Evas_Object *item) +{ + ret_if(!item); + + item_info_s *item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + Ecore_Animator *dim_anim = ecore_animator_add(_anim_item_released_cb, item_info); + ret_if(!dim_anim); +} + +// End of this file diff --git a/home/src/apps/item_badge.c b/home/src/apps/item_badge.c new file mode 100755 index 0000000..683aee8 --- /dev/null +++ b/home/src/apps/item_badge.c @@ -0,0 +1,311 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "apps/scroller_info.h" +#include "apps/item_badge.h" +#include "apps/item_info.h" +#include "apps/apps_main.h" + + +#define PRIVATE_DATA_KEY_IDLE_TIMER "p_it" + + + +HAPI int item_badge_count(Evas_Object *item) +{ + item_info_s *item_info = NULL; + unsigned int is_display = 0; + unsigned int count = 0; + badge_error_e err = BADGE_ERROR_NONE; + + retv_if(!item, 0); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + retv_if(!item_info, 0); + + err = badge_get_display(item_info->appid, &is_display); + if (BADGE_ERROR_NONE != err) _APPS_E("cannot get badge display"); + + if (!is_display) return 0; + + err = badge_get_count(item_info->appid, &count); + if (BADGE_ERROR_NONE != err) _APPS_E("cannot get badge count"); + + _APPS_SD("Badge for app %s : %u", item_info->appid, count); + + return (int) count; +} + + + +HAPI int item_badge_is_registered(const char *appid) +{ + bool existing = 0; + badge_error_e err = BADGE_ERROR_NONE; + + retv_if(!appid, 0); + + err = badge_is_existing(appid, &existing); + if (BADGE_ERROR_NONE != err) _APPS_E("cannot know whether the badge for %s is or not.", appid); + + return existing? 1 : 0; +} + + + +static Eina_Bool _idler_cb(void *data) +{ + Evas_Object *item = data; + int count; + + retv_if(!item, ECORE_CALLBACK_CANCEL); + + count = item_badge_count(item); + if (count) item_badge_show(item, count); + else item_badge_hide(item); + + evas_object_data_del(item, PRIVATE_DATA_KEY_IDLE_TIMER); + + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI apps_error_e item_badge_init(Evas_Object *item) +{ + Ecore_Idler *idle_timer = NULL; + item_info_s *item_info = NULL; + int is_registered; + + retv_if(!item, APPS_ERROR_INVALID_PARAMETER); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + retv_if(!item_info, APPS_ERROR_FAIL); + + is_registered = item_badge_is_registered(item_info->appid); + if (!is_registered) { + return APPS_ERROR_NONE; + } + + idle_timer = evas_object_data_get(item, PRIVATE_DATA_KEY_IDLE_TIMER); + if (idle_timer) { + ecore_idler_del(idle_timer); + evas_object_data_del(item, PRIVATE_DATA_KEY_IDLE_TIMER); + } + + idle_timer = ecore_idler_add(_idler_cb, item); + retv_if(NULL == idle_timer, APPS_ERROR_FAIL); + evas_object_data_set(item, PRIVATE_DATA_KEY_IDLE_TIMER, idle_timer); + + return APPS_ERROR_NONE; +} + + + +HAPI void item_badge_destroy(Evas_Object *item) +{ + Ecore_Idler *idle_timer = NULL; + item_info_s *item_info = NULL; + + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + idle_timer = evas_object_data_get(item, PRIVATE_DATA_KEY_IDLE_TIMER); + if (idle_timer) { + _APPS_D("Badge handler for app %s is not yet ready", item_info->appid); + evas_object_data_del(item, PRIVATE_DATA_KEY_IDLE_TIMER); + ecore_idler_del(idle_timer); + return; + } + + item_badge_hide(item); +} + + + +static void _badge_change_cb(unsigned int action, const char *appid, unsigned int count, void *data) +{ + Evas_Object *layout = data; + Evas_Object *item = NULL; + unsigned int is_display = 0; + badge_error_e err = BADGE_ERROR_NONE; + + _APPS_SD("Badge changed, action : %u, appid : %s, count : %u", action, appid, count); + + ret_if(!layout); + ret_if(!appid); + + Evas_Object *scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + ret_if(!scroller); + + scroller_info_s *scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + ret_if(!scroller_info->list); + + item = apps_item_info_list_get_item(scroller_info->list, appid); + if (NULL == item) return; + + if (BADGE_ACTION_REMOVE == action) { + count = 0; + is_display = 0; + } else { + err = badge_get_display(appid, &is_display); + if (BADGE_ERROR_NONE != err) _APPS_E("cannot get badge display"); + if (!is_display) count = 0; + } + + if (count) item_badge_show(item, count); + else item_badge_hide(item); +} + + + +HAPI void item_badge_register_changed_cb(Evas_Object *layout) +{ + badge_error_e err; + + err = badge_register_changed_cb(_badge_change_cb, layout); + ret_if(BADGE_ERROR_NONE != err); +} + + + +HAPI void item_badge_unregister_changed_cb(void) +{ + badge_error_e err; + + err = badge_unregister_changed_cb(_badge_change_cb); + ret_if(BADGE_ERROR_NONE != err); +} + + + +static char *_get_count_str_from_icu(int count) +{ + char *p = NULL; + char *locale = NULL; + + char *ret_str = NULL; + UErrorCode status = U_ZERO_ERROR; + uint32_t number = count; + UNumberFormat *num_fmt; + UChar result[20] = { 0, }; + char res[20] = { 0, }; + int32_t len = (int32_t) (sizeof(result) / sizeof((result)[0])); + + locale = vconf_get_str(VCONFKEY_REGIONFORMAT); + retv_if(!locale, NULL); + + if(locale[0] != '\0') { + p = strstr(locale, ".UTF-8"); + if (p) *p = 0; + } + + num_fmt = unum_open(UNUM_DEFAULT, NULL, -1, locale, NULL, &status); + unum_format(num_fmt, number, result, len, NULL, &status); + u_austrcpy(res, result); + unum_close(num_fmt); + + ret_str = strdup(res); + free(locale); + return ret_str; +} + + + +#define BADGE_SIGNAL_LEN 16 +#define MAX_BADGE_COUNT 999 +HAPI void item_badge_show(Evas_Object *item, int count) +{ + item_info_s *item_info = NULL; + char *str = NULL; + char badge_signal[16]; + + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + if (count > MAX_BADGE_COUNT) count = MAX_BADGE_COUNT; + + str = _get_count_str_from_icu(count); + elm_object_part_text_set(item_info->item_inner, "badge_txt", str); + + if (count <= 0) { + snprintf(badge_signal, sizeof(badge_signal), "badge,off"); + } else if (count < 10) { + snprintf(badge_signal, sizeof(badge_signal), "badge,on,1"); + } else if (count < 100) { + snprintf(badge_signal, sizeof(badge_signal), "badge,on,2"); + } else { + snprintf(badge_signal, sizeof(badge_signal), "badge,on,3"); + } + elm_object_signal_emit(item_info->item_inner, badge_signal, "item"); + + free(str); +} + + + +HAPI void item_badge_hide(Evas_Object *item) +{ + item_info_s *item_info = NULL; + + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + elm_object_signal_emit(item_info->item_inner, "badge,off", "item"); +} + + + +HAPI void item_badge_change_language(Evas_Object *item) +{ + int count = 0; + + ret_if(!item); + + count = item_badge_count(item); + if (count) item_badge_show(item, count); + else item_badge_hide(item); +} + + + +HAPI void item_badge_remove(const char *pkgid) +{ + ret_if(!pkgid); + + _APPS_SD("pkgid: [%s]", pkgid); + + badge_remove(pkgid); +} + + +// End of a file diff --git a/home/src/apps/item_info.c b/home/src/apps/item_info.c new file mode 100755 index 0000000..9681529 --- /dev/null +++ b/home/src/apps/item_info.c @@ -0,0 +1,483 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "apps/db.h" +#include "apps/item_info.h" +#include "apps/list.h" +#include "apps/apps_main.h" +#include "apps/xml.h" + +#define APP_TYPE_WGT "wgt" + + + +HAPI void apps_item_info_destroy(item_info_s *item_info) +{ + ret_if(!item_info); + + if (item_info->pkgid) free(item_info->pkgid); + if (item_info->appid) free(item_info->appid); + if (item_info->name) free(item_info->name); + if (item_info->icon) free(item_info->icon); + if (item_info->type) free(item_info->type); + if (item_info) free(item_info); +} + + + +HAPI item_info_s *apps_item_info_create(const char *appid) +{ + item_info_s *item_info = NULL; + pkgmgrinfo_appinfo_h appinfo_h = NULL; + pkgmgrinfo_pkginfo_h pkghandle = NULL; + char *pkgid = NULL; + char *name = NULL; + char *icon = NULL; + char *type = NULL; + bool nodisplay = false; + bool enabled = false; + + retv_if(!appid, NULL); + + item_info = calloc(1, sizeof(item_info_s)); + if (NULL == item_info) { + return NULL; + } + + goto_if(0 > pkgmgrinfo_appinfo_get_appinfo(appid, &appinfo_h), ERROR); + + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_label(appinfo_h, &name), ERROR); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_icon(appinfo_h, &icon), ERROR); + + do { + break_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_pkgid(appinfo_h, &pkgid)); + break_if(NULL == pkgid); + + break_if(0 > pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkghandle)); + break_if(NULL == pkghandle); + } while (0); + + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_is_nodisplay(appinfo_h, &nodisplay), ERROR); + if (nodisplay) goto ERROR; + + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_is_enabled(appinfo_h, &enabled), ERROR); + if (!enabled) goto ERROR; + + goto_if(PMINFO_R_OK != pkgmgrinfo_pkginfo_get_type(pkghandle, &type), ERROR); +#ifdef RUN_ON_DEVICE + int support_mode = 0; + goto_if(PMINFO_R_OK != pkgmgrinfo_pkginfo_get_support_mode(pkghandle, &support_mode), ERROR); +#endif + + if (pkgid) { + item_info->pkgid = strdup(pkgid); + goto_if(NULL == item_info->pkgid, ERROR); + } + + item_info->appid = strdup(appid); + goto_if(NULL == item_info->appid, ERROR); + + if (name) { + item_info->name = strdup(name); + goto_if(NULL == item_info->name, ERROR); + } + + if (type) { + item_info->type = strdup(type); + goto_if(NULL == item_info->type, ERROR); + if (!strncmp(item_info->type, APP_TYPE_WGT, strlen(APP_TYPE_WGT))) { + item_info->open_app = 1; + } else { + item_info->open_app = 0; + } + } + + if (icon) { + if (strlen(icon) > 0) { + item_info->icon = strdup(icon); + goto_if(NULL == item_info->icon, ERROR); + } else { + item_info->icon = strdup(DEFAULT_ICON); + goto_if(NULL == item_info->icon, ERROR); + } + } else { + item_info->icon = strdup(DEFAULT_ICON); + goto_if(NULL == item_info->icon, ERROR); + } + +#ifdef RUN_ON_DEVICE + if (support_mode & PMINFO_MODE_PROP_SCREEN_READER) + item_info->tts = 1; + else + item_info->tts = 0; +#else + item_info->tts = 1; +#endif + + pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h); + if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle); + + return item_info; + +ERROR: + apps_item_info_destroy(item_info); + if (appinfo_h) pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h); + if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle); + + return NULL; +} + + + +HAPI item_info_s *apps_item_info_get(Evas_Object *win, const char *appid) +{ + Evas_Object *layout = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + item_info_s *info = NULL; + + retv_if(!win, NULL); + retv_if(!appid, NULL); + + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + retv_if(!layout, NULL); + + list = evas_object_data_get(layout, DATA_KEY_LIST); + retv_if(!list, NULL); + + EINA_LIST_FOREACH_SAFE(list, l, ln, info) { + continue_if(!info); + continue_if(!info->appid); + if (!strncmp(info->appid, appid, strlen(appid))) { + return info; + } + } + + return NULL; +} + + + +static int _apps_cb(pkgmgrinfo_appinfo_h handle, void *user_data) +{ + Eina_List **list = user_data; + char *appid = NULL; + item_info_s *item_info = NULL; + + retv_if(NULL == handle, 0); + retv_if(NULL == user_data, 0); + + pkgmgrinfo_appinfo_get_appid(handle, &appid); + retv_if(NULL == appid, 0); + + if (apps_db_count_item(appid)) { + _APPS_D("%s is Top 4", appid); + return 0; + } + + item_info = apps_item_info_create(appid); + if (NULL == item_info) { + _APPS_D("%s does not have the item_info", appid); + return 0; + } + + *list = eina_list_append(*list, item_info); + + return 0; +} + + + +static int _apps_sort_cb(const void *d1, const void *d2) +{ + item_info_s *tmp1 = (item_info_s *) d1; + item_info_s *tmp2 = (item_info_s *) d2; + + if (NULL == tmp1 || NULL == tmp1->name) return 1; + else if (NULL == tmp2 || NULL == tmp2->name) return -1; + + return strcmp(tmp1->name, tmp2->name); +} + + + +static Eina_List *_read_all_except_top4(Eina_List **list) +{ + pkgmgrinfo_appinfo_filter_h handle = NULL; + + retv_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_create(&handle), NULL); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_NODISPLAY, 0), ERROR); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, _apps_cb, list), ERROR); + + *list = eina_list_sort(*list, eina_list_count(*list), _apps_sort_cb); + +ERROR: + if (handle) pkgmgrinfo_appinfo_filter_destroy(handle); + + return *list; +} + + + +static int _apps_all_cb(pkgmgrinfo_appinfo_h handle, void *user_data) +{ + Eina_List **list = user_data; + char *appid = NULL; + item_info_s *item_info = NULL; + + retv_if(NULL == handle, 0); + retv_if(NULL == user_data, 0); + + pkgmgrinfo_appinfo_get_appid(handle, &appid); + retv_if(NULL == appid, 0); + + item_info = apps_item_info_create(appid); + if (NULL == item_info) { + _APPS_D("%s does not have the item_info", appid); + return 0; + } + + *list = eina_list_append(*list, item_info); + + return 0; +} + + + +static Eina_List *_read_all_apps(Eina_List **list) +{ + pkgmgrinfo_appinfo_filter_h handle = NULL; + + retv_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_create(&handle), NULL); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_NODISPLAY, 0), ERROR); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, _apps_all_cb, list), ERROR); + + *list = eina_list_sort(*list, eina_list_count(*list), _apps_sort_cb); + +ERROR: + if (handle) pkgmgrinfo_appinfo_filter_destroy(handle); + + return *list; +} + + + +static int _find_appid_cb(const void *d1, const void *d2) +{ + item_info_s *tmp1 = (item_info_s *) d1; + item_info_s *tmp2 = (item_info_s *) d2; + + if (NULL == tmp1 || NULL == tmp1->appid) return 1; + else if (NULL == tmp2 || NULL == tmp2->appid) return -1; + + return strcmp(tmp1->appid, tmp2->appid); +} + + + +#define APPS_DEFAULT_ITEM_XML_FILE RESDIR"/apps_default_items.xml" +HAPI Eina_List *apps_item_info_list_create(item_info_list_type_e list_type) +{ + Eina_List *list = NULL; + + switch (list_type) { + case ITEM_INFO_LIST_TYPE_ALL: + /* It doesn't care whether the list is NULL or not */ + list = apps_db_write_list(); + list = _read_all_except_top4(&list); + break; + case ITEM_INFO_LIST_TYPE_XML: + { + Eina_List *xml_list = NULL; + Eina_List *pkgmgr_list = NULL; + + xml_list = apps_xml_write_list(APPS_DEFAULT_ITEM_XML_FILE); + _read_all_apps(&pkgmgr_list); + + const Eina_List *l, *ln; + item_info_s *item_info = NULL; + EINA_LIST_FOREACH_SAFE(xml_list, l, ln, item_info) { + item_info_s *data = eina_list_search_unsorted(pkgmgr_list, _find_appid_cb, item_info); + if(data) { + _APPS_D("remove apps[%s] from pkg list", data->appid); + pkgmgr_list = eina_list_remove(pkgmgr_list, data); + apps_item_info_destroy(data); + } + } + + int nPkgListCount = eina_list_count(pkgmgr_list); + _APPS_D("pkg list count[%d]", nPkgListCount); + if(nPkgListCount) { + list = eina_list_merge(xml_list, pkgmgr_list); + } + else { + eina_list_free(pkgmgr_list); + list = xml_list; + } + } + break; + default: + _APPS_E("Cannot reach here"); + break; + } + + return list; +} + + + +HAPI void apps_item_info_list_destroy(Eina_List *item_info_list) +{ + item_info_s *item_info = NULL; + + ret_if(!item_info_list); + + EINA_LIST_FREE(item_info_list, item_info) { + continue_if(!item_info); + apps_item_info_destroy(item_info); + } +} + + + +HAPI Evas_Object *apps_item_info_list_get_item(Eina_List *item_info_list, const char *appid) +{ + const Eina_List *l, *ln; + item_info_s *item_info = NULL; + + retv_if(!item_info_list, NULL); + retv_if(!appid, NULL); + + EINA_LIST_FOREACH_SAFE(item_info_list, l, ln, item_info) { + continue_if(!item_info); + continue_if(!item_info->appid); + _APPS_SD("item_info->appid[%s]", item_info->appid); + if (strncmp(item_info->appid, appid, strlen(appid))) continue; + + return item_info->item; + } + + return NULL; +} + + + +HAPI int apps_item_info_list_get_ordering(Eina_List *item_info_list, const char *appid) +{ + const Eina_List *l, *ln; + item_info_s *item_info = NULL; + + retv_if(!item_info_list, -1); + retv_if(!appid, -1); + + EINA_LIST_FOREACH_SAFE(item_info_list, l, ln, item_info) { + continue_if(!item_info); + continue_if(!item_info->appid); + if (strncmp(item_info->appid, appid, strlen(appid))) continue; + + return item_info->ordering; + } + + return -1; +} + + + +static char *_get_app_name(const char *appid) +{ + pkgmgrinfo_appinfo_h appinfo_h = NULL; + char *tmp = NULL; + char *name = NULL; + + retv_if(0 > pkgmgrinfo_appinfo_get_appinfo(appid, &appinfo_h), NULL); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_label(appinfo_h, &tmp), ERROR); + + if (tmp) { + name = strdup(tmp); + goto_if(NULL == name, ERROR); + } + + pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h); + return name; + +ERROR: + pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h); + return NULL; +} + + + +HAPI void apps_item_info_list_change_language(Eina_List *item_info_list) +{ + item_info_s *item_info = NULL; + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + + ret_if(!item_info_list); + + EINA_LIST_FOREACH_SAFE(item_info_list, l, ln, item_info) { + continue_if(!item_info); + free(item_info->name); + item_info->name = _get_app_name(item_info->appid); + } +} + + +HAPI int apps_item_info_is_support_tts(const char *appid) +{ + pkgmgrinfo_appinfo_h appinfo_h = NULL; + pkgmgrinfo_pkginfo_h pkghandle = NULL; + char *pkgid = NULL; + int support_mode = 0; + int istts = 0; + + retv_if(!appid, 0); + + goto_if(0 > pkgmgrinfo_appinfo_get_appinfo(appid, &appinfo_h), ERROR); + + do { + break_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_pkgid(appinfo_h, &pkgid)); + break_if(NULL == pkgid); + + break_if(0 > pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkghandle)); + break_if(NULL == pkghandle); + } while (0); + + goto_if(PMINFO_R_OK != pkgmgrinfo_pkginfo_get_support_mode(pkghandle, &support_mode), ERROR); + + if (support_mode & PMINFO_MODE_PROP_SCREEN_READER) + istts = 1; + else + istts = 0; + + pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h); + if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle); + + return istts; + +ERROR: + if (appinfo_h) pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h); + if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle); + + return istts; +} +// End of a file diff --git a/home/src/apps/lang.c b/home/src/apps/lang.c new file mode 100755 index 0000000..0ed6d49 --- /dev/null +++ b/home/src/apps/lang.c @@ -0,0 +1,150 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" + + + +static Eina_List *lang_list; +static Eina_List *cbs_list; + +typedef struct { + Evas_Object *obj; + const char *group; + const char *id; + int domain; +} lang_element; + + + +HAPI apps_error_e apps_lang_add_id(Evas_Object *obj, const char *group, const char *id, int domain) +{ + lang_element *le; + + retv_if(NULL == obj, APPS_ERROR_INVALID_PARAMETER); + retv_if(NULL == group, APPS_ERROR_INVALID_PARAMETER); + retv_if(NULL == id, APPS_ERROR_INVALID_PARAMETER); + + le = malloc(sizeof(lang_element)); + retv_if(NULL == le, APPS_ERROR_FAIL); + + le->obj = obj; + le->group = group; + le->id = id; + le->domain = domain; + + lang_list = eina_list_append(lang_list, le); + + return APPS_ERROR_NONE; +} + + + +HAPI void apps_lang_remove_id(Evas_Object *obj, const char *group) +{ + const Eina_List *l; + const Eina_List *n; + lang_element *le; + + ret_if(NULL == obj); + ret_if(NULL == group); + + EINA_LIST_FOREACH_SAFE(lang_list, l, n, le) { + if (le->obj == obj && !strcmp(group, le->group)) { + lang_list = eina_list_remove(lang_list, le); + free(le); + return; + } + } +} + + + +typedef struct { + apps_error_e (*result_cb)(void *); + void *result_data; +} cb_s; + + + +HAPI apps_error_e apps_lang_register_cb(apps_error_e (*result_cb)(void *), void *result_data) +{ + cb_s *cb = NULL; + + retv_if(NULL == result_cb, APPS_ERROR_INVALID_PARAMETER); + + cb = calloc(1, sizeof(cb_s)); + retv_if(NULL == cb, APPS_ERROR_FAIL); + + cb->result_cb = result_cb; + cb->result_data = result_data; + + cbs_list = eina_list_append(cbs_list, cb); + retv_if(NULL == cbs_list, APPS_ERROR_FAIL); + + return APPS_ERROR_NONE; +} + + + +HAPI void apps_lang_unregister_cb(apps_error_e (*result_cb)(void *)) +{ + const Eina_List *l; + const Eina_List *n; + cb_s *cb; + + EINA_LIST_FOREACH_SAFE(cbs_list, l, n, cb) { + continue_if(NULL == cb); + if (result_cb != cb->result_cb) continue; + cbs_list = eina_list_remove(cbs_list, cb); + free(cb); + return; + } +} + + + +HAPI void apps_lang_refresh_ids(void) +{ + const Eina_List *l; + const Eina_List *n; + lang_element *le; + char *temp; + + EINA_LIST_FOREACH_SAFE(lang_list, l, n, le) { + if (le->domain) { + temp = D_(le->id); + } else { + temp = _(le->id); + } + + elm_object_part_text_set(le->obj, le->group, temp); + } + + cb_s *cb; + EINA_LIST_FOREACH_SAFE(cbs_list, l, n, cb) { + continue_if(NULL == cb); + continue_if(NULL == cb->result_cb); + + if (APPS_ERROR_NONE != cb->result_cb(cb->result_data)) _APPS_E("There are some problems"); + } +} + +// End of a file diff --git a/home/src/apps/layout.c b/home/src/apps/layout.c new file mode 100755 index 0000000..0927a01 --- /dev/null +++ b/home/src/apps/layout.c @@ -0,0 +1,695 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "key.h" +#include "main.h" +#include "layout_info.h" +#include "tutorial.h" +#include "apps/apps_conf.h" +#include "apps/db.h" +#include "apps/item_badge.h" +#include "apps/item_info.h" +#include "apps/layout.h" +#include "apps/list.h" +#include "apps/apps_main.h" +#include "apps/scroller.h" +#include "apps/scroller_info.h" +#include "apps/item.h" + + +#define PRIVATE_DATA_KEY_CHECKER_TYPE "ck_tp" +#define PRIVATE_DATA_KEY_DOWN_X "dw_x" +#define PRIVATE_DATA_KEY_DOWN_Y "dw_y" +#define PRIVATE_DATA_KEY_TOP_CHECKER "top_ck" +#define PRIVATE_DATA_KEY_BOTTOM_CHECKER "bt_ck" +#define PRIVATE_DATA_KEY_LAYOUT_IS_EDITED "p_ly_ed" + +#define MOVE_UP -2 +#define MOVE_DOWN 2 + + + +static void _bg_down_cb(void *data, Evas_Object *obj, const char* emission, const char* source) +{ + _APPS_D("BG is pressed"); +} + + + +static void _bg_up_cb(void *data, Evas_Object *obj, const char* emission, const char* source) +{ + _APPS_D("BG is released"); +} + + +static key_cb_ret_e _back_key_cb(void *data) +{ + _APPS_D("Back key cb"); + Evas_Object *win = data; + Evas_Object *popup = NULL; + + popup = evas_object_data_del(win, DATA_KEY_CHECK_POPUP); + if (popup) { + evas_object_del(popup); + } + + Eina_Bool bVisible = evas_object_visible_get(win); + _APPS_D("apps status:[%d]", bVisible); + if(bVisible) { + if (APPS_ERROR_FAIL == apps_layout_show(win, EINA_FALSE)) { + _APPS_E("Cannot show tray"); + } + return KEY_CB_RET_STOP; + } + else { + return KEY_CB_RET_CONTINUE; + } +} + + +static apps_error_e _pause_result_cb(void *data) +{ + instance_info_s *info = data; + + retv_if(!info, APPS_ERROR_INVALID_PARAMETER); + retv_if(!info->layout, APPS_ERROR_FAIL); + + Evas_Object *popup = evas_object_data_get(info->layout, DATA_KEY_POPUP); + if(popup) { + evas_object_del(popup); + } + + popup = evas_object_data_del(info->win, DATA_KEY_CHECK_POPUP); + if (popup) { + evas_object_del(popup); + } + + evas_object_data_set(info->layout, DATA_KEY_POPUP, NULL); + evas_object_data_set(info->layout, DATA_KEY_LAYOUT_IS_PAUSED, (void *) 1); + + return APPS_ERROR_NONE; +} + + + +static apps_error_e _resume_result_cb(void *data) +{ + instance_info_s *info = data; + + retv_if(!info, APPS_ERROR_INVALID_PARAMETER); + retv_if(!info->layout, APPS_ERROR_FAIL); + + evas_object_data_set(info->layout, DATA_KEY_LAYOUT_IS_PAUSED, NULL); + + return APPS_ERROR_NONE; +} + + + +static apps_error_e _reset_result_cb(void *data) +{ + instance_info_s *info = data; + Evas_Object *layout = NULL; + + retv_if(!info, APPS_ERROR_INVALID_PARAMETER); + + layout = evas_object_data_get(info->win, DATA_KEY_LAYOUT); + retv_if(!layout, APPS_ERROR_FAIL); + evas_object_data_set(layout, DATA_KEY_LAYOUT_IS_PAUSED, NULL); + + return APPS_ERROR_NONE; +} + + + +static Eina_Bool _move_timer_cb(void *data) +{ + Evas_Object *scroller = data; + int checker_type = 0; + + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + checker_type = (int)evas_object_data_get(scroller, PRIVATE_DATA_KEY_CHECKER_TYPE); + + apps_scroller_unfreeze(scroller); + apps_scroller_bring_in_region_by_vector(scroller, checker_type); + apps_scroller_freeze(scroller); + + return ECORE_CALLBACK_RENEW; +} + + + +#define TIME_MOVE_SCROLLER 1.0f +static void _upper_start_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *checker = obj; + Evas_Object *layout = data; + Evas_Object *scroller = NULL; + Ecore_Timer *timer = NULL; + int checker_type = 0; + + _APPS_D("checker upper start"); + + ret_if(!checker); + ret_if(!layout); + scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + ret_if(!scroller); + checker_type = (int)evas_object_data_get(checker, PRIVATE_DATA_KEY_CHECKER_TYPE); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_CHECKER_TYPE, (void *)checker_type); + + timer = evas_object_data_del(scroller, DATA_KEY_EVENT_UPPER_TIMER); + if (timer) ecore_timer_del(timer); + + timer = ecore_timer_add(TIME_MOVE_SCROLLER, _move_timer_cb, scroller); + if (timer) evas_object_data_set(scroller, DATA_KEY_EVENT_UPPER_TIMER, timer); + else _APPS_E("Cannot add a timer"); +} + + + +static void _upper_end_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *checker = obj; + Evas_Object *layout = data; + Evas_Object *scroller = NULL; + Ecore_Timer *timer = NULL; + + _APPS_D("checker upper end"); + + ret_if(!checker); + ret_if(!layout); + scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + ret_if(!scroller); + + timer = evas_object_data_del(scroller, DATA_KEY_EVENT_UPPER_TIMER); + if (timer) { + ecore_timer_del(timer); + } + evas_object_data_del(scroller, PRIVATE_DATA_KEY_CHECKER_TYPE); +} + + + +static Evas_Object *_create_checker(Evas_Object *layout, int type) +{ + Evas_Object *checker; + + retv_if(!layout, NULL); + + checker = elm_button_add(layout); + evas_object_size_hint_weight_set(checker, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(checker, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_color_set(checker, 0, 0, 0, 0); + if (MOVE_UP == type) { + elm_object_part_content_set(layout, "top_checker", checker); + evas_object_data_set(checker, PRIVATE_DATA_KEY_CHECKER_TYPE, (void *)MOVE_UP); + } else if (MOVE_DOWN == type) { + elm_object_part_content_set(layout, "bottom_checker", checker); + evas_object_data_set(checker, PRIVATE_DATA_KEY_CHECKER_TYPE, (void *)MOVE_DOWN); + } + evas_object_data_set(checker, DATA_KEY_EVENT_UPPER_IS_ON, (void *) 1); + + evas_object_smart_callback_add(checker, "upper_start", _upper_start_cb, layout); + evas_object_smart_callback_add(checker, "upper_end", _upper_end_cb, layout); + evas_object_show(checker); + + return checker; +} + + + +static void _destroy_checker(Evas_Object *checker) +{ + evas_object_data_del(checker, DATA_KEY_EVENT_UPPER_IS_ON); + evas_object_data_del(checker, PRIVATE_DATA_KEY_CHECKER_TYPE); + evas_object_del(checker); +} + + + +static Eina_Bool _push_items_cb(void *layout) +{ + Evas_Object *scroller = NULL; + Eina_List *item_info_list = NULL; + instance_info_s *info = NULL; + int count = 0; + + retv_if(!layout, ECORE_CALLBACK_CANCEL); + + info = evas_object_data_get(layout, DATA_KEY_INSTANCE_INFO); + retv_if(!info, ECORE_CALLBACK_CANCEL); + + /* scroller */ + scroller = apps_scroller_create(layout); + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + evas_object_data_set(layout, DATA_KEY_SCROLLER, scroller); + evas_object_show(scroller); + + elm_object_part_content_set(layout, "scroller", scroller); + + if (apps_main_get_info()->first_boot) { + item_info_list = apps_item_info_list_create(ITEM_INFO_LIST_TYPE_XML); + apps_db_read_list(item_info_list); + apps_db_sync(); + item_info_list = apps_db_write_list(); + } else { + apps_db_sync(); + item_info_list = apps_db_write_list(); + } + apps_main_get_info()->first_boot = 0; + + /* Retry to write a list */ + if (item_info_list) { + count = eina_list_count(item_info_list); + } + if (!item_info_list || !count) { + _APPS_E("Cannot read the DB, normally"); + item_info_list = apps_item_info_list_create(ITEM_INFO_LIST_TYPE_XML); + } + retv_if(!item_info_list, ECORE_CALLBACK_CANCEL); + + count = eina_list_count(item_info_list); + if (0 == count) { + _APPS_D("There are no apps"); + return ECORE_CALLBACK_CANCEL; + } + + evas_object_data_set(layout, DATA_KEY_LIST, item_info_list); + evas_object_data_del(layout, DATA_KEY_IDLE_TIMER); + + return ECORE_CALLBACK_CANCEL; +} + + +static char *_access_info_cb(void *data, Evas_Object *obj) +{ + retv_if(!data, NULL); + + char *tmp = strdup(data); + retv_if(!tmp, NULL); + + return tmp; +} + + +HAPI Evas_Object *apps_layout_create(Evas_Object *win, const char *file, const char *group) +{ + Evas_Object *layout; + Ecore_Idler *idle_timer = NULL; + instance_info_s *info = NULL; + + retv_if(!win, NULL); + + info = evas_object_data_get(win, DATA_KEY_INSTANCE_INFO); + retv_if(!info, NULL); + + layout = apps_layout_load_edj(win, file, group); + retv_if(!layout, NULL); + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_resize(layout, info->root_w, info->root_h); + evas_object_show(layout); + + //box focus + Evas_Object *focus = elm_button_add(layout); + retv_if(!focus, NULL); + + elm_object_style_set(focus, "focus"); + elm_object_part_content_set(layout, "focus", focus); + elm_access_info_cb_set(focus, ELM_ACCESS_INFO, _access_info_cb, _("IDS_IDLE_BODY_APPS")); + elm_access_info_cb_set(focus, ELM_ACCESS_TYPE, NULL, NULL); + elm_object_focus_allow_set(focus, EINA_FALSE); + + evas_object_data_set(layout, DATA_KEY_WIN, win); + evas_object_data_set(layout, DATA_KEY_INSTANCE_INFO, info); + evas_object_data_set(layout, DATA_KEY_LAYOUT_FOCUS_ON, NULL); + evas_object_data_set(layout, DATA_KEY_LAYOUT_IS_PAUSED, (void *) 1); + evas_object_data_set(layout, DATA_KEY_POPUP, NULL); + + elm_object_signal_callback_add(layout, + "bg,down", "bg", _bg_down_cb, NULL); + elm_object_signal_callback_add(layout, + "bg,up", "bg", _bg_up_cb, NULL); + + if (APPS_ERROR_NONE != apps_main_register_cb(info, APPS_APP_STATE_PAUSE, _pause_result_cb, info)) { + _APPS_E("Cannot register the pause callback"); + } + + if (APPS_ERROR_NONE != apps_main_register_cb(info, APPS_APP_STATE_RESUME, _resume_result_cb, info)) { + _APPS_E("Cannot register the pause callback"); + } + + if (APPS_ERROR_NONE != apps_main_register_cb(info, APPS_APP_STATE_RESET, _reset_result_cb, info)) { + _APPS_E("Cannot register the pause callback"); + } + + item_badge_register_changed_cb(layout); + + idle_timer = ecore_idler_add(_push_items_cb, layout); + if (NULL == idle_timer) { + _APPS_E("Cannot push items"); + } else evas_object_data_set(layout, DATA_KEY_IDLE_TIMER, idle_timer); + + return layout; +} + + + +HAPI void apps_layout_destroy(Evas_Object *layout) +{ + Ecore_Idler *idle_timer = NULL; + Evas_Object *scroller = NULL; + Eina_List *list = NULL; + instance_info_s *info = NULL; + + ret_if(!layout); + + idle_timer = evas_object_data_del(layout, DATA_KEY_IDLE_TIMER); + if (idle_timer) { + ecore_idler_del(idle_timer); + } + + scroller = evas_object_data_del(layout, DATA_KEY_SCROLLER); + if (scroller) { + apps_scroller_destroy(layout); + } + + list = evas_object_data_del(layout, DATA_KEY_LIST); + if (list) { + apps_item_info_list_destroy(list); + } + + item_badge_unregister_changed_cb(); + + info = evas_object_data_del(layout, DATA_KEY_INSTANCE_INFO); + if (info) { + apps_main_unregister_cb(info, APPS_APP_STATE_PAUSE, _pause_result_cb); + apps_main_unregister_cb(info, APPS_APP_STATE_RESUME, _resume_result_cb); + apps_main_unregister_cb(info, APPS_APP_STATE_RESET, _reset_result_cb); + } + + edje_object_signal_callback_del(_EDJ(layout), + "bg,down", "bg", _bg_down_cb); + edje_object_signal_callback_del(_EDJ(layout), + "bg,up", "bg", _bg_up_cb); + + evas_object_data_del(layout, DATA_KEY_WIN); + evas_object_data_del(layout, DATA_KEY_LAYOUT_FOCUS_ON); + evas_object_data_del(layout, DATA_KEY_LAYOUT_IS_PAUSED); + + apps_layout_unload_edj(layout); +} + + +static Eina_Bool _show_anim_cb(void *data) +{ + Evas_Object *win = data; + + retv_if(NULL == data, ECORE_CALLBACK_CANCEL); + + elm_win_activate(win); + evas_object_show(win); + + layout_info_s *layout_info = evas_object_data_get(main_get_info()->layout, DATA_KEY_LAYOUT_INFO); + retv_if(NULL == layout_info, ECORE_CALLBACK_CANCEL); + + Evas_Object *layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + retv_if(NULL == layout, ECORE_CALLBACK_CANCEL); + + Evas_Object *scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + retv_if(NULL == scroller, ECORE_CALLBACK_CANCEL); + + scroller_info_s *scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(NULL == scroller_info, ECORE_CALLBACK_CANCEL); + + if (main_get_info()->is_tts + && !layout_info->tutorial) { + + //box focus + Evas_Object *focus = elm_object_part_content_get(layout, "focus"); + if(focus) { + elm_access_highlight_set(focus); + } + } + + elm_object_signal_emit(scroller, "show", ""); + + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI apps_error_e apps_layout_show(Evas_Object *win, Eina_Bool show) +{ + Evas_Object *layout = NULL; + Ecore_Timer *timer = NULL; + + retv_if(NULL == win, APPS_ERROR_FAIL); + + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + retv_if(NULL == layout, APPS_ERROR_FAIL); + + timer = evas_object_data_del(layout, DATA_KEY_LAYOUT_HIDE_TIMER); + if (timer) ecore_timer_del(timer); + + _APPS_D("(%p) %s the tray", win, show? "Show":"Hide"); + + if (show) { + Ecore_Idler *animator = ecore_idler_add(_show_anim_cb, win); + retv_if(NULL == animator, APPS_ERROR_FAIL); + + if (W_HOME_ERROR_NONE != key_register_cb(KEY_TYPE_BACK, _back_key_cb, win)) { + _APPS_E("Cannot register the key callback"); + } + } else { + if(apps_main_get_info()->longpress_edit_disable && apps_layout_is_edited(layout)) { + apps_layout_unedit(layout); + } + + evas_object_hide(win); + key_unregister_cb(KEY_TYPE_BACK, _back_key_cb); + + Evas_Object *scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + retv_if(NULL == scroller, APPS_ERROR_FAIL); + apps_scroller_region_show(scroller, 0, 0); + } + + return APPS_ERROR_NONE; +} + + + +HAPI Evas_Object* apps_layout_load_edj(Evas_Object *parent, const char *edjname, const char *grpname) +{ + Evas_Object *layout = NULL; + + retv_if(NULL == parent, NULL); + + layout = elm_layout_add(parent); + retv_if(NULL == layout, NULL); + retv_if(EINA_FALSE == elm_layout_file_set(layout, edjname, grpname), NULL); + + Evas_Object *edje_object = _EDJ(layout); + if (edje_object != NULL) { + evas_object_data_set(edje_object, DATA_KEY_EVAS_OBJECT, layout); + evas_object_data_set(layout, DATA_KEY_EDJE_OBJECT, edje_object); + } + evas_object_show(layout); + + return layout; +} + + + +HAPI void apps_layout_unload_edj(Evas_Object *layout) +{ + Evas_Object *edje_object = NULL; + + ret_if(NULL == layout); + + edje_object = evas_object_data_del(layout, DATA_KEY_EDJE_OBJECT); + if (edje_object) evas_object_data_del(edje_object, DATA_KEY_EVAS_OBJECT); + else _APPS_E("Cannot get edje object"); + + evas_object_del(layout); +} + + + +HAPI void apps_layout_rotate(Evas_Object *layout, int is_rotated) +{ + const char *edje_signal; + + ret_if(NULL == layout); + + if (is_rotated) { // ROTATE + edje_signal = STR_SIGNAL_EMIT_SIGNAL_ROTATE; + } else { // UNROTATE + edje_signal = STR_SIGNAL_EMIT_SIGNAL_UNROTATE; + } + + elm_object_signal_emit(layout, edje_signal, "tray"); +} + + + +HAPI void apps_layout_focus_on(Evas_Object *layout) +{ + ret_if(NULL == layout); + evas_object_data_set(layout, DATA_KEY_LAYOUT_FOCUS_ON, (void *) 1); + elm_object_tree_focus_allow_set(layout, EINA_TRUE); +} + + + +HAPI void apps_layout_focus_off(Evas_Object *layout) +{ + ret_if(NULL == layout); + evas_object_data_set(layout, DATA_KEY_LAYOUT_FOCUS_ON, (void *) 0); + elm_object_tree_focus_allow_set(layout, EINA_FALSE); +} + + + +HAPI void apps_layout_block(Evas_Object *layout) +{ + ret_if(NULL == layout); + elm_object_signal_emit(layout, "block", "layout"); +} + + + +HAPI void apps_layout_unblock(Evas_Object *layout) +{ + ret_if(NULL == layout); + elm_object_signal_emit(layout, "unblock", "layout"); +} + + + +HAPI int apps_layout_is_edited(Evas_Object *layout) +{ + retv_if(!layout, 0); + return (int) evas_object_data_get(layout, PRIVATE_DATA_KEY_LAYOUT_IS_EDITED); +} + + + +HAPI void apps_layout_edit(Evas_Object *layout) +{ + Evas_Object *scroller = NULL; + Evas_Object *checker = NULL; + + ret_if(!layout); + + evas_object_data_set(layout, PRIVATE_DATA_KEY_LAYOUT_IS_EDITED, (void *) 1); + /* checker : it checkes whether or not scrolling the scroller */ + checker = _create_checker(layout, MOVE_UP); + evas_object_data_set(layout, PRIVATE_DATA_KEY_TOP_CHECKER, checker); + + checker = _create_checker(layout, MOVE_DOWN); + evas_object_data_set(layout, PRIVATE_DATA_KEY_BOTTOM_CHECKER, checker); + + scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + apps_scroller_edit(scroller); +} + + +static Eina_Bool _update_list_cb(void *data) +{ + Evas_Object *scroller = data; + scroller_info_s *scroller_info = NULL; + + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + + apps_scroller_write_list(scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, ECORE_CALLBACK_CANCEL); + apps_db_read_list(scroller_info->list); + + /* Currently, update every times after going out from the edit mode */ + apps_main_get_info()->updated = 1; + + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI void apps_layout_unedit(Evas_Object *layout) +{ + Ecore_Timer *unedit_timer = NULL; + Evas_Object *scroller = NULL; + Evas_Object *checker = NULL; + Evas_Object *reserve_item = NULL; + item_info_s *item_info = NULL; + + ret_if(!layout); + + evas_object_data_del(layout, PRIVATE_DATA_KEY_LAYOUT_IS_EDITED); + + checker = evas_object_data_del(layout, PRIVATE_DATA_KEY_TOP_CHECKER); + if (checker) { + _destroy_checker(checker); + } + + checker = evas_object_data_del(layout, PRIVATE_DATA_KEY_BOTTOM_CHECKER); + if (checker) { + _destroy_checker(checker); + } + scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + ret_if(!scroller); + + apps_scroller_unedit(scroller); + + char *appid = (char*)evas_object_data_get(scroller, DATA_KEY_ITEM_UNINSTALL_RESERVED); + if(appid) { + reserve_item = apps_scroller_get_item_by_appid(scroller, appid); + ret_if(!reserve_item); + + item_info = evas_object_data_get(reserve_item, DATA_KEY_ITEM_INFO); + + apps_scroller_remove_item(scroller, reserve_item); + apps_db_remove_item(appid); + item_destroy(reserve_item); + + if (item_info) { + _APPS_SD("appid[%s], name[%s]", item_info->appid, item_info->name); + item_badge_remove(item_info->appid); + item_badge_remove(item_info->pkgid); + apps_item_info_destroy(item_info); + } + } + apps_scroller_trim(scroller); + evas_object_data_set(scroller, DATA_KEY_ITEM_UNINSTALL_RESERVED, (void*)NULL); + + unedit_timer = ecore_timer_add(0.5, _update_list_cb, scroller); + if (NULL == unedit_timer) { + _E("Cannot update list"); + } +} + + + +// End of file diff --git a/home/src/apps/list.c b/home/src/apps/list.c new file mode 100644 index 0000000..7dbcb58 --- /dev/null +++ b/home/src/apps/list.c @@ -0,0 +1,229 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "apps/item_info.h" +#include "apps/list.h" + + + +static int _is_included_cb(pkgmgrinfo_appinfo_h handle, void *user_data) +{ + bool enabled = false; + + retv_if(NULL == handle, 0); + retv_if(NULL == user_data, 0); + retv_if(PMINFO_R_OK != pkgmgrinfo_appinfo_is_enabled(handle, &enabled), 0); + + * (bool *) user_data = enabled; + + return 0; +} + + + +HAPI bool list_is_included(const char *appid) +{ + pkgmgrinfo_appinfo_filter_h handle = NULL; + bool is_included = false; + + retv_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_create(&handle), NULL); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_add_string(handle, PMINFO_APPINFO_PROP_APP_ID, appid), ERROR); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, _is_included_cb, &is_included), ERROR); + + pkgmgrinfo_appinfo_filter_destroy(handle); + + _APPS_SD("%s is included ? [%d]", appid, is_included); + return is_included; + +ERROR: + if (handle) pkgmgrinfo_appinfo_filter_destroy(handle); + + _APPS_SD("%s is not included.", appid); + return false; +} + + + +static int _apps_cb(pkgmgrinfo_appinfo_h handle, void *user_data) +{ + app_list *list = user_data; + char *appid = NULL; + item_info_s *item_info = NULL; + + retv_if(NULL == handle, 0); + retv_if(NULL == user_data, 0); + + pkgmgrinfo_appinfo_get_appid(handle, &appid); + retv_if(NULL == appid, 0); + + item_info = apps_item_info_create(appid); + if (NULL == item_info) { + _APPS_D("%s does not have the item_info", appid); + return 0; + } + + list->list = eina_list_append(list->list, item_info); + + return 0; +} + + + +static int _apps_sort_cb(const void *d1, const void *d2) +{ + item_info_s *tmp1 = (item_info_s *) d1; + item_info_s *tmp2 = (item_info_s *) d2; + + if (NULL == tmp1 || NULL == tmp1->name) return 1; + else if (NULL == tmp2 || NULL == tmp2->name) return -1; + + return strcmp(tmp1->name, tmp2->name); +} + + + +HAPI app_list *list_create(void) +{ + pkgmgrinfo_appinfo_filter_h handle = NULL; + app_list *list = calloc(1, sizeof(app_list)); + + retv_if(NULL == list, NULL); + + if (PMINFO_R_OK != pkgmgrinfo_appinfo_filter_create(&handle)) { + free(list); + return NULL; + } + + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_NODISPLAY, 0), ERROR); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, _apps_cb, list), ERROR); + + list->list = eina_list_sort(list->list, eina_list_count(list->list), _apps_sort_cb); + +ERROR: + if (handle) pkgmgrinfo_appinfo_filter_destroy(handle); + + return list; +} + + + +static int _sort_by_appid_cb(const void *d1, const void *d2) +{ + const item_info_s *info1 = d1; + const item_info_s *info2 = d2; + + if (NULL == info1 || NULL == info1->appid) return 1; + else if (NULL == info2 || NULL == info2->appid) return -1; + + return strcmp(info1->appid, info2->appid); +} + + + +HAPI app_list *list_create_by_appid(void) +{ + pkgmgrinfo_appinfo_filter_h handle = NULL; + app_list *list = calloc(1, sizeof(app_list)); + + retv_if(NULL == list, NULL); + + if (PMINFO_R_OK != pkgmgrinfo_appinfo_filter_create(&handle)) { + free(list); + return NULL; + } + + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_NODISPLAY, 0), ERROR); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, _apps_cb, list), ERROR); + + list->list = eina_list_sort(list->list, eina_list_count(list->list), _sort_by_appid_cb); + +ERROR: + if (handle) pkgmgrinfo_appinfo_filter_destroy(handle); + + return list; +} + + + +HAPI void list_destroy(app_list *list) +{ + item_info_s *item_info = NULL; + + ret_if(NULL == list); + ret_if(NULL == list->list); + + EINA_LIST_FREE(list->list, item_info) { + if (NULL == item_info) break; + apps_item_info_destroy(item_info); + } + + eina_list_free(list->list); + free(list); +} + + + +static char *_get_app_name(const char *appid) +{ + pkgmgrinfo_appinfo_h appinfo_h = NULL; + char *tmp = NULL; + char *name = NULL; + + retv_if(0 > pkgmgrinfo_appinfo_get_appinfo(appid, &appinfo_h), NULL); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_label(appinfo_h, &tmp), ERROR); + + if (tmp) { + name = strdup(tmp); + goto_if(NULL == name, ERROR); + } + + pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h); + return name; + +ERROR: + pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h); + return NULL; +} + + + +HAPI void list_change_language(app_list *list) +{ + item_info_s *item_info = NULL; + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + + ret_if(NULL == list); + ret_if(NULL == list->list); + + EINA_LIST_FOREACH_SAFE(list->list, l, ln, item_info) { + continue_if(!item_info); + free(item_info->name); + item_info->name = _get_app_name(item_info->appid); + } + list->list = eina_list_sort(list->list, eina_list_count(list->list), _apps_sort_cb); +} + + + +// End of a file diff --git a/home/src/apps/page.c b/home/src/apps/page.c new file mode 100755 index 0000000..df60779 --- /dev/null +++ b/home/src/apps/page.c @@ -0,0 +1,600 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "apps/apps_conf.h" +#include "apps/item.h" +#include "apps/item_badge.h" +#include "apps/apps_main.h" +#include "apps/page.h" +#include "apps/page_info.h" +#include "apps/scroller_info.h" + + + +HAPI void apps_page_destroy(Evas_Object *page) +{ + page_info_s *prev_page_info = NULL; + page_info_s *page_info = NULL; + page_info_s *next_page_info = NULL; + + ret_if(!page); + + page_info = evas_object_data_del(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + if (page_info->prev_page) { + prev_page_info = evas_object_data_get(page_info->prev_page, DATA_KEY_PAGE_INFO); + if (prev_page_info) prev_page_info->next_page = NULL; + } + + if (page_info->next_page) { + next_page_info = evas_object_data_get(page_info->next_page, DATA_KEY_PAGE_INFO); + if (next_page_info) next_page_info->prev_page = NULL; + } + + if (prev_page_info && next_page_info) { + prev_page_info->next_page = next_page_info->page; + next_page_info->prev_page = prev_page_info->page; + } + + evas_object_del(page_info->page_rect); + free(page_info); + evas_object_del(page); +} + + + +#define PAGE_OUTER_EDJE_FILE EDJEDIR"/apps_page.edj" +HAPI Evas_Object *apps_page_create(Evas_Object *scroller, Evas_Object *prev_page, Evas_Object *next_page) +{ + Evas_Object *page = NULL; + Evas_Object *page_rect = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *prev_page_info = NULL; + page_info_s *next_page_info = NULL; + page_info_s *page_info = NULL; + + retv_if(!scroller, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + page = elm_layout_add(scroller); + retv_if(!page, NULL); + elm_layout_file_set(page, PAGE_OUTER_EDJE_FILE, "page"); + evas_object_size_hint_weight_set(page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(page); + + page_rect = evas_object_rectangle_add(scroller_info->instance_info->e); + goto_if(!page_rect, ERROR); + evas_object_size_hint_min_set(page_rect, scroller_info->instance_info->root_w, ITEM_HEIGHT * apps_main_get_info()->scale); + evas_object_color_set(page_rect, 0, 0, 0, 0); + evas_object_show(page_rect); + elm_object_part_content_set(page, "bg", page_rect); + + page_info = calloc(1, sizeof(page_info_s)); + if (!page_info) { + _APPS_E("Cannot calloc for page_info"); + apps_page_destroy(page); + return NULL; + } + page_info->win = scroller_info->win; + page_info->instance_info = scroller_info->instance_info; + page_info->scroller = scroller; + page_info->page_rect = page_rect; + page_info->prev_page = prev_page; + page_info->page = page; + page_info->next_page = next_page; + evas_object_data_set(page, DATA_KEY_PAGE_INFO, page_info); + + if (prev_page) { + prev_page_info = evas_object_data_get(prev_page, DATA_KEY_PAGE_INFO); + if (prev_page_info) { + prev_page_info->next_page = page; + } + } + + if (next_page) { + next_page_info = evas_object_data_get(next_page, DATA_KEY_PAGE_INFO); + if (next_page_info) { + next_page_info->prev_page = page; + } + } + + return page; + +ERROR: + apps_page_destroy(page); + return NULL; +} + + + +HAPI apps_error_e apps_page_pack_item(Evas_Object *page, Evas_Object *item) +{ + item_info_s *item_info = NULL; + register int i = 0; + char part_name[PART_NAME_SIZE] = {0, }; + char center_name[PART_NAME_SIZE] = {0, }; + + retv_if(!page, APPS_ERROR_INVALID_PARAMETER); + retv_if(!item, APPS_ERROR_INVALID_PARAMETER); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + retv_if(!item_info, APPS_ERROR_FAIL); + + for (; i < APPS_PER_PAGE; i++) { + Evas_Object *tmp = NULL; + + snprintf(part_name, sizeof(part_name), "item_%d", i); + tmp = elm_object_part_content_get(page, part_name); + if (tmp) continue; + + /* We have to pack item & item_center together and to set the info */ + elm_object_part_content_set(page, part_name, item); + if (item_info->center) { + snprintf(center_name, sizeof(part_name), "item_center_%d", i); + elm_object_part_content_set(page, center_name, item_info->center); + } + + item_info->page = page; + + return APPS_ERROR_NONE; + } + + return APPS_ERROR_FAIL; +} + + + +HAPI apps_error_e apps_page_unpack_item(Evas_Object *page, Evas_Object *item) +{ + item_info_s *item_info = NULL; + register int i = 0; + char part_name[PART_NAME_SIZE] = {0, }; + char center_name[PART_NAME_SIZE] = {0, }; + + retv_if(!page, APPS_ERROR_INVALID_PARAMETER); + retv_if(!item, APPS_ERROR_INVALID_PARAMETER); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + retv_if(!item_info, APPS_ERROR_FAIL); + + for (; i < APPS_PER_PAGE; i++) { + Evas_Object *tmp = NULL; + + snprintf(part_name, sizeof(part_name), "item_%d", i); + tmp = elm_object_part_content_get(page, part_name); + if (tmp != item) continue; + + /* We have to unpack item & item_center together and to set the info */ + elm_object_part_content_unset(page, part_name); + if (item_info->center) { + snprintf(center_name, sizeof(part_name), "item_center_%d", i); + elm_object_part_content_unset(page, center_name); + } + + item_info->page = NULL; + + return APPS_ERROR_NONE; + } + + return APPS_ERROR_FAIL; +} + + + +HAPI int apps_page_count_item(Evas_Object *page) +{ + int count = 0; + register int i = 0; + char part_name[PART_NAME_SIZE]; + + retv_if(!page, -1); + + for (; i < APPS_PER_PAGE; i++) { + Evas_Object *item = NULL; + snprintf(part_name, sizeof(part_name), "item_%d", i); + item = elm_object_part_content_get(page, part_name); + if (!item) continue; + count++; + } + + return count; +} + + + +HAPI Evas_Object *apps_page_get_item_at(Evas_Object *page, int position) +{ + Evas_Object *tmp = NULL; + char part_name[PART_NAME_SIZE]; + + retv_if(!page, NULL); + retv_if(position < -1, NULL); + + snprintf(part_name, sizeof(part_name), "item_%d", position); + tmp = elm_object_part_content_get(page, part_name); + + return tmp; +} + + + +HAPI apps_error_e apps_page_pack_nth(Evas_Object *page, Evas_Object *item, int position) +{ + Evas_Object *tmp = NULL; + item_info_s *item_info = NULL; + char part_name[PART_NAME_SIZE] = {0, }; + char center_name[PART_NAME_SIZE] = {0, }; + + retv_if(!page, APPS_ERROR_INVALID_PARAMETER); + retv_if(!item, APPS_ERROR_INVALID_PARAMETER); + retv_if(position < -1, APPS_ERROR_INVALID_PARAMETER); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + retv_if(!item_info, APPS_ERROR_FAIL); + + snprintf(part_name, sizeof(part_name), "item_%d", position); + tmp = elm_object_part_content_get(page, part_name); + if (tmp) { + _APPS_E("Error : Already has an item");\ + return APPS_ERROR_FAIL; + } + + elm_object_part_content_set(page, part_name, item); + if (item_info->center) { + snprintf(center_name, sizeof(part_name), "item_center_%d", position); + elm_object_part_content_set(page, center_name, item_info->center); + } + + item_info->page = page; + + return APPS_ERROR_NONE; +} + + + +HAPI Evas_Object *apps_page_unpack_nth(Evas_Object *page, int position) +{ + Evas_Object *tmp = NULL; + item_info_s *item_info = NULL; + char part_name[PART_NAME_SIZE] = {0, }; + char center_name[PART_NAME_SIZE] = {0, }; + + retv_if(!page, NULL); + retv_if(position < -1, NULL); + + snprintf(part_name, sizeof(part_name), "item_%d", position); + tmp = elm_object_part_content_unset(page, part_name); + if (!tmp) return NULL; + + item_info = evas_object_data_get(tmp, DATA_KEY_ITEM_INFO); + retv_if(!item_info, NULL); + + if (item_info->center) { + snprintf(center_name, sizeof(part_name), "item_center_%d", position); + elm_object_part_content_unset(page, center_name); + } + + item_info->page = NULL; + + return tmp; +} + + + +HAPI void apps_page_change_language(Evas_Object *page) +{ + register int i = 0; + + ret_if(!page); + + for (; i < APPS_PER_PAGE; i++) { + Evas_Object *item = NULL; + char part_name[PART_NAME_SIZE]; + + snprintf(part_name, sizeof(part_name), "item_%d", i); + item = elm_object_part_content_get(page, part_name); + if (!item) continue; + + item_change_language(item); + item_badge_change_language(item); + } +} + + + +HAPI int apps_page_has_item(Evas_Object *page, Evas_Object *item) +{ + register int i = 0; + int has_item = 0; + + retv_if(!page, 0); + + for (; i < APPS_PER_PAGE; i++) { + Evas_Object *tmp = NULL; + char part_name[PART_NAME_SIZE]; + + snprintf(part_name, sizeof(part_name), "item_%d", i); + tmp = elm_object_part_content_get(page, part_name); + if (tmp != item) continue; + + has_item = 1; + break; + } + + return has_item; +} + + + +HAPI Evas_Object *apps_page_move_item_prev(Evas_Object *page, Evas_Object *from_item, Evas_Object *to_item, Evas_Object *append_item) +{ + Evas_Object *tmp = NULL; + Evas_Object *tmp_next = append_item; + item_info_s *item_info = NULL; + register int i; + int from_idx = -1; + int to_idx = -1; + char part_name[PART_NAME_SIZE]; + char center_name[PART_NAME_SIZE]; + + retv_if(!page, NULL); + + if (from_item || to_item) { + for (i = 0; i < APPS_PER_PAGE; ++i) { + snprintf(part_name, sizeof(part_name), "item_%d", i); + tmp = elm_object_part_content_get(page, part_name); + + if (tmp && tmp == from_item) from_idx = i; + if (tmp && tmp == to_item) to_idx = i; + } + } + _APPS_D("Move item to the prev, from_idx:%d, to_idx:%d", from_idx, to_idx); + + if (-1 == from_idx) from_idx = 0; + if (-1 == to_idx) to_idx = APPS_PER_PAGE - 1; + + for (i = to_idx; i >= from_idx; --i) { + snprintf(part_name, sizeof(part_name), "item_%d", i); + snprintf(center_name, sizeof(part_name), "item_center_%d", i); + + /* We have to unset item & item_center together. */ + tmp = elm_object_part_content_get(page, part_name); + if (tmp) { + elm_object_part_content_unset(page, part_name); + item_info = evas_object_data_get(tmp, DATA_KEY_ITEM_INFO); + continue_if(!item_info); + item_info->page = NULL; + + if (item_info->center) { + elm_object_part_content_unset(page, center_name); + } + } + + if (tmp_next) { + /* We have to set item & item_center together. */ + elm_object_part_content_set(page, part_name, tmp_next); + + item_info = evas_object_data_get(tmp_next, DATA_KEY_ITEM_INFO); + continue_if(!item_info); + item_info->page = page; + + if (item_info->center) { + elm_object_part_content_set(page, center_name, item_info->center); + } + + elm_object_signal_emit(page, "next", part_name); + edje_object_message_signal_process(elm_layout_edje_get(page)); + elm_object_signal_emit(page, "return", part_name); + } + tmp_next = tmp; + } + + return tmp; +} + + + +HAPI Evas_Object *apps_page_move_item_next(Evas_Object *page, Evas_Object *from_item, Evas_Object *to_item, Evas_Object *insert_item) +{ + Evas_Object *tmp = NULL; + Evas_Object *tmp_prev = insert_item; + item_info_s *item_info = NULL; + register int i; + int from_idx = -1; + int to_idx = -1; + char part_name[PART_NAME_SIZE]; + char center_name[PART_NAME_SIZE]; + + retv_if(!page, NULL); + + if (from_item || to_item) { + for (i = 0; i < APPS_PER_PAGE; ++i) { + snprintf(part_name, sizeof(part_name), "item_%d", i); + tmp = elm_object_part_content_get(page, part_name); + + if (tmp && tmp == from_item) from_idx = i; + if (tmp && tmp == to_item) to_idx = i; + } + } + _APPS_D("Move item to the next, from_idx:%d, to_idx:%d", from_idx, to_idx); + + if (-1 == from_idx) from_idx = 0; + if (-1 == to_idx) to_idx = APPS_PER_PAGE - 1; + + for (i = from_idx; i <= to_idx; ++i) { + snprintf(part_name, sizeof(part_name), "item_%d", i); + snprintf(center_name, sizeof(part_name), "item_center_%d", i); + + /* We have to unset item & item_center together. */ + tmp = elm_object_part_content_get(page, part_name); + if (tmp) { + elm_object_part_content_unset(page, part_name); + item_info = evas_object_data_get(tmp, DATA_KEY_ITEM_INFO); + continue_if(!item_info); + item_info->page = NULL; + + if (item_info->center) { + elm_object_part_content_unset(page, center_name); + } + } + + if (tmp_prev) { + /* We have to set item & item_center together. */ + elm_object_part_content_set(page, part_name, tmp_prev); + + item_info = evas_object_data_get(tmp_prev, DATA_KEY_ITEM_INFO); + continue_if(!item_info); + item_info->page = page; + + if (item_info->center) { + elm_object_part_content_set(page, center_name, item_info->center); + } + + elm_object_signal_emit(page, "prev", part_name); + edje_object_message_signal_process(elm_layout_edje_get(page)); + elm_object_signal_emit(page, "return", part_name); + } + tmp_prev = tmp; + } + + return tmp; +} + + + +HAPI int apps_page_seek_item_position(Evas_Object *page, Evas_Object *item) +{ + register int i = 0; + + retv_if(!page, -1); + retv_if(!item, -1); + + for (; i < APPS_PER_PAGE; i++) { + Evas_Object *tmp = NULL; + char part_name[PART_NAME_SIZE]; + + snprintf(part_name, sizeof(part_name), "item_%d", i); + tmp = elm_object_part_content_get(page, part_name); + if (tmp == item) return i; + } + + return -1; +} + + + +HAPI void apps_page_print_item(Evas_Object *page) +{ + item_info_s *item_info = NULL; + register int i = 0; + + ret_if(!page); + + for (; i < APPS_PER_PAGE; i++) { + Evas_Object *tmp = NULL; + char part_name[PART_NAME_SIZE]; + + snprintf(part_name, sizeof(part_name), "item_%d", i); + tmp = elm_object_part_content_get(page, part_name); + continue_if(!tmp); + + item_info = evas_object_data_get(tmp, DATA_KEY_ITEM_INFO); + continue_if(!item_info); + + _APPS_D("%s, %s", part_name, item_info->appid); + } +} + + + +HAPI void apps_page_edit(Evas_Object *page) +{ + register int i = 0; + item_info_s *item_info = NULL; + + ret_if(!page); + +// elm_object_signal_emit(page, "edit", "item_center_-1"); +// elm_object_signal_emit(page, "edit", "item_center_0"); +// elm_object_signal_emit(page, "edit", "item_center_1"); +// elm_object_signal_emit(page, "edit", "item_center_2"); + + for (; i < APPS_PER_PAGE; i++) { + Evas_Object *tmp = NULL; + char part_name[PART_NAME_SIZE]; + + snprintf(part_name, sizeof(part_name), "item_%d", i); + tmp = elm_object_part_content_get(page, part_name); + if (!tmp) { + continue_if(!item_info); + + page_info_s *page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + Evas_Object *scroller = page_info->scroller; + continue_if(!scroller); + + Evas_Object *virtual_item = item_virtual_create(scroller); + evas_object_data_set(virtual_item, DATA_KEY_IS_VIRTUAL_ITEM, (void*)1); + apps_page_pack_item(page, virtual_item); + continue; + } + item_info = evas_object_data_get(tmp, DATA_KEY_ITEM_INFO); + item_edit(tmp); + } +} + + + +HAPI void apps_page_unedit(Evas_Object *page) +{ + register int i = 0; + + ret_if(!page); + +// elm_object_signal_emit(page, "unedit", "item_center_-1"); +// elm_object_signal_emit(page, "unedit", "item_center_0"); +// elm_object_signal_emit(page, "unedit", "item_center_1"); +// elm_object_signal_emit(page, "unedit", "item_center_2"); + + for (; i < APPS_PER_PAGE; i++) { + Evas_Object *tmp = NULL; + char part_name[PART_NAME_SIZE]; + + snprintf(part_name, sizeof(part_name), "item_%d", i); + tmp = elm_object_part_content_get(page, part_name); + if (!tmp) continue; + + int bIsVirtual = (int)evas_object_data_get(tmp, DATA_KEY_IS_VIRTUAL_ITEM); + if(bIsVirtual) { + apps_page_unpack_item(page, tmp); + item_virtual_destroy(tmp); + } + else { + item_unedit(tmp); + } + } +} + + + +// End of this file diff --git a/home/src/apps/pkgmgr.c b/home/src/apps/pkgmgr.c new file mode 100755 index 0000000..0d40e49 --- /dev/null +++ b/home/src/apps/pkgmgr.c @@ -0,0 +1,747 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "apps/db.h" +#include "apps/item.h" +#include "apps/list.h" +#include "apps/apps_main.h" +#include "apps/pkgmgr.h" +#include "apps/scroller.h" +#include "apps/scroller_info.h" +#include "apps/item_badge.h" +#include "apps/layout.h" + + + +struct pkgmgr_handler { + const char *key; + int (*func)(const char *package, const char *val, void *data); +}; + +typedef struct { + char* package; + char* key; + char* val; +} pkgmgr_reserve_s; + +typedef struct { + char* package; + char* status; +} pkgmgr_request_s; + +typedef struct { + char* pkgid; + char* app_id; + Evas_Object *item; +} pkgmgr_install_s; + +static struct { + pkgmgr_client *listen_pc; + Eina_List *reserve_list; + Eina_List *request_list; + Eina_List *item_list; +} pkg_mgr_info = { + .listen_pc = NULL, + .reserve_list = NULL, + .request_list = NULL, + .item_list = NULL, +}; + + + +static apps_error_e _append_request_in_list(const char *package, const char *status) +{ + retv_if(NULL == package, APPS_ERROR_INVALID_PARAMETER); + retv_if(NULL == status, APPS_ERROR_INVALID_PARAMETER); + + pkgmgr_request_s *rt = calloc(1, sizeof(pkgmgr_request_s)); + retv_if(NULL == rt, APPS_ERROR_FAIL); + + rt->package = strdup(package); + goto_if(NULL == rt->package, ERROR); + + rt->status = strdup(status); + goto_if(NULL == rt->status, ERROR); + + pkg_mgr_info.request_list = eina_list_append(pkg_mgr_info.request_list, rt); + goto_if(NULL == pkg_mgr_info.request_list, ERROR); + + return APPS_ERROR_NONE; + +ERROR: + if (rt) { + free(rt->status); + free(rt->package); + free(rt); + } + + return APPS_ERROR_FAIL; +} + + + +static apps_error_e _remove_request_in_list(const char *package) +{ + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + pkgmgr_request_s *rt = NULL; + + retv_if(NULL == package, APPS_ERROR_INVALID_PARAMETER); + + if (NULL == pkg_mgr_info.request_list) return APPS_ERROR_NONE; + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.request_list, l, ln, rt) { + if (!rt) continue; + if (!rt->package) continue; + if (strcmp(rt->package, package)) continue; + + pkg_mgr_info.request_list = eina_list_remove(pkg_mgr_info.request_list, rt); + free(rt->package); + free(rt->status); + free(rt); + return APPS_ERROR_NONE; + } + + return APPS_ERROR_FAIL; +} + + + +static int _exist_request_in_list(const char *package) +{ + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + pkgmgr_request_s *rt = NULL; + + retv_if(NULL == package, 0); + + if (NULL == pkg_mgr_info.request_list) return 0; + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.request_list, l, ln, rt) { + if (!rt) continue; + if (!rt->package) continue; + if (strcmp(rt->package, package)) continue; + return 1; + } + + return 0; +} + + + +static pkgmgr_request_s *_get_request_in_list(const char *package) +{ + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + pkgmgr_request_s *rt = NULL; + + retv_if(NULL == package, NULL); + + if (NULL == pkg_mgr_info.request_list) return NULL; + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.request_list, l, ln, rt) { + if (!rt) continue; + if (!rt->package) continue; + if (strcmp(rt->package, package)) continue; + return rt; + } + + return NULL; +} + + + +HAPI apps_error_e apps_pkgmgr_item_list_append_item(const char *pkgid, const char *app_id, Evas_Object *item) +{ + char *tmp_pkg_id = NULL; + char *tmp_app_id = NULL; + pkgmgr_install_s *pi = NULL; + + retv_if(NULL == pkgid, APPS_ERROR_INVALID_PARAMETER); + retv_if(NULL == app_id, APPS_ERROR_INVALID_PARAMETER); + retv_if(NULL == item, APPS_ERROR_INVALID_PARAMETER); + + pi = calloc(1, sizeof(pkgmgr_install_s)); + goto_if(NULL == pi, ERROR); + + tmp_pkg_id = strdup(pkgid); + goto_if(NULL == tmp_pkg_id, ERROR); + + tmp_app_id = strdup(app_id); + goto_if(NULL == tmp_app_id, ERROR); + + pi->pkgid = tmp_pkg_id; + pi->app_id = tmp_app_id; + pi->item = item; + + pkg_mgr_info.item_list = eina_list_append(pkg_mgr_info.item_list, pi); + goto_if(NULL == pkg_mgr_info.item_list, ERROR); + + return APPS_ERROR_NONE; + +ERROR: + free(tmp_app_id); + free(tmp_pkg_id); + free(pi); + + return APPS_ERROR_FAIL; +} + + + +HAPI apps_error_e apps_pkgmgr_item_list_remove_item(const char *pkgid, const char *app_id, Evas_Object *item) +{ + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + pkgmgr_install_s *pi = NULL; + + retv_if(NULL == pkgid, APPS_ERROR_INVALID_PARAMETER); + retv_if(NULL == app_id, APPS_ERROR_INVALID_PARAMETER); + retv_if(NULL == item, APPS_ERROR_INVALID_PARAMETER); + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.item_list, l, ln, pi) { + continue_if(NULL == pi); + continue_if(NULL == pi->pkgid); + continue_if(NULL == pi->app_id); + continue_if(NULL == pi->item); + + if (strcmp(pi->pkgid, pkgid)) continue; + if (strcmp(pi->app_id, app_id)) continue; + if (pi->item != item) continue; + + pkg_mgr_info.item_list = eina_list_remove(pkg_mgr_info.item_list, pi); + + free(pi->app_id); + free(pi->pkgid); + free(pi); + + return APPS_ERROR_NONE; + } + + return APPS_ERROR_FAIL; +} + + + +HAPI void apps_pkgmgr_item_list_affect_pkgid(const char *pkgid, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data) +{ + const Eina_List *l; + const Eina_List *ln; + pkgmgr_install_s *pi; + + ret_if(NULL == pkg_mgr_info.item_list); + ret_if(NULL == pkgid); + ret_if(NULL == _affected_cb); + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.item_list, l, ln, pi) { + continue_if(NULL == pi); + continue_if(NULL == pi->app_id); + continue_if(NULL == pi->item); + + if (strcmp(pkgid, pi->pkgid)) continue; + /* It's possible that many items with the same package name are in the install list */ + continue_if(EINA_TRUE != _affected_cb(pi->app_id, pi->item, data)); + } +} + + + +HAPI void apps_pkgmgr_item_list_affect_appid(const char *app_id, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data) +{ + const Eina_List *l; + const Eina_List *ln; + pkgmgr_install_s *pi; + + ret_if(NULL == pkg_mgr_info.item_list); + ret_if(NULL == app_id); + ret_if(NULL == _affected_cb); + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.item_list, l, ln, pi) { + continue_if(NULL == pi); + continue_if(NULL == pi->app_id); + continue_if(NULL == pi->item); + + if (strcmp(app_id, pi->app_id)) continue; + /* It's possible that many items with the same package name are in the install list */ + continue_if(EINA_TRUE != _affected_cb(pi->app_id, pi->item, data)); + } +} + + + +static Eina_Bool _enable_item(const char *appid, Evas_Object *item, void *data) +{ + void (*_func_item_enable)(Evas_Object *); + Evas_Object *grid = evas_object_data_get(item, DATA_KEY_GRID); + retv_if(NULL == grid, EINA_FALSE); + + _func_item_enable = evas_object_data_get(grid, DATA_KEY_FUNC_ENABLE_ITEM); + retv_if(NULL == _func_item_enable, EINA_FALSE); + + _func_item_enable(item); + + return EINA_TRUE; +} + + + + +static int _enable_cb(const pkgmgrinfo_appinfo_h handle, void *user_data) +{ + char *appid = NULL; + pkgmgrinfo_appinfo_get_appid(handle, &appid); + apps_pkgmgr_item_list_affect_appid(appid, _enable_item, NULL); + return 0; +} + + + +HAPI apps_error_e apps_pkgmgr_item_list_enable_mounted_item(void) +{ + retv_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_mounted_list(_enable_cb, NULL), APPS_ERROR_FAIL); + return APPS_ERROR_NONE; +} + + + +static Eina_Bool _disable_item(const char *appid, Evas_Object *item, void *data) +{ + void (*_func_item_disable)(Evas_Object *); + Evas_Object *grid = evas_object_data_get(item, DATA_KEY_GRID); + retv_if(NULL == grid, EINA_FALSE); + + _func_item_disable = evas_object_data_get(grid, DATA_KEY_FUNC_DISABLE_ITEM); + retv_if(NULL == _func_item_disable, EINA_FALSE); + + _func_item_disable(item); + + return EINA_TRUE; +} + + + + +static int _disable_cb(const pkgmgrinfo_appinfo_h handle, void *user_data) +{ + char *appid = NULL; + pkgmgrinfo_appinfo_get_appid(handle, &appid); + apps_pkgmgr_item_list_affect_appid(appid, _disable_item, NULL); + return 0; +} + + + +HAPI apps_error_e apps_pkgmgr_item_list_disable_unmounted_item(void) +{ + retv_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_unmounted_list(_disable_cb, NULL), APPS_ERROR_FAIL); + return APPS_ERROR_NONE; +} + + + +static apps_error_e _start_download(const char *package, void *data) +{ + _APPS_D("Start downloading for the package(%s)", package); + return APPS_ERROR_NONE; +} + + + +static apps_error_e _start_uninstall(const char *package, void *data) +{ + _APPS_D("Start uninstalling for the package(%s)", package); + return APPS_ERROR_NONE; +} + + + +static apps_error_e _start_update(const char *package, void *data) +{ + _APPS_D("Start updating for the package(%s)", package); + return APPS_ERROR_NONE; +} + + + +static apps_error_e _start_recover(const char *package, void *data) +{ + _APPS_D("Start recovering for the package(%s)", package); + return APPS_ERROR_NONE; +} + + + +static apps_error_e _start_install(const char *package, void *data) +{ + _APPS_D("Start installing for the package(%s)", package); + return APPS_ERROR_NONE; +} + + + +static apps_error_e _start(const char *package, const char *val, void *data) +{ + register unsigned int i; + struct start_cb_set { + const char *name; + int (*handler)(const char *package, void *data); + } start_cb[] = { + { + .name = "download", + .handler = _start_download, + }, + { + .name = "uninstall", + .handler = _start_uninstall, + }, + { + .name = "install", + .handler = _start_install, + }, + { + .name = "update", + .handler = _start_update, + }, + { + .name = "recover", + .handler = _start_recover, + }, + { + .name = NULL, + .handler = NULL, + }, + }; + + _APPS_D("package [%s], val [%s]", package, val); + retv_if(_exist_request_in_list(package), APPS_ERROR_FAIL); + retv_if(APPS_ERROR_NONE != _append_request_in_list(package, val), APPS_ERROR_FAIL); + + for (i = 0; start_cb[i].name; i ++) { + if (strcasecmp(val, start_cb[i].name)) continue; + break_if(NULL == start_cb[i].handler); + return start_cb[i].handler(package, data); + } + + _APPS_E("Unknown status for starting phase signal'd from package manager"); + return APPS_ERROR_NONE; +} + + + +static apps_error_e _icon_path(const char *package, const char *val, void *data) +{ + _APPS_D("package(%s) with %s", package, val); + return APPS_ERROR_NONE; +} + + + +static apps_error_e _download_percent(const char *package, const char *val, void *data) +{ + _APPS_D("package(%s) with %s", package, val); + return APPS_ERROR_NONE; +} + + + +static apps_error_e _install_percent(const char *package, const char *val, void *data) +{ + _APPS_D("package(%s) with %s", package, val); + if (_exist_request_in_list(package)) return APPS_ERROR_NONE; + retv_if(APPS_ERROR_NONE != _append_request_in_list(package, "install"), APPS_ERROR_FAIL); + return APPS_ERROR_NONE; +} + + + +static apps_error_e _error(const char *package, const char *val, void *data) +{ + _APPS_D("package(%s) with %s", package, val); + return APPS_ERROR_NONE; +} + + + +static void _install_app(Evas_Object *scroller, const char *appid) +{ + Evas_Object *item = NULL; + item_info_s *item_info = NULL; + + ret_if(!scroller); + ret_if(!appid); + + item_info = apps_item_info_create(appid); + ret_if(!item_info); + + _APPS_SD("appid[%s], name[%s]", item_info->appid, item_info->name); + item = item_create(scroller, item_info); + if (!item) { + _APPS_E("Cannot create an item"); + apps_item_info_destroy(item_info); + return; + } + + apps_scroller_append_item(scroller, item); +} + + + +static void _uninstall_app(Evas_Object *scroller, const char *appid) +{ + Evas_Object *item = NULL; + item_info_s *item_info = NULL; + + int longpressed; + int is_edit; + + ret_if(!scroller); + ret_if(!appid); + + item = apps_scroller_get_item_by_appid(scroller, appid); + ret_if(!item); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + /* We have to try to destroy an item even if there is no item_info */ + + if (item_info) { + longpressed = item_is_longpressed(item); + is_edit = apps_layout_is_edited(item_info->layout); + if (is_edit && longpressed) { + evas_object_data_set(scroller, DATA_KEY_ITEM_UNINSTALL_RESERVED, (void*)appid); + } else { + apps_scroller_remove_item(scroller, item); + apps_db_remove_item(appid); + item_destroy(item); + + _APPS_SD("appid[%s], name[%s]", item_info->appid, item_info->name); + item_badge_remove(item_info->appid); + item_badge_remove(item_info->pkgid); + apps_item_info_destroy(item_info); + + apps_scroller_trim(scroller); + } + } else { + apps_scroller_remove_item(scroller, item); + apps_db_remove_item(appid); + item_destroy(item); + + apps_scroller_trim(scroller); + } +} + + + +static void _update_app(Evas_Object *scroller, const char *appid) +{ + _uninstall_app(scroller, appid); + _install_app(scroller, appid); +} + + + +static void _manage_package(void (*_func)(Evas_Object *, const char *), const char *appid) +{ + Evas_Object *scroller = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + instance_info_s *info = NULL; + scroller_info_s *scroller_info = NULL; + + ret_if(!_func); + ret_if(!appid); + + list = apps_main_get_info()->instance_list; + ret_if(!list); + + EINA_LIST_FOREACH_SAFE(list, l, ln, info) { + continue_if(!info); + continue_if(!info->layout); + + scroller = evas_object_data_get(info->layout, DATA_KEY_SCROLLER); + continue_if(!scroller); + + _func(scroller, appid); + } + + ret_if(!scroller); + apps_scroller_write_list(scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + ret_if(!scroller_info->layout); + ret_if(!scroller_info->list); + + Eina_List *layout_list = evas_object_data_get(scroller_info->layout, DATA_KEY_LIST); + eina_list_free(layout_list); + layout_list= eina_list_clone(scroller_info->list); + evas_object_data_set(scroller_info->layout, DATA_KEY_LIST, layout_list); + + apps_db_read_list(scroller_info->list); +} + + + +static int _end_cb(pkgmgrinfo_appinfo_h handle, void *user_data) +{ + char *appid = NULL; + pkgmgr_request_s *rt = user_data; + + retv_if(NULL == handle, -1); + retv_if(NULL == user_data, -1); + + pkgmgrinfo_appinfo_get_appid(handle, &appid); + + _APPS_SD("status[%s], appid[%s]", rt->status, appid); + + if (!strcmp(rt->status, "install")) { + _manage_package(_install_app, appid); + } else if (!strcmp(rt->status, "update")) { + _manage_package(_update_app, appid); + } else { + _APPS_E("No routines for this status (%s:%s)", rt->package, rt->status); + } + + return 0; +} + + + +static Eina_Bool _uninstall_cb(const char *appid, Evas_Object *item, void *data) +{ + retv_if(!appid, EINA_FALSE); + + _manage_package(_uninstall_app, appid); + + return EINA_TRUE; +} + + + +static apps_error_e _end(const char *package, const char *val, void *data) +{ + pkgmgr_request_s *rt = NULL; + pkgmgrinfo_pkginfo_h handle = NULL; + + retv_if(!_exist_request_in_list(package), APPS_ERROR_FAIL); + + rt = _get_request_in_list(package); + retv_if(NULL == rt, APPS_ERROR_FAIL); + retv_if(strcasecmp(val, "ok"), APPS_ERROR_FAIL); + + _APPS_D("Package(%s) : key(%s) - val(%s)", package, rt->status, val); + + /* Criteria : pkgid */ + if (!strcasecmp("uninstall", rt->status)) { + apps_pkgmgr_item_list_affect_pkgid(package, _uninstall_cb, data); + goto OUT; + } + + retv_if(PMINFO_R_OK != pkgmgrinfo_pkginfo_get_pkginfo(package, &handle), APPS_ERROR_FAIL); + + /* Criteria : appid */ + if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_list(handle, PMINFO_UI_APP, _end_cb, rt)) { + if (APPS_ERROR_NONE != _remove_request_in_list(package)) + _APPS_E("cannot remove a request(%s:%s)", rt->package, rt->status); + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + return APPS_ERROR_FAIL; + } + +OUT: + if (APPS_ERROR_NONE != _remove_request_in_list(package)) + _APPS_E("cannot remove a request(%s:%s)", rt->package, rt->status); + if (handle) pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + + return APPS_ERROR_NONE; +} + + + +static apps_error_e _change_pkg_name(const char *package, const char *val, void *data) +{ + _APPS_D("package(%s) with %s", package, val); + return APPS_ERROR_NONE; +} + + + +static struct pkgmgr_handler pkgmgr_cbs[] = { + { "start", _start }, + { "icon_path", _icon_path }, + { "download_percent", _download_percent }, + { "command", NULL }, + { "install_percent", _install_percent }, + { "error", _error }, + { "end", _end }, + { "change_pkg_name", _change_pkg_name }, +}; + + + +static apps_error_e _pkgmgr_cb(int req_id, const char *pkg_type, const char *package, const char *key, const char *val, const void *pmsg, void *data) +{ + register unsigned int i; + + _APPS_D("pkgmgr request [%s:%s] for %s", key, val, package); + + for (i = 0; i < sizeof(pkgmgr_cbs) / sizeof(struct pkgmgr_handler); i++) { + if (strcasecmp(pkgmgr_cbs[i].key, key)) continue; + break_if(!pkgmgr_cbs[i].func); + + if (APPS_ERROR_NONE != pkgmgr_cbs[i].func(package, val, data)) { + _APPS_E("pkgmgr_cbs[%u].func has errors.", i); + } + } + + return APPS_ERROR_NONE; +} + + + +HAPI apps_error_e apps_pkgmgr_init(void) +{ + if (NULL != pkg_mgr_info.listen_pc) { + return APPS_ERROR_NONE; + } + + pkg_mgr_info.listen_pc = pkgmgr_client_new(PC_LISTENING); + retv_if(NULL == pkg_mgr_info.listen_pc, APPS_ERROR_FAIL); + retv_if(pkgmgr_client_listen_status(pkg_mgr_info.listen_pc, + _pkgmgr_cb, NULL) != PKGMGR_R_OK, APPS_ERROR_FAIL); + + return APPS_ERROR_NONE; +} + + + +HAPI void apps_pkgmgr_fini(void) +{ + ret_if(NULL == pkg_mgr_info.listen_pc); + if (pkgmgr_client_free(pkg_mgr_info.listen_pc) != PKGMGR_R_OK) { + _APPS_E("cannot free pkgmgr_client for listen."); + } + pkg_mgr_info.listen_pc = NULL; +} + + + +// End of a file diff --git a/home/src/apps/scroller.c b/home/src/apps/scroller.c new file mode 100755 index 0000000..0da15ce --- /dev/null +++ b/home/src/apps/scroller.c @@ -0,0 +1,1490 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "apps/apps_conf.h" +#include "apps/effect.h" +#include "apps/item.h" +#include "apps/item_info.h" +#include "apps/layout.h" +#include "apps/apps_main.h" +#include "apps/page.h" +#include "apps/scroller.h" +#include "apps/scroller_info.h" +#include "wms.h" + + +#define BOX_EDJE EDJEDIR"/apps_box.edj" +#define BOX_GROUP_NAME "box" +#if 0 /* Do not need buttons */ +#define BOX_TOP_BTN_GROUP_NAME "top_button" +#define BOX_BOTTOM_BTN_GROUP_NAME "bottom_button" +#endif + +#define PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN "p_sc_m_dn" +#define PRIVATE_DATA_KEY_SCROLLER_DRAG "p_sc_dr" +#define PRIVATE_DATA_KEY_IS_SCROLLING "p_is_scr" +#define PRIVATE_DATA_KEY_SCROLLER_REVERSE_LIST "p_sc_re_lt" +#define PRIVATE_DATA_KEY_SCROLLER_POP_ALL_TIMER "p_sc_p_tm" +#define PRIVATE_DATA_KEY_SCROLLER_PUSH_ALL_TIMER "p_p_tm" +#define PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER "p_sc_tmer" +#define PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH "p_sc_ith" + +#define PRIVATE_DATA_KEY_ITEM_INFO_LIST_APPENDED "p_iil_and" +#define PRIVATE_DATA_KEY_ITEM_INFO_LIST_INDEX "p_iil_idx" +#define PRIVATE_DATA_KEY_ITEM_INFO_LIST_TIMER "p_iil_tm" + + + +static Eina_Bool _rotary_cb(void *data, Evas_Object *obj, Eext_Rotary_Event_Info *rotary_info) +{ + _APPS_D("Rotary callback is called"); + Evas_Object *scroller = obj; + + retv_if(!scroller, ECORE_CALLBACK_PASS_ON); + + _APPS_D("Detent detected, obj[%p], direction[%d], timeStamp[%u]", obj, rotary_info->direction, rotary_info->time_stamp); + if (rotary_info->direction == EEXT_ROTARY_DIRECTION_CLOCKWISE) { + apps_scroller_bring_in_region_by_vector(scroller, 1); + } else { + apps_scroller_bring_in_region_by_vector(scroller, -1); + } + + return ECORE_CALLBACK_PASS_ON; +} + + + +static void _init_rotary(Evas_Object *scroller) +{ + _APPS_D("Initialize the rotary event"); + eext_rotary_object_event_callback_add(scroller, _rotary_cb, NULL); +} + + + +static void _destroy_rotary(Evas_Object *scroller) +{ + _APPS_D("Finish the rotary event"); + eext_rotary_object_event_callback_del(scroller, _rotary_cb); +} + + + +static void _mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ei = event_info; + ret_if(!ei); + + _APPS_D("Mouse is down [%d,%d]", ei->output.x, ei->output.y); + evas_object_data_set(obj, PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN, (void *) 1); +} + + + +static void _mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Up *ei = event_info; + ret_if(!ei); + + _APPS_D("Mouse is up [%d,%d]", ei->output.x, ei->output.y); + evas_object_data_del(obj, PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN); + + if (evas_object_data_get(obj, PRIVATE_DATA_KEY_SCROLLER_DRAG)) return; + evas_object_data_del(obj, PRIVATE_DATA_KEY_IS_SCROLLING); +} + + + +static void _anim_start_cb(void *data, Evas_Object *scroller, void *event_info) +{ + _APPS_D("start the scroller animation"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_IS_SCROLLING, (void *) 1); + + Evas_Object *item = item_get_press_item(scroller); + if(item) { + if(item_is_longpressed(item)) { + _APPS_D("longressed"); + } + else { + item_is_released(item); + } + } +} + + + +static void _anim_stop_cb(void *data, Evas_Object *scroller, void *event_info) +{ + _APPS_D("stop the scroller animation"); + if (evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN)) return; + evas_object_data_del(scroller, PRIVATE_DATA_KEY_IS_SCROLLING); +} + + + +static void _drag_start_cb(void *data, Evas_Object *scroller, void *event_info) +{ + _APPS_D("start to drag the scroller animation"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG, (void *) 1); + /* _drag_start_cb is called even if the scroller is not moved. */ + //evas_object_data_set(scroller, PRIVATE_DATA_KEY_IS_SCROLLING, (void *) 1); + + Evas_Object *item = item_get_press_item(scroller); + if(item) { + if(item_is_longpressed(item)) { + _APPS_D("longressed"); + } + else { + item_is_released(item); + } + } +} + + + +static void _drag_stop_cb(void *data, Evas_Object *scroller, void *event_info) +{ + _APPS_D("stop to drag the scroller animation"); + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG); +} + + + +static void _scroll_cb(void *data, Evas_Object *scroller, void *event_info) +{ + evas_object_data_set(scroller, PRIVATE_DATA_KEY_IS_SCROLLING, (void *) 1); +} + + + +static apps_error_e _resume_result_cb(void *data) +{ + Evas_Object *scroller = data; + retv_if(!scroller, APPS_ERROR_INVALID_PARAMETER); + + _APPS_D("Activate the rotary events for apps"); + + eext_rotary_object_event_activated_set(scroller, EINA_TRUE); + + return APPS_ERROR_NONE; +} + + + +HAPI void apps_scroller_destroy(Evas_Object *layout) +{ + Evas_Object *scroller = NULL; + Evas_Object *page = NULL; + Eina_List *box_list = NULL; + scroller_info_s *scroller_info = NULL; + + ret_if(!layout); + + scroller = elm_object_part_content_unset(layout, "scroller"); + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + _destroy_rotary(scroller); + + apps_main_unregister_cb(scroller_info->instance_info, APPS_APP_STATE_RESUME, _resume_result_cb); + + box_list = elm_box_children_get(scroller_info->box); + ret_if(!box_list); + + /* FIXME : We don't need to remove items? */ + EINA_LIST_FREE(box_list, page) { + if (!page) break; + apps_page_destroy(page); + } + + evas_object_del(scroller_info->box); + evas_object_del(scroller_info->box_layout); + + evas_object_event_callback_del(scroller, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb); + evas_object_event_callback_del(scroller, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb); + evas_object_smart_callback_del(scroller, "scroll,anim,start", _anim_start_cb); + evas_object_smart_callback_del(scroller, "scroll,anim,stop", _anim_stop_cb); + evas_object_smart_callback_del(scroller, "scroll,drag,start", _drag_start_cb); + evas_object_smart_callback_del(scroller, "scroll,drag,stop", _drag_stop_cb); + evas_object_smart_callback_del(scroller, "scroll", _scroll_cb); + + free(scroller_info); + evas_object_del(scroller); +} + + + +Eina_Bool _init_timer_cb(void *data) +{ + Evas_Object *scroller = data; + Eina_List *list = NULL; + scroller_info_s *scroller_info = NULL; + item_info_s *item_info = NULL; + int index, count; + + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, ECORE_CALLBACK_CANCEL); + + list = evas_object_data_get(scroller_info->layout, DATA_KEY_LIST); + retv_if(!list, ECORE_CALLBACK_CANCEL); + + index = (int) evas_object_data_get(scroller, DATA_KEY_LIST_INDEX); + count = eina_list_count(list); + if (index == count) goto OUT; + + item_info = eina_list_nth(list, index); + goto_if(!item_info, OUT); + + item_info->item = item_create(scroller, item_info); + item_info->ordering = index; + apps_scroller_append_item(scroller, item_info->item); + + index ++; + if (index == count) goto OUT; + evas_object_data_set(scroller, DATA_KEY_LIST_INDEX, (void *) index); + + return ECORE_CALLBACK_RENEW; + +OUT: + _APPS_D("Loading apps is done"); + + /* FIXME : Bring into the top */ + + evas_object_data_del(scroller, DATA_KEY_LIST_INDEX); + evas_object_data_del(scroller, DATA_KEY_TIMER); + + index = 0; + + wms_change_apps_order(W_HOME_WMS_BACKUP); + + return ECORE_CALLBACK_CANCEL; +} + + + +#if 0 /* Do not need buttons */ +static void _top_btn_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Object *top_btn_layout = data; + ret_if(!top_btn_layout); + + Evas_Event_Mouse_Down *ei = event_info; + ret_if(!ei); + + _APPS_D("Mouse is down [%d,%d]", ei->output.x, ei->output.y); + + Evas_Object *btn_text_layout = elm_object_part_content_get(top_btn_layout, "button,txt"); + ret_if(!btn_text_layout); + + elm_object_signal_emit(btn_text_layout, "press,button", "button"); +} + + + +static void _top_btn_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Object *top_btn_layout = data; + ret_if(!top_btn_layout); + + Evas_Event_Mouse_Up *ei = event_info; + ret_if(!ei); + + _APPS_D("Mouse is up [%d,%d]", ei->output.x, ei->output.y); + + Evas_Object *btn_text_layout = elm_object_part_content_get(top_btn_layout, "button,txt"); + ret_if(!btn_text_layout); + + elm_object_signal_emit(btn_text_layout, "release,button", "button"); +} + +#define APPS_W_TASKMGR_PKGNAME "org.tizen.w-taskmanager" +static void _top_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + _APPS_D("Clicked"); + + Evas_Object *layout = (Evas_Object*)data; + ret_if(!layout); + + if(apps_layout_is_edited(layout)) { + _APPS_D("Edit mode"); + return; + } + + apps_effect_play_sound(); + + int isttsmode = apps_item_info_is_support_tts(APPS_W_TASKMGR_PKGNAME); + if(apps_main_get_info()->tts && !isttsmode) { + char tmp[NAME_LEN] = {0,}; + snprintf(tmp, sizeof(tmp), _("IDS_SCR_POP_PS_IS_NOT_AVAILABLE_WHILE_SCREEN_READER_IS_ENABLED"), _("IDS_ST_OPT_RECENT_APPS_ABB")); + char *text = strdup(tmp); + util_create_toast_popup(layout, text); + } + else { + util_launch_app(APPS_W_TASKMGR_PKGNAME, NULL, NULL); + } +} + + + +#define APPS_SAMSUNGAPPS_MAIN_CATEGORY_LIST "samsungapps://MainCategoryList/" +static void _bottom_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + _APPS_D("Clicked"); + + Evas_Object *layout = (Evas_Object*)data; + ret_if(!layout); + + if(apps_layout_is_edited(layout)) { + _APPS_D("Edit mode"); + return; + } + + apps_effect_play_sound(); + wms_launch_gear_manager(data, APPS_SAMSUNGAPPS_MAIN_CATEGORY_LIST); +} +#endif + + + +static char *_access_info_cb(void *data, Evas_Object *obj) +{ + retv_if(!data, NULL); + + char *tmp = strdup(data); + retv_if(!tmp, NULL); + + return tmp; +} + + + +HAPI Evas_Object *apps_scroller_create(Evas_Object *layout) +{ + Evas_Object *win = NULL; + Evas_Object *scroller = NULL; + Evas_Object *box_layout = NULL; + Evas_Object *box = NULL; + Ecore_Timer *timer = NULL; + instance_info_s *instance_info = NULL; + scroller_info_s *scroller_info = NULL; + int height; + + win = evas_object_data_get(layout, DATA_KEY_WIN); + retv_if(!win, NULL); + + instance_info = evas_object_data_get(win, DATA_KEY_INSTANCE_INFO); + retv_if(!instance_info, NULL); + + Evas_Object *layout_focus = elm_object_part_content_get(layout, "focus"); + retv_if(!layout_focus, NULL); + + scroller = elm_scroller_add(layout); + retv_if(!scroller, NULL); + + elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE); + elm_scroller_page_size_set(scroller, instance_info->root_w, ITEM_HEIGHT * apps_main_get_info()->scale); + elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, SCROLLER_POLICY_VERTICAL); + elm_scroller_page_scroll_limit_set(scroller, SCROLLER_PAGE_LIMIT_HORIZONTAL, SCROLLER_PAGE_LIMIT_VERTICAL); + elm_scroller_content_min_limit(scroller, EINA_FALSE, EINA_FALSE); + elm_scroller_single_direction_set(scroller, ELM_SCROLLER_SINGLE_DIRECTION_HARD); + + elm_object_style_set(scroller, "effect"); + elm_object_part_content_set(layout, "scroller", scroller); + + height = (double) instance_info->root_h * apps_main_get_info()->scale; + _APPS_D("Scroller width : %d, height : %d", instance_info->root_w, height); + + evas_object_size_hint_min_set(scroller, instance_info->root_w, height); + evas_object_size_hint_max_set(scroller, instance_info->root_w, height); + evas_object_show(scroller); + + evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL); + evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, NULL); + evas_object_smart_callback_add(scroller, "scroll,anim,start", _anim_start_cb, NULL); + evas_object_smart_callback_add(scroller, "scroll,anim,stop", _anim_stop_cb, NULL); + evas_object_smart_callback_add(scroller, "scroll,drag,start", _drag_start_cb, NULL); + evas_object_smart_callback_add(scroller, "scroll,drag,stop", _drag_stop_cb, NULL); + evas_object_smart_callback_add(scroller, "scroll", _scroll_cb, NULL); + + /* Use the layout between box and scroller because of alignment of a page in the box. */ + box_layout = elm_layout_add(scroller); + goto_if(!box_layout, ERROR); + + elm_layout_file_set(box_layout, BOX_EDJE, BOX_GROUP_NAME); + evas_object_show(box_layout); + elm_object_content_set(scroller, box_layout); + + box = elm_box_add(box_layout); + goto_if(!box, ERROR); + + elm_box_horizontal_set(box, SCROLLER_HORIZONTAL); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(box); + elm_object_part_content_set(box_layout, "box", box); + + timer = ecore_timer_add(0.01f, _init_timer_cb, scroller); + if (!timer) { + _APPS_E("Cannot add a timer"); + apps_scroller_destroy(layout); + return NULL; + } + evas_object_data_set(scroller, DATA_KEY_TIMER, timer); + + scroller_info = calloc(1, sizeof(scroller_info_s)); + if (!scroller_info) { + _APPS_E("Cannot calloc for the scroller_info"); + apps_scroller_destroy(layout); + return NULL; + } + + scroller_info->win = win; + scroller_info->instance_info = instance_info; + scroller_info->layout = layout; + scroller_info->box_layout = box_layout; + scroller_info->box = box; + scroller_info->layout_focus = layout_focus; + scroller_info->list = NULL; + scroller_info->list_index = 0; + + evas_object_data_set(scroller, DATA_KEY_SCROLLER_INFO, scroller_info); + + _init_rotary(scroller); + if (APPS_ERROR_NONE != apps_main_register_cb(instance_info, APPS_APP_STATE_RESUME, _resume_result_cb, scroller)) { + _APPS_E("Cannot register the pause callback"); + } + + return scroller; + +ERROR: + if(box_layout) evas_object_del(box_layout); + if(scroller) evas_object_del(scroller); +#if 0 /* Do not need buttons */ + if(top_btn_layout) evas_object_del(top_btn_layout); + if(bottom_btn_layout) evas_object_del(bottom_btn_layout); +#endif + + return NULL; +} + + + +HAPI int apps_scroller_count_page(Evas_Object *scroller) +{ + Eina_List *list = NULL; + scroller_info_s *scroller_info = NULL; + int count = 0; + + retv_if(!scroller, 0); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, 0); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, 0); + + count = eina_list_count(list); + eina_list_free(list); + + return count; +} + + + +HAPI int apps_scroller_count_item(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + Evas_Object *page = NULL; + int count = 0; + + retv_if(!scroller, -1); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, -1); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, -1); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + count += apps_page_count_item(page); + } + + eina_list_free(list); + + return count; +} + + + +HAPI Eina_Bool apps_scroller_is_scrolling(Evas_Object *scroller) +{ + return evas_object_data_get(scroller, PRIVATE_DATA_KEY_IS_SCROLLING)? EINA_TRUE:EINA_FALSE; +} + + + +HAPI void apps_scroller_freeze(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + elm_object_scroll_freeze_push(scroller_info->box); +} + + + +HAPI void apps_scroller_unfreeze(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + while (elm_object_scroll_freeze_get(scroller_info->box)) { + elm_object_scroll_freeze_pop(scroller_info->box); + } +} + + + +static Eina_Bool _bring_in_timer_cb(void *data) +{ + Evas_Object *scroller = data; + int i = 0; + + i = (int) evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH); + elm_scroller_page_bring_in(scroller, i, 0); + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER); + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI void apps_scroller_bring_in(Evas_Object *scroller, int page_no) +{ + Ecore_Timer *timer = NULL; + + ret_if(!scroller); + + /* 1. Remove the old timer */ + timer = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER); + if (timer) ecore_timer_del(timer); + + /* 2. Append the new timer */ + timer = ecore_timer_add(0.01f, _bring_in_timer_cb, scroller); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER, timer); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH, (void *) page_no); +} + + + +HAPI void apps_scroller_bring_in_page(Evas_Object *scroller, Evas_Object *page) +{ + Evas_Object *tmp = NULL; + Eina_List *list = NULL; + Ecore_Timer *timer = NULL; + scroller_info_s *scroller_info = NULL; + const Eina_List *l; + const Eina_List *n; + int i = -1; + + ret_if(!scroller); + ret_if(!page); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + EINA_LIST_FOREACH_SAFE(list, l, n, tmp) { + i++; + break_if(!tmp); + if (tmp != page) continue; + + /* 1. Remove the old timer */ + timer = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER); + if (timer) ecore_timer_del(timer); + + /* 2. Append the new timer */ + timer = ecore_timer_add(0.01f, _bring_in_timer_cb, scroller); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER, timer); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH, (void *) i); + break; + } + eina_list_free(list); +} + + + +HAPI void apps_scroller_region_show(Evas_Object *scroller, int x, int y) +{ + scroller_info_s *scroller_info = NULL; + instance_info_s *instance_info = NULL; + int w, h; + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + instance_info = scroller_info->instance_info; + ret_if(!instance_info); + + evas_object_geometry_get(scroller, NULL, NULL, &w, &h); + elm_scroller_region_show(scroller, x, y, w, h); +} + + + +HAPI void apps_scroller_append_item(Evas_Object *scroller, Evas_Object *item) +{ + Evas_Object *last_page = NULL; + Eina_List *list, *last; + scroller_info_s *scroller_info = NULL; + item_info_s *item_info = NULL; + int items_per_page = 0; + + ret_if(!scroller); + ret_if(!item); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + list = elm_box_children_get(scroller_info->box); + if (list) { + last = eina_list_last(list); + goto_if(!last, ERROR); + + last_page = eina_list_data_get(last); + goto_if(!last_page, ERROR); + + eina_list_free(list); + + items_per_page = apps_page_count_item(last_page); + } else { + /* If there is no list, then we have to create a page */ + items_per_page = APPS_PER_PAGE; + } + + if (items_per_page < APPS_PER_PAGE) { + apps_page_pack_item(last_page, item); + } else { + Evas_Object *page = apps_page_create(scroller, last_page, NULL); + ret_if(!page); + elm_box_pack_end(scroller_info->box, page); + apps_page_pack_item(page, item); + } + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + scroller_info->list = eina_list_append(scroller_info->list, item_info); + + return; + +ERROR: + _APPS_E("Find an error on appending an item"); + if (list) eina_list_free(list); +} + + + +HAPI void apps_scroller_remove_item(Evas_Object *scroller, Evas_Object *item) +{ + Evas_Object *page = NULL; + Eina_List *list; + const Eina_List *l, *ln; + scroller_info_s *scroller_info = NULL; + item_info_s *item_info = NULL; + + ret_if(!scroller); + ret_if(!item); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + if (APPS_ERROR_NONE == apps_page_unpack_item(page, item)) { + break; + } + } + + eina_list_free(list); + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + ret_if(!item_info); + + scroller_info->list = eina_list_remove(scroller_info->list, item_info); +} + + + +HAPI apps_error_e apps_scroller_pack_nth(Evas_Object *scroller, Evas_Object *item, int ordering) +{ + Evas_Object *page = NULL; + Evas_Object *last_page = NULL; + Evas_Object *tmp = NULL; + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + Eina_List *last = NULL; + int cur_count, more_page_count; + register int i; + + retv_if(!scroller, APPS_ERROR_INVALID_PARAMETER); + retv_if(!item, APPS_ERROR_INVALID_PARAMETER); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, APPS_ERROR_FAIL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, APPS_ERROR_FAIL); + + cur_count = eina_list_count(list); + more_page_count = (ordering / APPS_PER_PAGE + 1) - cur_count; + + if (more_page_count > 0) { + last = eina_list_last(list); + if (last) last_page = eina_list_data_get(last); + } + + for (i = 0; i < more_page_count; i++) { + Evas_Object *new_page = apps_page_create(scroller, last_page, NULL); + retv_if(!new_page, APPS_ERROR_FAIL); + last_page = new_page; + } + + page = eina_list_nth(list, ordering / APPS_PER_PAGE); + retv_if(!page, APPS_ERROR_FAIL); + + tmp = apps_page_unpack_nth(page, ordering % APPS_PER_PAGE); + if (tmp) { + item_info_s *item_info = evas_object_data_get(tmp, DATA_KEY_ITEM_INFO); + if (item_info && item_info->appid) { + _APPS_D("Destroy an item[%s]", item_info->appid); + } + } + apps_page_pack_nth(page, item, ordering % APPS_PER_PAGE); + + return APPS_ERROR_NONE; +} + + + +static Eina_Bool _append_items_timer_cb(void *data) +{ + Evas_Object *scroller = data; + Eina_List *list = NULL; + item_info_s *item_info = NULL; + int index, count; + + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + + list = evas_object_data_get(scroller, PRIVATE_DATA_KEY_ITEM_INFO_LIST_APPENDED); + retv_if(!list, ECORE_CALLBACK_CANCEL); + + index = (int) evas_object_data_get(scroller, PRIVATE_DATA_KEY_ITEM_INFO_LIST_INDEX); + count = eina_list_count(list); + if (index == count) goto OUT; + + item_info = eina_list_nth(list, index); + goto_if(!item_info, OUT); + + item_info->item = item_create(scroller, item_info); + item_info->ordering = index; + apps_scroller_append_item(scroller, item_info->item); + + index ++; + if (index == count) goto OUT; + evas_object_data_set(scroller, PRIVATE_DATA_KEY_ITEM_INFO_LIST_INDEX, (void *) index); + + return ECORE_CALLBACK_RENEW; + +OUT: + _APPS_D("Loading apps is done"); + + /* FIXME : Scroller into the top */ + + evas_object_data_del(scroller, PRIVATE_DATA_KEY_ITEM_INFO_LIST_TIMER); + evas_object_data_del(scroller, PRIVATE_DATA_KEY_ITEM_INFO_LIST_INDEX); + evas_object_data_del(scroller, PRIVATE_DATA_KEY_ITEM_INFO_LIST_APPENDED); + + index = 0; + + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI void apps_scroller_append_list(Evas_Object *scroller, Eina_List *list) +{ + Ecore_Timer *timer = NULL; + + ret_if(!scroller); + ret_if(!list); + + timer = evas_object_data_del(scroller, PRIVATE_DATA_KEY_ITEM_INFO_LIST_TIMER); + if (timer) ecore_timer_del(timer); + + timer = ecore_timer_add(0.01f, _append_items_timer_cb, scroller); + ret_if(!timer); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_ITEM_INFO_LIST_TIMER, timer); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_ITEM_INFO_LIST_INDEX, NULL); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_ITEM_INFO_LIST_APPENDED, list); +} + + + +HAPI void apps_scroller_remove_list(Evas_Object *scroller, Eina_List *list) +{ + const Eina_List *l, *ln; + item_info_s *item_info = NULL; + + ret_if(!scroller); + ret_if(!list); + + EINA_LIST_FOREACH_SAFE(list, l, ln, item_info) { + continue_if(!item_info); + if (item_info->item) { + apps_scroller_remove_item(scroller, item_info->item); + item_destroy(item_info->item); + } + item_info->item = NULL; + } +} + + + +HAPI void apps_scroller_trim(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + Eina_List *cur_list = NULL; + Eina_List *page_list = NULL; + Eina_List *item_list = NULL; + const Eina_List *l, *ln; + + Evas_Object *page = NULL; + Evas_Object *item = NULL; + + int i, count = 0, index = 0, pull = 0; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + cur_list = elm_box_children_get(scroller_info->box); + ret_if(!cur_list); + + // 1. Unpack all untrimmed items + EINA_LIST_FOREACH_SAFE(cur_list, l, ln, page) { + continue_if(!page); + + if(!pull) { + count = apps_page_count_item(page); + if (APPS_PER_PAGE == count) continue; + } + + pull = 1; + + for (i = 0; i < APPS_PER_PAGE; i++) { + item = apps_page_unpack_nth(page, i); + if (!item) continue; + item_list = eina_list_append(item_list, item); + } + + page_list = eina_list_append(page_list, page); + } + eina_list_free(cur_list); + count = eina_list_count(item_list); + + // 2. Pack all items + EINA_LIST_FOREACH_SAFE(page_list, l, ln, page) { + for (i = 0; item_list && i < APPS_PER_PAGE; i++) { + item = eina_list_nth(item_list, index); + index++; + continue_if(!item); + + break_if(APPS_ERROR_NONE != apps_page_pack_nth(page, item, i)); + } + } + + eina_list_free(item_list); + + // 3. Remove empty page + EINA_LIST_FREE(page_list, page) { + if (apps_page_count_item(page) == 0) { + apps_page_destroy(page); + } + } +} + + + +HAPI void apps_scroller_change_language(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + Evas_Object *page = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + elm_access_info_cb_set(scroller_info->layout_focus, ELM_ACCESS_INFO, _access_info_cb, _("IDS_IDLE_BODY_APPS")); +#if 0 /* Do not need buttons */ + elm_access_info_cb_set(scroller_info->top_focus, ELM_ACCESS_INFO, _access_info_cb, _("IDS_ST_OPT_RECENT_APPS_ABB")); + elm_access_info_cb_set(scroller_info->bottom_focus, ELM_ACCESS_INFO, _access_info_cb, _("IDS_HS_BUTTON_GET_MORE_APPLICATIONS_ABB2")); +#endif + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + apps_page_change_language(page); + } + + eina_list_free(list); +} + + + +/* return a page that has the item */ +HAPI Evas_Object *apps_scroller_has_item(Evas_Object *scroller, Evas_Object *item) +{ + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + Evas_Object *page = NULL; + + retv_if(!scroller, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, NULL); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + if (apps_page_has_item(page, item)) { + eina_list_free(list); + return page; + } + } + + eina_list_free(list); + return NULL; +} + + + +HAPI Evas_Object *apps_scroller_move_item_prev(Evas_Object *scroller, Evas_Object *from_item, Evas_Object *to_item, Evas_Object *append_item) +{ + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + Eina_List *l; + Evas_Object *page = NULL; + Evas_Object *tmp_page = NULL; + Evas_Object *tmp_next; + item_info_s *from_info = NULL; + item_info_s *to_info = NULL; + + retv_if(!scroller, NULL); + retv_if(!append_item, NULL); + retv_if(!from_item, NULL); + retv_if(!to_item, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, NULL); + + /* 1. Remove the nodes before from_info->page */ + from_info = evas_object_data_get(from_item, DATA_KEY_ITEM_INFO); + retv_if(!from_info, NULL); + + EINA_LIST_FOREACH(list, l, page) { + if (page != from_info->page) { + list = eina_list_remove_list(list, l); + } else break; + } + + /* 2. Remove the nodes after to_info->page */ + list = eina_list_reverse(list); + retv_if(!list, NULL); + + to_info = evas_object_data_get(to_item, DATA_KEY_ITEM_INFO); + retv_if(!to_info, NULL); + + EINA_LIST_FOREACH(list, l, page) { + if (page != to_info->page) { + list = eina_list_remove_list(list, l); + } else break; + } + + tmp_next = append_item; + /* 3. Move items */ + EINA_LIST_FOREACH(list, l, page) { + Evas_Object *tmp_from = NULL; + Evas_Object *tmp_to = NULL; + + continue_if(!page); + + if (apps_page_has_item(page, from_item)) tmp_from = from_item; + else tmp_from = NULL; + + if (apps_page_has_item(page, to_item)) tmp_to = to_item; + else tmp_to = NULL; + + tmp_next = apps_page_move_item_prev(page, tmp_from, tmp_to, tmp_next); + tmp_page = page; + } + if (tmp_next) apps_page_pack_item(tmp_page, tmp_next); + + eina_list_free(list); + + return APPS_ERROR_NONE; +} + + + +HAPI Evas_Object *apps_scroller_move_item_next(Evas_Object *scroller, Evas_Object *from_item, Evas_Object *to_item, Evas_Object *insert_item) +{ + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + Eina_List *l; + Evas_Object *page = NULL; + Evas_Object *tmp_page = NULL; + Evas_Object *tmp_next; + item_info_s *from_info = NULL; + item_info_s *to_info = NULL; + + retv_if(!scroller, NULL); + retv_if(!insert_item, NULL); + retv_if(!from_item, NULL); + retv_if(!to_item, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, NULL); + + from_info = evas_object_data_get(from_item, DATA_KEY_ITEM_INFO); + retv_if(!from_info, NULL); + + /* 1. Remove the nodes before from_info->page */ + from_info = evas_object_data_get(from_item, DATA_KEY_ITEM_INFO); + retv_if(!from_info, NULL); + + EINA_LIST_FOREACH(list, l, page) { + if (page != from_info->page) { + list = eina_list_remove_list(list, l); + } else break; + } + + /* 2. Remove the nodes after to_info->page */ + list = eina_list_reverse(list); + retv_if(!list, NULL); + + to_info = evas_object_data_get(to_item, DATA_KEY_ITEM_INFO); + retv_if(!to_info, NULL); + + EINA_LIST_FOREACH(list, l, page) { + if (page != to_info->page) { + list = eina_list_remove_list(list, l); + } else break; + } + + list = eina_list_reverse(list); + retv_if(!list, NULL); + + tmp_next = insert_item; + /* 3. Move items */ + EINA_LIST_FOREACH(list, l, page) { + Evas_Object *tmp_from = NULL; + Evas_Object *tmp_to = NULL; + + continue_if(!page); + + if (apps_page_has_item(page, from_item)) tmp_from = from_item; + else tmp_from = NULL; + + if (apps_page_has_item(page, to_item)) tmp_to = to_item; + else tmp_to = NULL; + + tmp_next = apps_page_move_item_next(page, tmp_from, tmp_to, tmp_next); + tmp_page = page; + } + if (tmp_next) apps_page_pack_item(tmp_page, tmp_next); + + eina_list_free(list); + + return APPS_ERROR_NONE; +} + + + +HAPI int apps_scroller_seek_item_position(Evas_Object *scroller, Evas_Object *item) +{ + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + Evas_Object *page = NULL; + int position = 0; + + retv_if(!scroller, -1); + retv_if(!item, -1); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, -1); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, -1); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + int idx; + continue_if(!page); + idx = apps_page_seek_item_position(page, item); + if (idx < 0) { + position += APPS_PER_PAGE; + } else if (idx >= 0 && idx < APPS_PER_PAGE) { + position += idx; + break; + } else { + _APPS_E("Is this a valid value? idx [%d]", idx); + } + } + + eina_list_free(list); + return position; +} + + + +HAPI void apps_scroller_bring_in_region_by_vector(Evas_Object *scroller, int vector) +{ + _APPS_D("Apps scroller bring in region by vector: %d", vector); + int position = 0; + int count = 0; + int max = 0; + + ELM_SCROLLER_REGION_GET(scroller, &position); + vector = vector * SCROLL_DISTANCE; + position += vector; + + count = apps_scroller_count_page(scroller); + max = (count - PAGE_IN_VIEW) * SCROLL_DISTANCE + SCROLL_PAD; + + if (position < 0) position = 1; + else if (position > max) position = max - 1; + + ELM_SCROLLER_REGION_BRING_IN(scroller, position); +} + + +static item_info_s *_find_item_from_list(Eina_List *list, const char *appid) +{ + Eina_List *l = NULL; + Eina_List *l_next = NULL; + item_info_s *item_info = NULL; + EINA_LIST_FOREACH_SAFE(list, l, l_next, item_info) { + if(!strcmp(item_info->appid, appid)) { + return item_info; + } + } + return NULL; +} + + +/* item_info_list must have all the items */ +HAPI apps_error_e apps_scroller_read_list(Evas_Object *scroller, Eina_List *item_info_list) +{ + scroller_info_s *scroller_info = NULL; + item_info_s *item_info, *cur_item_info; + Eina_List *cur_list = NULL; + Eina_List *cur_item_list = NULL; + + Evas_Object *page = NULL; + Evas_Object *cur_item = NULL; + + int i = 0; + + retv_if(!scroller, APPS_ERROR_INVALID_PARAMETER); + retv_if(!item_info_list, APPS_ERROR_INVALID_PARAMETER); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, APPS_ERROR_FAIL); + + cur_list = elm_box_children_get(scroller_info->box); + retv_if(!cur_list, APPS_ERROR_FAIL); + + /* Unpack all the items those don't match with item_info_list */ + EINA_LIST_FREE(cur_list, page) { + continue_if(!page); + + for (i = 0; i < APPS_PER_PAGE; i++) { + + cur_item = apps_page_get_item_at(page, i); + if (!cur_item) continue; + + cur_item_info = evas_object_data_get(cur_item, DATA_KEY_ITEM_INFO); + retv_if(!cur_item_info, APPS_ERROR_FAIL); + retv_if(!cur_item_info->appid, APPS_ERROR_FAIL); + + apps_scroller_remove_item(scroller, cur_item); + _APPS_D("remove item[%s]", cur_item_info->appid); + item_destroy(cur_item); + cur_item_list = eina_list_append(cur_item_list, cur_item_info); + } + apps_page_destroy(page); + } + + //Append apps in item_info_list + EINA_LIST_FREE(item_info_list, item_info) { + continue_if(!item_info); + _APPS_D("Pack an item[%s] into [%d]", item_info->appid, item_info->ordering); + + cur_item_info = _find_item_from_list(cur_item_list, item_info->appid); + if(cur_item_info) { + cur_item_list = eina_list_remove(cur_item_list, cur_item_info); + + item_info->item = item_create(scroller, cur_item_info); + } + else { + item_info->item = item_create(scroller, item_info); + } + + apps_scroller_append_item(scroller, item_info->item); + } + + //if cur_item_list is not NULL. append items + EINA_LIST_FREE(cur_item_list, cur_item_info) { + continue_if(!cur_item_info); + _APPS_D("Pack an item[%s] into [%d] tts [%d]", cur_item_info->appid, cur_item_info->ordering, cur_item_info->tts); + + cur_item_info->item = item_create(scroller, cur_item_info); + apps_scroller_append_item(scroller, cur_item_info->item); + } + + return APPS_ERROR_NONE; +} + + +HAPI void apps_scroller_write_list(Evas_Object *scroller) +{ + Evas_Object *page = NULL; + Evas_Object *item = NULL; + scroller_info_s *scroller_info = NULL; + item_info_s *item_info = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + + int i = 0; + int ordering = 0; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + + for (i = 0; i < APPS_PER_PAGE; i++) { + item = apps_page_get_item_at(page, i); + if (!item) continue; + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + continue_if(!item_info); + + item_info->ordering = ordering; + _APPS_SD("[%s]'s ordering : %d", item_info->appid, item_info->ordering); + ordering++; + } + } + + eina_list_free(list); +} + + + +HAPI Evas_Object *apps_scroller_get_item_by_pkgid(Evas_Object *scroller, const char *pkgid) +{ + Evas_Object *page = NULL; + Evas_Object *item = NULL; + scroller_info_s *scroller_info = NULL; + item_info_s *item_info = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + int i = 0; + + retv_if(!scroller, NULL); + retv_if(!pkgid, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, NULL); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + + for (i = 0; i < APPS_PER_PAGE; i++) { + item = apps_page_get_item_at(page, i); + if (!item) continue; + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + continue_if(!item_info); + continue_if(!item_info->pkgid); + + if (strcmp(item_info->pkgid, pkgid)) continue; + _APPS_SD("Get [%s]'s item object", item_info->pkgid); + return item; + } + } + + eina_list_free(list); + return NULL; +} + + + +HAPI Evas_Object *apps_scroller_get_item_by_appid(Evas_Object *scroller, const char *appid) +{ + Evas_Object *page = NULL; + Evas_Object *item = NULL; + scroller_info_s *scroller_info = NULL; + item_info_s *item_info = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + int i = 0; + + retv_if(!scroller, NULL); + retv_if(!appid, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, NULL); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + + for (i = 0; i < APPS_PER_PAGE; i++) { + item = apps_page_get_item_at(page, i); + if (!item) continue; + + item_info = evas_object_data_get(item, DATA_KEY_ITEM_INFO); + continue_if(!item_info); + continue_if(!item_info->appid); + + if (strcmp(item_info->appid, appid)) continue; + _APPS_SD("Get [%s]'s item object", item_info->appid); + return item; + } + } + + eina_list_free(list); + return NULL; +} + + + +HAPI void apps_scroller_edit(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + Evas_Object *page = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + elm_object_signal_emit(scroller_info->layout, "show,zoom", "scroller"); + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + apps_page_edit(page); + } + eina_list_free(list); +} + + + +HAPI void apps_scroller_unedit(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + Evas_Object *page = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + elm_object_signal_emit(scroller_info->layout, "reset,zoom", "scroller"); + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + apps_page_unedit(page); + } + eina_list_free(list); +} + + + +// End of this file diff --git a/home/src/apps/xml.c b/home/src/apps/xml.c new file mode 100755 index 0000000..d0ad75e --- /dev/null +++ b/home/src/apps/xml.c @@ -0,0 +1,323 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "apps/item_info.h" +#include "apps/xml.h" + +const char *APPS_XML_ENCODING = "utf-8"; +const char *ITEM_TYPE_IDLE_CLOCK_STR = "idle-clock"; +const char *ITEM_TYPE_FAVORITE_STR = "favorite"; +const char *ITEM_TYPE_APP_WIDGET_STR = "appwidget"; +const char *ITEM_TYPE_MORE_APPS_STR = "apps"; +const int APPS_WIDGET_PER_PAGE = 2; + +static void _get_position_by_order(int ordering, int *row, int *cell) +{ + ret_if(!row); + ret_if(!cell); + + *row = ordering / 2; + + switch(ordering % 2) { + case 0: + *cell = 0; + break; + case 1: + *cell = 1; + break; +/* + case 2: + *cell = 2; + break; + case 3: + *cell = 3; + break; +*/ + default: + _APPS_E("Failed to get cellx & celly"); + *cell = -1; + break; + } +} + + + +static xmlTextWriterPtr _init_writer(const char *xml_file) +{ + xmlTextWriterPtr writer; + int ret = 0; + + writer = xmlNewTextWriterFilename(xml_file, 0); + retv_if(!writer, NULL); + + ret = xmlTextWriterStartDocument(writer, NULL, APPS_XML_ENCODING, NULL); + if (ret < 0) { + _APPS_E("Failed to start xmlTextWriterStartDocument"); + xmlFreeTextWriter(writer); + return NULL; + } + + ret = xmlTextWriterStartElement(writer, BAD_CAST "data"); + if (ret < 0) { + _APPS_E("Failed to start xmlTextWriterStartElement"); + xmlFreeTextWriter(writer); + return NULL; + } + + return writer; +} + + + +static void _destroy_writer(xmlTextWriterPtr writer) +{ + int ret = 0; + + ret = xmlTextWriterEndElement(writer); + goto_if(ret < 0, END); + + ret = xmlTextWriterEndDocument(writer); + if (ret < 0) { + _APPS_E("Cannot end the document"); + } + +END: + xmlFreeTextWriter(writer); +} + + + +HAPI apps_error_e apps_xml_read_list(const char *xml_file, Eina_List *item_info_list) +{ + xmlTextWriterPtr writer; + Eina_List *l = NULL; + item_info_s *info = NULL; + int ret = 0; + int row = -1; + int cell = -1; + + retv_if(!xml_file, APPS_ERROR_INVALID_PARAMETER); + retv_if(!item_info_list, APPS_ERROR_INVALID_PARAMETER); + + writer = _init_writer(xml_file); + retv_if(!writer, APPS_ERROR_FAIL); + + EINA_LIST_FOREACH(item_info_list, l, info) { + continue_if(!info); + + _get_position_by_order(info->ordering, &row, &cell); + + ret = xmlTextWriterStartElement(writer, BAD_CAST ITEM_TYPE_MORE_APPS_STR); + goto_if(ret < 0, END); + + ret = xmlTextWriterWriteFormatElement(writer, BAD_CAST "packageName", "%s", info->pkgid); + goto_if(ret < 0, END); + + ret = xmlTextWriterWriteFormatElement(writer, BAD_CAST "className", "%s", info->appid); + goto_if(ret < 0, END); + + ret = xmlTextWriterWriteFormatElement(writer, BAD_CAST "screen", "%d", row); + goto_if(ret < 0, END); + + ret = xmlTextWriterWriteFormatElement(writer, BAD_CAST "cell", "%d", cell); + goto_if(ret < 0, END); + + ret = xmlTextWriterEndElement(writer); + goto_if(ret < 0, END); + } + +END: + _destroy_writer(writer); + + return APPS_ERROR_NONE; +} + + + +static xmlTextReaderPtr _init_reader(const char *xml_file) +{ + xmlTextReaderPtr reader = NULL; + + retv_if(!xml_file, NULL); + + reader = xmlReaderForFile(xml_file, NULL, 0); + retv_if(!reader, NULL); + + return reader; +} + + + +static void _destroy_reader(xmlTextReaderPtr reader) +{ + ret_if(!reader); + xmlFreeTextReader(reader); +} + + + +static inline void _destroy_list(Eina_List *list) +{ + item_info_s *info = NULL; + + if (!list) return; + + EINA_LIST_FREE(list, info) { + continue_if(!info); + apps_item_info_destroy(info); + } +} + + + +HAPI Eina_List *apps_xml_write_list(const char *xml_file) +{ + xmlTextReaderPtr reader = NULL; + Eina_List *list = NULL; + item_info_s *info = NULL; + const char *name, *value; + char *element = NULL; + int ret = -1; + + retv_if(!xml_file, NULL); + + reader = _init_reader(xml_file); + retv_if(!reader, NULL); + + while ((ret = xmlTextReaderRead(reader)) == 1) { + int dep = 0; + int node_type = 0; + static int cell = 0; + static int page_no = 0; + + dep = xmlTextReaderDepth(reader); + node_type = xmlTextReaderNodeType(reader); + continue_if(-1 == dep || -1 == node_type); + + name = (const char*) xmlTextReaderConstName(reader); + continue_if(!name); + + value = (const char*) xmlTextReaderConstValue(reader); + /* value can be NULL in case of 'category' */ + + // Category, element is 1 + if ((1 == dep) && (1 == node_type)) { + if (info) { + apps_item_info_destroy(info); + info = NULL; + } + + if (strcasecmp(ITEM_TYPE_MORE_APPS_STR, name)) { + _APPS_E("Type(%s) is wrong. But, go through with it.", name); + } + continue; + } + + // Element name + if ((2 == dep) && (1 == node_type)) { + if (element) { + _APPS_E("The element name is NOT NULL"); + free(element); + element = NULL; + } + + element = strdup(name); + goto_if(!element, CRITICAL_ERROR); + continue; + } + + // Element value, textfield is 3 + if ((3 == dep) && (3 == node_type)) { + continue_if(!element); + + if (!strcasecmp("packageName", element)) { + /* Do nothing */ + } else if (!strcasecmp("className", element)) { + info = apps_item_info_create(value); + if(!info) _E("info of [%s] is NULL", value); + } else if(!strcasecmp("screen", element)) { + page_no = atoi(value); + } else if(!strcasecmp("cell", element)) { + cell = atoi(value); + } + continue; + } + + // End of the Element + if ((2 == dep) && (15 == node_type)) { + if (!element) { + apps_item_info_destroy(info); + info = NULL; + continue; + } + + free(element); + element = NULL; + continue; + } + + // End of the category + if ((1 == dep) && (15 == node_type)) { // End of the category + if(info) { + info->ordering = page_no * APPS_WIDGET_PER_PAGE + cell; + list = eina_list_append(list, info); + _APPS_D("Append a package into the list : (%s:%s:%d) (%d:%d)" + , info->pkgid, info->appid, info->ordering + , page_no, cell); + } + + info = NULL; + page_no = 0; + cell = 0; + } + } + + if(element) { + _APPS_E("An element is not appended properly"); + free(element); + } + + if(info) { + _APPS_E("A node(%s:%s) is not appended into the list", info->pkgid, info->appid); + apps_item_info_destroy(info); + } + goto_if(ret, CRITICAL_ERROR); + + _destroy_reader(reader); + return list; + +CRITICAL_ERROR: + apps_item_info_destroy(info); + _destroy_list(list); + _destroy_reader(reader); + return NULL; +} + + + +// End of a file diff --git a/home/src/bg.c b/home/src/bg.c new file mode 100755 index 0000000..fe30bd0 --- /dev/null +++ b/home/src/bg.c @@ -0,0 +1,210 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "main.h" +#include "bg.h" +#include "dbus.h" + +#define VCONFKEY_WMS_BG_MODE "db/wms/home_bg_mode" +#define VCONFKEY_WMS_BG_PALETTE "db/wms/home_bg_palette" +#define VCONFKEY_WMS_BG_GALLERY "db/wms/home_bg_gallery" +#define BG_DEFAULT_ALPHA 127 + + + +typedef enum { + BG_TYPE_COLOR = 0, + BG_TYPE_IMAGE, + BG_TYPE_GALLERY, + BG_TYPE_MAX, +} bg_type_e; + + + +static bg_type_e _get_bg_type(void) +{ + /* 0 : Color, 1 : Image, 2 : Gallery */ + int val = -1; + + if(vconf_get_int(VCONFKEY_WMS_BG_MODE, &val) < 0) { + _E("Failed to get WMS_HOME_BG_MODE"); + return BG_TYPE_IMAGE; + } + + return val; +} + + + +HAPI void bg_set_rgb(Evas_Object *bg, const char *buf) +{ + int rgb; + int r; + int g; + int b; + + ret_if(!bg); + ret_if(!buf); + + rgb = strtoul(buf, NULL, 16); + + r = (rgb & 0x00FF0000) >> 16; + g = (rgb & 0x0000FF00) >> 8; + b = rgb & 0x000000FF; + + elm_bg_color_set(bg, r, g, b); + elm_bg_file_set(bg, NULL, NULL); +} + + + +#define DEFAULT_BG_PATH "/opt/share/settings/Wallpapers/Home_default.png" +static void _change_bg(keynode_t *node, void *data) +{ + bg_type_e bg_type = BG_TYPE_IMAGE; + Evas_Object *win = data; + Evas_Object *bg; + char *buf = NULL; + + if (node) { + _D("BG is changed by vconf"); + } + + bg = evas_object_data_get(win, DATA_KEY_BG); + if (!bg) { + _E("Cannot get bg"); + return; + } + + bg_type = _get_bg_type(); + switch (bg_type) { + case BG_TYPE_COLOR: + buf = vconf_get_str(VCONFKEY_WMS_BG_PALETTE); + break_if(!buf); + + bg_set_rgb(bg, buf); + break; + case BG_TYPE_IMAGE: + case BG_TYPE_GALLERY: + buf = vconf_get_str(VCONFKEY_BGSET); + buf = (buf == NULL) ? strdup(DEFAULT_BG_PATH) : buf; + break_if(!buf); + + if (elm_bg_file_set(bg, buf, NULL) == EINA_FALSE) { + _E("Failed to set BG file:%s", buf); + } else { + _D("BG is changed to %s", buf); + } + _W("file size:%lld", ecore_file_size(buf)); + break; + default: + _E("Cannot reach here"); + break; + } + _W("BG : [%d, %s]", bg_type, buf); + free(buf); + + home_dbus_lcd_on_signal_send(EINA_FALSE); +} + + + +static void _bg_down_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info) +{ + _D("BG is pressed"); +} + + + +static void _bg_up_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info) +{ + _D("BG is released"); +} + + + +HAPI Evas_Object *bg_create(Evas_Object *win) +{ + Evas_Object *bg = NULL; + +#if 0 + bg = app_get_preinitialized_background(); + if (!bg) bg = elm_bg_add(win); +#else + bg = elm_bg_add(win); +#endif + retv_if(!bg, NULL); + + elm_bg_option_set(bg, ELM_BG_OPTION_SCALE); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + evas_object_data_set(win, DATA_KEY_BG, bg); + evas_object_event_callback_add(bg, EVAS_CALLBACK_MOUSE_DOWN, _bg_down_cb, NULL); + evas_object_event_callback_add(bg, EVAS_CALLBACK_MOUSE_UP, _bg_up_cb, NULL); + + if (vconf_notify_key_changed(VCONFKEY_WMS_BG_MODE, _change_bg, win) < 0) { + _E("Failed to register the VCONFKEY_WMS_BG_MODE callback"); + } + + /* Changing the bg after setting DATA_KEY_BG */ + _change_bg(NULL, win); + + return bg; +} + + + +HAPI void bg_destroy(Evas_Object *win) +{ + Evas_Object *bg = NULL; + + if (vconf_ignore_key_changed(VCONFKEY_WMS_BG_MODE, _change_bg) < 0) { + _E("Failed to ignore the VCONFKEY_WMS_BG_MODE callback"); + } + + evas_object_event_callback_del(bg, EVAS_CALLBACK_MOUSE_DOWN, _bg_down_cb); + evas_object_event_callback_del(bg, EVAS_CALLBACK_MOUSE_UP, _bg_up_cb); + bg = evas_object_data_del(win, DATA_KEY_BG); + ret_if(!bg); + evas_object_del(bg); +} + + + +HAPI void bg_register_object(Evas_Object *obj) +{ + Evas_Object *bg; + + bg = elm_object_part_content_get(obj, "bg"); + if (bg) { + evas_object_color_set(bg, 0, 0, 0, 0); + } +} + + + +// End of a file diff --git a/home/src/clock_event.c b/home/src/clock_event.c new file mode 100755 index 0000000..d6f24e3 --- /dev/null +++ b/home/src/clock_event.c @@ -0,0 +1,522 @@ +/* + * Samsung API + * Copyright (c) 2013 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 + +#ifdef ENABLE_MODEM_INDICATOR +#include +#include +#include +#endif + +#include +#include + +#include "conf.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "layout.h" +#include "dbus.h" +#include "key.h" +#include "clock_service.h" +#include "power_mode.h" +#include "edit.h" + +typedef struct _pkg_event { + char *pkgname; + int is_done; +} Pkg_Event; + +#define PKGMGR_STR_START "start" +#define PKGMGR_STR_END "end" +#define PKGMGR_STR_OK "ok" +#define PKGMGR_STR_UNINSTALL "uninstall" +#define SAP_BT 0x01 + +#define VCONFKEY_SAP_CONNECTION_STATUS "memory/private/sap/conn_type" + +static struct { + pkgmgr_client *pkg_client; + Eina_List *pkg_event_list; + +#ifdef ENABLE_MODEM_INDICATOR + TapiHandle *tapi_handle; +#endif +} s_info = { + .pkg_client = NULL, + .pkg_event_list = NULL, + +#ifdef ENABLE_MODEM_INDICATOR + .tapi_handle = NULL, +#endif +}; + +static Evas_Object *_layout_get(void) +{ + Evas_Object *win = main_get_info()->win; + retv_if(win == NULL, NULL); + + return evas_object_data_get(win, DATA_KEY_LAYOUT); +} + +static void _pkg_event_item_del(Pkg_Event *item_event) +{ + if (item_event != NULL) { + free(item_event->pkgname); + } + + free(item_event); +} + +static int _is_pkg_event_item_exist(const char *pkgid, int remove_if_exist) +{ + int ret = 0; + Eina_List *l = NULL; + Pkg_Event *event_item = NULL; + retv_if(pkgid == NULL, 0); + + EINA_LIST_FOREACH(s_info.pkg_event_list, l, event_item) { + if (event_item != NULL) { + if (strcmp(event_item->pkgname, pkgid) == 0) { + ret = 1; + break; + } + } + } + + if (ret == 1 && remove_if_exist == 1) { + s_info.pkg_event_list = eina_list_remove(s_info.pkg_event_list, event_item); + _pkg_event_item_del(event_item); + } + + return ret; +} + +static int _pkgmgr_event_cb(int req_id, const char *pkg_type, const char *pkgid, + const char *key, const char *val, const void *pmsg, void *priv_data) +{ + if (pkgid == NULL) return 0; + + _D("pkg:%s key:%s val:%s", pkgid, key, val); + + if (key != NULL && val != NULL) { + if (strcasecmp(key, PKGMGR_STR_START) == 0 && + strcasecmp(val, PKGMGR_STR_UNINSTALL) == 0) { + _W("Pkg:%s is being uninstalled", pkgid); + + Pkg_Event *event = calloc(1, sizeof(Pkg_Event)); + if (event != NULL) { + event->pkgname = strdup(pkgid); + s_info.pkg_event_list = eina_list_append(s_info.pkg_event_list, event); + } else { + _E("failed to create event item"); + } + + return 0; + } else if (strcasecmp(key, PKGMGR_STR_END) == 0 && + strcasecmp(val, PKGMGR_STR_OK) == 0) { + if (_is_pkg_event_item_exist(pkgid, 1) == 1) { + _W("Pkg:%s is uninstalled, delete related resource", pkgid); + + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + if (clock != NULL && clock->pkgname != NULL) { + _W("attacheck clock:%s", clock->pkgname); + if (strcmp(clock->pkgname, pkgid) == 0) { + _W("clock %s is uninstalled, it will be replaced to default clock"); + clock_service_event_handler(clock, CLOCK_EVENT_APP_PROVIDER_ERROR_FATAL); + } + } + //badge_remove(pkgid); + } + } + } + + return 0; +} + +static void _home_editing_cb(void *data, Evas_Object *scroller, void *event_info) +{ + int editing_disabled = (int)data; + + if (editing_disabled == 1) { + clock_service_request(-1); + } +} + +static key_cb_ret_e _back_key_cb(void *data) +{ + _W(""); + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + retv_if(clock == NULL, KEY_CB_RET_CONTINUE); + + clock_view_event_handler(clock, CLOCK_EVENT_DEVICE_BACK_KEY, clock->need_event_relay); + + return KEY_CB_RET_CONTINUE; +} + +static void _display_state_cb(device_callback_e type, void *value, void *data) +{ + display_state_e val = -1; + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + static int state_prev = DISPLAY_STATE_SCREEN_OFF; + ret_if(clock == NULL); + + if(device_display_get_state(&val) < 0) { + _E("Failed to get DISPLAY_STATE"); + return; + } + + if (state_prev == DISPLAY_STATE_SCREEN_OFF + && val == DISPLAY_STATE_NORMAL) { + _D("LCD: off->on"); + clock_view_event_handler(clock, CLOCK_EVENT_DEVICE_LCD_ON, clock->need_event_relay); + } else if (val == DISPLAY_STATE_SCREEN_OFF) { + _D("LCD: on->off"); + clock_view_event_handler(clock, CLOCK_EVENT_DEVICE_LCD_OFF, clock->need_event_relay); + } + + state_prev = val; +} + +static int _display_state_get(void) +{ + display_state_e val = -1; + + if(device_display_get_state(&val) < 0) { + _E("Failed to get DISPLAY_STATE"); + return CLOCK_EVENT_DEVICE_LCD_OFF; + } + + if (val == DISPLAY_STATE_NORMAL || val == DISPLAY_STATE_SCREEN_DIM) { + return CLOCK_EVENT_DEVICE_LCD_ON; + } else { + return CLOCK_EVENT_DEVICE_LCD_OFF; + } +} + +static int _screen_reader_get(void) +{ + if (clock_util_screen_reader_enabled_get() == 1) { + return CLOCK_EVENT_SCREEN_READER_ON; + } else { + return CLOCK_EVENT_SCREEN_READER_OFF; + } +} + +static void _screen_reader_cb(keynode_t * node, void *data) +{ + int event = CLOCK_EVENT_SCREEN_READER_OFF; + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + ret_if(clock == NULL); + + event = _screen_reader_get(); + clock_view_event_handler(clock, event, clock->need_event_relay); +} + +static int _app_status_get(void) +{ + main_s *main_info = main_get_info(); + retv_if(main_info == NULL, CLOCK_EVENT_APP_PAUSE); + + if(main_info->state == APP_STATE_RESUME) { + return CLOCK_EVENT_APP_RESUME; + } else if (main_info->state == APP_STATE_PAUSE) { + return CLOCK_EVENT_APP_PAUSE; + } + + return CLOCK_EVENT_APP_PAUSE; +} + +#ifdef ENABLE_MODEM_INDICATOR +static int _bt_state_get(void) +{ + int val = -1; + + if(vconf_get_int(VCONFKEY_SAP_CONNECTION_STATUS, &val) < 0) { + _E("Failed to get VCONFKEY_SAP_CONNECTION_STATUS"); + return CLOCK_EVENT_DEVICE_LCD_OFF; + } + + if ((val & SAP_BT) == SAP_BT) { + return CLOCK_EVENT_SAP_ON; + } else { + return CLOCK_EVENT_SAP_OFF; + } +} + +static void _bt_state_cb(keynode_t * node, void *data) +{ + int event = CLOCK_EVENT_SAP_OFF; + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + ret_if(clock == NULL); + + event = _bt_state_get(); + clock_view_event_handler(clock, event, clock->need_event_relay); +} + +static int _modem_state_get(void) +{ + int ret = 0; + int current = 0; + retv_if(s_info.tapi_handle == NULL, CLOCK_EVENT_MODEM_OFF); + + if ((ret = tel_get_property_int(s_info.tapi_handle, TAPI_PROP_MODEM_POWER, ¤t)) != TAPI_API_SUCCESS) { + _E("Failed to get modem power property:%d", ret); + } + + /* + * (0=on,1=off,2=err) + */ + _D("current:%d", current); + + if (current == 0) { + return CLOCK_EVENT_MODEM_ON; + } else { + return CLOCK_EVENT_MODEM_OFF; + } +} + +static void _on_noti_modem_power(TapiHandle *handle, const char *noti_id, void *data, void *user_data) +{ + int *status = data; + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + ret_if(clock == NULL); + + _W("status:%x of event:%s receive", TAPI_NOTI_MODEM_POWER); + + if (status == 0) { + clock_view_event_handler(clock, CLOCK_EVENT_MODEM_ON, clock->need_event_relay); + } else { + clock_view_event_handler(clock, CLOCK_EVENT_MODEM_OFF, clock->need_event_relay); + } +} +#endif + +static int _event_app_dead_cb(int pid) +{ + clock_h clock = NULL; + + clock = clock_manager_clock_get(CLOCK_ATTACHED); + if (clock != NULL) { + if (clock->pid == pid) { + _E("clock %s is closed unexpectedly", clock->pkgname); + clock_service_event_handler(clock, CLOCK_EVENT_APP_PROVIDER_ERROR); + } + } + + return 0; +} + +static w_home_error_e _event_app_language_changed_cb(void *data) +{ + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + retv_if(clock == NULL, W_HOME_ERROR_FAIL); + + clock_view_event_handler(clock, CLOCK_EVENT_APP_LANGUAGE_CHANGED, clock->need_event_relay); + + return W_HOME_ERROR_NONE; +} + +static int _power_mode_state_get(void) +{ + if (emergency_mode_enabled_get() == 1) { + return CLOCK_EVENT_POWER_ENHANCED_MODE_ON; + } else { + return CLOCK_EVENT_POWER_ENHANCED_MODE_OFF; + } +} + +static void _enhanced_power_mode_on_cb(void *user_data, void *event_info) +{ + _D(""); + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + ret_if(clock == NULL); + + clock_view_event_handler(clock, CLOCK_EVENT_POWER_ENHANCED_MODE_ON, clock->need_event_relay); +} + +static void _enhanced_power_mode_off_cb(void *user_data, void *event_info) +{ + _D(""); + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + ret_if(clock == NULL); + + clock_view_event_handler(clock, CLOCK_EVENT_POWER_ENHANCED_MODE_OFF, clock->need_event_relay); +} + +static int _simcard_state_get(void) { + int ret = 0; + int sim_status = VCONFKEY_TELEPHONY_SIM_UNKNOWN; + + ret = vconf_get_int(VCONFKEY_TELEPHONY_SIM_SLOT, &sim_status); + if (ret == 0 && sim_status == VCONFKEY_TELEPHONY_SIM_INSERTED) { + return CLOCK_EVENT_SIM_INSERTED; + } else { + _E("Failed to get simcard status"); + } + + return CLOCK_EVENT_SIM_NOT_INSERTED; +} + +static void _simcard_state_cb(keynode_t * node, void *data) +{ + int event = CLOCK_EVENT_SIM_INSERTED; + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + ret_if(clock == NULL); + + event = _simcard_state_get(); + + clock_view_event_handler(clock, event, clock->need_event_relay); +} + +HAPI void clock_service_event_app_dead_cb(int pid) +{ + _event_app_dead_cb(pid); + clock_shortcut_app_dead_cb(pid); +} + +HAPI void clock_service_event_register(void) +{ + int ret = 0; + Evas_Object *layout = _layout_get(); + if (layout != NULL) { + evas_object_smart_callback_add(layout, LAYOUT_SMART_SIGNAL_EDIT_OFF, + _home_editing_cb, (void *)1); + } + + main_register_cb(APP_STATE_LANGUAGE_CHANGED, _event_app_language_changed_cb, NULL); + + key_register_cb(KEY_TYPE_BACK, _back_key_cb, NULL); + + power_mode_register_cb(POWER_MODE_ENHANCED_ON, _enhanced_power_mode_on_cb, NULL); + power_mode_register_cb(POWER_MODE_ENHANCED_OFF, _enhanced_power_mode_off_cb, NULL); + + if(device_add_callback(DEVICE_CALLBACK_DISPLAY_STATE, _display_state_cb, NULL) < 0) { + _E("Failed to add display state cb"); + } + if(vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, _screen_reader_cb, NULL) < 0) { + _E("Failed to register the screen reader status callback"); + } +#ifdef ENABLE_MODEM_INDICATOR + if(vconf_notify_key_changed(VCONFKEY_SAP_CONNECTION_STATUS, _bt_state_cb, NULL) < 0) { + _E("Failed to register sap status callback"); + } + TapiHandle *handle = tel_init(NULL); + if (handle != NULL) { + ret = tel_register_noti_event(handle, TAPI_NOTI_MODEM_POWER, _on_noti_modem_power, NULL); + if (ret != TAPI_API_SUCCESS) { + _E("event register failed(%d)", ret); + } + s_info.tapi_handle = handle; + } else { + _E("Failed to create tapi handle"); + } +#endif + pkgmgr_client *client = pkgmgr_client_new(PC_LISTENING); + if (client != NULL) { + if ((ret = pkgmgr_client_listen_status(client, _pkgmgr_event_cb, NULL)) != PKGMGR_R_OK) { + _E("Failed to listen pkgmgr event:%d", ret); + } + s_info.pkg_client = client; + } else { + _E("Failed to create package manager client"); + } + if(vconf_notify_key_changed(VCONFKEY_TELEPHONY_SIM_SLOT, _simcard_state_cb, NULL) < 0) { + _E("Failed to register simcard status callback"); + } +} + +HAPI void clock_service_event_deregister(void) +{ + Evas_Object *layout = _layout_get(); + if (layout != NULL) { + evas_object_smart_callback_del(layout, LAYOUT_SMART_SIGNAL_EDIT_OFF, + _home_editing_cb); + } + + main_unregister_cb(APP_STATE_LANGUAGE_CHANGED, _event_app_language_changed_cb); + + key_unregister_cb(KEY_TYPE_BACK, _back_key_cb); + + power_mode_unregister_cb(POWER_MODE_ENHANCED_ON, _enhanced_power_mode_on_cb); + power_mode_unregister_cb(POWER_MODE_ENHANCED_OFF, _enhanced_power_mode_off_cb); + + if(device_remove_callback(DEVICE_CALLBACK_DISPLAY_STATE, _display_state_cb) < 0) { + _E("Failed to remove display state cb"); + } + if(vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, _screen_reader_cb) < 0) { + _E("Failed to ignore the screen reader callback"); + } +#ifdef ENABLE_MODEM_INDICATOR + if(vconf_ignore_key_changed(VCONFKEY_SAP_CONNECTION_STATUS, _bt_state_cb) < 0) { + _E("Failed to ignore the sap status callback"); + } + if (s_info.tapi_handle != NULL) { + tel_deinit(s_info.tapi_handle); + s_info.tapi_handle = NULL; + } +#endif + if(vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SIM_SLOT, _simcard_state_cb) < 0) { + _E("Failed to ignore the simcard status callback"); + } + + int ret = 0; + Pkg_Event *event_item = NULL; + if (s_info.pkg_client != NULL) { + if ((ret = pkgmgr_client_free(s_info.pkg_client)) != PKGMGR_R_OK) { + _E("Failed to free pkgmgr client:%d", ret); + } + s_info.pkg_client = NULL; + } + EINA_LIST_FREE(s_info.pkg_event_list, event_item) { + _pkg_event_item_del(event_item); + } + s_info.pkg_event_list = NULL; +} + +HAPI int clock_service_event_state_get(int event_source) +{ + switch (event_source) { + case CLOCK_EVENT_SCREEN_READER: + return _screen_reader_get(); + case CLOCK_EVENT_APP: + return _app_status_get(); + case CLOCK_EVENT_DEVICE_LCD: + return _display_state_get(); +#ifdef ENABLE_MODEM_INDICATOR + case CLOCK_EVENT_MODEM: + return _modem_state_get(); + case CLOCK_EVENT_SAP: + return _bt_state_get(); +#endif + case CLOCK_EVENT_POWER: + return _power_mode_state_get(); + case CLOCK_EVENT_SIM: + return _simcard_state_get(); + } + + return event_source; +} diff --git a/home/src/clock_inf_minictrl.c b/home/src/clock_inf_minictrl.c new file mode 100755 index 0000000..95d96f3 --- /dev/null +++ b/home/src/clock_inf_minictrl.c @@ -0,0 +1,355 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "layout.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "page.h" +#include "key.h" +#include "minictrl.h" +#include "dbus.h" +#include "clock_service.h" + +static struct info { + Ecore_Timer *waiting_timer; +} s_info = { + .waiting_timer = NULL, +}; + +#define MINICTRL_PRIVATE_KEY_STATE "mc_pr_k_s" +#define MINICTRL_STATE_PAUSE 0xDEAD0040 +#define MINICTRL_STATE_RESUME 0xCAFE0080 + +static Evas_Object *_scroller_get(void) +{ + Evas_Object *win = main_get_info()->win; + Evas_Object *layout = NULL; + Evas_Object *scroller = NULL; + + if (win != NULL) { + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + if (layout != NULL) { + scroller = elm_object_part_content_get(layout, "scroller"); + } + } + + return scroller; +} + +static void _size_set(Evas_Object *minictrl_obj, int width, int height) +{ + evas_object_resize(minictrl_obj, width, height); + evas_object_size_hint_min_set(minictrl_obj, width, height); + evas_object_size_hint_max_set(minictrl_obj, width, height); +} + +static void _pause_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *minictrl = data; + ret_if(minictrl == NULL); + + int state = (int)evas_object_data_get(minictrl, MINICTRL_PRIVATE_KEY_STATE); + if (state == MINICTRL_STATE_PAUSE) { + return ; + } + + if (minicontrol_message_send(minictrl, MINICTRL_EVENT_APP_PAUSE) == 1) { + _D("minictrl %p is paused", minictrl); + evas_object_data_set(minictrl, MINICTRL_PRIVATE_KEY_STATE, (void*)MINICTRL_STATE_PAUSE); + } else { + _E("failed to pause %p", minictrl); + } +} + +static void _resume_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *minictrl = data; + ret_if(minictrl == NULL); + + int state = (int)evas_object_data_get(minictrl, MINICTRL_PRIVATE_KEY_STATE); + if (state == MINICTRL_STATE_RESUME) { + return ; + } + + if (minicontrol_message_send(minictrl, MINICTRL_EVENT_APP_RESUME) == 1) { + _D("minictrl %p is resumed", minictrl); + evas_object_data_set(minictrl, MINICTRL_PRIVATE_KEY_STATE, (void*)MINICTRL_STATE_RESUME); + } else { + _E("failed to resume %p", minictrl); + } +} + +static int _prepare(clock_h clock) +{ + int pid = 0; + + clock_util_provider_launch(clock->pkgname, &pid, clock->configure); + _W("pid:%d", pid); + + if (pid >= 0) { + clock->pid = pid; + return CLOCK_RET_OK; + } + + return CLOCK_RET_FAIL; +} + +static int _config(clock_h clock, int configure) +{ + int pid = 0; + + clock_util_provider_launch(clock->pkgname, &pid, configure); + if (pid >= 0) { + if (clock->pid != pid) { + _E("pid is changed, %d %d", clock->pid, pid); + } + clock->pid = pid; + return CLOCK_RET_OK; + } + + return CLOCK_RET_FAIL; +} + +static int _create(clock_h clock) +{ + Evas_Object *page = NULL; + Evas_Object *obj = NULL; + Evas_Object *scroller = _scroller_get(); + + if (clock->view) { + Evas_Object *mini_obj = clock_view_get_item(clock->view); + if (mini_obj) { + _size_set(mini_obj, clock->w, clock->h); + evas_object_show(mini_obj); + } + return CLOCK_RET_OK; + } + + obj = minicontrol_viewer_add(scroller, clock->view_id); + if (obj != NULL) { + _size_set(obj, clock->w, clock->h); + evas_object_show(obj); + + page = clock_view_add(scroller, obj); + if (page != NULL) { + clock->view = (void *)page; + + evas_object_smart_callback_add(page, CLOCK_SMART_SIGNAL_PAUSE, _pause_cb, obj); + evas_object_smart_callback_add(page, CLOCK_SMART_SIGNAL_RESUME, _resume_cb, obj); + + return CLOCK_RET_OK; + } + } else { + _E("Failed to add viewer - %s", clock->view_id); + } + + return CLOCK_RET_FAIL; +} + +static int _attached_cb(clock_h clock) +{ + Evas_Object *page = clock->view; + + int visibility = 1; + if (clock_service_event_state_get(CLOCK_EVENT_DEVICE_LCD) == CLOCK_EVENT_DEVICE_LCD_OFF) { + visibility = 0; + } + if (clock_service_event_state_get(CLOCK_EVENT_APP) == CLOCK_EVENT_APP_PAUSE) { + visibility = 0; + } + + if (visibility == 1) { + evas_object_smart_callback_call(page, CLOCK_SMART_SIGNAL_RESUME, page_get_item(page)); + } else { + if (clock->configure != CLOCK_CONF_CLOCK_CONFIGURATION) { + evas_object_smart_callback_call(page, CLOCK_SMART_SIGNAL_PAUSE, page_get_item(page)); + } + } + + return CLOCK_RET_OK; +} + +static int _destroy(clock_h clock) +{ + Evas_Object *page = clock->view; + + if (page != NULL) { + evas_object_smart_callback_del(page, CLOCK_SMART_SIGNAL_PAUSE, _pause_cb); + evas_object_smart_callback_del(page, CLOCK_SMART_SIGNAL_RESUME, _resume_cb); + page_destroy(page); + clock->view = NULL; + } + + clock_util_terminate_clock_by_pid(clock->pid); + + return CLOCK_RET_OK; +} + +clock_inf_s clock_inf_minictrl = { + .async = 1, + .use_dead_monitor = 1, + .prepare = _prepare, + .config = _config, + .create = _create, + .attached_cb = _attached_cb, + .destroy = _destroy, +}; + +static Eina_Bool _view_ready_idler_cb(void *data) +{ + _D(""); + + if (s_info.waiting_timer != NULL) { + s_info.waiting_timer = NULL; + } + + clock_h clock = data; + retv_if(clock == NULL, ECORE_CALLBACK_CANCEL); + + clock_service_event_handler(clock, CLOCK_EVENT_VIEW_READY); + + _D(""); + + return ECORE_CALLBACK_CANCEL; +} + +HAPI void clock_inf_minictrl_event_hooker(int action, int pid, const char *minictrl_id, int is_realized, int width, int height) +{ + clock_h clock = NULL; + ret_if(minictrl_id == NULL); + + switch (action) { + case MINICONTROL_ACTION_START: + clock = clock_manager_clock_get(CLOCK_CANDIDATE); + if (clock != NULL) { + if (clock->pid == pid) { + _D("candidate clock:%s is now ready", clock->pkgname); + + if (clock->view_id == NULL) { + clock->view_id = strdup(minictrl_id); + } + clock->w = width; + clock->h = height; + + //ecore_idler_add(_view_ready_idler_cb, clock); + if (s_info.waiting_timer != NULL) { + ecore_timer_del(s_info.waiting_timer); + s_info.waiting_timer = NULL; + } + if (is_realized == 1) { + _W("clock is already realized"); + clock_service_event_handler(clock, CLOCK_EVENT_VIEW_READY); + } else { + _W("not realized, waiting 1.0 sec"); + /* + * To load minicontrol ASAP + */ + if (clock->app_type != CLOCK_APP_TYPE_WEBAPP) { + _create(clock); + } + s_info.waiting_timer = ecore_timer_add(1.0f, _view_ready_idler_cb, clock); + } + } else { + _E("the clock isn't what we want:%d %s", pid, minictrl_id); + } + } else { + _E("[Exceptional, no candiate clock"); + } + break; + case MINICONTROL_ACTION_RESIZE: + clock = clock_manager_clock_get(CLOCK_ATTACHED); + if (clock != NULL) { + if (clock->view_id == NULL) { + /** + * THIS CASE MUST HAS NOT TO BE HAPPEND. + * But for the safety, I just handled this too. + */ + _E("Attached clock: has no view ID(%s)", clock->pkgname); + if (clock->pid == pid) { + _D("But, PID is matched: %d", clock->pid); + clock->view_id = strdup(minictrl_id); + if (!clock->view_id) { + _E("strdup: Fail to strdup - %d", errno); + } else { + clock->w = width; + clock->h = height; + + clock_service_event_handler(clock, CLOCK_EVENT_VIEW_RESIZED); + } + } + } else if (strcmp(clock->view_id, minictrl_id) == 0) { + _D("Attached clock: %s is updated", clock->pkgname); + + clock->w = width; + clock->h = height; + + clock_service_event_handler(clock, CLOCK_EVENT_VIEW_RESIZED); + } + } else { + _W("clock: %s isn't attached yet", minictrl_id); + } + clock = clock_manager_clock_get(CLOCK_CANDIDATE); + if (clock != NULL) { + if (clock->view_id == NULL) { + if (clock->pid == pid) { + _D("Clock has no view ID, but PID is matched: %d %s", clock->pid, clock->pkgname); + clock->view_id = strdup(minictrl_id); + if (!clock->view_id) { + _E("Fail to strdup(minictrl_id) - %d", errno); + } else { + clock->w = width; + clock->h = height; + } + } else { + _D("Candidate PID is not matched? %d", clock->pid); + } + } else if (strcmp(clock->view_id, minictrl_id) == 0) { + _D("candidate clock:%s is updated", clock->pkgname); + clock->w = width; + clock->h = height; + } + } + break; + case MINICONTROL_ACTION_STOP: + break; + case MINICONTROL_ACTION_REQUEST: + if (width == MINICONTROL_REQ_FREEZE_SCROLL_VIEWER) { + clock_service_event_handler(NULL, CLOCK_EVENT_SCROLLER_FREEZE_ON); + } else if (width == MINICONTROL_REQ_UNFREEZE_SCROLL_VIEWER) { + clock_service_event_handler(NULL, CLOCK_EVENT_SCROLLER_FREEZE_OFF); + } else { + _W("Not a case"); + } + break; + default: + break; + } +} diff --git a/home/src/clock_inf_widget.c b/home/src/clock_inf_widget.c new file mode 100644 index 0000000..c51652b --- /dev/null +++ b/home/src/clock_inf_widget.c @@ -0,0 +1,558 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#include +#include +#include + +#include "conf.h" +#include "layout.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "page.h" +#include "key.h" +#include "dbus.h" +#include "widget.h" +#include "clock_service.h" + +#define DEFAULT_INIT_REFRESH 5 +#define DEFAULT_INIT_TIMER 2.5f +#define TAG_FORCE "c.f" // Clock Force +#define TAG_REFRESH "c.r" // Clock Refresh +#define TAG_RETRY "c.t" // Clock reTry + +static struct info { + int initialized; /* Initialize the event callback */ + Eina_List *pkg_list; /* Deleted package list */ + Eina_List *create_list; + Eina_List *freeze_list; + Evas_Object *first_clock; +} s_info = { + .initialized = 0, + .pkg_list = NULL, + .create_list = NULL, + .freeze_list = NULL, + .first_clock = NULL, +}; + +static Evas_Object *_scroller_get(void) +{ + Evas_Object *win = main_get_info()->win; + Evas_Object *layout = NULL; + Evas_Object *scroller = NULL; + + if (win != NULL) { + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + if (layout != NULL) { + scroller = elm_object_part_content_get(layout, "scroller"); + } + } + + return scroller; +} + +static void pumping_clock(Evas_Object *obj) +{ + clock_h clock; + + clock = clock_manager_clock_get(CLOCK_CANDIDATE); + if (clock && clock->interface == CLOCK_INF_WIDGET && clock->state == CLOCK_STATE_WAITING) { + clock_service_event_handler(clock, CLOCK_EVENT_VIEW_READY); + } else { + /** + * Clock is created, but it is not my favor, + * Destroy it + */ + s_info.create_list = eina_list_remove(s_info.create_list, obj); + evas_object_del(obj); + } +} + +static Eina_Bool force_updated_cb(void *data) +{ + Evas_Object *obj = data; + + evas_object_data_del(obj, TAG_REFRESH); + evas_object_data_del(obj, TAG_FORCE); + + widget_set_update_callback(obj, NULL); + + pumping_clock(obj); + + return ECORE_CALLBACK_CANCEL; +} + +static int updated_cb(Evas_Object *obj) +{ + int refresh; + + refresh = (int)evas_object_data_get(obj, TAG_REFRESH); + refresh--; + + if (refresh <= 0) { + Ecore_Timer *force_timer; + + evas_object_data_del(obj, TAG_REFRESH); + force_timer = evas_object_data_del(obj, TAG_FORCE); + if (force_timer) { + ecore_timer_del(force_timer); + } + + pumping_clock(obj); + return ECORE_CALLBACK_CANCEL; + } + + evas_object_data_set(obj, TAG_REFRESH, (void *)refresh); + return ECORE_CALLBACK_RENEW; +} + +static int scroll_cb(Evas_Object *obj, int hold) +{ + _W("Scroll control: %s", hold ? "hold" : "release"); + + if (hold) { + clock_service_event_handler(NULL, CLOCK_EVENT_SCROLLER_FREEZE_ON); + } else { + clock_service_event_handler(NULL, CLOCK_EVENT_SCROLLER_FREEZE_OFF); + } + + return ECORE_CALLBACK_RENEW; +} + +static void user_create_cb(struct widget_evas_raw_event_info *info, void *data) +{ + Eina_List *l; + Eina_List *n; + Evas_Object *obj; + const char *widget_id; + + EINA_LIST_FOREACH_SAFE(s_info.create_list, l, n, obj) { + widget_id = widget_viewer_evas_get_widget_id(obj); + if (!widget_id) { + /* This is not possible */ + continue; + } + + if (strcmp(widget_id, info->pkgname)) { + continue; + } + + if (info->error != WIDGET_ERROR_NONE) { + /* Failed to create a new clock */ + /* TODO: Feeds fault event to clock service */ + _E("Failed to create a new clock: %s (%x)", info->pkgname, info->error); + s_info.create_list = eina_list_remove(s_info.create_list, obj); + evas_object_del(obj); + } else { + widget_viewer_evas_resume_widget(obj); + } + + break; + } +} + +static char *remove_from_pkglist(const char *pkgname) +{ + char *item; + Eina_List *l; + Eina_List *n; + + if (!pkgname) { + return NULL; + } + + item = NULL; + EINA_LIST_FOREACH_SAFE(s_info.pkg_list, l, n, item) { + if (item && !strcmp(item, pkgname)) { + s_info.pkg_list = eina_list_remove(s_info.pkg_list, item); + _D("Manually cleared from package list (%s)", item); + break; + } + item = NULL; + } + + return item; +} + +static void user_del_cb(struct widget_evas_raw_event_info *info, void *data) +{ + clock_h clock; + char *pkgname; + + clock = clock_manager_clock_get(CLOCK_CANDIDATE); + + if (info->error == WIDGET_ERROR_FAULT && !clock) { + const char *widget_id = NULL; + + if (info->widget) { + widget_id = widget_viewer_evas_get_widget_id(info->widget); + } + _D("Faulted: %s, Current: %s", info->pkgname, widget_id); + + clock = clock_manager_clock_get(CLOCK_ATTACHED); + if (clock) { + if (clock->view_id && widget_id && !strcmp(widget_id, clock->view_id)) { + int retry; + + retry = (int)evas_object_data_get(info->widget, TAG_RETRY); + retry--; + if (retry <= 0) { + // No more recovery count remained + clock_service_event_handler(clock, CLOCK_EVENT_APP_PROVIDER_ERROR_FATAL); + } else { + widget_viewer_evas_activate_faulted_widget(info->widget); + evas_object_data_set(info->widget, TAG_RETRY, (void *)retry); + _D("There is no waiting clock. Try to recover from fault (%d)", retry); + } + return; + } + + pkgname = remove_from_pkglist(info->pkgname); + if (!pkgname) { + _D("Unknown Box"); + } else { + free(pkgname); + } + } else { + _E("There is no attached clock"); + } + + return; + } + + _D("%s is deleted", info->pkgname); + pkgname = remove_from_pkglist(info->pkgname); + if (!pkgname) { + return; + } + + if (clock && clock->interface == CLOCK_INF_WIDGET && clock->state == CLOCK_STATE_WAITING) { + if (clock->view_id && !strcmp(pkgname, clock->view_id)) { + clock_service_event_handler(clock, CLOCK_EVENT_VIEW_READY); + } + } + + free(pkgname); +} + +static void del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + _D("Remove from freeze list"); + s_info.freeze_list = eina_list_remove(s_info.freeze_list, obj); +} + +static w_home_error_e home_resumed_cb(void *data) +{ + Evas_Object *obj; + + _D("Thaw all freezed objects"); + EINA_LIST_FREE(s_info.freeze_list, obj) { + evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL, del_cb); + widget_viewer_evas_thaw_visibility(obj); + } + + return W_HOME_ERROR_NONE; +} + +static int _prepare(clock_h clock) +{ + char *widget_id = widget_service_get_widget_id(clock->pkgname); + Eina_List *l; + char *pkgname; + int ret = CLOCK_RET_OK; + + retv_if(widget_id == NULL, CLOCK_RET_FAIL); + + clock->view_id = widget_id; + + if (!s_info.initialized) { + /* When could we delete these callbacks? */ + if (main_register_cb(APP_STATE_RESUME, home_resumed_cb, NULL) != W_HOME_ERROR_NONE) { + _E("Unable to register app state change callback"); + } + widget_viewer_evas_set_raw_event_callback(WIDGET_VIEWER_EVAS_RAW_DELETE, user_del_cb, NULL); + widget_viewer_evas_set_raw_event_callback(WIDGET_VIEWER_EVAS_RAW_CREATE, user_create_cb, NULL); + s_info.initialized = 1; + } + + /** + * If the previous one is already installed, + * Wait for destroying previous one first. + */ + EINA_LIST_FOREACH(s_info.pkg_list, l, pkgname) { + if (!strcmp(pkgname, clock->view_id)) { + ret = CLOCK_RET_ASYNC; + clock_h clock_attached = clock_manager_clock_get(CLOCK_ATTACHED); + if (clock_attached) { + if (clock_attached->interface == CLOCK_INF_WIDGET) { + _D("Need detroying previous one"); + ret |= CLOCK_RET_NEED_DESTROY_PREVIOUS; + } + } + _D("Async loading enabled"); + break; + } + } + + if (ret == CLOCK_RET_OK) { + clock_h clock_attached; + + /** + * Launch a clock process first to save the preparation time for 3D clock + */ + clock_attached = clock_manager_clock_get(CLOCK_ATTACHED); + if (clock_attached /* && clock_attached->interface == CLOCK_INF_WIDGET */) { + Evas_Object *scroller; + /** + * Try to create a new box first. + * If it is created, then replace it with the old clock. + * If we fails to create a new clock from here, + * Take normal path. + * + * @TODO + * Do I have to care the previously create clock here? is it possible? + */ + scroller = _scroller_get(); + if (scroller) { + Evas_Object *obj = NULL; + + if (s_info.first_clock) { + const char *first_widget_id; + first_widget_id = widget_viewer_evas_get_widget_id(s_info.first_clock); + if (!first_widget_id || strcmp(clock->view_id, first_widget_id)) { + _D("WIDGET ID is not matched: %s", first_widget_id); + evas_object_del(s_info.first_clock); + } else { + _D("Use the first clock"); + obj = s_info.first_clock; + } + s_info.first_clock = NULL; + } + + if (!obj) { + const char *content; + content = clock_util_setting_conf_content(clock->configure); + LOGD("Create Widget: %s\n", clock->view_id); + obj = widget_create(scroller, clock->view_id, content, WIDGET_VIEWER_EVAS_DEFAULT_PERIOD); + if (obj) { + Ecore_Timer *force_refresh_timer; + + if (content) { + widget_viewer_evas_freeze_visibility(obj, WIDGET_VISIBILITY_STATUS_SHOW_FIXED); + } + evas_object_data_set(obj, TAG_REFRESH, (void *)DEFAULT_INIT_REFRESH); + evas_object_data_set(obj, TAG_RETRY, (void *)clock_service_get_retry_count()); + + widget_set_update_callback(obj, updated_cb); + widget_set_scroll_callback(obj, scroll_cb); + + force_refresh_timer = ecore_timer_add(DEFAULT_INIT_TIMER, force_updated_cb, obj); + if (!force_refresh_timer) { + _E("Failed to create refresh timer\n"); + } + + evas_object_data_set(obj, TAG_FORCE, force_refresh_timer); + widget_viewer_evas_disable_preview(obj); + widget_viewer_evas_disable_loading(obj); + evas_object_resize(obj, main_get_info()->root_w, main_get_info()->root_h); + evas_object_size_hint_min_set(obj, main_get_info()->root_w, main_get_info()->root_h); + evas_object_show(obj); + } + } + + if (obj) { + /* Move this to out of screen */ + evas_object_move(obj, main_get_info()->root_w, main_get_info()->root_h); + + s_info.create_list = eina_list_append(s_info.create_list, obj); + ret = CLOCK_RET_ASYNC; + } + } + } + } + + _D("Prepared: %s", clock->view_id); + return ret; +} + +static int _create(clock_h clock) +{ + int ret = CLOCK_RET_FAIL; + Evas_Object *obj = NULL; + Evas_Object *scroller; + const char *widget_id; + Eina_List *l; + Eina_List *n; + + scroller = _scroller_get(); + if (!scroller) { + _E("Failed to get current scroller"); + return CLOCK_RET_FAIL; + } + + obj = NULL; + EINA_LIST_FOREACH_SAFE(s_info.create_list, l, n, obj) { + widget_id = widget_viewer_evas_get_widget_id(obj); + if (widget_id) { + if (!strcmp(widget_id, clock->view_id)) { + _D("Prepared clock found (%s)", widget_id); + s_info.create_list = eina_list_remove(s_info.create_list, obj); + break; + } + } + + obj = NULL; + } + + /** + * In this case, try to a new clock from here again. + * There is something problem, but we have to care this too. + */ + if (!obj) { + _D("Prepare stage is skipped"); + if (s_info.first_clock) { + const char *first_widget_id; + first_widget_id = widget_viewer_evas_get_widget_id(s_info.first_clock); + if (!first_widget_id || strcmp(clock->view_id, first_widget_id)) { + _D("LBID is not matched: %s", first_widget_id); + evas_object_del(s_info.first_clock); + } else { + _D("Use the first clock"); + obj = s_info.first_clock; + } + s_info.first_clock = NULL; + } + + if (!obj) { + const char *content; + content = clock_util_setting_conf_content(clock->configure); + obj = widget_create(scroller, clock->view_id, content, WIDGET_VIEWER_EVAS_DEFAULT_PERIOD); + if (obj) { + if (content) { + widget_viewer_evas_freeze_visibility(obj, WIDGET_VISIBILITY_STATUS_SHOW_FIXED); + } + evas_object_data_set(obj, TAG_RETRY, (void *)clock_service_get_retry_count()); + widget_set_scroll_callback(obj, scroll_cb); + widget_viewer_evas_disable_preview(obj); + widget_viewer_evas_disable_loading(obj); + evas_object_resize(obj, main_get_info()->root_w, main_get_info()->root_h); + evas_object_size_hint_min_set(obj, main_get_info()->root_w, main_get_info()->root_h); + evas_object_show(obj); + } + } + + if (obj) { + evas_object_move(obj, 0, 0); + } + } + + if (obj != NULL) { + Evas_Object *page; + + _D("Create clock: %s", clock->view_id); + page = clock_view_add(scroller, obj); + if (page != NULL) { + char *pkgname; + + clock->view = (void *)page; + ret = CLOCK_RET_OK; + + pkgname = strdup(clock->view_id); + if (pkgname) { + s_info.pkg_list = eina_list_append(s_info.pkg_list, pkgname); + } else { + _E("Fail to strdup(pkgname) - %d", errno); + } + + if (widget_viewer_evas_is_visibility_frozen(obj)) { + if (main_get_info()->state == APP_STATE_RESUME) { + _D("Thaw freezed object: %s", pkgname); + widget_viewer_evas_thaw_visibility(obj); + } else { + _D("Push freezed object: %s", pkgname); + evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, del_cb, NULL); + s_info.freeze_list = eina_list_append(s_info.freeze_list, obj); + } + } + } else { + evas_object_del(obj); + } + } else { + _E("Failed to add clock - %s", clock->view_id); + } + + return ret; +} + +static int _destroy(clock_h clock) +{ + Evas_Object *page; + Evas_Object *item; + + page = clock->view; + if (!page) { + _E("Clock doesn't have a view"); + return CLOCK_RET_FAIL; + } + + _D("Delete clock: %s", clock->view_id); + item = clock_view_get_item(page); + if (item) { + if (widget_viewer_evas_is_faulted(item)) { + char *pkgname; + + _D("Faulted box: Clean up pkg_list manually"); + pkgname = remove_from_pkglist(clock->view_id); + if (pkgname) { + _D("Faulted box(%s) is removed", pkgname); + free(pkgname); + } + } + } else { + _D("Item is not exists"); + } + + page_destroy(page); + + return CLOCK_RET_OK; +} + +clock_inf_s clock_inf_widget = { + .async = 0, + .use_dead_monitor = 0, + .prepare = _prepare, + .config = NULL, + .create = _create, + .destroy = _destroy, +}; + +/* End of a file */ diff --git a/home/src/clock_manager.c b/home/src/clock_manager.c new file mode 100755 index 0000000..0a0d922 --- /dev/null +++ b/home/src/clock_manager.c @@ -0,0 +1,303 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "layout.h" +#include "clock_service.h" +#include "power_mode.h" + +#define TIZEN_CLOCK_CATEGORY "http://tizen.org/category/wearable_clock" + +extern clock_inf_s clock_inf_minictrl; +extern clock_inf_s clock_inf_widget; + +static struct _s_info { + clock_h attached_clock; + clock_h candidate_clock; +} s_info = { + .attached_clock = NULL, + .candidate_clock = NULL, +}; + +static clock_inf_s *_get_clock_inf(int inf_type) +{ + if (inf_type == CLOCK_INF_WIDGET) { + return &clock_inf_widget; + } else if (inf_type == CLOCK_INF_MINICONTROL) { + return &clock_inf_minictrl; + } + + _E("Unknown clock interface\n"); + return NULL; +} + +static int _get_inf_type_by_pkgname(const char *pkgname) +{ + int ret = CLOCK_INF_MINICONTROL; + char *widget_id = NULL; + retv_if(pkgname == NULL, ret); + + widget_id = widget_service_get_widget_id(pkgname); + _D("Widget[%s] (%s)\n", widget_id, pkgname); + if (widget_id != NULL) { + char *category = NULL; + category = widget_service_get_category(widget_id); + + if (category != NULL) { + if (!strcmp(category, TIZEN_CLOCK_CATEGORY)) { + ret = CLOCK_INF_WIDGET; + } + free(category); + } + free(widget_id); + } else { + _E("MC Clock should be created\n"); + } + + return ret; +} + +HAPI clock_h clock_new(const char *pkgname) +{ + clock_h clock = NULL; + retv_if(pkgname == NULL, NULL); + + clock = (clock_h)calloc(1, sizeof(clock_s)); + if (clock != NULL) { + clock->appid = util_get_appid_by_pkgname(pkgname); + goto_if(clock->appid == NULL, ERR); + clock->pkgname = strdup(pkgname); + goto_if(clock->pkgname == NULL, ERR); + clock->app_type = util_get_app_type(clock->appid); + + int inf_type = _get_inf_type_by_pkgname(pkgname); + clock_inf_s *inf = _get_clock_inf(inf_type); + goto_if(inf == NULL, ERR); + + clock->use_dead_monitor = inf->use_dead_monitor; + clock->async = inf->async; + clock->state = CLOCK_STATE_IDLE; + clock->interface = inf_type; + clock->view = NULL; + } else { + _E("failed to allocate memory"); + goto ERR; + } + return clock; + +ERR: + if (clock) { + free(clock->appid); + free(clock->pkgname); + free(clock); + } + return NULL; +} + +HAPI void clock_del(clock_h clock) +{ + ret_if(clock == NULL); + + free(clock->view_id); + clock->view_id = NULL; + free(clock->appid); + clock->appid = NULL; + free(clock->pkgname); + clock->pkgname = NULL; + free(clock); +} + +HAPI int clock_manager_view_prepare(clock_h clock) +{ + int ret = CLOCK_RET_FAIL; + retv_if(clock == NULL, CLOCK_RET_FAIL); + clock_inf_s *inf = _get_clock_inf(clock->interface); + + if (inf != NULL && inf->prepare != NULL) { + ret = inf->prepare(clock); + } + + return ret; +} + +HAPI int clock_manager_view_configure(clock_h clock, int type) +{ + int ret = CLOCK_RET_FAIL; + retv_if(clock == NULL, CLOCK_RET_FAIL); + clock_inf_s *inf = _get_clock_inf(clock->interface); + + if (inf != NULL && inf->config != NULL) { + ret = inf->config(clock, type); + } + + return ret; +} + +HAPI int clock_manager_view_create(clock_h clock) +{ + int ret = CLOCK_RET_FAIL; + retv_if(clock == NULL, CLOCK_RET_FAIL); + clock_inf_s *inf = _get_clock_inf(clock->interface); + + if (inf != NULL && inf->create != NULL) { + ret = inf->create(clock); + } + + return ret; +} + +HAPI int clock_manager_view_attach(clock_h clock) +{ + int mode = 0; + int need_show_clock = 0; + int ret = CLOCK_RET_FAIL; + retv_if(clock == NULL, CLOCK_RET_FAIL); + clock_inf_s *inf = _get_clock_inf(clock->interface); + + mode = clock_service_mode_get(); + if (clock_manager_clock_get(CLOCK_ATTACHED) == NULL + || mode == CLOCK_SERVICE_MODE_EMERGENCY + || mode == CLOCK_SERVICE_MODE_COOLDOWN) { + /* + * Maybe this is first time which the function is called + */ + need_show_clock = 1; + } + + if (clock->view != NULL) { + ret = clock_view_attach(clock->view); + if (ret == CLOCK_RET_OK) { + if (need_show_clock == 1) { + clock_view_show(clock->view); + } + if (inf != NULL && inf->attached_cb != NULL) { + inf->attached_cb(clock); + } + } + } else { + _E("clock view of %s isn't created yet", clock->pkgname); + } + + return ret; +} + +HAPI int clock_manager_view_deattach(clock_h clock) +{ + int ret = CLOCK_RET_FAIL; + retv_if(clock == NULL, CLOCK_RET_FAIL); + + if (clock->view != NULL) { + ret = clock_view_deattach(clock->view); + } else { + _E("clock view of %s isn't created yet", clock->pkgname); + } + + return ret; +} + +HAPI int clock_manager_view_destroy(clock_h clock) +{ + int ret = CLOCK_RET_FAIL; + clock_inf_s *inf = _get_clock_inf(clock->interface); + + if (inf != NULL && inf->create != NULL) { + ret = inf->destroy(clock); + } + + return ret; +} + +HAPI int clock_manager_view_exchange(clock_h clock, void *view) +{ + int ret = CLOCK_RET_FAIL; + clock_inf_s *inf = _get_clock_inf(clock->interface); + retv_if(view == NULL, CLOCK_RET_FAIL); + + clock_view_attach(view); + + if (inf != NULL && inf->create != NULL) { + ret = inf->destroy(clock); + } + + clock->view = view; + clock->pkgname = NULL; + + return ret; +} + +HAPI void clock_manager_clock_set(int type, clock_h clock) +{ + if (type == CLOCK_ATTACHED) { + if (s_info.attached_clock != NULL && clock != NULL) { + _W("attached clock isn't cleaned-up, yet"); + } + + s_info.attached_clock = clock; + if (clock != NULL) { + _D("attached clock:%s(%d)", clock->pkgname, clock->pid); + } + } else if (type == CLOCK_CANDIDATE) { + if (s_info.candidate_clock != NULL && clock != NULL) { + _W("candidate clock isn't cleaned-up, yet"); + } + + s_info.candidate_clock = clock; + if (clock != NULL) { + _D("candidate clock:%s(%d)", clock->pkgname, clock->pid); + } + } +} + +HAPI clock_h clock_manager_clock_get(int type) +{ + if (type == CLOCK_ATTACHED) { + return s_info.attached_clock; + } else if (type == CLOCK_CANDIDATE) { + return s_info.candidate_clock; + } + + return NULL; +} + +HAPI int clock_manager_clock_inf_type_get(const char *pkgname) +{ + return _get_inf_type_by_pkgname(pkgname); +} + +HAPI int clock_manager_view_state_get(int view_type) +{ + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + if (clock != NULL) { + return clock_view_display_state_get(clock->view, view_type); + } + + return 0; +} diff --git a/home/src/clock_service.c b/home/src/clock_service.c new file mode 100755 index 0000000..9413d7c --- /dev/null +++ b/home/src/clock_service.c @@ -0,0 +1,817 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "layout.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "page.h" +#include "dbus.h" +#include "key.h" +#include "clock_service.h" +#include "power_mode.h" +#include "edit.h" + +#define ERROR_RETRY_COUNT 20 +#define ERROR_ACTION_NEED_TO_RETRY 1 +#define ERROR_ACTION_NEED_TO_CHANGE_PKGNAME_AND_RETRY 2 +#define ERROR_ACTION_NEED_TO_RESET_CLOCK_VCONF 3 +#define ERROR_ACTION_NEED_TO_KEEP_CURRENT_STATUS 4 + +#define CLOCK_SERVICE_STATE_NOT_INITIALIZED 0 +#define CLOCK_SERVICE_STATE_READY 1 +#define CLOCK_SERVICE_STATE_WAITING 2 + +#define CLOCK_VIEW_ACTIVATE_WAIT_TIME 0.30 +#define CLOCK_VIEW_CONF_RESET_TIME 0.3 +#define CLOCK_PUMP_WAIT_TIME 1.0 +#define CLOCK_VIEW_WAITING_TIME 5.0 + +static struct _s_info { + int mode; + int state; + int is_pump_ignored; + int is_scroller_screezed; + + int error_count; + int error_pid; + char *error_pkgname; + + Ecore_Timer *waiting_timer; + Ecore_Timer *pump_timer; + Ecore_Timer *activate_timer; + Ecore_Timer *conf_reset_timer; +} s_info = { + .mode = CLOCK_SERVICE_MODE_NORMAL, + .state = CLOCK_SERVICE_STATE_NOT_INITIALIZED, + .is_pump_ignored = 0, + .is_scroller_screezed = 0, + + .error_count = 0, + .error_pkgname = NULL, + + .waiting_timer = NULL, + .pump_timer = NULL, + .activate_timer = NULL, + .conf_reset_timer = NULL, +}; + +static void _clock_service_heartbeat_pump(void); + +static const char *_get_state_str(int state) +{ + if (state == CLOCK_SERVICE_STATE_NOT_INITIALIZED) { + return "state not initialized"; + } + if (state == CLOCK_SERVICE_STATE_READY) { + return "state ready"; + } + if (state == CLOCK_SERVICE_STATE_WAITING) { + return "state waiting"; + } + + return "invalid state"; +} + +static void _scroller_freeze(int is_freeze) +{ + Evas_Object *win = main_get_info()->win; + Evas_Object *layout = NULL; + Evas_Object *scroller = NULL; + ret_if(win == NULL); + + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + ret_if(layout == NULL); + scroller = elm_object_part_content_get(layout, "scroller"); + ret_if(scroller == NULL); + + if (is_freeze == 1) { + s_info.is_scroller_screezed = 1; + scroller_freeze(scroller); + scroller_region_show_by_push_type(scroller, SCROLLER_PUSH_TYPE_CENTER, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_ANIMATOR); + } else if (is_freeze == 0) { + s_info.is_scroller_screezed = 0; + scroller_unfreeze(scroller); + } else { + _E("not a case"); + } +} + +static Eina_Bool _conf_reset_timer_cb(void *data) +{ + s_info.conf_reset_timer = NULL; + + clock_util_setting_conf_set(CLOCK_CONF_NONE); + + return ECORE_CALLBACK_CANCEL; +} + +static Eina_Bool _setting_conf_apply_timer_cb(void *data) +{ + int configure = (int)data; + s_info.activate_timer = NULL; + + util_activate_home_window(); + if (configure == 2) { + clock_service_event_handler(NULL, CLOCK_EVENT_SCROLLER_FREEZE_ON); + } + + if (s_info.conf_reset_timer != NULL) { + ecore_timer_del(s_info.conf_reset_timer); + s_info.conf_reset_timer = NULL; + } + s_info.conf_reset_timer = ecore_timer_add(CLOCK_VIEW_CONF_RESET_TIME, + _conf_reset_timer_cb, NULL); + + return ECORE_CALLBACK_CANCEL; +} + +static void _setting_conf_apply(int configure) +{ + if (s_info.activate_timer != NULL) { + ecore_timer_del(s_info.activate_timer); + s_info.activate_timer = NULL; + } + + if (configure > 0) { + s_info.activate_timer = ecore_timer_add(CLOCK_VIEW_ACTIVATE_WAIT_TIME, + _setting_conf_apply_timer_cb, (void*)configure); + } +} + +static int _state_get(void) +{ + return s_info.state; +} + +static void _state_set(int state) +{ + _D("state %s --> %s ", _get_state_str(s_info.state), _get_state_str(state)); + s_info.state = state; +} + +static void _clock_destroy(clock_h clock) +{ + ret_if(clock == NULL); + + _D("destroying clock:%s", clock->pkgname); + //clock_manager_view_deattach(clock); + clock_manager_view_destroy(clock); + clock_del(clock); +} + +static int _clock_error_action_get(char *pkgname) +{ + retv_if(pkgname == NULL, ERROR_ACTION_NEED_TO_KEEP_CURRENT_STATUS); + + if (s_info.error_pkgname != NULL) { + if (strcmp(s_info.error_pkgname, pkgname) == 0) { + s_info.error_count++; + + _E("error count:%d", s_info.error_count); + if (s_info.error_count >= ERROR_RETRY_COUNT) { + return ERROR_ACTION_NEED_TO_RESET_CLOCK_VCONF; + } else { + return ERROR_ACTION_NEED_TO_RETRY; + } + } else { + return ERROR_ACTION_NEED_TO_CHANGE_PKGNAME_AND_RETRY; + } + } + + return ERROR_ACTION_NEED_TO_CHANGE_PKGNAME_AND_RETRY; +} + +static void _clock_error_pkgname_set(char *pkgname) +{ + char *pkgname_clone = NULL; + ret_if(pkgname == NULL); + + if (s_info.error_pkgname != NULL) { + free(s_info.error_pkgname); + s_info.error_pkgname = NULL; + } + + if (pkgname != NULL) { + pkgname_clone = strdup(pkgname); + if (pkgname_clone != NULL) { + s_info.error_pkgname = pkgname_clone; + } else { + _E("failed to strdup pkgname"); + } + } +} + +static void _clock_error_report(char *pkgname, int is_fatal_error) +{ + int treat = 0; + ret_if(pkgname == NULL); + + if (is_fatal_error == 0) { + treat = _clock_error_action_get(pkgname); + } else { + treat = ERROR_ACTION_NEED_TO_RESET_CLOCK_VCONF; + } + switch (treat) { + case ERROR_ACTION_NEED_TO_RETRY: + clock_service_request(CLOCK_SERVICE_MODE_NORMAL_RECOVERY); + break; + case ERROR_ACTION_NEED_TO_CHANGE_PKGNAME_AND_RETRY: + _clock_error_pkgname_set(pkgname); + s_info.error_count = 1; + clock_service_request(CLOCK_SERVICE_MODE_NORMAL_RECOVERY); + break; + case ERROR_ACTION_NEED_TO_RESET_CLOCK_VCONF: + clock_util_wms_configuration_set(CLOCK_APP_RECOVERY); + clock_service_request(CLOCK_SERVICE_MODE_RECOVERY); + s_info.error_count = 0; + break; + case ERROR_ACTION_NEED_TO_KEEP_CURRENT_STATUS: + _E(""); + break; + } + + _E("error:%s treat:%d", pkgname, treat); +} + +static Eina_Bool _pump_timer_cb(void *data) +{ + _W("restart clock service, pump it again"); + s_info.pump_timer = NULL; + + _state_set(CLOCK_SERVICE_STATE_READY); + _clock_service_heartbeat_pump(); + + return ECORE_CALLBACK_CANCEL; +} + +static Eina_Bool _waiting_timer_cb(void *data) +{ + _D("clock waiting timer is expired"); + s_info.waiting_timer = NULL; + + clock_h clock = clock_manager_clock_get(CLOCK_CANDIDATE); + retv_if(clock == NULL, ECORE_CALLBACK_CANCEL); + + if (clock->state == CLOCK_STATE_WAITING) { + _E("provider:%s didn't provide anything, we will ignore it", clock->pkgname); + + _setting_conf_apply(clock->configure); + + clock_manager_clock_set(CLOCK_CANDIDATE, NULL); + _clock_destroy(clock); + + if (s_info.pump_timer != NULL) { + ecore_timer_del(s_info.pump_timer); + s_info.pump_timer = NULL; + } + s_info.pump_timer = ecore_timer_add(CLOCK_PUMP_WAIT_TIME, _pump_timer_cb, NULL); + } + + return ECORE_CALLBACK_CANCEL; +} + +static void _del_waiting_timer(void) +{ + _E("clock waiting timer is deleted"); + if (s_info.waiting_timer != NULL) { + ecore_timer_del(s_info.waiting_timer); + s_info.waiting_timer = NULL; + } +} + +static void _set_waiting_timer(void) +{ + _E("clock waiting timer is started"); + if (s_info.waiting_timer != NULL) { + _del_waiting_timer(); + } + + //s_info.waiting_timer = ecore_timer_add(CLOCK_VIEW_WAITING_TIME, + // _waiting_timer_cb, NULL); +} + +static char *_clock_pkg_get(int mode) +{ + char *clock_pkgname = NULL; + + switch (mode) { + case CLOCK_SERVICE_MODE_NORMAL: + case CLOCK_SERVICE_MODE_NORMAL_RECOVERY: + clock_pkgname = clock_util_wms_configuration_get(); + break; + case CLOCK_SERVICE_MODE_EMERGENCY: + clock_pkgname = strdup(CLOCK_APP_EMERGENCY); + break; + case CLOCK_SERVICE_MODE_COOLDOWN: + clock_pkgname = strdup(CLOCK_APP_COOLDOWN); + break; + case CLOCK_SERVICE_MODE_RECOVERY: + clock_pkgname = strdup(CLOCK_APP_RECOVERY); + break; + } + + return clock_pkgname; +} + +static int _clock_provider_change(char *clock_pkgname, clock_h *clock_ret, int configure) +{ + clock_h clock = NULL; + clock_h prev_clock = NULL; + retv_if(clock_pkgname == NULL, CLOCK_RET_FAIL); + retv_if(clock_ret == NULL, CLOCK_RET_FAIL); + int ret; + + _E("clock will be changed to %s", clock_pkgname); + + clock = clock_new(clock_pkgname); + retv_if(clock == NULL, CLOCK_RET_FAIL); + + clock->configure = configure; + + ret = clock_manager_view_prepare(clock); + switch (ret & ~CLOCK_RET_NEED_DESTROY_PREVIOUS) { + case CLOCK_RET_ASYNC: + clock->async = 1; + if ((ret & CLOCK_RET_NEED_DESTROY_PREVIOUS) == CLOCK_RET_NEED_DESTROY_PREVIOUS) { + prev_clock = clock_manager_clock_get(CLOCK_ATTACHED); + if (prev_clock != NULL) { + Evas_Object *empty_view = clock_view_empty_add(); + if (empty_view != NULL) { + clock_manager_view_exchange(prev_clock, empty_view); + } + } + } + break; + case CLOCK_RET_OK: + break; + case CLOCK_RET_FAIL: + default: + goto ERR; + } + + if (clock->async == 1) { + *clock_ret = clock; + return CLOCK_RET_OK; + } + + if (clock_manager_view_create(clock) != CLOCK_RET_OK) { + _E("Failed to create view"); + goto ERR; + } + + prev_clock = clock_manager_clock_get(CLOCK_ATTACHED); + if (clock_manager_view_attach(clock) != CLOCK_RET_OK) { + _E("Failed to attach view"); + goto ERR; + } + + clock->state = CLOCK_STATE_RUNNING; + clock_manager_clock_set(CLOCK_ATTACHED, clock); + _setting_conf_apply(clock->configure); + + *clock_ret = clock; + + /* + * sequence is meaningful + */ + if (prev_clock != NULL) { + _D("destroying previous attached clock:%s", prev_clock->pkgname); + _clock_destroy(prev_clock); + } + + return CLOCK_RET_OK; + +ERR: + _E("Failed to change clock provider"); + + clock_del(clock); + + return CLOCK_RET_FAIL; +} + +static void _clock_service_heartbeat_pump(void) +{ + int ret = CLOCK_RET_OK; + clock_h clock = NULL; + clock_h prev_clock = NULL; + clock_h candidate_clock = NULL; + char *pkgname = _clock_pkg_get(s_info.mode); + + prev_clock = clock_manager_clock_get(CLOCK_ATTACHED); + candidate_clock = clock_manager_clock_get(CLOCK_CANDIDATE); + + if (!pkgname || (pkgname && !strlen(pkgname))) { + Evas_Object *empty_page = NULL; + int ret = 0; + + _D("debugging mode on"); + + empty_page = clock_view_empty_add(); + ret_if(!empty_page); + + if (prev_clock) { + ret = clock_manager_view_exchange(prev_clock, empty_page); + ret_if(CLOCK_RET_OK != ret); + } + + return ; + } + + int configure = 0; + int check_duplication = 1; + int ignore_state = 0; + int destroy_candidate = 0; + + switch (s_info.mode) { + case CLOCK_SERVICE_MODE_NORMAL: + check_duplication = 1; + ignore_state = 0; + destroy_candidate = 0; + configure = clock_util_setting_conf_get(); + clock_service_event_handler(NULL, CLOCK_EVENT_SCROLLER_FREEZE_OFF); + break; + case CLOCK_SERVICE_MODE_NORMAL_RECOVERY: + check_duplication = 0; + ignore_state = 1; + destroy_candidate = 1; + configure = clock_util_setting_conf_get(); + clock_service_event_handler(NULL, CLOCK_EVENT_SCROLLER_FREEZE_OFF); + break; + case CLOCK_SERVICE_MODE_EMERGENCY: + case CLOCK_SERVICE_MODE_COOLDOWN: + check_duplication = 1; + ignore_state = 1; + destroy_candidate = 1; + configure = 0; + _setting_conf_apply(configure); + if (s_info.mode == CLOCK_SERVICE_MODE_EMERGENCY) { + clock_service_event_handler(NULL, CLOCK_EVENT_SCROLLER_FREEZE_OFF); + } + break; + case CLOCK_SERVICE_MODE_RECOVERY: + check_duplication = 0; + ignore_state = 1; + destroy_candidate = 1; + configure = 0; + _setting_conf_apply(configure); + clock_service_event_handler(NULL, CLOCK_EVENT_SCROLLER_FREEZE_OFF); + break; + } + + /* + * this modes are oneshot mode + */ + if (s_info.mode == CLOCK_SERVICE_MODE_NORMAL_RECOVERY || s_info.mode == CLOCK_SERVICE_MODE_RECOVERY) { + s_info.mode = CLOCK_SERVICE_MODE_NORMAL; + } + + _W("clock service pump: %s %d %d %d %d", pkgname, check_duplication, ignore_state, destroy_candidate, configure); + + if (configure == CLOCK_CONF_CLOCK_CONFIGURATION) { + if (prev_clock != NULL && prev_clock->pkgname != NULL) { + if (strcmp(prev_clock->pkgname, pkgname) == 0) { + _E("%s is already attached to home, just configure it", pkgname); + if (clock_manager_view_configure(prev_clock, configure) != CLOCK_RET_OK) { + _E("Failed to configure %s", pkgname); + goto ERR; + } + _setting_conf_apply(configure); + return; + } + } + } + if (ignore_state == 0) { + if (_state_get() != CLOCK_SERVICE_STATE_READY) { + _E("not ready to create a new clock:%s", pkgname); + s_info.is_pump_ignored = 1; + return; + } + } else { + if (_state_get() != CLOCK_SERVICE_STATE_READY && + candidate_clock != NULL) { + if (candidate_clock->pkgname != NULL) { + if (strcmp(candidate_clock->pkgname, pkgname) == 0 && + s_info.waiting_timer != NULL) { + _W("we already requested a view to clock(%s)", pkgname); + return; + } + } + } + } + if (check_duplication == 1) { + if (prev_clock != NULL && prev_clock->pkgname != NULL) { + if (strcmp(prev_clock->pkgname, pkgname) == 0) { + _E("%s is already attached to home", pkgname); + _setting_conf_apply(configure); + return; + } + } + } + if (destroy_candidate == 1) { + if (candidate_clock != NULL) { + if (candidate_clock->pkgname != NULL) { + if (strcmp(candidate_clock->pkgname, pkgname) != 0) { + _W("destroying candicate clock:%s", candidate_clock->pkgname); + clock_manager_clock_set(CLOCK_CANDIDATE, NULL); + _clock_destroy(candidate_clock); + } + } + } + } + + _state_set(CLOCK_SERVICE_STATE_WAITING); + _del_waiting_timer(); + ret = _clock_provider_change(pkgname, &clock, configure); + if (ret == CLOCK_RET_FAIL) { + _E("Failed to create clock: %s", pkgname); + _state_set(CLOCK_SERVICE_STATE_READY); + goto ERR; + } + + if (clock->async == 1) { + clock->state = CLOCK_STATE_WAITING; + clock_manager_clock_set(CLOCK_CANDIDATE, clock); + + _del_waiting_timer(); + _set_waiting_timer(); + _D("%s will be created with async manner", pkgname); + } else { + _state_set(CLOCK_SERVICE_STATE_READY); + _D("%s will be created with sync manner", pkgname); + } + + return ; + +ERR: + if (clock == NULL) { + _E("Failed create clock of %s", pkgname); + _clock_error_report(pkgname, 0); + } + _setting_conf_apply(configure); +} + +static void _wms_clock_vconf_cb(keynode_t *node, void *data) +{ + if (util_feature_enabled_get(FEATURE_CLOCK_CHANGE) == 1) { + home_dbus_lcd_on_signal_send(EINA_FALSE); + _clock_service_heartbeat_pump(); + } else { + _E("Editing is in progress, delaying changing a clock"); + } +} + +HAPI void clock_service_init(void) +{ + int ret = 0; + + if((ret = vconf_notify_key_changed(VCONFKEY_WMS_CLOCKS_SET_IDLE, _wms_clock_vconf_cb, NULL)) < 0) { + _E("Failed to register the vconf callback(WMS_CLOCKS_SET_IDLE) : %d", ret); + } + + _state_set(CLOCK_SERVICE_STATE_READY); + + /* + * workaround, prevent to apply invalid mode + */ + if (s_info.mode == CLOCK_SERVICE_MODE_EMERGENCY) { + if (emergency_mode_enabled_get() == 0) { + s_info.mode = CLOCK_SERVICE_MODE_NORMAL; + } + } + if (s_info.mode == CLOCK_SERVICE_MODE_COOLDOWN) { + if (cooldown_mode_enabled_get() == 0) { + s_info.mode = CLOCK_SERVICE_MODE_NORMAL; + } + } + + _clock_service_heartbeat_pump(); + clock_shortcut_init(); +} + +HAPI void clock_service_fini(void) +{ + int ret = 0; + + if((ret = vconf_ignore_key_changed(VCONFKEY_WMS_CLOCKS_SET_IDLE, + _wms_clock_vconf_cb)) < 0) { + _E("Failed to ignore the vconf callback(WMS_CLOCKS_SET_IDLE) : %d", ret); + } + + _state_set(CLOCK_SERVICE_STATE_NOT_INITIALIZED); + clock_shortcut_fini(); +} + +HAPI char *clock_service_clock_pkgname_get(void) +{ + return _clock_pkg_get(s_info.mode); +} + +HAPI void clock_service_mode_set(int mode) +{ + if (mode == CLOCK_SERVICE_MODE_NORMAL_RECOVERY) { + if (s_info.mode == CLOCK_SERVICE_MODE_EMERGENCY || + s_info.mode == CLOCK_SERVICE_MODE_COOLDOWN) { + return ; + } + } + + s_info.mode = mode; +} + +HAPI int clock_service_mode_get(void) +{ + return s_info.mode; +} + +HAPI void clock_service_request(int mode) +{ + if (mode >= 0) { + clock_service_mode_set(mode); + } + + if (_state_get() != CLOCK_SERVICE_STATE_NOT_INITIALIZED) { + _clock_service_heartbeat_pump(); + } +} + +HAPI void clock_service_pause(void) +{ + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + ret_if(clock == NULL); + + clock_view_event_handler(clock, CLOCK_EVENT_APP_PAUSE, clock->need_event_relay); +} + +HAPI void clock_service_resume(void) +{ + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + ret_if(clock == NULL); + + clock_view_event_handler(clock, CLOCK_EVENT_APP_RESUME, clock->need_event_relay); +} + +HAPI void clock_service_event_handler(clock_h clock, int event) +{ + int need_pump = 0; + clock_h prev_clock = NULL; + clock_h candicate_clock = NULL; + + switch (event) { + case CLOCK_EVENT_VIEW_READY: + ret_if(clock == NULL); + candicate_clock = clock_manager_clock_get(CLOCK_CANDIDATE); + if (clock != candicate_clock) { + _E("clock %s isn't candidate clock", clock->pkgname); + return ; + } + + if (clock->state == CLOCK_STATE_WAITING) { + if (s_info.is_pump_ignored == 1) { + need_pump = 1; + s_info.is_pump_ignored = 0; + } + + _del_waiting_timer(); + clock_manager_clock_set(CLOCK_CANDIDATE, NULL); + + if (clock_manager_view_create(clock) != CLOCK_RET_OK) { + _E("failed to create view"); + clock_del(clock); + _state_set(CLOCK_SERVICE_STATE_READY); + if (need_pump == 1) { + _clock_service_heartbeat_pump(); + } + return ; + } + + prev_clock = clock_manager_clock_get(CLOCK_ATTACHED); + + if (clock_manager_view_attach(clock) != CLOCK_RET_OK) { + _E("Failed to attach view"); + clock_manager_view_destroy(clock); + clock_del(clock); + _state_set(CLOCK_SERVICE_STATE_READY); + if (need_pump == 1) { + _clock_service_heartbeat_pump(); + } + return ; + } + + clock->state = CLOCK_STATE_RUNNING; + + clock_manager_clock_set(CLOCK_ATTACHED, clock); + clock_manager_clock_set(CLOCK_CANDIDATE, NULL); + _setting_conf_apply(clock->configure); + + /* + * sequence is meaningful + */ + if (prev_clock != NULL) { + _clock_destroy(prev_clock); + } + + _state_set(CLOCK_SERVICE_STATE_READY); + if (need_pump == 1) { + _clock_service_heartbeat_pump(); + } + } else { + _E("Not a async clock: %s ", clock->appid); + } + break; + case CLOCK_EVENT_VIEW_RESIZED: + ret_if(clock == NULL); + + if (clock->view != NULL) { + clock_view_event_handler(clock, CLOCK_EVENT_VIEW_RESIZED, 0); + } + break; + case CLOCK_EVENT_SCROLLER_FREEZE_ON: + _W("scroller freeze on"); + _scroller_freeze(1); + break; + case CLOCK_EVENT_SCROLLER_FREEZE_OFF: + _W("scroller freeze off"); + _scroller_freeze(0); + break; + case CLOCK_EVENT_APP_PROVIDER_ERROR: + ret_if(clock == NULL); + _scroller_freeze(0); + + _clock_error_report(clock->pkgname, 0); + break; + case CLOCK_EVENT_APP_PROVIDER_ERROR_FATAL: + ret_if(clock == NULL); + _scroller_freeze(0); + + _clock_error_report(clock->pkgname, 1); + break; + } +} + +#define CLOCK_SELECTOR_PKGNAME "org.tizen.clocksetting.clock" +HAPI int clock_service_clock_selector_launch(void) +{ + int pid = 0; + bundle *b = bundle_create(); + if (b != NULL) { + bundle_add(b, "__APP_SVC_OP_TYPE__", APP_CONTROL_OPERATION_MAIN); + bundle_add(b, "launch_type", "home"); + + home_dbus_cpu_booster_signal_send(); + pid = aul_launch_app(CLOCK_SELECTOR_PKGNAME, b); + _D("aul_launch_app: %s(%d)", CLOCK_SELECTOR_PKGNAME, pid); + + if (pid < 0) { + _E("Failed to launch %s(%d)", CLOCK_SELECTOR_PKGNAME, pid); + } + bundle_free(b); + } + + return pid; +} + +HAPI void clock_service_scroller_freezed_set(int is_freeze) +{ + _W("clock freeze set:%d", is_freeze); + + _scroller_freeze(is_freeze); +} + +HAPI int clock_service_scroller_freezed_get(void) +{ + return s_info.is_scroller_screezed; +} + +HAPI const int const clock_service_get_retry_count(void) +{ + return ERROR_RETRY_COUNT; +} + diff --git a/home/src/clock_shortcut.c b/home/src/clock_shortcut.c new file mode 100755 index 0000000..60d0805 --- /dev/null +++ b/home/src/clock_shortcut.c @@ -0,0 +1,591 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#include + +#include "conf.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "effect.h" +#include "clock_service.h" +#include "page_info.h" +#include "page.h" + +#define MUSIC_PLAYER_APPID "org.tizen.w-music-player" +#define MUSIC_PLAYER_VCONF_STATE "memory/private/org.tizen.w-music-player/player_state" +#define CLOCK_SHORTCUT_EDJ_FILE EDJEDIR"/clock_shortcut.edj" +#define CLOCK_SHORTCUT_DATA_KEY_APPID "c_s_d_i" +#define CLOCK_SHORTCUT_MESSAGE_PORT_ID "Home.Clock.Shortcut.Music" +#define CLOCK_SHORTCUT_MESSAGE_KEY_STATE "state" +#define CLOCK_SHORTCUT_MESSAGE_KEY_ICON "icon" +#define CLOCK_SHORTCUT_MESSAGE_STATE_SHOW "show" +#define CLOCK_SHORTCUT_MESSAGE_STATE_HIDE "hide" + +typedef struct { + int type; + char *appid; + char *icon; +} shortcut_info_s; + +static struct { + int local_port_id; + Eina_List *list; +} s_info = { + .local_port_id = -1, + .list = NULL, +}; + +static Evas_Object *_attached_clock_view_get(void) +{ + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + retv_if(clock == NULL, NULL); + + return clock->view; +} + +static Evas_Object *_shortcut_layout_get(Evas_Object *page_a) { + Evas_Object *page = (page_a == NULL) ? _attached_clock_view_get() : page_a; + retv_if(page == NULL, NULL); + + Evas_Object *item = page_get_item(page); + if (item != NULL) { + return elm_object_part_content_get(item, "shortcut"); + } + + return NULL; +} + +static void _info_free(shortcut_info_s *info) +{ + ret_if(info == NULL); + + free(info->appid); + free(info->icon); +} + +static shortcut_info_s *_list_lastest_info_get(void) +{ + retv_if(s_info.list == NULL, NULL); + + return eina_list_nth(s_info.list, 0); +} + +static shortcut_info_s * _list_info_get(const char *appid) +{ + Eina_List *l = NULL; + shortcut_info_s *info = NULL; + retv_if(appid == NULL, NULL); + + EINA_LIST_FOREACH(s_info.list, l, info) { + if (info != NULL) { + if (info->appid != NULL) { + if (strcmp(info->appid, appid) == 0) { + return info; + } + } + } + } + + return NULL; +} + +static void _list_info_add(shortcut_info_s *info) +{ + s_info.list = eina_list_prepend(s_info.list, info); +} + +static void _list_info_del(shortcut_info_s *info) +{ + s_info.list = eina_list_remove(s_info.list, info); + _info_free(info); +} + +static void _list_clean(void) +{ + shortcut_info_s *info = NULL; + + EINA_LIST_FREE(s_info.list, info) { + if (info != NULL) { + _info_free(info); + } + } +} + +static char *_get_app_name(const char *appid) +{ + pkgmgrinfo_appinfo_h appinfo_h = NULL; + char *tmp = NULL; + char *name = NULL; + + retv_if(0 > pkgmgrinfo_appinfo_get_appinfo(appid, &appinfo_h), NULL); + goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_label(appinfo_h, &tmp), ERROR); + + if (tmp) { + name = strdup(tmp); + goto_if(NULL == name, ERROR); + } + + pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h); + return name; + +ERROR: + pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h); + return NULL; +} + +/*! + * preload music player state + */ +static int _mp_state_get(void) +{ + int val = -1; + + if(vconf_get_int(MUSIC_PLAYER_VCONF_STATE, &val) < 0) { + _E("Failed to get MUSIC_PLAYER_VCONF_STATE"); + return 0; + } + retv_if(val != 1, 0); + + retv_if(aul_app_is_running(MUSIC_PLAYER_APPID) <= 0, 0); + + return 1; +} + +/*! + * shortcut icon + */ +static char *_shortcut_icon_owner_get(Evas_Object *shortcut_layout) +{ + char *owner_appid = NULL; + Evas_Object *icon = NULL; + retv_if(shortcut_layout == NULL, NULL); + + icon = elm_object_part_content_get(shortcut_layout, "shortcut,icon"); + retv_if(icon == NULL, NULL); + + owner_appid = (char *)evas_object_data_get(icon, CLOCK_SHORTCUT_DATA_KEY_APPID); + + return owner_appid; +} + +static int _shortcut_icon_is_owner_same(Evas_Object *shortcut_layout, const char *appid) +{ + Evas_Object *icon = NULL; + retv_if(shortcut_layout == NULL, 0); + retv_if(appid == NULL, 0); + + icon = elm_object_part_content_get(shortcut_layout, "shortcut,icon"); + retv_if(icon == NULL, 0); + + char *owner_appid = (char *)evas_object_data_get(icon, CLOCK_SHORTCUT_DATA_KEY_APPID); + if (owner_appid != NULL) { + if (strcmp(owner_appid, appid) == 0) { + return 1; + } + } + + return 0; +} + +static void _shortcut_icon_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + char *owner_appid = (char *)evas_object_data_del(obj, CLOCK_SHORTCUT_DATA_KEY_APPID); + free(owner_appid); +} + +static Evas_Object *_shortcut_icon_create(Evas_Object *parent, const char *file_a) +{ + _D(""); + const char *file = NULL;; + Evas_Object *icon = NULL; + + if (file_a != NULL) { + if (access(file_a, R_OK) != 0) { + _E("Failed to access an icon(%s)", file_a); + } else { + file = file_a; + } + } + + if (file == NULL) { + icon = elm_layout_add(parent); + retv_if(icon == NULL, NULL); + + if (elm_layout_file_set(icon, CLOCK_SHORTCUT_EDJ_FILE, "shortcut_default_icon") != EINA_TRUE) { + _E("failed to set default icon file"); + } + evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(icon); + } else { + icon = elm_image_add(parent); + retv_if(icon == NULL, NULL); + + elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE); + if (elm_image_file_set(icon, file, NULL) == EINA_FALSE) { + _E("Failed to set image file:%s", file); + } + evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(icon); + } + + return icon; +} + +/*! + * shortcut layout + */ +static void _shortcut_layout_icon_set(Evas_Object *shortcut_layout, Evas_Object *icon) +{ + Evas_Object *tmp = NULL; + ret_if(shortcut_layout == NULL); + ret_if(icon == NULL); + + tmp = elm_object_part_content_unset(shortcut_layout, "shortcut,icon"); + if (tmp != NULL) { + evas_object_del(tmp); + } + + elm_object_part_content_set(shortcut_layout, "shortcut,icon", icon); +} + +#define MUSIC_STATUS_PLAY "play" +#define MUSIC_STATUS_STOP "stop" +static void _shortcut_layout_vconf_set(int is_visible) +{ + char *appid = NULL; + char value[BUFSZE] = { 0, }; + + Evas_Object *shortcut_layout = _shortcut_layout_get(NULL); + ret_if(shortcut_layout == NULL); + + if ((appid = _shortcut_icon_owner_get(shortcut_layout)) == NULL) { + _E("Failed to get appid"); + } + + if (is_visible) { + snprintf(value, sizeof(value), "%s;%s", appid, MUSIC_STATUS_PLAY); + } else { + snprintf(value, sizeof(value), "%s;%s", appid, MUSIC_STATUS_STOP); + } + + if (preference_set_string(VCONFKEY_MUSIC_STATUS, value) != 0) { + _E("Failed to set the vconfkey, %s", value); + } +} + +static void _shortcut_layout_visible_set(Evas_Object *shortcut_layout, int is_visible) +{ + if (is_visible == 1) { + elm_object_signal_emit(shortcut_layout, "icon,show", "prog"); + _D("clock shortcut become visible"); + } else { + elm_object_signal_emit(shortcut_layout, "icon,hide", "prog"); + _D("clock shortcut become invisible"); + } +} + +static void _shortcut_layout_clicked_cb(void *cbdata, Evas_Object *obj, void *event_info) +{ + int pid = 0; + int app_type = APP_TYPE_NATIVE; + bundle *b = NULL; + Evas_Object *shortcut_layout = cbdata; + ret_if(shortcut_layout == NULL); + + Evas_Object *icon = elm_object_part_content_get(shortcut_layout, "shortcut,icon"); + ret_if(icon == NULL); + + char *owner_appid = (char *)evas_object_data_get(icon, CLOCK_SHORTCUT_DATA_KEY_APPID); + ret_if(owner_appid == NULL); + + app_type = util_get_app_type(owner_appid); + + if (app_type == APP_TYPE_NATIVE) { + b = bundle_create(); + if (b != NULL) { + bundle_add(b, "__APP_SVC_OP_TYPE__", APP_CONTROL_OPERATION_MAIN); + + pid = aul_launch_app(owner_appid, b); + _D("aul_launch_app: %s(%d)", owner_appid, pid); + + bundle_free(b); + } + } else if (app_type == APP_TYPE_WEB) { + pid = aul_open_app(owner_appid); + } + + if (pid < 0) { + _E("Failed to launch %s(%d)", owner_appid, pid); + } + + effect_play_sound(); +} + +static char *_access_info_cb(void *data, Evas_Object *obj) +{ + Evas_Object *shortcut_layout = data; + retv_if(shortcut_layout == NULL, NULL); + + Evas_Object *icon = elm_object_part_content_get(shortcut_layout, "shortcut,icon"); + retv_if(icon == NULL, NULL); + + char *owner_appid = (char *)evas_object_data_get(icon, CLOCK_SHORTCUT_DATA_KEY_APPID); + retv_if(owner_appid == NULL, NULL); + + char *name = _get_app_name(owner_appid); + if (name == NULL) { + return strdup(owner_appid); + } + + return name; +} + +static void _shortcut_layout_create(Evas_Object *clock_layout) +{ + _D(""); + Evas_Object *shortcut_layout = NULL; + ret_if(clock_layout == NULL); + + shortcut_layout = elm_layout_add(clock_layout); + ret_if(shortcut_layout == NULL); + + if (elm_layout_file_set(shortcut_layout, CLOCK_SHORTCUT_EDJ_FILE, "shortcut") == EINA_TRUE) { + evas_object_size_hint_weight_set(clock_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_part_content_set(clock_layout, "shortcut", shortcut_layout); + + Evas_Object *focus = elm_button_add(shortcut_layout); + if (focus != NULL) { + elm_object_style_set(focus, "focus"); + elm_access_info_cb_set(focus, ELM_ACCESS_INFO, _access_info_cb, shortcut_layout); + evas_object_smart_callback_add(focus, "clicked", + _shortcut_layout_clicked_cb, shortcut_layout); + elm_object_part_content_set(shortcut_layout, "focus", focus); + } + evas_object_show(clock_layout); + } else { + _E("Failed to add shortcut layout"); + } +} + +static void _shortcut_layout_destroy(Evas_Object *clock_layout) +{ + ret_if(clock_layout == NULL); + + Evas_Object *obj = elm_object_part_content_unset(clock_layout, "shortcut"); + ret_if(obj == NULL); + + evas_object_del(obj); +} + +static Evas_Object *_shortcut_add(Evas_Object *page, shortcut_info_s *info) +{ + retv_if(info == NULL, NULL); + retv_if(info->appid == NULL, NULL); + Evas_Object *shortcut_layout = _shortcut_layout_get(page); + retv_if(shortcut_layout == NULL, NULL); + + Evas_Object *icon = _shortcut_icon_create(shortcut_layout, info->icon); + if (icon != NULL) { + evas_object_data_set(icon, CLOCK_SHORTCUT_DATA_KEY_APPID, strdup(info->appid)); + evas_object_event_callback_add(icon, EVAS_CALLBACK_DEL, + _shortcut_icon_del_cb, shortcut_layout); + _shortcut_layout_icon_set(shortcut_layout, icon); + _shortcut_layout_vconf_set(1); + _shortcut_layout_visible_set(shortcut_layout, 1); + + return icon; + } + + return NULL; +} + +static void _clock_shortcut_message_received_cb(int local_port_id, const char *remote_app_id, const char *remote_port, bool trusted_port, bundle* msg, void *user_data) +{ + const char *state = NULL; + const char *icon_path = NULL; + ret_if(remote_app_id == NULL); + ret_if(msg == NULL); + Evas_Object *shortcut_layout = _shortcut_layout_get(NULL); + ret_if(shortcut_layout == NULL); + + state = bundle_get_val(msg, CLOCK_SHORTCUT_MESSAGE_KEY_STATE); + ret_if(state == NULL); + icon_path = bundle_get_val(msg, CLOCK_SHORTCUT_MESSAGE_KEY_ICON); + + _W("%s %s %s", remote_app_id, state, icon_path); + + shortcut_info_s *info = NULL; + + if (strcmp(state, CLOCK_SHORTCUT_MESSAGE_STATE_SHOW) == 0) { + info = (shortcut_info_s *)calloc(1, sizeof(shortcut_info_s)); + ret_if(!info); + info->appid = strdup(remote_app_id); + goto_if(!info->appid, ERROR); + if (icon_path != NULL) { + info->icon = strdup(icon_path); + goto_if(!info->icon, ERROR); + } + if (_list_info_get(remote_app_id) == NULL) { + _list_info_add(info); + _shortcut_add(NULL, _list_lastest_info_get()); + } else { + goto ERROR; + } + } else { + if (_shortcut_icon_is_owner_same(shortcut_layout, remote_app_id) == 1) { + _shortcut_layout_vconf_set(0); + _shortcut_layout_visible_set(shortcut_layout, 0); + } + _list_info_del(_list_info_get(remote_app_id)); + } + return; + +ERROR: + if (info->icon) free(info->icon); + if (info->appid) free(info->appid); + if (info) free(info); +} + +static void _mp_state_vconf_changed_cb(keynode_t *node, void *data) +{ + Evas_Object *shortcut_layout = _shortcut_layout_get(data); + ret_if(shortcut_layout == NULL); + + shortcut_info_s *info = NULL; + + if (_mp_state_get() == 1) { + info = (shortcut_info_s *)calloc(1, sizeof(shortcut_info_s)); + ret_if(!info); + info->appid = strdup(MUSIC_PLAYER_APPID); + goto_if(!info->appid, ERROR); + info->icon = NULL; + if (_list_info_get(MUSIC_PLAYER_APPID) == NULL) { + _list_info_add(info); + _shortcut_add(data, _list_lastest_info_get()); + } else { + goto ERROR; + } + } else { + if (_shortcut_icon_is_owner_same(shortcut_layout, MUSIC_PLAYER_APPID) == 1) { + _shortcut_layout_vconf_set(0); + _shortcut_layout_visible_set(shortcut_layout, 0); + } + _list_info_del(_list_info_get(MUSIC_PLAYER_APPID)); + } + return; + +ERROR: + if (info->appid) free(info->appid); + if (info) free(info); + return; +} + +HAPI void clock_shortcut_view_add(Evas_Object *page) +{ + ret_if(page == NULL); + + Evas_Object *clock_layout = page_get_item(page); + + _shortcut_layout_destroy(clock_layout); + _shortcut_layout_create(clock_layout); + + shortcut_info_s *info = NULL; + if (_mp_state_get() == 1) { + info = (shortcut_info_s *)calloc(1, sizeof(shortcut_info_s)); + ret_if (!info); + info->appid = strdup(MUSIC_PLAYER_APPID); + goto_if(!info->appid, ERROR); + info->icon = NULL; + if (_list_info_get(MUSIC_PLAYER_APPID) == NULL) { + _list_info_add(info); + } else { + goto ERROR; + } + } + + info = _list_lastest_info_get(); + if (info != NULL) { + _shortcut_add(page, info); + } + return; + +ERROR: + if (info->appid) free(info->appid); + if (info) free(info); + return; +} + +HAPI void clock_shortcut_init(void) +{ + int port_id = 0; + + if(vconf_notify_key_changed(MUSIC_PLAYER_VCONF_STATE, _mp_state_vconf_changed_cb, NULL) < 0) { + _E("Failed to register the music player state vconf cb"); + } + + if (s_info.local_port_id < 0) { + if ((port_id = message_port_register_local_port(CLOCK_SHORTCUT_MESSAGE_PORT_ID, + _clock_shortcut_message_received_cb, NULL)) <= 0) { + _E("Failed to register clock shortcut message port cb"); + } + _E("port_id:%d", port_id); + s_info.local_port_id = port_id; + } +} + +HAPI void clock_shortcut_fini(void) +{ + if(vconf_notify_key_changed(MUSIC_PLAYER_VCONF_STATE, _mp_state_vconf_changed_cb, NULL) < 0) { + _E("Failed to unregister the music player state vconf cb"); + } + + if (s_info.local_port_id >= 0) { + if (message_port_unregister_local_port(s_info.local_port_id) != MESSAGE_PORT_ERROR_NONE) { + _E("Failed to unregister clock shortcut message port cb"); + } + } + + _list_clean(); +} + +HAPI void clock_shortcut_app_dead_cb(int pid) +{ + char *appid = NULL; + Evas_Object *shortcut_layout = _shortcut_layout_get(NULL); + ret_if(shortcut_layout == NULL); + + if ((appid = _shortcut_icon_owner_get(shortcut_layout)) != NULL) { + if (aul_app_is_running(appid) <= 0) { + _E("%s is dead, hiding shortcut", appid); + _shortcut_layout_vconf_set(0); + _shortcut_layout_visible_set(shortcut_layout, 0); + _list_info_del(_list_info_get(appid)); + } + } +} diff --git a/home/src/clock_util.c b/home/src/clock_util.c new file mode 100755 index 0000000..84399cb --- /dev/null +++ b/home/src/clock_util.c @@ -0,0 +1,252 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "dbus.h" +#include "clock_service.h" + +#define CLOCK_LAUNCH_WAITING_TERMINATE_TIME 3.0 +#define CLOCK_LAUNCH_RETRY_COUNT_NATIVE 10 +#define CLOCK_LAUNCH_RETRY_COUNT_WEBAPP 20 +#define CLOCK_LAUNCH_RETRY_DELAY 100000 + +extern int aul_kill_pid(int pid); + +static int _app_kill_by_pid(int pid) +{ + int ret = aul_kill_pid(pid); + + _D("app kill pid:%d(ret:%d)", pid, ret); + + return ret; +} + +static int _app_terminate_by_pid(int pid) +{ + int ret = aul_terminate_pid(pid); + + _D("app terminate pid:%d(ret:%d)", pid, ret); + + return ret; +} + + + +static int _clock_launch(char *appid, int *pid_a, int *pkgtype_a, int conf) +{ + _D("%s", __func__); + int i = 0, pid = 0; + int ret = W_HOME_ERROR_FAIL; + retv_if(appid == NULL, ret); + + int pkgtype = util_get_app_type(appid); + + if (pkgtype == APP_TYPE_WEB) { + _D("Webapp clock:%s", appid); + for (i = 0; i < CLOCK_LAUNCH_RETRY_COUNT_WEBAPP; i++) { + home_dbus_cpu_booster_signal_send(); + pid = aul_open_app(appid); + _E("[retry] aul_open_app : %s(%d) - %d", appid, pid, i); + if (pid >= AUL_R_OK) { + ret = W_HOME_ERROR_NONE; + break; + } + usleep(CLOCK_LAUNCH_RETRY_DELAY); + } + } else if (pkgtype == APP_TYPE_NATIVE) { + _D("App clock:%s", appid); + bundle *b = bundle_create(); + if (b != NULL) { + bundle_add(b, "__APP_SVC_OP_TYPE__", APP_CONTROL_OPERATION_MAIN); + clock_util_setting_conf_bundle_add(b, conf); + + home_dbus_cpu_booster_signal_send(); + pid = aul_launch_app((const char *)appid, b); + _D("aul_launch_app[%d] : %s(%d)", pkgtype, appid, pid); + + if (pid == AUL_R_ECOMM || pid == AUL_R_ETERMINATING) { + for (i = 0; i < CLOCK_LAUNCH_RETRY_COUNT_NATIVE; i++) { + home_dbus_cpu_booster_signal_send(); + pid = aul_launch_app(appid, b); + _E("[retry] aul_launch_app : %s(%d) - %d", appid, pid, i); + if (pid >= AUL_R_OK) { + ret = W_HOME_ERROR_NONE; + break; + } + usleep(CLOCK_LAUNCH_RETRY_DELAY); + } + } else if (pid < AUL_R_OK) { + _E("Failed to launch APP : %s(%d)", appid, pid); + } else { + ret = W_HOME_ERROR_NONE; + } + + bundle_free(b); + } else { + _E("failed to create a bundle"); + } + } else if (pkgtype == APP_TYPE_WIDGET) { + _D("Widget type: %s\n", appid); + ret = W_HOME_ERROR_NONE; + } else { + _E("invalid package type:%d", pkgtype); + } + + if (pid_a != NULL) { + *pid_a = pid; + } + + if (pkgtype_a != NULL) { + *pkgtype_a = pkgtype; + } + + return ret; +} + +HAPI char *clock_util_wms_configuration_get(void) +{ + return vconf_get_str(VCONFKEY_WMS_CLOCKS_SET_IDLE); +} + +HAPI int clock_util_wms_configuration_set(const char *pkgname) +{ + int ret = 0; + retv_if(pkgname == NULL, W_HOME_ERROR_FAIL); + + if ((ret = vconf_set_str(VCONFKEY_WMS_CLOCKS_SET_IDLE, pkgname)) != 0) { + _E("Failed to set %s:%d", VCONFKEY_WMS_CLOCKS_SET_IDLE, ret); + return W_HOME_ERROR_FAIL; + } + + return W_HOME_ERROR_NONE; +} + +HAPI int clock_util_provider_launch(const char *clock_pkgname, int *pid_a, int conf) +{ + int pid = 0; + int ret = W_HOME_ERROR_FAIL; + char *appid = NULL; + retv_if(clock_pkgname == NULL, W_HOME_ERROR_FAIL); + + appid = util_get_appid_by_pkgname(clock_pkgname); + ret = _clock_launch(appid, &pid, NULL, conf); + free(appid); + + if (ret == W_HOME_ERROR_FAIL) { + _E("Launching app pid:%d(%d)", pid, ret); + if (strncmp(clock_pkgname, CLOCK_APP_RECOVERY, strlen(clock_pkgname)) != 0) { + _E("try to recovery: %s", clock_pkgname); + clock_util_wms_configuration_set(CLOCK_APP_RECOVERY); + } else { + _E("It's already set to recovery clock, give up"); + } + } + + if (pid_a != NULL) { + *pid_a = pid; + } + + return ret; +} + +static Eina_Bool _clock_service_terminate_timeout_cb(void *data) +{ + int pid = (int)data; + + if (pid > 0) { + _app_kill_by_pid(pid); + } + + return ECORE_CALLBACK_CANCEL; +} + +HAPI void clock_util_terminate_clock_by_pid(int pid) +{ + if (_app_terminate_by_pid(pid) != AUL_R_OK) { + if (_app_kill_by_pid(pid) != AUL_R_OK) { + _E("Failed to terminate clock, we will kill it(%d) after %d seconds", + pid, CLOCK_LAUNCH_WAITING_TERMINATE_TIME); + ecore_timer_add(CLOCK_LAUNCH_WAITING_TERMINATE_TIME, + _clock_service_terminate_timeout_cb, (void *)pid); + } + } +} + +HAPI int clock_util_screen_reader_enabled_get(void) +{ + int val = 0; + + if (vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &val) == 0) { + return val; + } + + return 0; +} + +#define VCONFKEY_CLOCK_SETTING_CONF_KEY "db/setting/idle_clock_show" +HAPI int clock_util_setting_conf_get(void) +{ + int ret = 0; + int val = 0; + + if ((ret = vconf_get_int(VCONFKEY_CLOCK_SETTING_CONF_KEY, &val)) < 0) { + _E("Failed to get %s(%d)", VCONFKEY_CLOCK_SETTING_CONF_KEY, ret); + } + + return val; +} + +HAPI void clock_util_setting_conf_set(int value) +{ + int ret = 0; + + if ((ret = vconf_set_int(VCONFKEY_CLOCK_SETTING_CONF_KEY, value)) < 0) { + _E("Failed to set %s(%d)", VCONFKEY_CLOCK_SETTING_CONF_KEY, ret); + } +} + +HAPI void clock_util_setting_conf_bundle_add(bundle *b, int type) +{ + ret_if(b == NULL); + + if (type == CLOCK_CONF_CLOCK_CONFIGURATION) { + bundle_add(b, "view_type", "setting"); + } +} + +HAPI const char *clock_util_setting_conf_content(int type) +{ + if (type == CLOCK_CONF_CLOCK_CONFIGURATION) { + return "view_type=setting;"; + } + + return NULL; +} + diff --git a/home/src/clock_view.c b/home/src/clock_view.c new file mode 100755 index 0000000..d6dad58 --- /dev/null +++ b/home/src/clock_view.c @@ -0,0 +1,944 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "layout.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "page.h" +#include "key.h" +#include "effect.h" +#include "dbus.h" +#include "tutorial.h" +#include "clock_service.h" +#include "apps/apps_main.h" + +#define CLOCK_PRIVATE_DATA_KEY_VISIBILITY "cl_p_v_d_v" +#define CLOCK_PRIVATE_DATA_KEY_HIDDEN_BUTTON "cl_p_c_hb" +#define CLOCK_PRIVATE_DATA_KEY_HIDDEN_BUTTON_DISPLAY_STATE "cl_p_c_hb_ds_st" +#define CLOCK_PRIVATE_DATA_KEY_DOWN_X "cl_p_c_d_x" +#define CLOCK_PRIVATE_DATA_KEY_DOWN_Y "cl_p_c_d_y" +#define CLOCK_PRIVATE_DATA_KEY_DISPLAY_CUE "cl_p_c_di_cu" +#define CLOCK_PRIVATE_DATA_KEY_HIDING_TIMER "cl_p_c_hi_ti" + +#define DRAWER_HIDING_TIME 3.0f + +struct evet_handler_s { + int event; + void (*process) (Evas_Object *, int , void *data); +}; + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW +static void _mouse_flickup_cb(void *data, Evas_Object *scroller, void *event_info); +#endif +static void _drawer_hide(Evas_Object *page, int is_show); + +static Evas_Object *_layout_get(void) +{ + Evas_Object *win = main_get_info()->win; + retv_if(win == NULL, NULL); + + return evas_object_data_get(win, DATA_KEY_LAYOUT); +} + +static Evas_Object *_scroller_get(void) +{ + Evas_Object *win = main_get_info()->win; + Evas_Object *layout = NULL; + Evas_Object *scroller = NULL; + + if (win != NULL) { + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + if (layout != NULL) { + scroller = elm_object_part_content_get(layout, "scroller"); + } + } + + return scroller; +} + +void clock_view_indicator_show(int is_show) +{ + int pid = 0; + bundle *b = bundle_create(); + if (b != NULL) { + if (is_show >= INDICATOR_SHOW) { + bundle_add(b, "__WINDICATOR_OP__", "__SHOW_MOMENT_VIEW__"); + if(is_show == INDICATOR_SHOW_WITH_EFFECT) { + bundle_add(b, "__EFFECT__", "ON"); + } + } else { + bundle_add(b, "__WINDICATOR_OP__", "__HIDE_MOMENT_VIEW__"); + if(is_show == INDICATOR_HIDE_WITH_EFFECT) { + bundle_add(b, "__EFFECT__", "ON"); + } + } + + pid = aul_launch_app("org.tizen.windicator", b); + _D("aul_launch_app: %s(%d)", "org.tizen.windicator", pid); + bundle_free(b); + } +} + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW +static void _drawer_hiding_timer_del(Evas_Object *page) +{ + Ecore_Timer *tm = evas_object_data_del(page, CLOCK_PRIVATE_DATA_KEY_HIDING_TIMER); + if (tm != NULL) { + ecore_timer_del(tm); + } +} + +Eina_Bool _drawer_hiding_timer_cb(void *data) +{ + Evas_Object *page = data; + retv_if(page == NULL, ECORE_CALLBACK_CANCEL); + + _drawer_hiding_timer_del(page); + _drawer_hide(page, INDICATOR_HIDE); + + return ECORE_CALLBACK_CANCEL; +} + +void _drawer_hiding_timer_set(Evas_Object *page) +{ + ret_if(page == NULL); + + _drawer_hiding_timer_del(page); + + Ecore_Timer *tm = ecore_timer_add(DRAWER_HIDING_TIME, _drawer_hiding_timer_cb, page); + evas_object_data_set(page, CLOCK_PRIVATE_DATA_KEY_HIDING_TIMER, tm); +} + +static int _is_drawer_displayed(Evas_Object *page) +{ + retv_if(page == NULL, 0); + + return (int)evas_object_data_get(page, CLOCK_PRIVATE_DATA_KEY_HIDDEN_BUTTON); +} + +static void _drawer_displayed_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Evas_Object *page = data; + ret_if(page == NULL); + + evas_object_data_set(page, CLOCK_PRIVATE_DATA_KEY_HIDDEN_BUTTON_DISPLAY_STATE, (void*)1); +} + +static void _drawer_hided_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Evas_Object *page = data; + ret_if(page == NULL); + + evas_object_data_del(page, CLOCK_PRIVATE_DATA_KEY_HIDDEN_BUTTON_DISPLAY_STATE); +} +#endif + +static void _drawer_show(Evas_Object *page, int indicator_show) +{ + ret_if(page == NULL); + Evas_Object *item = page_get_item(page); + ret_if(item == NULL); + Evas_Object *layout = _layout_get(); + ret_if(layout == NULL); + +#ifdef ENABLE_INDICATOR_BRIEFING_VIEW + clock_view_indicator_show(indicator_show); +#else + if (clock_service_event_state_get(CLOCK_EVENT_SIM) == CLOCK_EVENT_SIM_NOT_INSERTED) { + elm_object_signal_emit(item , "hidden.show.short", "clock_bg"); + } else { + elm_object_signal_emit(item , "hidden.show", "clock_bg"); + } + evas_object_data_set(page, CLOCK_PRIVATE_DATA_KEY_HIDDEN_BUTTON, (void*)1); + evas_object_smart_callback_del(layout, LAYOUT_SMART_SIGNAL_FLICK_UP, _mouse_flickup_cb); + evas_object_smart_callback_add(layout, LAYOUT_SMART_SIGNAL_FLICK_UP, _mouse_flickup_cb, page); + clock_view_indicator_show(indicator_show); + + if (util_feature_enabled_get(FEATURE_CLOCK_HIDDEN_BUTTON_TIMER) == 1) { + _drawer_hiding_timer_set(page); + } + clock_view_hidden_event_handler(page, CLOCK_EVENT_VIEW_HIDDEN_SHOW); +#endif +} + +static void _drawer_hide(Evas_Object *page, int indicator_show) +{ + ret_if(page == NULL); + Evas_Object *item = page_get_item(page); + ret_if(item == NULL); + Evas_Object *layout = _layout_get(); + ret_if(layout == NULL); + +#ifdef ENABLE_INDICATOR_BRIEFING_VIEW + clock_view_indicator_show(indicator_show); +#else + evas_object_data_del(page, CLOCK_PRIVATE_DATA_KEY_HIDDEN_BUTTON); + evas_object_smart_callback_del(layout, LAYOUT_SMART_SIGNAL_FLICK_UP, _mouse_flickup_cb); + elm_object_signal_emit(item , "hidden.hide", "clock_bg"); + clock_view_indicator_show(indicator_show); + _drawer_hiding_timer_del(page); + clock_view_hidden_event_handler(page, CLOCK_EVENT_VIEW_HIDDEN_HIDE); +#endif +} + +static void _screen_reader_enable_set(Evas_Object *page, int is_on) +{ + ret_if(page == NULL); + Evas_Object *item = page_get_item(page); + ret_if(item == NULL); + + if (is_on == 1) { + elm_object_signal_emit(item, "screenreader,on", "clock_bg"); + if (util_feature_enabled_get(FEATURE_APPS) == 1) { + elm_object_signal_emit(item, "screenreader,apps,on", "clock_bg"); + } + } else { + elm_object_signal_emit(item, "screenreader,off", "clock_bg"); + elm_object_signal_emit(item, "screenreader,apps,off", "clock_bg"); + } +} + +static int _visibility_get(Evas_Object *page) +{ + retv_if(page == NULL, 0); + + return (int)evas_object_data_get(page, CLOCK_PRIVATE_DATA_KEY_VISIBILITY); +} + +static void _visibility_set(Evas_Object *page, int visibility) +{ + ret_if(page == NULL); + + evas_object_data_set(page, CLOCK_PRIVATE_DATA_KEY_VISIBILITY, (void *)visibility); +} + + +static void _visibility_vconf_set(int visibility) +{ + if (main_get_info()->state == APP_STATE_PAUSE) { + visibility = 0; + } +} + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW +static void _mouse_flickup_cb(void *data, Evas_Object *scroller, void *event_info) +{ + _D("flickup"); + Evas_Object *page = data; + ret_if(page == NULL); + + if (_is_drawer_displayed(page) == 1) { + _drawer_hide(page, INDICATOR_HIDE); + } +} + +static void _mouse_down_cb(void *data, Evas * evas, Evas_Object * obj, void *event_info) +{ + Evas_Object *page = obj; + Evas_Object *layout = data; + Evas_Event_Mouse_Down *ev = event_info; + ret_if(page == NULL); + ret_if(layout == NULL); + ret_if(ev == NULL); + + if (_is_drawer_displayed(page) == 1) { + Evas_Object *drawer = elm_object_part_content_get(layout, "hidden_item"); + if (drawer != NULL) { + int drawer_y = 0; + int drawer_h = 0; + evas_object_geometry_get(drawer, NULL, &drawer_y, NULL, &drawer_h); + + if (ev->canvas.y > (drawer_h + drawer_y)) { + _drawer_hide(page, INDICATOR_HIDE); + } else { + if (util_feature_enabled_get(FEATURE_CLOCK_HIDDEN_BUTTON_TIMER) == 1) { + _drawer_hiding_timer_set(page); + } + } + } + } +} +#endif + +static void _mouse_up_cb(void *data, Evas * evas, Evas_Object * obj, void *event_info) +{ + Evas_Object *page = obj; + Evas_Event_Mouse_Up *ev = event_info; + ret_if(page == NULL); + ret_if(ev == NULL); + + if ((int)evas_object_data_get(page, DATA_KEY_PAGE_ONHOLD_COUNT) == 1) { + evas_object_data_del(page, DATA_KEY_PAGE_ONHOLD_COUNT); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + _E("event onhold flag set on clock page"); + } +} + +static void _mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + static int is_first_call = -1; + int x = 0, visibility = 0; + int win_w = 0; + Evas_Object *page = obj; + Evas_Object *item = page_get_item(obj); + ret_if(page == NULL); + ret_if(item == NULL); + + if (is_first_call == -1) { + Evas_Object *scroller = _scroller_get(); + if (scroller != NULL) { + scroller_region_show_by_push_type(scroller, SCROLLER_PUSH_TYPE_CENTER, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT); + } + is_first_call = 1; + } + + if (obj != NULL) { + win_w = main_get_info()->root_w; + evas_object_geometry_get(obj, &x, NULL, NULL, NULL); + + if ((x >= 0 && x < win_w) || (x <= 0 && x > -win_w)) { + visibility = 1; + } else { + visibility = 0; + } + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + if(x >= 10 || x <= -10) { + if (_is_drawer_displayed(page) == 1) { + _drawer_hide(page, INDICATOR_HIDE); + } + } +#endif + + if (_visibility_get(page) != visibility) { + _D("clock page:%p visibility changed:%s", obj, (visibility == 1) ? "show" : "hide"); + + _visibility_vconf_set(visibility); + _visibility_set(page, visibility); + + if (clock_service_event_state_get(CLOCK_EVENT_DEVICE_LCD) == CLOCK_EVENT_DEVICE_LCD_OFF) { + visibility = 0; + return; + } + if (clock_service_event_state_get(CLOCK_EVENT_APP) == CLOCK_EVENT_APP_PAUSE) { + visibility = 0; + return; + } + + if (visibility == 0) { + evas_object_smart_callback_call(page, CLOCK_SMART_SIGNAL_PAUSE, item); + } else if (visibility == 1) { + if (evas_object_data_get(page, CLOCK_PRIVATE_DATA_KEY_DISPLAY_CUE) != NULL) { + clock_view_cue_display_set(page, 1, 0); + evas_object_data_del(page, CLOCK_PRIVATE_DATA_KEY_DISPLAY_CUE); + } + evas_object_smart_callback_call(page, CLOCK_SMART_SIGNAL_RESUME, item); + } + } + } +} + +static void _view_request_cb(void *data, Evas_Object *obj, void *event_info) +{ + int idx_request = (int)event_info; + Evas_Object *page = obj; + + if (idx_request == CLOCK_VIEW_REQUEST_DRAWER_HIDE) { + _drawer_hide(page, INDICATOR_HIDE); + } else if (idx_request == CLOCK_VIEW_REQUEST_DRAWER_SHOW) { + _drawer_show(page, INDICATOR_SHOW); + } +} + +static void _event_handler_view_resized(Evas_Object *page, int event, void *data) +{ + clock_h clock = data; + ret_if(data == NULL); + + Evas_Object *layout = page_get_item(page); + ret_if(layout == NULL); + + Evas_Object *item = elm_object_part_content_get(layout, "item"); + ret_if(item == NULL); + + evas_object_resize(item, clock->w, clock->h); + evas_object_size_hint_min_set(item, clock->w, clock->h); + evas_object_size_hint_max_set(item, clock->w, clock->h); +} + +static void _event_handler_app_state(Evas_Object *page, int event, void *data) +{ + int visibility = 0; + Evas_Object *item = page_get_item(page); + + visibility = _visibility_get(page); + _visibility_vconf_set(visibility); + + if (event == CLOCK_EVENT_APP_RESUME) { + if (_visibility_get(page) == 0) { + evas_object_data_set(page, CLOCK_PRIVATE_DATA_KEY_DISPLAY_CUE, (void*)1); + } else { + clock_view_cue_display_set(page, 1, 0); + evas_object_smart_callback_call(page, CLOCK_SMART_SIGNAL_RESUME, item); + } + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + if (_is_drawer_displayed(page) == 1) { + if (tutorial_is_exist() == 1) { + clock_view_indicator_show(INDICATOR_SHOW); + } + } +#endif + } else if (event == CLOCK_EVENT_APP_PAUSE) { + evas_object_smart_callback_call(page, CLOCK_SMART_SIGNAL_PAUSE, item); +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + if (_is_drawer_displayed(page) == 1) { + if (tutorial_is_exist() == 0) { + _drawer_hide(page, INDICATOR_HIDE); + } else { + clock_view_indicator_show(INDICATOR_HIDE); + } + } +#endif + } else if (event == CLOCK_EVENT_APP_LANGUAGE_CHANGED) { +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + clock_view_hidden_event_handler(page, CLOCK_EVENT_APP_LANGUAGE_CHANGED); +#endif + } +} + +static void _event_handler_lcd(Evas_Object *page, int event, void *data) +{ + if (_visibility_get(page) == 1 && event == CLOCK_EVENT_DEVICE_LCD_ON) { + clock_view_cue_display_set(page, 1, 0); + evas_object_data_del(page, CLOCK_PRIVATE_DATA_KEY_DISPLAY_CUE); + } else if (event == CLOCK_EVENT_DEVICE_LCD_ON) { + evas_object_data_set(page, CLOCK_PRIVATE_DATA_KEY_DISPLAY_CUE, (void*)1); +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + if (_is_drawer_displayed(page) == 1) { + clock_view_indicator_show(INDICATOR_SHOW); + } +#endif + } else if (event == CLOCK_EVENT_DEVICE_LCD_OFF) { + clock_view_cue_display_set(page, 0, 0); +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + if (_is_drawer_displayed(page) == 1) { + if (tutorial_is_exist() == 0) { + _drawer_hide(page, INDICATOR_HIDE); + } else { + clock_view_indicator_show(INDICATOR_HIDE); + } + } +#endif + } +} + +static void _event_handler_backkey(Evas_Object *page, int event, void *data) +{ + Evas_Object *scroller = _scroller_get(); + ret_if(scroller == NULL); + + int clock_visibility = _visibility_get(page); + + if (clock_visibility == 0) { + _D("show a clock"); + scroller_bring_in_by_push_type(scroller, SCROLLER_PUSH_TYPE_CENTER, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_ANIMATOR); + } else { + if (util_feature_enabled_get(FEATURE_CLOCK_HIDDEN_BUTTON) == 0) { + return; + } + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + _D("show a hidden button"); + if (_is_drawer_displayed(page) == 1) { + return; + } +#endif + + _drawer_show(page, INDICATOR_SHOW); + } + + return; +} + +static void _event_handler_screen_reader(Evas_Object *page, int event, void *data) +{ + if (event == CLOCK_EVENT_SCREEN_READER_ON) { + _screen_reader_enable_set(page, 1); + } else if (event == CLOCK_EVENT_SCREEN_READER_OFF) { + _screen_reader_enable_set(page, 0); + } +} + +static void _event_handler_modem_status(Evas_Object *page, int event, void *data) +{ + clock_view_indicator_event_handler(page, event); +} + +static void _event_handler_blocking_status(Evas_Object *page, int event, void *data) +{ + clock_view_indicator_event_handler(page, event); +} + +static void _event_handler_sim_status(Evas_Object *page, int event, void *data) +{ +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + clock_view_hidden_event_handler(page, event); +#endif +} + +static char *_access_info_clock_cb(void *data, Evas_Object *obj) +{ + int hour = 0; + int minutes = 0; + time_t tt; + struct tm st; + char buf[256] = {0,}; + + enum appcore_time_format timeformat = APPCORE_TIME_FORMAT_UNKNOWN; + + tt = time(NULL); + localtime_r(&tt, &st); + + if(appcore_get_timeformat(&timeformat) != 0) { + timeformat = APPCORE_TIME_FORMAT_24; + } + + if(timeformat == APPCORE_TIME_FORMAT_24) { + hour = st.tm_hour; + minutes = st.tm_min; + + snprintf(buf, sizeof(buf) - 1, _("IDS_LCKSCN_BODY_IT_IS_P1SD_CP2SD_T_TTS"), hour, minutes); + } else { + strftime(buf, sizeof(buf), "%l", &st); + hour = atoi(buf); + minutes = st.tm_min; + + if(st.tm_hour >= 0 && st.tm_hour < 12) { + snprintf(buf, sizeof(buf) - 1, _("IDS_TTS_BODY_IT_IS_PD_CPD_AM"), hour, minutes); + } else { + snprintf(buf, sizeof(buf) - 1, _("IDS_TTS_BODY_IT_IS_PD_CPD_PM"), hour, minutes); + } + } + + _D("TTS current time : %s", buf); + + return strdup(buf); +} + +static void _apps_clicked_cb(void *cbdata, Evas_Object *obj, void *event_info) +{ + if (util_feature_enabled_get(FEATURE_APPS) == 1) { + apps_main_launch(APPS_LAUNCH_SHOW); + } + + effect_play_sound(); +} + +static char *_access_info_apps_cb(void *data, Evas_Object *obj) +{ + char *info = _("IDS_IDLE_BODY_APPS"); + + if (info != NULL) { + return strdup(info); + } + + return NULL; +} + +static char *_access_context_apps_cb(void *data, Evas_Object *obj) +{ + char *info = _("IDS_HELP_BODY_DOUBLE_TAP_TO_OPEN_APP_TRAY_TTS"); + + if (info != NULL) { + return strdup(info);; + } + + return NULL; +} + +static void _del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Object *page = obj; + Evas_Object *layout = data; + Evas_Object *obj_sub = NULL; + ret_if(page == NULL); + ret_if(layout == NULL); + + /* + * clean-up event callback + */ + evas_object_event_callback_del(page + , EVAS_CALLBACK_MOVE, _mouse_move_cb); + evas_object_event_callback_del(page + , EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb); + evas_object_smart_callback_del(page + , CLOCK_SMART_SIGNAL_VIEW_REQUEST, _view_request_cb); + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + evas_object_event_callback_del(page + , EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb); + evas_object_smart_callback_del(layout, LAYOUT_SMART_SIGNAL_FLICK_UP, _mouse_flickup_cb); + elm_object_signal_callback_del(layout, "drawer,displayed", "clock_bg", _drawer_displayed_cb); + elm_object_signal_callback_del(layout, "drawer,hided", "clock_bg", _drawer_hided_cb); +#endif + clock_view_indicator_show(INDICATOR_HIDE); + + obj_sub = elm_object_part_content_get(layout, "clock_bg"); + if (obj_sub != NULL) { + evas_object_del(obj_sub); + } + obj_sub = elm_object_part_content_get(layout, "event_blocker"); + if (obj_sub != NULL) { + evas_object_del(obj_sub); + } +} + +Evas_Object *clock_view_add(Evas_Object *parent, Evas_Object *item) +{ + Eina_Bool ret = EINA_TRUE; + Evas_Object *page = NULL; + Evas_Object *layout = NULL; + Evas_Object *bg = NULL; + Evas_Object *evb = NULL; + retv_if(parent == NULL, NULL); + + layout = elm_layout_add(parent); + goto_if(layout == NULL, ERR); + ret = elm_layout_file_set(layout, PAGE_CLOCK_EDJE_FILE, "clock_page"); + goto_if(ret == EINA_FALSE, ERR); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(layout); + + bg = evas_object_rectangle_add(main_get_info()->e); + goto_if(bg == NULL, ERR); + evas_object_size_hint_min_set(bg, main_get_info()->root_w, main_get_info()->root_h); + evas_object_size_hint_max_set(bg, main_get_info()->root_w, main_get_info()->root_h); + evas_object_color_set(bg, 0, 0, 0, 0); + evas_object_show(bg); + elm_object_part_content_set(layout, "clock_bg", bg); + + evb = evas_object_rectangle_add(main_get_info()->e); + goto_if(evb == NULL, ERR); + evas_object_size_hint_min_set(evb, main_get_info()->root_w, main_get_info()->root_h); + evas_object_size_hint_weight_set(evb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_repeat_events_set(evb, 1); + evas_object_color_set(evb, 0, 0, 0, 0); + evas_object_show(evb); + elm_object_part_content_set(layout, "event_blocker", evb); + + if (item != NULL) { + elm_access_object_unregister(item); + } + + Evas_Object *focus_apps = elm_button_add(layout); + if (focus_apps != NULL) { + elm_object_style_set(focus_apps, "focus"); + elm_access_info_cb_set(focus_apps, ELM_ACCESS_INFO, _access_info_apps_cb, NULL); + elm_access_info_cb_set(focus_apps, ELM_ACCESS_CONTEXT_INFO, _access_context_apps_cb, NULL); + evas_object_smart_callback_add(focus_apps, "clicked", _apps_clicked_cb, NULL); + elm_object_part_content_set(layout, "focus.bottom.cue", focus_apps); + } + + if (item != NULL) { + elm_object_part_content_set(layout, "item", item); + } + + page = page_create(parent + , layout + , NULL, NULL + , main_get_info()->root_w, main_get_info()->root_h + , PAGE_CHANGEABLE_BG_OFF, PAGE_REMOVABLE_OFF); + goto_if(page == NULL, ERR); + + _visibility_set(page, 1); + _visibility_vconf_set(1); + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW +#ifdef RUN_ON_DEVICE + Evas_Object *hidden_button = clock_view_hidden_add(page); + if (hidden_button != NULL) { + elm_object_part_content_set(layout, "hidden_item", hidden_button); + } else { + _E("Failed to add top hidden object"); + } +#endif +#endif + + Evas_Object *cue = clock_view_cue_add(page); + if (cue != NULL) { + elm_object_part_content_set(layout, "bottom_cue", cue); + } else { + _E("failed to add bottom cue"); + } + + clock_shortcut_view_add(page); + clock_view_indicator_add(page); + + page_set_effect(page, page_effect_none, page_effect_none); + evas_object_event_callback_add(page + , EVAS_CALLBACK_DEL, _del_cb, layout); + evas_object_event_callback_add(page + , EVAS_CALLBACK_MOVE, _mouse_move_cb, layout); + evas_object_event_callback_add(page + , EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, layout); + + evas_object_smart_callback_add(page + , CLOCK_SMART_SIGNAL_VIEW_REQUEST, _view_request_cb, layout); + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + evas_object_event_callback_add(page + , EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, layout); + elm_object_signal_callback_add(layout, "drawer,displayed", "clock_bg", _drawer_displayed_cb, page); + elm_object_signal_callback_add(layout, "drawer,hided", "clock_bg", _drawer_hided_cb, page); +#endif + + if (clock_service_event_state_get(CLOCK_EVENT_SCREEN_READER) == CLOCK_EVENT_SCREEN_READER_ON) { + _screen_reader_enable_set(page, 1); + } else { + _screen_reader_enable_set(page, 0); + } + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + clock_view_hidden_event_handler(page, clock_service_event_state_get(CLOCK_EVENT_POWER)); +#endif + + clock_view_indicator_event_handler(page, CLOCK_EVENT_CATEGORY(CLOCK_EVENT_MODEM)); + + page_info_s *page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (page_info != NULL && page_info->focus != NULL) { + elm_access_info_cb_set(page_info->focus, ELM_ACCESS_INFO, _access_info_clock_cb, NULL); + + elm_object_focus_next_object_set(page_info->focus, focus_apps, ELM_FOCUS_PREVIOUS); + elm_access_highlight_next_set(page_info->focus, ELM_HIGHLIGHT_DIR_PREVIOUS, focus_apps); + + elm_object_focus_next_object_set(page_info->focus, focus_apps, ELM_FOCUS_NEXT); + elm_access_highlight_next_set(page_info->focus, ELM_HIGHLIGHT_DIR_NEXT, focus_apps); + + elm_object_focus_next_object_set(focus_apps, page_info->focus, ELM_FOCUS_PREVIOUS); + elm_access_highlight_next_set(focus_apps, ELM_HIGHLIGHT_DIR_PREVIOUS, page_info->focus); + + elm_object_focus_next_object_set(focus_apps, page_info->focus, ELM_FOCUS_NEXT); + elm_access_highlight_next_set(focus_apps, ELM_HIGHLIGHT_DIR_NEXT, page_info->focus); + + page_info->focus_prev = focus_apps; + page_info->focus_next = focus_apps; + } + + return page; + +ERR: + if (bg != NULL) evas_object_del(bg); + if (evb != NULL) evas_object_del(evb); + if (layout != NULL) evas_object_del(layout); + + return NULL; +} + +Evas_Object *clock_view_get_item(Evas_Object *view) +{ + Evas_Object *layout; + Evas_Object *item; + + layout = page_get_item(view); + if (!layout) { + return NULL; + } + + item = elm_object_part_content_get(layout, "item"); + return item; +} + +int clock_view_attach(Evas_Object *page) +{ + int ret = CLOCK_RET_FAIL; + Evas_Object *scroller = _scroller_get(); + retv_if(page == NULL, CLOCK_RET_FAIL); + retv_if(scroller == NULL, CLOCK_RET_FAIL); + + page_info_s *page_info = NULL; + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(page_info == NULL, CLOCK_RET_FAIL); + + if (scroller_push_page(scroller, page, SCROLLER_PUSH_TYPE_CENTER) == W_HOME_ERROR_NONE) { + ret = CLOCK_RET_OK; + } + + if (clock_service_event_state_get(CLOCK_EVENT_SCREEN_READER) == CLOCK_EVENT_SCREEN_READER_ON) { + if (page_info->focus != NULL) { + elm_object_focus_set(page_info->focus, EINA_TRUE); + elm_access_highlight_set(page_info->focus); + } + } + + return ret; +} + +int clock_view_deattach(Evas_Object *page) +{ + Evas_Object *scroller = _scroller_get(); + retv_if(page == NULL, CLOCK_RET_FAIL); + retv_if(scroller == NULL, CLOCK_RET_FAIL); + + if (scroller_pop_page(scroller, page) != NULL) { + return CLOCK_RET_OK; + } + + return CLOCK_RET_FAIL; +} + +void clock_view_show(Evas_Object *page) +{ + Evas_Object *scroller = _scroller_get(); + ret_if(page == NULL); + ret_if(scroller == NULL); + + scroller_region_show_page(scroller, page, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT); +} + +Evas_Object *clock_view_empty_add(void) +{ + Evas_Object *scroller = _scroller_get(); + retv_if(scroller == NULL, NULL); + + Evas_Object *page = clock_view_add(scroller, NULL); + + return page; +} + +void clock_view_event_handler(clock_h clock, int event, int need_relay) +{ + ret_if(clock == NULL); + Evas_Object *page = clock->view; + + _D("event:%x received", event); + + static struct evet_handler_s fn_table[] = { + { + .event = CLOCK_EVENT_VIEW_RESIZED, + .process = _event_handler_view_resized, + }, + { + .event = CLOCK_EVENT_DEVICE_BACK_KEY, + .process = _event_handler_backkey, + }, + { + .event = CLOCK_EVENT_DEVICE_LCD_ON, + .process = _event_handler_lcd, + }, + { + .event = CLOCK_EVENT_DEVICE_LCD_OFF, + .process = _event_handler_lcd, + }, + { + .event = CLOCK_EVENT_APP_PAUSE, + .process = _event_handler_app_state, + }, + { + .event = CLOCK_EVENT_APP_RESUME, + .process = _event_handler_app_state, + }, + { + .event = CLOCK_EVENT_APP_LANGUAGE_CHANGED, + .process = _event_handler_app_state, + }, + { + .event = CLOCK_EVENT_SCREEN_READER_ON, + .process = _event_handler_screen_reader, + }, + { + .event = CLOCK_EVENT_SCREEN_READER_OFF, + .process = _event_handler_screen_reader, + }, + { + .event = CLOCK_EVENT_SAP_ON, + .process = _event_handler_modem_status, + }, + { + .event = CLOCK_EVENT_SAP_OFF, + .process = _event_handler_modem_status, + }, + { + .event = CLOCK_EVENT_MODEM_ON, + .process = _event_handler_modem_status, + }, + { + .event = CLOCK_EVENT_MODEM_OFF, + .process = _event_handler_modem_status, + }, + { + .event = CLOCK_EVENT_DND_ON, + .process = _event_handler_blocking_status, + }, + { + .event = CLOCK_EVENT_DND_OFF, + .process = _event_handler_blocking_status, + }, + { + .event = CLOCK_EVENT_SIM_INSERTED, + .process = _event_handler_sim_status, + }, + { + .event = CLOCK_EVENT_SIM_NOT_INSERTED, + .process = _event_handler_sim_status, + }, + { + .event = 0, + .process = NULL, + }, + }; + ret_if(page == NULL); + + int i = 0; + for (i = 0; fn_table[i].process != NULL; i++) { + if (event == fn_table[i].event && fn_table[i].process != NULL) { + fn_table[i].process(page, fn_table[i].event, clock); + } + } +} + +int clock_view_display_state_get(Evas_Object *page, int view_type) +{ + retv_if(page == NULL, 0); + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + if (view_type == CLOCK_VIEW_TYPE_DRAWER) { + if (evas_object_data_get(page, CLOCK_PRIVATE_DATA_KEY_HIDDEN_BUTTON_DISPLAY_STATE) != NULL) { + return 1; + } else { + return 0; + } + } +#endif + + return 0; +} diff --git a/home/src/clock_view_cue.c b/home/src/clock_view_cue.c new file mode 100644 index 0000000..f18062b --- /dev/null +++ b/home/src/clock_view_cue.c @@ -0,0 +1,90 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "layout.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "page.h" +#include "scroller.h" +#include "key.h" +#include "effect.h" +#include "clock_service.h" + +static Evas_Object *_cue_layout_add(Evas_Object *page) +{ + Eina_Bool ret = EINA_TRUE; + Evas_Object *item = page_get_item(page); + retv_if(item == NULL, NULL); + + Evas_Object *layout = elm_layout_add(item); + retv_if(layout == NULL, NULL); + ret = elm_layout_file_set(layout, PAGE_CLOCK_EDJE_FILE, "bottom_cue"); + retv_if(ret == EINA_FALSE, NULL); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(layout); + + return layout; +} + +HAPI Evas_Object *clock_view_cue_add(Evas_Object *page) +{ + Evas_Object *cue_layout = NULL; + retv_if(page == NULL, NULL); + + cue_layout = _cue_layout_add(page); + retv_if(cue_layout == NULL, NULL); + + return cue_layout; +} + +HAPI void clock_view_cue_display_set(Evas_Object *page, int is_display, int is_need_vi) +{ + Evas_Object *item = NULL; + Evas_Object *cue = NULL; + ret_if(page == NULL); + + _D("Cue for Apps, is_display:%d, is_need_vi:%d", is_display, is_need_vi); + + if (util_feature_enabled_get(FEATURE_CLOCK_VISUAL_CUE) == 0 && is_display == 1) { + return; + } + + item = page_get_item(page); + ret_if(item == NULL); + + cue = elm_object_part_content_get(item, "bottom_cue"); + ret_if(cue == NULL); + + if (is_display == 1) { + elm_object_signal_emit(cue, "cue,enable", "prog"); + } else { + elm_object_signal_emit(cue, "cue,disable", "prog"); + } +} diff --git a/home/src/clock_view_hidden.c b/home/src/clock_view_hidden.c new file mode 100755 index 0000000..c189ba5 --- /dev/null +++ b/home/src/clock_view_hidden.c @@ -0,0 +1,338 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#include + +#include "conf.h" +#include "layout.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "page.h" +#include "scroller.h" +#include "key.h" +#include "effect.h" +#include "minictrl.h" +#include "clock_service.h" +#include "power_mode.h" +#include "dbus.h" +#include "tutorial.h" + +#define PRIVATE_DATA_KEY_VISIBLE "p_d_k_v" + +#ifdef RUN_ON_DEVICE + +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW +static Evas_Object *_hidden_layout_get(Evas_Object *page) +{ + retv_if(page == NULL, NULL); + Evas_Object *item = page_get_item(page); + retv_if(item == NULL, NULL); + Evas_Object *layout = elm_object_part_content_get(item, "hidden_item"); + + return layout; +} +#endif + +static int _is_flight_mode(void) +{ + int ret = 0; + bool m_mode = false; + + ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE, &m_mode); + if(ret < 0) { + _E("Failed to get SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE:%s %d", SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE, ret); + } + + _D("m_mode : %d", m_mode); + + return m_mode; +} + +static void _text_update(Evas_Object *layout) +{ + Evas_Object *button = NULL; + ret_if(layout == NULL); + + button = elm_object_part_content_get(layout, "button.1"); + if (button != NULL) { + elm_object_part_text_set(button, "contents", _("IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB")); + } + + button = elm_object_part_content_get(layout, "button.2"); + if (button != NULL) { + elm_object_part_text_set(button, "name", _("IDS_ST_MBODY_DO_NOT_DISTURB_ABB")); + } +} + +static void _status_update(Evas_Object *layout) +{ + ret_if(layout == NULL); + + Evas_Object *button1 = elm_object_part_content_get(layout, "button.1"); + if (button1 != NULL) { + if (_is_flight_mode() == 1) { + elm_object_signal_emit(button1, "icon,disable", "prog"); + } else { + elm_object_signal_emit(button1, "icon,enable", "prog"); + } + } + + _text_update(layout); +} + +static void _vconf_cb(keynode_t *node, void *data) +{ + _status_update((Evas_Object*)data); +} + +static void _system_settings_cb(system_settings_key_e key, void *data) +{ + _status_update((Evas_Object *)data); +} + +#define CALLSETTING_APP "org.tizen.w-call-setting" +#define CALLSETTING_KEY "type" +#define CALLSETTING_VALUE "fwd_call" +static void _icon_1_clicked_cb(void *cbdata, Evas_Object *obj, void *event_info) +{ + _D(""); + + effect_play_sound(); + + if (_is_flight_mode() == 1) { +#if 0 + Evas_Object *win = main_get_info()->win; + if (win != NULL) { + util_create_toast_popup(win, + "IDS_ST_TPOP_UNABLE_TO_TURN_ON_MOBILE_DATA_WHILE_FLIGHT_MODE_ENABLED_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN_ABB"); + } +#endif + return; + } + + int ret = 0; + app_control_h ac = NULL; + if ((ret = app_control_create(&ac)) != APP_CONTROL_ERROR_NONE) { + _E("Failed to create app control:%d", ret); + } + ret_if(ac == NULL); + + app_control_set_operation(ac, APP_CONTROL_OPERATION_VIEW); + app_control_set_app_id(ac, CALLSETTING_APP); + app_control_add_extra_data(ac, CALLSETTING_KEY, CALLSETTING_VALUE); + home_dbus_cpu_booster_signal_send(); + if ((ret = app_control_send_launch_request(ac, NULL, NULL)) != APP_CONTROL_ERROR_NONE) { + _E("Failed to launch %s(%d)", CALLSETTING_APP, ret); + } + app_control_destroy(ac); +} + +static char *_button_1_access_info_cb(void *data, Evas_Object *obj) +{ + int index = (int)data; + char *info = NULL; + + if (index == 1) { + info = _("IDS_CST_OPT_FWD_CALLS_TO_GEAR_ABB"); + } + + if (info != NULL) { + return strdup(info); + } + + return NULL; +} + +static Evas_Object *_view_create(Evas_Object *page) +{ + Evas_Object *focus = NULL; + Eina_Bool ret = EINA_TRUE; + Evas_Object *item = page_get_item(page); + retv_if(item == NULL, NULL); + + Evas_Object *layout = elm_layout_add(item); + retv_if(layout == NULL, NULL); + ret = elm_layout_file_set(layout, PAGE_CLOCK_EDJE_FILE, "blockingmode"); + retv_if(ret == EINA_FALSE, NULL); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(layout); + + Evas_Object *button1 = elm_layout_add(layout); + if (button1 != NULL) { + ret = elm_layout_file_set(button1, PAGE_CLOCK_EDJE_FILE, "hidden_item_call_fwd"); + if (ret == EINA_TRUE) { + evas_object_size_hint_weight_set(button1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + focus = elm_button_add(button1); + if (focus != NULL) { + elm_object_style_set(focus, "focus"); + elm_access_info_cb_set(focus, ELM_ACCESS_INFO, _button_1_access_info_cb, (void*)1); + evas_object_smart_callback_add(focus, "clicked", _icon_1_clicked_cb, page); + elm_access_object_unregister(focus); + elm_object_part_content_set(button1, "focus", focus); + } + + elm_object_part_content_set(layout, "button.1", button1); + evas_object_show(button1); + } else { + _E("Failed to set file"); + evas_object_del(button1); + } + } + + if (clock_service_event_state_get(CLOCK_EVENT_SIM) == CLOCK_EVENT_SIM_NOT_INSERTED) { + elm_object_signal_emit(layout, "button.1.hide", "prog"); + } + + return layout; +} + +HAPI Evas_Object *clock_view_hidden_add(Evas_Object *page) +{ + Evas_Object *view = NULL; + retv_if(page == NULL, NULL); + + view = _view_create(page); + retv_if(view == NULL, NULL); + + _status_update(view); + + if (vconf_ignore_key_changed(VCONFKEY_TELEPHONY_MODEM_ALWAYS_ON_STATE, + _vconf_cb) < 0) { + _E("Failed to ignore the VCONFKEY_TELEPHONY_MODEM_ALWAYS_ON_STATE callback"); + } + if (vconf_notify_key_changed(VCONFKEY_TELEPHONY_MODEM_ALWAYS_ON_STATE, + _vconf_cb, view) < 0) { + _E("Failed to get notification from VCONFKEY_TELEPHONY_MODEM_ALWAYS_ON_STATE"); + } + if (vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SIM_SLOT, + _vconf_cb) < 0) { + _E("Failed to ignore the VCONFKEY_TELEPHONY_SIM_SLOT callback"); + } + if (vconf_notify_key_changed(VCONFKEY_TELEPHONY_SIM_SLOT, + _vconf_cb, view) < 0) { + _E("Failed to get notification from VCONFKEY_TELEPHONY_SIM_SLOT"); + } + if (system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE) < 0) { + _E("Failed to ignore the SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE callback"); + } + if (system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE, + _system_settings_cb, view) < 0) { + _E("Failed to get notification from SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE"); + } + + return view; +} +#endif + +HAPI void clock_view_hidden_event_handler(Evas_Object *page, int event) +{ +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW +#ifdef RUN_ON_DEVICE + ret_if(page == NULL); + Evas_Object *layout = _hidden_layout_get(page); + ret_if(layout == NULL); + Evas_Object *focus = NULL; + Evas_Object *button = NULL; + + switch (event) { + case CLOCK_EVENT_VIEW_HIDDEN_SHOW: + if (clock_service_event_state_get(CLOCK_EVENT_SCREEN_READER) == CLOCK_EVENT_SCREEN_READER_ON) { + if (tutorial_is_exist() == 0) { + button = elm_object_part_content_get(layout, "button.1"); + if (button != NULL) { + focus = elm_object_part_content_get(button, "focus"); + if (focus != NULL) { + elm_access_object_register(focus, layout); + } + } + button = elm_object_part_content_get(layout, "button.2"); + if (button != NULL) { + focus = elm_object_part_content_get(button, "focus"); + if (focus != NULL) { + elm_access_object_register(focus, layout); + } + } + } + } + evas_object_data_set(layout, PRIVATE_DATA_KEY_VISIBLE, (void*)1); + break; + case CLOCK_EVENT_VIEW_HIDDEN_HIDE: + button = elm_object_part_content_get(layout, "button.1"); + if (button != NULL) { + focus = elm_object_part_content_get(button, "focus"); + if (focus != NULL) { + elm_access_object_unregister(focus); + } + } + button = elm_object_part_content_get(layout, "button.2"); + if (button != NULL) { + focus = elm_object_part_content_get(button, "focus"); + if (focus != NULL) { + elm_access_object_unregister(focus); + } + } + + evas_object_data_del(layout, PRIVATE_DATA_KEY_VISIBLE); + break; + case CLOCK_EVENT_APP_LANGUAGE_CHANGED: + _status_update(layout); + break; + case CLOCK_EVENT_POWER_ENHANCED_MODE_ON: + button = elm_object_part_content_get(layout, "button.1"); + if (button != NULL) { + //elm_object_signal_emit(button, "gray,enable", "prog"); + } + button = elm_object_part_content_get(layout, "button.2"); + if (button != NULL) { + //elm_object_signal_emit(button, "gray,enable", "prog"); + } + break; + case CLOCK_EVENT_POWER_ENHANCED_MODE_OFF: + button = elm_object_part_content_get(layout, "button.1"); + if (button != NULL) { + //elm_object_signal_emit(button, "gray,disable", "prog"); + } + button = elm_object_part_content_get(layout, "button.2"); + if (button != NULL) { + //elm_object_signal_emit(button, "gray,disable", "prog"); + } + break; + case CLOCK_EVENT_SIM_NOT_INSERTED: + elm_object_signal_emit(layout, "button.1.hide", "prog"); + break; + case CLOCK_EVENT_SIM_INSERTED: + elm_object_signal_emit(layout, "button.1.show", "prog"); + break; + } +#endif +#endif +} diff --git a/home/src/clock_view_indicator.c b/home/src/clock_view_indicator.c new file mode 100644 index 0000000..5131847 --- /dev/null +++ b/home/src/clock_view_indicator.c @@ -0,0 +1,368 @@ +/* + * Samsung API + * Copyright (c) 2013 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 + +#include "conf.h" +#include "layout.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "page.h" +#include "scroller.h" +#include "key.h" +#include "effect.h" +#include "minictrl.h" +#include "clock_service.h" +#include "power_mode.h" +#include "dbus.h" + +#define ICON_TYPE_NONE 0 +#define ICON_TYPE_MODEM_OFF 1 +#define ICON_TYPE_DND_ON 2 +#define ICON_TYPE_CALLFW 3 + +#define ENABLE_AUTO_CALL_FWD +#define PRIVATE_DATA_KEY_INDICATOR_ICON_TYPE "p_d_k_iit" + +static void _view_type_set(Evas_Object *view, int type) +{ + ret_if(view == NULL); + + evas_object_data_set(view, PRIVATE_DATA_KEY_INDICATOR_ICON_TYPE, (void*)type); +} + +static int _view_type_get(Evas_Object *view) +{ + retv_if(view == NULL, ICON_TYPE_NONE); + + return (int)evas_object_data_get(view, PRIVATE_DATA_KEY_INDICATOR_ICON_TYPE); +} + +#define MODEM_SETTING_APPID "org.tizen.clocksetting.network" +static void _modem_off_icon_clicked_cb(void *cbdata, Evas_Object *obj, void *event_info) +{ + _D(""); + + int ret = 0; + + app_control_h ac = NULL; + if ((ret = app_control_create(&ac)) != APP_CONTROL_ERROR_NONE) { + _E("Failed to create app control:%d", ret); + } + ret_if(ac == NULL); + + app_control_set_operation(ac, APP_CONTROL_OPERATION_VIEW); + app_control_set_app_id(ac, MODEM_SETTING_APPID); + if ((ret = app_control_send_launch_request(ac, NULL, NULL)) != APP_CONTROL_ERROR_NONE) { + _E("Failed to launch %s(%d)", MODEM_SETTING_APPID, ret); + } + app_control_destroy(ac); + + effect_play_sound(); +} + +static Evas_Object *_view_modem_icon(Evas_Object *parent, int type) +{ + + int ret = 0; + Evas_Object *layout = NULL; + Evas_Object *focus = NULL; + + if (type == ICON_TYPE_MODEM_OFF) { + layout = elm_layout_add(parent); + retv_if(layout == NULL, NULL); + ret = elm_layout_file_set(layout, PAGE_CLOCK_EDJE_FILE, "modem_off_icon"); + retv_if(ret == EINA_FALSE, NULL); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + focus = elm_button_add(layout); + if (focus != NULL) { + elm_object_style_set(focus, "focus"); + evas_object_smart_callback_add(focus, "clicked", _modem_off_icon_clicked_cb, NULL); + elm_object_part_content_set(layout, "focus", focus); + } + + evas_object_show(layout); + } + + return layout; +} + +static int _view_modem_icon_type_get(void) +{ + int sap = clock_service_event_state_get(CLOCK_EVENT_SAP); + int modem = clock_service_event_state_get(CLOCK_EVENT_MODEM); + + _D("sap:0x%x modem:0x%x", sap, modem); + + if (sap == CLOCK_EVENT_SAP_OFF && modem == CLOCK_EVENT_MODEM_OFF) { + return ICON_TYPE_MODEM_OFF; + } else if (sap == CLOCK_EVENT_SAP_ON || modem == CLOCK_EVENT_MODEM_ON) { + return ICON_TYPE_NONE; + } + + return ICON_TYPE_NONE; +} + +#define BLOCKINGMODE_APP "org.tizen.clocksetting.blockingmode" +#define BLOCKINGMODE_KEY "viewtype" +static void _dnd_clicked_cb(void *cbdata, Evas_Object *obj, void *event_info) +{ +#if 0 + int ret = 0; + const char *value = "disable"; + _D("blockingmode"); + + app_control_h ac = NULL; + if ((ret = app_control_create(&ac)) != APP_CONTROL_ERROR_NONE) { + _E("Failed to create app control:%d", ret); + } + ret_if(ac == NULL); + + app_control_set_operation(ac, APP_CONTROL_OPERATION_VIEW); + app_control_set_app_id(ac, BLOCKINGMODE_APP); + app_control_add_extra_data(ac, BLOCKINGMODE_KEY, value); + home_dbus_cpu_booster_signal_send(); + if ((ret = app_control_send_launch_request(ac, NULL, NULL)) != APP_CONTROL_ERROR_NONE) { + _E("Failed to launch %s(%d)", BLOCKINGMODE_APP, ret); + } + app_control_destroy(ac); +#endif + + if (util_feature_enabled_get(FEATURE_CLOCK_HIDDEN_BUTTON) == 0) { + return ; + } + + clock_h clock = clock_manager_clock_get(CLOCK_ATTACHED); + ret_if(!clock); + ret_if(!clock->view); + + /* Hide indicator */ + evas_object_smart_callback_call(clock->view, CLOCK_SMART_SIGNAL_VIEW_REQUEST, (void*)CLOCK_VIEW_REQUEST_DRAWER_SHOW); + + effect_play_sound(); +} + +static char *_dnd_access_info_cb(void *data, Evas_Object *obj) +{ + int index = (int)data; + char *info = NULL; + + if (index == 1) { + info = _("IDS_ST_MBODY_DO_NOT_DISTURB_ABB"); + } + + if (info != NULL) { + return strdup(info); + } + + return NULL; +} + +static char *_dnd_access_state_cb(void *data, Evas_Object *obj) +{ + char *state = NULL; + int is_enabled = 0; + + if (clock_service_event_state_get(CLOCK_EVENT_DND) == CLOCK_EVENT_DND_ON) { + is_enabled = 1; + } + + if (is_enabled == 1) { + state = _("IDS_COM_BODY_ON_M_STATUS"); + } else { + state = _("IDS_COM_BODY_OFF_M_STATUS"); + } + + if (state) { + return strdup(state); + } + + return NULL; +} + +static Evas_Object *_view_dnd_icon(Evas_Object *parent, int type) +{ + + int ret = 0; + Evas_Object *layout = NULL; + Evas_Object *focus = NULL; + + if (type == ICON_TYPE_DND_ON) { + layout = elm_layout_add(parent); + retv_if(layout == NULL, NULL); + ret = elm_layout_file_set(layout, PAGE_CLOCK_EDJE_FILE, "dnd_icon"); + retv_if(ret == EINA_FALSE, NULL); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + focus = elm_button_add(layout); + if (focus != NULL) { + elm_object_style_set(focus, "focus"); + elm_access_info_cb_set(focus, ELM_ACCESS_INFO, _dnd_access_info_cb, (void*)1); + elm_access_info_cb_set(focus, ELM_ACCESS_STATE, _dnd_access_state_cb, (void*)1); + evas_object_smart_callback_add(focus, "clicked", _dnd_clicked_cb, NULL); + elm_object_part_content_set(layout, "focus", focus); + } + + evas_object_show(layout); + } + + return layout; +} + +static int _view_dnd_icon_type_get(void) +{ + int dnd = clock_service_event_state_get(CLOCK_EVENT_DND); + + _D("dnd:0x%x", dnd); + + if (dnd == CLOCK_EVENT_DND_ON) { + return ICON_TYPE_DND_ON; + } + + return ICON_TYPE_NONE; +} + +#define VCONFKEY_MODEM_ON_OFF_ENABLED "file/private/weconn/modem_onoff_control" +static Evas_Object *_view_create_by_type(Evas_Object *page, int type) +{ + Evas_Object *view = NULL; + Evas_Object *item = page_get_item(page); + retv_if(item == NULL, NULL); + + _D("%x", type); + + int is_feature_enabled = 0; + + switch (type) { + case ICON_TYPE_MODEM_OFF: + if (vconf_get_int(VCONFKEY_MODEM_ON_OFF_ENABLED, &is_feature_enabled) != 0) { + _E("Failed to get %s", VCONFKEY_MODEM_ON_OFF_ENABLED); + } + + if (is_feature_enabled == 1) { + _E("modem on/off feature isn't enabled"); + view = _view_modem_icon(item, ICON_TYPE_MODEM_OFF); + } else { + view = NULL; + } + break; + case ICON_TYPE_DND_ON: + view = _view_dnd_icon(item, ICON_TYPE_DND_ON); + break; + } + + _view_type_set(view, type); + + return view; +} + +static void _view_remove_by_type(Evas_Object *page, int type) +{ + Evas_Object *slot1 = NULL; + Evas_Object *slot2 = NULL; + Evas_Object *item = page_get_item(page); + ret_if(item == NULL); + + slot1 = elm_object_part_content_get(item, "indicator.1"); + slot2 = elm_object_part_content_get(item, "indicator.2"); + + if (_view_type_get(slot1) == type) { + elm_object_part_content_unset(item, "indicator.1"); + evas_object_del(slot1); + elm_object_part_content_unset(item, "indicator.2"); + elm_object_part_content_set(item, "indicator.1", slot2); + } else if (_view_type_get(slot2) == type) { + elm_object_part_content_unset(item, "indicator.2"); + evas_object_del(slot2); + } +} + +static void _view_add_by_type(Evas_Object *page, int type) +{ + Evas_Object *slot1 = NULL; + Evas_Object *slot2 = NULL; + Evas_Object *item = page_get_item(page); + ret_if(item == NULL); + + slot1 = elm_object_part_content_get(item, "indicator.1"); + if (_view_type_get(slot1) == type) { + return; + } + slot2 = elm_object_part_content_get(item, "indicator.2"); + if (_view_type_get(slot2) == type) { + return; + } + + //view create + Evas_Object *view = _view_create_by_type(page, type); + if (view != NULL) { + if (slot1 == NULL) { + elm_object_part_content_set(item, "indicator.1", view); + } else if (slot1 != NULL && slot2 == NULL) { + elm_object_part_content_set(item, "indicator.2", view); + } else { + _E("it can't be.."); + } + } +} + +HAPI void clock_view_indicator_add(Evas_Object *page) +{ + ret_if(page == NULL); + + _view_add_by_type(page, _view_modem_icon_type_get()); + _view_add_by_type(page, _view_dnd_icon_type_get()); +#ifdef ENABLE_AUTO_CALL_FWD + _view_add_by_type(page, ICON_TYPE_CALLFW); +#endif +} + +HAPI void clock_view_indicator_event_handler(Evas_Object *page, int event) +{ + ret_if(page == NULL); + + _D("%p %x", page, event); + + if (((event & CLOCK_EVENT_CATEGORY(CLOCK_EVENT_SAP)) == CLOCK_EVENT_CATEGORY(CLOCK_EVENT_SAP)) || + ((event & CLOCK_EVENT_CATEGORY(CLOCK_EVENT_MODEM)) == CLOCK_EVENT_CATEGORY(CLOCK_EVENT_MODEM))) { + if (_view_modem_icon_type_get() == ICON_TYPE_MODEM_OFF) { + _view_add_by_type(page, ICON_TYPE_MODEM_OFF); + } else { + _view_remove_by_type(page, ICON_TYPE_MODEM_OFF); + } + } else if (event & CLOCK_EVENT_CATEGORY(CLOCK_EVENT_DND)) { + if (_view_dnd_icon_type_get() == ICON_TYPE_DND_ON) { + _view_add_by_type(page, ICON_TYPE_DND_ON); + } else { + _view_remove_by_type(page, ICON_TYPE_DND_ON); + } + } +} diff --git a/home/src/critical_log.c b/home/src/critical_log.c new file mode 100755 index 0000000..3e2e2df --- /dev/null +++ b/home/src/critical_log.c @@ -0,0 +1,233 @@ +/* + * Copyright 2013 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 + +#include +#include +#include + +#include "util.h" +#include "critical_log.h" + +#if !defined(SECURE_LOGD) +#define SECURE_LOGD LOGD +#endif + +#if !defined(SECURE_LOGW) +#define SECURE_LOGW LOGW +#endif + +#if !defined(SECURE_LOGE) +#define SECURE_LOGE LOGE +#endif + +#if !defined(DbgPrint) +#define DbgPrint(format, arg...) SECURE_LOGD(format, ##arg) +#endif + +#if !defined(ErrPrint) +#define ErrPrint(format, arg...) SECURE_LOGE(format, ##arg) +#endif + +#if !defined(WarnPrint) +#define WarnPrint(format, arg...) SECURE_LOGW(format, ##arg) +#endif + +#define DbgFree(a) free(a) + +#define SLAVE_LOG_PATH "/tmp/.w-home_log/" +#define MAX_LOG_LINE 80 +#define MAX_LOG_FILE 3 + +#define CRITICAL_SECTION_BEGIN(handle) \ +do { \ + int ret; \ + ret = pthread_mutex_lock(handle); \ + if (ret != 0) \ + ErrPrint("Failed to lock: %s\n", strerror(ret)); \ +} while (0) + +#define CRITICAL_SECTION_END(handle) \ +do { \ + int ret; \ + ret = pthread_mutex_unlock(handle); \ + if (ret != 0) \ + ErrPrint("Failed to unlock: %s\n", strerror(ret)); \ +} while (0) + +static struct { + FILE *fp; + int file_id; + int nr_of_lines; + char *filename; + pthread_mutex_t cri_lock; +} s_info = { + .fp = NULL, + .file_id = 0, + .nr_of_lines = 0, + .filename = NULL, + .cri_lock = PTHREAD_MUTEX_INITIALIZER, +}; + + + +static inline void rotate_log(void) +{ + char *filename; + int namelen; + + if (s_info.nr_of_lines < MAX_LOG_LINE) { + return; + } + + if (!s_info.filename) { + return; + } + + s_info.file_id = (s_info.file_id + 1) % MAX_LOG_FILE; + + namelen = strlen(s_info.filename) + strlen(SLAVE_LOG_PATH) + 30; + filename = malloc(namelen); + if (filename) { + snprintf(filename, namelen, "%s/%d_%s.%d", SLAVE_LOG_PATH, s_info.file_id, s_info.filename, getpid()); + + if (s_info.fp) { + if (fclose(s_info.fp) != 0) { + ErrPrint("fclose: %s\n", strerror(errno)); + } + } + + s_info.fp = fopen(filename, "w+"); + if (!s_info.fp) { + ErrPrint("Failed to open a file: %s\n", filename); + } + + DbgFree(filename); + } + + s_info.nr_of_lines = 0; +} + + + +HAPI int critical_log(const char *func, int line, const char *fmt, ...) +{ + va_list ap; + int ret; + + if (!s_info.fp) { + return WIDGET_ERROR_IO_ERROR; + } + + CRITICAL_SECTION_BEGIN(&s_info.cri_lock); + + fprintf(s_info.fp, "%lf [%s:%d] ", util_timestamp(), util_basename((char *)func), line); + + va_start(ap, fmt); + ret = vfprintf(s_info.fp, fmt, ap); + va_end(ap); + + fflush(s_info.fp); + + s_info.nr_of_lines++; + rotate_log(); + + CRITICAL_SECTION_END(&s_info.cri_lock); + return ret; +} + + + +HAPI int critical_log_init(const char *name) +{ + int namelen; + char *filename; + + if (!name) { + ErrPrint("name is NULL"); + return WIDGET_ERROR_INVALID_PARAMETER; + } + + if (mkdir(SLAVE_LOG_PATH, 0755) < 0) { + ErrPrint("mkdir(%s) returns: %s\n", SLAVE_LOG_PATH, strerror(errno)); + } + + if (s_info.fp) { + return WIDGET_ERROR_NONE; + } + + s_info.filename = strdup(name); + if (!s_info.filename) { + ErrPrint("Failed to create a log file\n"); + return WIDGET_ERROR_OUT_OF_MEMORY; + } + + namelen = strlen(name) + strlen(SLAVE_LOG_PATH) + 30; + + filename = malloc(namelen); + if (!filename) { + ErrPrint("Failed to create a log file\n"); + DbgFree(s_info.filename); + s_info.filename = NULL; + return WIDGET_ERROR_OUT_OF_MEMORY; + } + + snprintf(filename, namelen, "%s/%d_%s.%d", SLAVE_LOG_PATH, s_info.file_id, name, getpid()); + + s_info.fp = fopen(filename, "w+"); + if (!s_info.fp) { + ErrPrint("Failed to open log: %s\n", strerror(errno)); + DbgFree(s_info.filename); + s_info.filename = NULL; + DbgFree(filename); + return WIDGET_ERROR_IO_ERROR; + } + + DbgFree(filename); + return WIDGET_ERROR_NONE; +} + + + +HAPI void critical_log_fini(void) +{ + if (s_info.filename) { + DbgFree(s_info.filename); + s_info.filename = NULL; + } + + if (s_info.fp) { + if (fclose(s_info.fp) != 0) { + ErrPrint("fclose: %s\n", strerror(errno)); + } + s_info.fp = NULL; + } +} + + + +/* End of a file */ diff --git a/home/src/db.c b/home/src/db.c new file mode 100644 index 0000000..4197853 --- /dev/null +++ b/home/src/db.c @@ -0,0 +1,718 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#include +#include // WIDGET_VIEWER_EVAS_DEFAULT_PERIOD + +#include "util.h" +#include "db.h" +#include "log.h" +#include "page_info.h" +#define HOME_DB_FILE DATADIR"/.home.db" +#define HOME_DB_TTS_FILE DATADIR"/.home_tts.db" + + +#define retv_with_dbmsg_if(expr, val) do { \ + if (expr) { \ + _E("%s", sqlite3_errmsg(db_info.db)); \ + return (val); \ + } \ +} while (0) + + + +static struct { + sqlite3 *db; + char *db_file; +} db_info = { + .db = NULL, + .db_file = HOME_DB_FILE, +}; + +struct stmt { + sqlite3_stmt *stmt; +}; + + + +HAPI w_home_error_e db_init(db_file_e db_file) +{ + retv_if(!db_file, W_HOME_ERROR_FAIL); + + db_close(); + + switch (db_file) { + case DB_FILE_NORMAL: + db_info.db_file = HOME_DB_FILE; + break; + case DB_FILE_TTS: + db_info.db_file = HOME_DB_TTS_FILE; + break; + default: + _E("Invalid db_file"); + } + + retv_if(W_HOME_ERROR_NONE != + db_open(db_info.db_file), -1); + + return W_HOME_ERROR_NONE; +} + + + +HAPI w_home_error_e db_open(const char *db_file) +{ + int ret; + + retv_if(!db_file, W_HOME_ERROR_INVALID_PARAMETER); + if (db_info.db) { + return W_HOME_ERROR_NONE; + } + + ret = db_util_open(db_file, &db_info.db, DB_UTIL_REGISTER_HOOK_METHOD); + if (ret != SQLITE_OK) + _E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, W_HOME_ERROR_FAIL); + + return W_HOME_ERROR_NONE; +} + + + +HAPI stmt_h *db_prepare(const char *query) +{ + stmt_h *handle; + int ret; + + retv_if(!query, NULL); + + handle = calloc(1, sizeof(stmt_h)); + retv_if(!handle, NULL); + + ret = sqlite3_prepare_v2(db_info.db, query, strlen(query), &(handle->stmt), NULL); + if (ret != SQLITE_OK) { + free(handle); + _E("%s, %s", query, sqlite3_errmsg(db_info.db)); + return NULL; + } + + return handle; +} + + + +HAPI w_home_error_e db_bind_bool(stmt_h *handle, int idx, bool value) +{ + int ret; + + retv_if(!handle, W_HOME_ERROR_FAIL); + + ret = sqlite3_bind_int(handle->stmt, idx, (int) value); + if (ret != SQLITE_OK) + _E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, W_HOME_ERROR_FAIL); + + return W_HOME_ERROR_NONE; +} + + + +HAPI w_home_error_e db_bind_int(stmt_h *handle, int idx, int value) +{ + int ret; + + retv_if(!handle, W_HOME_ERROR_FAIL); + + ret = sqlite3_bind_int(handle->stmt, idx, value); + if (ret != SQLITE_OK) + _E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, W_HOME_ERROR_FAIL); + + return W_HOME_ERROR_NONE; +} + + + +HAPI w_home_error_e db_bind_str(stmt_h *handle, int idx, const char *str) +{ + int ret; + + retv_if(!handle, W_HOME_ERROR_FAIL); + retv_if(!str, W_HOME_ERROR_FAIL); + + ret = sqlite3_bind_text(handle->stmt, idx, str, strlen(str), SQLITE_TRANSIENT); + if (ret != SQLITE_OK) + _E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, W_HOME_ERROR_FAIL); + + return W_HOME_ERROR_NONE; +} + + + +HAPI w_home_error_e db_next(stmt_h *handle) +{ + int ret; + + retv_if(!handle, W_HOME_ERROR_FAIL); + + ret = sqlite3_step(handle->stmt); + switch (ret) { + case SQLITE_ROW: + return W_HOME_ERROR_NONE; + case SQLITE_DONE: + return W_HOME_ERROR_NO_DATA; + default: + _E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(1, W_HOME_ERROR_FAIL); + } +} + + + +HAPI bool db_get_bool(stmt_h *handle, int index) +{ + retv_if(!handle, false); + return (bool) sqlite3_column_int(handle->stmt, index); +} + + + +HAPI int db_get_int(stmt_h *handle, int index) +{ + retv_if(!handle, 0); + return sqlite3_column_int(handle->stmt, index); +} + + +HAPI const char *db_get_str(stmt_h *handle, int index) +{ + retv_if(!handle, NULL); + return (const char *) sqlite3_column_text(handle->stmt, index); +} + + + +HAPI w_home_error_e db_reset(stmt_h *handle) +{ + int ret; + + retv_if(!handle, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(!handle->stmt, W_HOME_ERROR_INVALID_PARAMETER); + + ret = sqlite3_reset(handle->stmt); + if (ret != SQLITE_OK) + _E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, W_HOME_ERROR_FAIL); + + sqlite3_clear_bindings(handle->stmt); + + return W_HOME_ERROR_NONE; +} + + + +HAPI w_home_error_e db_finalize(stmt_h *handle) +{ + int ret; + + retv_if(!handle, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(!handle->stmt, W_HOME_ERROR_INVALID_PARAMETER); + + ret = sqlite3_finalize(handle->stmt); + if (ret != SQLITE_OK) + _E("%s", sqlite3_errmsg(db_info.db)); + retv_with_dbmsg_if(ret != SQLITE_OK, W_HOME_ERROR_FAIL); + free(handle); + + return W_HOME_ERROR_NONE; +} + + + +HAPI w_home_error_e db_exec(const char *query) +{ + retv_if(!query, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(!db_info.db, W_HOME_ERROR_FAIL); + + stmt_h *handle = db_prepare(query); + retv_if(!handle, W_HOME_ERROR_FAIL); + + goto_if(W_HOME_ERROR_FAIL == db_next(handle), ERROR); + if (W_HOME_ERROR_NONE != db_finalize(handle)) + return W_HOME_ERROR_FAIL; + + return W_HOME_ERROR_NONE; + +ERROR: + if (handle) db_finalize(handle); + return W_HOME_ERROR_FAIL; +} + + + +HAPI void db_close(void) +{ + if (!db_info.db) { + _D("DB is already NULL"); + return; + } + sqlite3_close(db_info.db); + db_info.db = NULL; +} + + + +HAPI w_home_error_e db_begin_transaction(void) +{ + int ret = -1; + + ret = sqlite3_exec(db_info.db, "BEGIN IMMEDIATE TRANSACTION", NULL, NULL, NULL); + + while (SQLITE_BUSY == ret) { + sleep(1); + ret = sqlite3_exec(db_info.db, "BEGIN IMMEDIATE TRANSACTION", NULL, NULL, NULL); + } + + if (SQLITE_OK != ret) { + _E("sqlite3_exec() Failed(%d)", ret); + return W_HOME_ERROR_FAIL; + } + + return W_HOME_ERROR_NONE; +} + + + +#define COMMIT_TRY_MAX 3 +HAPI w_home_error_e db_end_transaction(bool success) +{ + int ret = -1; + int i = 0; + char *errmsg = NULL; + + if (success) { + ret = sqlite3_exec(db_info.db, "COMMIT TRANSACTION", NULL, NULL, &errmsg); + if (ret != SQLITE_OK) { + _E("sqlite3_exec(COMMIT) Failed(%d, %s)", ret, errmsg); + sqlite3_free(errmsg); + + while (SQLITE_BUSY == ret && i < COMMIT_TRY_MAX) { + i++; + sleep(1); + ret = sqlite3_exec(db_info.db, "COMMIT TRANSACTION", NULL, NULL, NULL); + } + + if (ret != SQLITE_OK) { + _E("sqlite3_exec() Failed(%d)", ret); + ret = sqlite3_exec(db_info.db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); + if (ret != SQLITE_OK) { + _E("sqlite3_exec() Failed(%d)", ret); + } + + return W_HOME_ERROR_FAIL; + } + } + } else { + ret = sqlite3_exec(db_info.db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); + if (ret != SQLITE_OK) { + _E("sqlite3_exec() Failed(%d)", ret); + return W_HOME_ERROR_FAIL; + } + } + + return W_HOME_ERROR_NONE; +} + + + +#define HOME_DB_FILE DATADIR"/.home.db" +#define HOME_TABLE "home" +#define QUERY_INSERT_ITEM "INSERT INTO "HOME_TABLE" "\ + "(id, subid, ordering) "\ + "VALUES "\ + "('%s', '%s', %d);" +HAPI int db_insert_item(const char *id, const char *subid, int ordering) +{ + char *query; + + retv_if(!id, -1); + retv_if(W_HOME_ERROR_NONE != + db_open(db_info.db_file), -1); + + if (subid) { + _D("Insert the item[%s:%s:%d]", id, subid, ordering); + query = sqlite3_mprintf(QUERY_INSERT_ITEM, id, subid, ordering); + } else { + _D("Insert the item[%s:%d]", id, ordering); + query = sqlite3_mprintf(QUERY_INSERT_ITEM, id, "", ordering); + } + retv_if(query == NULL, -1); + + if (db_exec(query) != W_HOME_ERROR_NONE) { + _E("Cannot execute query.[%s]", query); + sqlite3_free(query); + return -1; + } + + sqlite3_free(query); + + /* keep the home DB opened */ + + return 0; +} + + + +#define QUERY_UPDATE_ITEM "UPDATE "HOME_TABLE" SET ordering=%d WHERE id='%s' and subid='%s'" +HAPI int db_update_item(const char *id, const char *subid, int ordering) +{ + char *query; + + retv_if(!id, -1); + retv_if(W_HOME_ERROR_NONE != + db_open(db_info.db_file), -1); + + if (subid) { + _D("Update the item[%s:%s:%d]", id, subid, ordering); + query = sqlite3_mprintf(QUERY_UPDATE_ITEM, ordering, id, subid); + } else { + _D("Update the item[%s:%d]", id, ordering); + query = sqlite3_mprintf(QUERY_UPDATE_ITEM, ordering, id, ""); + } + retv_if(query == NULL, -1); + + if (db_exec(query) != W_HOME_ERROR_NONE) { + _E("Cannot execute query.[%s]", query); + sqlite3_free(query); + return -1; + } + + sqlite3_free(query); + + /* keep the home DB opened */ + + return 0; +} + + + +#define QUERY_UPDATE_ITEM_BY_ORDERING "UPDATE "HOME_TABLE" SET id='%s', subid='%s' WHERE ordering=%d" +HAPI int db_update_item_by_ordering(const char *id, const char *subid, int ordering) +{ + char *query = NULL; + + retv_if(!id, -1); + retv_if(W_HOME_ERROR_NONE != + db_open(db_info.db_file), -1); + + if (subid) { + _SD("Update the item[%s:%s:%d]", id, subid, ordering); + query = sqlite3_mprintf(QUERY_UPDATE_ITEM_BY_ORDERING, id, subid, ordering); + } else { + _SD("Update the item[%s:%d]", id, ordering); + query = sqlite3_mprintf(QUERY_UPDATE_ITEM_BY_ORDERING, id, "", ordering); + } + retv_if(query == NULL, -1); + + if (db_exec(query) != W_HOME_ERROR_NONE) { + _E("Cannot execute query.[%s]", query); + sqlite3_free(query); + return -1; + } + + sqlite3_free(query); + + /* keep the home DB opened */ + + return 0; +} + + + +#define QUERY_REMOVE_ITEM "DELETE FROM "HOME_TABLE" WHERE id='%s' and subid='%s'" +HAPI int db_remove_item(const char *id, const char *subid) +{ + char *query; + + retv_if(!id, -1); + retv_if(W_HOME_ERROR_NONE != + db_open(db_info.db_file), -1); + + if (subid) { + _D("Remove the item[%s:%s]", id, subid); + query = sqlite3_mprintf(QUERY_REMOVE_ITEM, id, subid); + } else { + _D("Remove the item[%s]", id); + query = sqlite3_mprintf(QUERY_REMOVE_ITEM, id, ""); + } + retv_if(query == NULL, -1); + + if (db_exec(query) != W_HOME_ERROR_NONE) { + _E("Cannot execute query.[%s]", query); + sqlite3_free(query); + return -1; + } + + sqlite3_free(query); + + /* keep the home DB opened */ + + return 0; +} + + + +#define QUERY_REMOVE_ITEM_AFTER_MAX "DELETE FROM "HOME_TABLE" WHERE ordering > %d" +HAPI int db_remove_item_after_max(int max) +{ + char *query; + + _D("Remove the item after max[%d]", max); + + retv_if(W_HOME_ERROR_NONE != + db_open(db_info.db_file), -1); + + query = sqlite3_mprintf(QUERY_REMOVE_ITEM_AFTER_MAX, max); + retv_if(query == NULL, -1); + + if (db_exec(query) != W_HOME_ERROR_NONE) { + _E("Cannot execute query.[%s]", query); + sqlite3_free(query); + return -1; + } + + sqlite3_free(query); + + /* keep the home DB opened */ + + return 0; +} + + + +#define QUERY_REMOVE_ALL_ITEM "DELETE FROM "HOME_TABLE +HAPI int db_remove_all_item(void) +{ + char *query; + + _D("Remove all the item"); + + retv_if(W_HOME_ERROR_NONE != + db_open(db_info.db_file), -1); + + query = sqlite3_mprintf(QUERY_REMOVE_ALL_ITEM); + retv_if(query == NULL, -1); + + if (db_exec(query) != W_HOME_ERROR_NONE) { + _E("Cannot execute query.[%s]", query); + sqlite3_free(query); + return -1; + } + + sqlite3_free(query); + + if (preference_set_string(VCONF_KEY_HOME_LOGGING, ";") != 0) { + _SE("Failed to set %s as NULL", VCONF_KEY_HOME_LOGGING); + } else { + _SD("Set %s as ';'", VCONF_KEY_HOME_LOGGING); + } + + /* keep the home DB opened */ + + return 0; +} + + + +#define QUERY_COUNT_ITEM "SELECT COUNT(*) FROM "HOME_TABLE" WHERE id=? and subid=?" +HAPI int db_count_item(const char *id, const char *subid) +{ + stmt_h *st; + int count; + + retv_if(id == NULL, -1); + retv_if(W_HOME_ERROR_NONE != + db_open(db_info.db_file), -1); + + st = db_prepare(QUERY_COUNT_ITEM); + retv_if(st == NULL, -1); + + if (db_bind_str(st, 1, id) != W_HOME_ERROR_NONE) { + _E("db_bind_str error"); + db_finalize(st); + return -1; + } + + if (subid) { + if (db_bind_str(st, 2, subid) != W_HOME_ERROR_NONE) { + _E("db_bind_str error"); + db_finalize(st); + return -1; + } + } else { + if (db_bind_str(st, 2, "") != W_HOME_ERROR_NONE) { + _E("db_bind_str error"); + db_finalize(st); + return -1; + } + } + + if (db_next(st) == W_HOME_ERROR_FAIL) { + _E("db_next error"); + db_finalize(st); + return -1; + } + + count = db_get_int(st, 0); + db_finalize(st); + + /* keep the home DB opened */ + + return count; +} + + + +#define QUERY_COUNT_ORDERING "SELECT COUNT(*) FROM "HOME_TABLE" WHERE ordering=?" +HAPI int db_count_ordering(int ordering) +{ + stmt_h *st; + int count; + + retv_if(W_HOME_ERROR_NONE != + db_open(db_info.db_file), -1); + + st = db_prepare(QUERY_COUNT_ORDERING); + retv_if(st == NULL, -1); + + if (db_bind_int(st, 1, ordering) != W_HOME_ERROR_NONE) { + _E("db_bind_str error"); + db_finalize(st); + return -1; + } + + if (db_next(st) == W_HOME_ERROR_FAIL) { + _E("db_next error"); + db_finalize(st); + return -1; + } + + count = db_get_int(st, 0); + db_finalize(st); + + /* keep the home DB opened */ + + return count; +} + + + +#define QUERY_SELECT_PAGE "SELECT id, subid, ordering FROM "HOME_TABLE" ORDER BY ordering ASC" +HAPI Eina_List *db_write_list(void) +{ + stmt_h *st = NULL; + Eina_List *page_info_list = NULL; + page_info_s *page_info = NULL; + const char *id; + const char *subid; + + retv_if(W_HOME_ERROR_NONE != + db_open(db_info.db_file), NULL); + + st = db_prepare(QUERY_SELECT_PAGE); + goto_if(NULL == st, ERROR); + + while (W_HOME_ERROR_NONE == db_next(st)) { + id = db_get_str(st, 0); + subid = db_get_str(st, 1); + + page_info = page_info_create(id, subid, WIDGET_VIEWER_EVAS_DEFAULT_PERIOD); + goto_if(!page_info, ERROR); + + page_info->ordering = db_get_int(st, 2); + page_info->removable = page_info_is_removable(id); + page_info_list = eina_list_append(page_info_list, page_info); + } + + db_finalize(st); + + return page_info_list; + +ERROR: + page_info_list_destroy(page_info_list); + db_finalize(st); + + return NULL; +} + + + +HAPI w_home_error_e db_read_list(Eina_List *page_info_list) +{ + const char *logging = NULL; + const Eina_List *l, *ln; + Eina_Strbuf *strbuf = NULL; + page_info_s *page_info = NULL; + int ordering = 0; + + retv_if(!page_info_list, W_HOME_ERROR_INVALID_PARAMETER); + + _W("push all the pages into the DB"); + + db_remove_all_item(); + strbuf = eina_strbuf_new(); + retv_if(!strbuf, W_HOME_ERROR_FAIL); + + EINA_LIST_FOREACH_SAFE(page_info_list, l, ln, page_info) { + continue_if(!page_info); + if (!page_info->id) continue; + + db_insert_item(page_info->id, page_info->subid, ordering); + if (ordering) { + eina_strbuf_append_char(strbuf, ';'); + } + eina_strbuf_append(strbuf, page_info->id); + ordering++; + } + + logging = eina_strbuf_string_get(strbuf); + if (logging) { + _SD("Logging : [%s]", logging); + if (preference_set_string(VCONF_KEY_HOME_LOGGING, logging) != 0) { + _E("Failed to set %s as %s", VCONF_KEY_HOME_LOGGING, logging); + } + } + eina_strbuf_free(strbuf); + + return W_HOME_ERROR_NONE; +} + + + +// End of file. diff --git a/home/src/dbus.c b/home/src/dbus.c new file mode 100755 index 0000000..d77624f --- /dev/null +++ b/home/src/dbus.c @@ -0,0 +1,387 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#include +#include +#include + +#include "util.h" +#include "main.h" +#include "log.h" +#include "dbus.h" +#include "gesture.h" +#include "minictrl.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "apps/apps_main.h" + +static struct _info { + DBusConnection *connection; + Eina_List *cbs_list[DBUS_EVENT_MAX]; +} s_info = { + .connection = NULL, + .cbs_list = {NULL, }, +}; + +typedef struct { + void (*result_cb)(void *, void *); + void *result_data; +} dbus_cb_s; + +HAPI int home_dbus_register_cb( + int type, + void (*result_cb)(void *, void *), void *result_data) +{ + retv_if(result_cb == NULL, W_HOME_ERROR_INVALID_PARAMETER); + + dbus_cb_s *cb = calloc(1, sizeof(dbus_cb_s)); + retv_if(cb == NULL, W_HOME_ERROR_FAIL); + + cb->result_cb = result_cb; + cb->result_data = result_data; + + s_info.cbs_list[type] = eina_list_prepend(s_info.cbs_list[type], cb); + retv_if(s_info.cbs_list[type] == NULL, W_HOME_ERROR_FAIL); + + return W_HOME_ERROR_NONE; +} + +HAPI void home_dbus_unregister_cb( + int type, + void (*result_cb)(void *, void *)) +{ + const Eina_List *l; + const Eina_List *n; + dbus_cb_s *cb; + EINA_LIST_FOREACH_SAFE(s_info.cbs_list[type], l, n, cb) { + continue_if(cb == NULL); + if (result_cb != cb->result_cb) continue; + s_info.cbs_list[type] = eina_list_remove(s_info.cbs_list[type], cb); + free(cb); + return; + } +} + +static void _execute_cbs(int type, void *event_info) +{ + const Eina_List *l = NULL; + const Eina_List *n = NULL; + dbus_cb_s *cb = NULL; + EINA_LIST_FOREACH_SAFE(s_info.cbs_list[type], l, n, cb) { + continue_if(cb == NULL); + continue_if(cb->result_cb == NULL); + + cb->result_cb(cb->result_data, event_info); + } +} + +static Evas_Object *_scroller_get(void) { + Evas_Object *win = main_get_info()->win; + Evas_Object *layout = NULL; + Evas_Object *scroller = NULL; + + if (win != NULL) { + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + if (layout != NULL) { + scroller = elm_object_part_content_get(layout, "scroller"); + } + } + + return scroller; +} + +static DBusConnection *_dbus_connection_get(void) { + + if (s_info.connection == NULL) { + DBusError derror; + DBusConnection *connection = NULL; + + dbus_error_init(&derror); + connection = dbus_bus_get_private(DBUS_BUS_SYSTEM, &derror); + if (connection == NULL) { + _E("Failed to get dbus connection:%s", derror.message); + dbus_error_free(&derror); + return NULL; + } + dbus_connection_setup_with_g_main(connection, NULL); + dbus_error_free(&derror); + + s_info.connection = connection; + } + + return s_info.connection; +} + +static Eina_Bool _procsweep_idler_cb(void *data) +{ + home_dbus_procsweep_signal_send(); + + return ECORE_CALLBACK_CANCEL; +} + +static Eina_Bool _home_raise_idler_cb(void *data) +{ + home_dbus_home_raise_signal_send(); + + return ECORE_CALLBACK_CANCEL; +} + + + +/* DBus message handler callback */ +static DBusHandlerResult _dbus_message_recv_cb(DBusConnection *connection, DBusMessage *message, void *data) +{ + Evas_Object *win = main_get_info()->win; + Evas_Object *scroller = _scroller_get(); + + if (win == NULL || scroller == NULL) { + _E("win or scroller is NULL, give up"); + return DBUS_HANDLER_RESULT_HANDLED; + } + + if (dbus_message_is_signal(message, DBUS_LOW_BATTERY_INTERFACE, DBUS_LOW_BATTERY_MEMBER_EXTREME_LEVEL)) { + _D("Low Battery signal received : %p", message); + + if (main_get_info()->win) { + elm_win_activate(main_get_info()->win); + scroller_bring_in_by_push_type(scroller, SCROLLER_PUSH_TYPE_CENTER, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_ANIMATOR); + ecore_idler_add(_home_raise_idler_cb, NULL); + ecore_idler_add(_procsweep_idler_cb, NULL); + } + } else if (dbus_message_is_signal(message, DBUS_DEVICED_DISPLAY_INTERFACE, DBUS_DEVICED_DISPLAY_MEMBER_LCD_ON)) { + _W("LCD on"); + int ret = 0; + DBusError derror; + const char *state = NULL; + dbus_error_init(&derror); + ret = dbus_message_get_args(message, &derror, DBUS_TYPE_STRING, &state, DBUS_TYPE_INVALID); + if (!ret) { + _E("Failed to get reply (%s:%s)", derror.name, derror.message); + } + _execute_cbs(DBUS_EVENT_LCD_ON, (void*)state); + dbus_error_free(&derror); + } else if (dbus_message_is_signal(message, DBUS_DEVICED_DISPLAY_INTERFACE, DBUS_DEVICED_DISPLAY_MEMBER_LCD_OFF)) { + _W("LCD on"); + int ret = 0; + DBusError derror; + const char *state = NULL; + dbus_error_init(&derror); + ret = dbus_message_get_args(message, &derror, DBUS_TYPE_STRING, &state, DBUS_TYPE_INVALID); + if (!ret) { + _E("Failed to get reply (%s:%s)", derror.name, derror.message); + } + _execute_cbs(DBUS_EVENT_LCD_OFF, (void*)state); + dbus_error_free(&derror); + } else if (dbus_message_is_signal(message, DBUS_DEVICED_SYSNOTI_INTERFACE, DBUS_DEVICED_SYSNOTI_MEMBER_COOLDOWN_CHANGED)) { + _E("Cooldown status message received"); + int ret = 0; + DBusError derror; + const char *state = NULL; + dbus_error_init(&derror); + ret = dbus_message_get_args(message, &derror, DBUS_TYPE_STRING, &state, DBUS_TYPE_INVALID); + if (!ret) { + _E("Failed to get reply (%s:%s)", derror.name, derror.message); + } + _execute_cbs(DBUS_EVENT_COOLDOWN_STATE_CHANGED, (void *)state); + dbus_error_free(&derror); + } else if (dbus_message_is_signal(message, DBUS_ALPM_MANAGER_INTERFACE, DBUS_ALPM_MANAGER_MEMBER_STATUS)) { + _E("ALPM manager status message received"); + int ret = 0; + DBusError derror; + const char *state = NULL; + dbus_error_init(&derror); + ret = dbus_message_get_args(message, &derror, DBUS_TYPE_STRING, &state, DBUS_TYPE_INVALID); + if (!ret) { + _E("Failed to get reply (%s:%s)", derror.name, derror.message); + } + _execute_cbs(DBUS_EVENT_ALPM_MANAGER_STATE_CHANGED, (void *)state); + dbus_error_free(&derror); + } + + return DBUS_HANDLER_RESULT_HANDLED; +} + +static w_home_error_e _dbus_sig_attach(char *path, char *interface, char *member) +{ + DBusError derror; + DBusConnection *connection = NULL; + retv_if(path == NULL, W_HOME_ERROR_FAIL); + retv_if(interface == NULL, W_HOME_ERROR_FAIL); + + /* DBUS */ + connection = _dbus_connection_get(); + if (connection == NULL) { + _E("failed to get DBUS connection"); + return W_HOME_ERROR_FAIL; + } + + dbus_error_init(&derror); + + /* Set the DBus rule for the wakeup gesture signal */ + char rules[512] = {0,}; + sprintf(rules, "path='%s',type='signal',interface='%s',member='%s'", path, interface, member); + dbus_bus_add_match(connection, rules, &derror); + if (dbus_error_is_set(&derror)) { + _E("D-BUS rule adding error: %s", derror.message); + dbus_error_free(&derror); + return W_HOME_ERROR_FAIL; + } + + /* Set the callback function */ + if(dbus_connection_add_filter(connection, _dbus_message_recv_cb, NULL, NULL) == FALSE) { + _E("Failed to add dbus filter : %s", derror.message); + dbus_error_free(&derror); + return W_HOME_ERROR_FAIL; + } + + dbus_error_free(&derror); + + return W_HOME_ERROR_NONE; +} + +static void _dbus_sig_dettach(const char *path, const char *interface, const char *member) +{ + DBusError err; + DBusConnection *connection = NULL; + ret_if(path == NULL); + ret_if(interface == NULL); + + connection = _dbus_connection_get(); + if (connection == NULL) { + _E("failed to get DBUS connection"); + return ; + } + + dbus_error_init(&err); + dbus_connection_remove_filter(connection, _dbus_message_recv_cb, NULL); + + char rules[512] = {0,}; + + snprintf(rules, sizeof(rules), "path='%s',type='signal',interface='%s',member='%s'", path, interface, member); + dbus_bus_remove_match(connection, rules, &err); + if(dbus_error_is_set(&err)) { + _E("Failed to dbus_bus_remove_match : %s", err.message); + } + + dbus_error_free(&err); +} + +HAPI void *home_dbus_connection_get(void) +{ + return (void *)_dbus_connection_get(); +} + +HAPI void home_dbus_init(void *data) +{ +#if 0 + if(_dbus_sig_attach( + DBUS_WAKEUP_GESTURE_PATH, + DBUS_WAKEUP_GESTURE_INTERFACE, + DBUS_WAKEUP_GESTURE_MEMBER_WAKEUP) != W_HOME_ERROR_NONE) { + _E("Failed to attach gesture signal filter"); + } +#endif + + if(_dbus_sig_attach( + DBUS_LOW_BATTERY_PATH, + DBUS_LOW_BATTERY_INTERFACE, + DBUS_LOW_BATTERY_MEMBER_EXTREME_LEVEL) != W_HOME_ERROR_NONE) { + _E("Failed to attach low battery signal filter"); + } + + if(_dbus_sig_attach( + DBUS_DEVICED_DISPLAY_PATH, + DBUS_DEVICED_DISPLAY_INTERFACE, + DBUS_DEVICED_DISPLAY_MEMBER_LCD_ON) != W_HOME_ERROR_NONE) { + _E("Failed to attach LCD on signal filter"); + } + + if(_dbus_sig_attach( + DBUS_DEVICED_DISPLAY_PATH, + DBUS_DEVICED_DISPLAY_INTERFACE, + DBUS_DEVICED_DISPLAY_MEMBER_LCD_OFF) != W_HOME_ERROR_NONE) { + _E("Failed to attach LCD off signal filter"); + } + + if(_dbus_sig_attach( + DBUS_DEVICED_SYSNOTI_PATH, + DBUS_DEVICED_SYSNOTI_INTERFACE, + DBUS_DEVICED_SYSNOTI_MEMBER_COOLDOWN_CHANGED) != W_HOME_ERROR_NONE) { + _E("Failed to attach cooldown mode signal filter"); + } + + if(_dbus_sig_attach( + DBUS_ALPM_MANAGER_PATH, + DBUS_ALPM_MANAGER_INTERFACE, + DBUS_ALPM_MANAGER_MEMBER_STATUS) != W_HOME_ERROR_NONE) { + _E("Failed to attach alpm manager signal filter"); + } +} + +HAPI void home_dbus_fini(void *data) +{ +#if 0 + _dbus_sig_dettach( + DBUS_WAKEUP_GESTURE_PATH, + DBUS_WAKEUP_GESTURE_INTERFACE, + DBUS_WAKEUP_GESTURE_MEMBER_WAKEUP); +#endif + _dbus_sig_dettach( + DBUS_LOW_BATTERY_PATH, + DBUS_LOW_BATTERY_INTERFACE, + DBUS_LOW_BATTERY_MEMBER_EXTREME_LEVEL); + + _dbus_sig_dettach( + DBUS_DEVICED_DISPLAY_PATH, + DBUS_DEVICED_DISPLAY_INTERFACE, + DBUS_DEVICED_DISPLAY_MEMBER_LCD_ON); + + _dbus_sig_dettach( + DBUS_DEVICED_DISPLAY_PATH, + DBUS_DEVICED_DISPLAY_INTERFACE, + DBUS_DEVICED_DISPLAY_MEMBER_LCD_OFF); + + _dbus_sig_dettach( + DBUS_DEVICED_SYSNOTI_PATH, + DBUS_DEVICED_SYSNOTI_INTERFACE, + DBUS_DEVICED_SYSNOTI_MEMBER_COOLDOWN_CHANGED); + + _dbus_sig_dettach( + DBUS_ALPM_MANAGER_PATH, + DBUS_ALPM_MANAGER_INTERFACE, + DBUS_ALPM_MANAGER_MEMBER_STATUS); + + if(s_info.connection != NULL) { + dbus_connection_close(s_info.connection); + dbus_connection_unref(s_info.connection); + s_info.connection = NULL; + + _D("DBUS connection is closed"); + } +} diff --git a/home/src/dbus_util.c b/home/src/dbus_util.c new file mode 100755 index 0000000..7431d0b --- /dev/null +++ b/home/src/dbus_util.c @@ -0,0 +1,330 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "util.h" +#include "main.h" +#include "log.h" +#include "dbus.h" + +#define DBUS_CPU_BOOSTER_SEC 200 +#define DBUS_LCD_ON_SEC 10000 +#define DBUS_REPLY_TIMEOUT (120 * 1000) + +static int _append_variant(DBusMessageIter *iter, const char *sig, char *param[]) +{ + char *ch; + int i; + int int_type; + uint64_t int64_type; + + if (!sig || !param) + return 0; + + for (ch = (char*)sig, i = 0; *ch != '\0'; ++i, ++ch) { + switch (*ch) { + case 'i': + int_type = atoi(param[i]); + dbus_message_iter_append_basic(iter, DBUS_TYPE_INT32, &int_type); + break; + case 'u': + int_type = atoi(param[i]); + dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &int_type); + break; + case 't': + int64_type = atoi(param[i]); + dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT64, &int64_type); + break; + case 's': + dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, ¶m[i]); + break; + default: + return -EINVAL; + } + } + + return 0; +} + +static int _dbus_message_send(const char *path, const char *interface, const char *member) +{ + int ret = 0; + DBusMessage *msg = NULL; + DBusConnection *conn = NULL; + + conn = (DBusConnection *)home_dbus_connection_get(); + if (!conn) { + _E("dbus_bus_get error"); + return -1; + } + + msg = dbus_message_new_signal(path, interface, member); + if (!msg) { + _E("dbus_message_new_signal(%s:%s-%s)", path, interface, member); + return -1; + } + + ret = dbus_connection_send(conn, msg, NULL); //async call + dbus_message_unref(msg); + if (ret != TRUE) { + _E("dbus_connection_send error(%s:%s-%s)", path, interface, member); + return -ECOMM; + } + _D("dbus_connection_send, ret=%d", ret); + return 0; +} + +static int _dbus_method_async_call(const char *dest, const char *path, + const char *interface, const char *method, + const char *sig, char *param[]) +{ + int ret = 0; + DBusConnection *conn = NULL; + DBusMessage *msg = NULL; + DBusMessageIter iter; + DBusError err; + + conn = home_dbus_connection_get(); + if (!conn) { + _E("dbus_bus_get error"); + return -1; + } + + msg = dbus_message_new_method_call(dest, path, interface, method); + if (!msg) { + _D("dbus_message_new_method_call(%s:%s-%s)", path, interface, method); + return -1; + } + + dbus_message_iter_init_append(msg, &iter); + ret = _append_variant(&iter, sig, param); + if (ret < 0) { + _E("append_variant error(%d)", ret); + dbus_message_unref(msg); + return -1; + } + + dbus_error_init(&err); + + ret = dbus_connection_send(conn, msg, NULL); //async call + dbus_message_unref(msg); + if (ret != TRUE) { + _E("dbus_connection_send error(%s:%s:%s-%s)", dest, path, interface, method); + _E("dbus_connection_send error(%s:%s)", err.name, err.message); + return -ECOMM; + } + + _D("dbus_connection_send, ret=%d", ret); + dbus_error_free(&err); + + return 0; +} + + +static DBusMessage *_dbus_method_sync_call(const char *dest, const char *path, + const char *interface, const char *method, + const char *sig, char *param[]) +{ + int ret = 0; + DBusConnection *conn = NULL; + DBusMessage *msg = NULL; + DBusMessageIter iter; + DBusMessage *reply = NULL; + DBusError err; + + conn = home_dbus_connection_get(); + if (!conn) { + _E("dbus_bus_get error"); + return NULL; + } + + msg = dbus_message_new_method_call(dest, path, interface, method); + if (!msg) { + _D("dbus_message_new_method_call(%s:%s-%s)", path, interface, method); + return NULL; + } + + dbus_message_iter_init_append(msg, &iter); + ret = _append_variant(&iter, sig, param); + if (ret < 0) { + _E("append_variant error(%d)", ret); + return NULL; + } + + dbus_error_init(&err); + + reply = dbus_connection_send_with_reply_and_block(conn, msg, DBUS_REPLY_TIMEOUT, &err); + if (!reply) { + _E("dbus_connection_send error(No reply): (%s:%s:%s:%s)", dest, path, interface, method); + } + + if (dbus_error_is_set(&err)) { + _E("dbus_connection_send error(%s:%s)", err.name, err.message); + reply = NULL; + } + + dbus_message_unref(msg); + dbus_error_free(&err); + + return reply; +} + +HAPI void home_dbus_lcd_on_signal_send(Eina_Bool lcd_on) +{ + int ret = 0; + char *param[1]; + + if (lcd_on == EINA_TRUE) { + char val[32]; + snprintf(val, sizeof(val), "%d", DBUS_LCD_ON_SEC); + param[0] = val; + + ret = _dbus_method_async_call( + DBUS_DEVICED_BUS_NAME, + DBUS_DEVICED_DISPLAY_PATH, + DBUS_DEVICED_DISPLAY_INTERFACE, + DBUS_DEVICED_DISPLAY_METHOD_CUSTOM_LCD_ON, + "i", + param); + } else { + param[0] = DBUS_DEVICED_DISPLAY_COMMAND_LCD_ON; + + ret = _dbus_method_async_call( + DBUS_DEVICED_BUS_NAME, + DBUS_DEVICED_DISPLAY_PATH, + DBUS_DEVICED_DISPLAY_INTERFACE, + DBUS_DEVICED_DISPLAY_METHOD_CHANGE_STATE, + "s", + param); + } + _E("Sending LCD ON request signal lcd_on:%d result:%d", lcd_on, ret); +} + +HAPI void home_dbus_lcd_off_signal_send(void) +{ + int ret = 0; + + ret = _dbus_method_async_call( + DBUS_DEVICED_BUS_NAME, + DBUS_DEVICED_DISPLAY_PATH, + DBUS_DEVICED_DISPLAY_INTERFACE, + DBUS_DEVICED_DISPLAY_METHOD_LCD_OFF, + NULL, NULL); + _E("Sending LCD OFF request signal, result:%d", ret); +} + +HAPI void home_dbus_procsweep_signal_send(void) +{ + int ret = 0; + + ret = _dbus_message_send( + DBUS_PROCSWEEP_PATH, + DBUS_PROCSWEEP_INTERFACE, + DBUS_PROCSWEEP_METHOD); + _E("Sending PROCSWEEP signal, result:%d", ret); +} + +HAPI void home_dbus_home_raise_signal_send(void) +{ + int ret = 0; + + ret = _dbus_message_send( + DBUS_HOME_RAISE_PATH, + DBUS_HOME_RAISE_INTERFACE, + DBUS_HOME_RAISE_MEMBER); + _E("Sending HOME RAISE signal, result:%d", ret); +} + +HAPI void home_dbus_cpu_booster_signal_send(void) +{ + int ret = 0; + char *param[1] = {NULL, }; + char val[32] = {0, }; + + snprintf(val, sizeof(val), "%d", DBUS_CPU_BOOSTER_SEC); + param[0] = val; + + ret = _dbus_method_async_call( + DBUS_DEVICED_BUS_NAME, + DBUS_DEVICED_CPU_BOOSTER_PATH, + DBUS_DEVICED_CPU_BOOSTER_INTERFACE, + DBUS_DEVICED_CPU_BOOSTER_METHOD_HOME_LAUNCH, + "i", + param); + _D("Sending cpu booster call:%d result:%d", DBUS_CPU_BOOSTER_SEC, ret); +} + +HAPI void home_dbus_scroll_booster_signal_send(int sec) +{ + int ret = 0; + char *param[1] = {NULL, }; + char val[32] = {0, }; + + snprintf(val, sizeof(val), "%d", sec); + param[0] = val; + + _dbus_method_async_call( + DBUS_DEVICED_BUS_NAME, + DBUS_DEVICED_CPU_BOOSTER_PATH, + DBUS_DEVICED_CPU_BOOSTER_INTERFACE, + DBUS_DEVICED_CPU_BOOSTER_METHOD_HOME, + "i", param); + _D("Sending scroll booster for %d sec result:%d", sec, ret); +} + +HAPI char *home_dbus_cooldown_status_get(void) +{ + int ret = 0; + DBusError err; + DBusMessage *msg = NULL; + const char *data = NULL; + char *ret_val = NULL; + + msg = _dbus_method_sync_call( + DBUS_DEVICED_BUS_NAME, + DBUS_DEVICED_SYSNOTI_PATH, + DBUS_DEVICED_SYSNOTI_INTERFACE, + DBUS_DEVICED_SYSNOTI_METHOD_COOLDOWN_STATUS, + NULL, NULL); + retv_if(msg == NULL, NULL); + + dbus_error_init(&err); + + ret = dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &data, DBUS_TYPE_INVALID); + if (!ret) { + _E("Failed to get reply (%s:%s)", err.name, err.message); + } else { + if (data != NULL) { + ret_val = strdup(data); + } + } + + dbus_message_unref(msg); + dbus_error_free(&err); + + return ret_val; +} diff --git a/home/src/edit.c b/home/src/edit.c new file mode 100755 index 0000000..0a7157d --- /dev/null +++ b/home/src/edit.c @@ -0,0 +1,3842 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "util.h" +#include "add-viewer.h" +#include "conf.h" +#include "db.h" +#include "wms.h" +#include "page.h" +#include "page_info.h" +#include "edit_info.h" +#include "effect.h" +#include "key.h" +#include "layout_info.h" +#include "layout.h" +#include "widget.h" +#include "log.h" +#include "main.h" +#include "scroller_info.h" +#include "scroller.h" +#include "edit.h" +#include "gesture.h" +#include "index.h" +#include "noti_broker.h" + +#define PRIVATE_DATA_KEY_EDIT_DISABLE_REORDERING "p_e_l" +#define PRIVATE_DATA_KEY_EDIT_FOCUS_OBJECT "p_fo" +#define PRIVATE_DATA_KEY_EDIT_UNFOCUSABLE "p_uf" +#define PRIVATE_DATA_KEY_PAGE_LONGPRESS_TIMER "p_p_lp_t" +#define PRIVATE_DATA_KEY_PAGE_ANIM_FOR_DEL "p_it_ani_d" +#define PRIVATE_DATA_KEY_PAGE_ANIM_FOR_MOVING "p_it_ani_mv" +#define PRIVATE_DATA_KEY_PAGE_PRESSED "p_i_p" +#define PRIVATE_DATA_KEY_PAGE_DOWN_X "p_i_dx" +#define PRIVATE_DATA_KEY_PAGE_DOWN_Y "p_i_dy" +#define PRIVATE_DATA_KEY_PAGE_X_FOR_MOVING "p_i_x_mv" +#define PRIVATE_DATA_KEY_PAGE_Y_FOR_MOVING "p_i_y_mv" +#define PRIVATE_DATA_KEY_PAGE_X_FOR_ANIM "p_i_x" +#define PRIVATE_DATA_KEY_PAGE_Y_FOR_ANIM "p_i_y" +#define PRIVATE_DATA_KEY_PAGE_W "p_i_w" +#define PRIVATE_DATA_KEY_PAGE_H "p_i_h" +#define PRIVATE_DATA_KEY_PAGE_INNER "p_pg_in" +#define PRIVATE_DATA_KEY_PROXY_BG "p_pr_bg" +#define PRIVATE_DATA_KEY_SCROLLER_ANIM_FOR_MOVING "p_sc_an_mv" +#define PRIVATE_DATA_KEY_SCROLLER_PAGE_FOR_MOVING "p_sc_pg_mv" +#define PRIVATE_DATA_KEY_SCROLLER_RECT_FOR_MOVING "p_sc_r_mv" +#define PRIVATE_DATA_KEY_SCROLLER_PRESS_PAGE "p_sc_p" +#define PRIVATE_DATA_KEY_SCROLLER_X "p_sc_x" +#define PRIVATE_DATA_KEY_EDIT_SYNC_IS_DONE "pdke_s_d" +#define PRIVATE_DATA_KEY_EDIT_IS_LONGPRESSED "pdke_il" +#define PRIVATE_DATA_KEY_EDIT_ITEM_IS_MOVED "pdke_im" +#define PRIVATE_DATA_KEY_DIVIDE_FACTOR "pdk_df" +#define PRIVATE_DATA_KEY_ANIM_FOR_MINIFY "p_a_mi" +#define PRIVATE_DATA_KEY_ANIM_FOR_ENLARGE "p_a_en" +#define PRIVATE_DATA_KEY_EDIT_DO_NOT_SUPPORT_ENLARGE_EFFECT "pdk_dnsee" + +#define MOVE_THRESHOLD 5 +#define SLIPPED_LENGTH 40 + +static void _destroy_proxy_bg(Evas_Object *clip_bg); +static Evas_Object *_create_proxy_bg(Evas_Object *item); + + + +static char *_access_tab_to_move_cb(void *data, Evas_Object *obj) +{ + char *tmp; + + tmp = strdup(_("IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB")); + retv_if(!tmp, NULL); + + return tmp; +} + + + +static char *_access_plus_button_name_cb(void *data, Evas_Object *obj) +{ + char *tmp; + + tmp = strdup(_("IDS_HS_BODY_ADD_WIDGET")); + retv_if(!tmp, NULL); + + return tmp; +} + + + +/* Caution : Do not create & destroy an item */ +static void _scroller_read_page_list(Evas_Object *scroller, Eina_List *page_info_list) +{ + Evas_Object *before_page = NULL; + const Eina_List *l, *ln; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + + ret_if(!scroller); + ret_if(!page_info_list); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + before_page = scroller_info->center; + + EINA_LIST_FOREACH_SAFE(page_info_list, l, ln, page_info) { + continue_if(!page_info); + continue_if(!page_info->page); + + elm_box_unpack(scroller_info->box, page_info->page); + elm_box_pack_after(scroller_info->box, page_info->page, before_page); + before_page = page_info->page; + } +} + + + +static Eina_List *_scroller_write_page_list(Evas_Object *edit_scroller) +{ + Evas_Object *page = NULL; + Evas_Object *tmp = NULL; + scroller_info_s *edit_scroller_info = NULL; + page_info_s *page_info = NULL; + page_info_s *dup_page_info = NULL; + Eina_List *list = NULL; + Eina_List *page_info_list = NULL; + const Eina_List *l, *ln; + + retv_if(!edit_scroller, NULL); + + edit_scroller_info = evas_object_data_get(edit_scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!edit_scroller_info, NULL); + + list = elm_box_children_get(edit_scroller_info->box); + retv_if(!list, NULL); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) continue; + if (!page_info->id) continue; + if (PAGE_DIRECTION_RIGHT != page_info->direction) continue; + + dup_page_info = page_info_dup(page_info); + continue_if(!dup_page_info); + + tmp = evas_object_data_get(dup_page_info->page, DATA_KEY_REAL_PAGE); + if (tmp) dup_page_info->page = tmp; + page_info_list = eina_list_append(page_info_list, dup_page_info); + } + eina_list_free(list); + + return page_info_list; +} + + + +static Evas_Object *_content_set_page_inner(Evas_Object *proxy_page) +{ + Evas_Object *page_inner = NULL; + page_info_s *page_info = NULL; + + page_inner = evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_INNER); + retv_if(!page_inner, NULL); + + elm_object_part_content_set(proxy_page, "inner", page_inner); + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + scroller_unfreeze(page_info->scroller); + + return proxy_page; +} + + + +static Evas_Object *_content_unset_page_inner(Evas_Object *proxy_page) +{ + Evas_Object *page_inner = NULL; + page_info_s *page_info = NULL; + + page_inner = elm_object_part_content_unset(proxy_page, "inner"); + retv_if(!page_inner, NULL); + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_INNER, page_inner); + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + elm_object_signal_emit(page_inner, "on,zoom", "inner"); + + scroller_freeze(page_info->scroller); + + return proxy_page; +} + + + +/* This function SHOULD be called related to edit_destroy_layout */ +static void _sync_from_edit_to_normal(void *layout) +{ + layout_info_s *layout_info = NULL; + edit_info_s *edit_info = NULL; + Eina_List *page_info_list = NULL; + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + + page_info_list = _scroller_write_page_list(edit_info->scroller); + if (page_info_list) { + db_read_list(page_info_list); + _scroller_read_page_list(layout_info->scroller, page_info_list); + page_info_list_destroy(page_info_list); + } else { + db_remove_all_item(); + } + + evas_object_data_set(layout, PRIVATE_DATA_KEY_EDIT_SYNC_IS_DONE, (void *) 1); +} + + + +static void _clicked_noti_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *proxy_page = data; + Evas_Object *effect_page = NULL; + Evas_Object *page = NULL; + Evas_Object *scroller = NULL; + Evas_Object *layout = NULL; + + layout_info_s *layout_info = NULL; + page_info_s *page_info = NULL; + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + if (evas_object_data_del(page_info->scroller, PRIVATE_DATA_KEY_EDIT_IS_LONGPRESSED)) return; + + layout = page_info->layout; + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + scroller = layout_info->scroller; + + effect_page = edit_create_enlarge_effect_page(proxy_page); + if (effect_page) edit_enlarge_effect_page(effect_page); + + page = evas_object_data_get(proxy_page, DATA_KEY_REAL_PAGE); + ret_if(!page); + scroller_region_show_center_of(scroller, page, SCROLLER_FREEZE_OFF, NULL, NULL, NULL, NULL); +} + + + +static void _clicked_center_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *proxy_page = data; + Evas_Object *effect_page = NULL; + Evas_Object *page = NULL; + Evas_Object *scroller = NULL; + Evas_Object *layout = NULL; + + layout_info_s *layout_info = NULL; + page_info_s *page_info = NULL; + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + if (evas_object_data_get(page_info->scroller, PRIVATE_DATA_KEY_EDIT_IS_LONGPRESSED)) return; + + layout = page_info->layout; + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + scroller = layout_info->scroller; + + effect_page = edit_create_enlarge_effect_page(proxy_page); + if (effect_page) edit_enlarge_effect_page(effect_page); + + page = evas_object_data_get(proxy_page, DATA_KEY_REAL_PAGE); + ret_if(!page); + scroller_region_show_center_of(scroller, page, SCROLLER_FREEZE_OFF, NULL, NULL, NULL, NULL); +} + + + +static void _clicked_widget_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *proxy_page = data; + Evas_Object *effect_page = NULL; + Evas_Object *page = NULL; + Evas_Object *scroller = NULL; + Evas_Object *layout = NULL; + + layout_info_s *layout_info = NULL; + page_info_s *page_info = NULL; + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + if (evas_object_data_get(page_info->scroller, PRIVATE_DATA_KEY_EDIT_IS_LONGPRESSED)) return; + + layout = page_info->layout; + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + scroller = layout_info->scroller; + + effect_page = edit_create_enlarge_effect_page(proxy_page); + if (effect_page) edit_enlarge_effect_page(effect_page); + + page = evas_object_data_get(proxy_page, DATA_KEY_REAL_PAGE); + ret_if(!page); + scroller_region_show_center_of(scroller, page, SCROLLER_FREEZE_OFF, _sync_from_edit_to_normal, layout, NULL, NULL); +} + + + +#define ANIM_RATE 5 +#define ANIM_RATE_SPARE ANIM_RATE - 1 +static Eina_Bool _anim_move_page_to_empty_position(void *data) +{ + Evas_Object *proxy_page = data; + page_info_s *page_info = NULL; + Evas_Object *scroller = NULL; + Evas_Object *page_inner = evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_INNER); + int cur_x, cur_y, end_x, end_y; + int vec_x, vec_y; + + goto_if(!data, ERROR); + if(!page_inner) { + _D("page_inner was not unset"); + goto ERROR; + } + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + goto_if(!page_info, ERROR); + scroller = page_info->scroller; + + evas_object_geometry_get(page_inner, &cur_x, &cur_y, NULL, NULL); + end_x = (int)evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_X_FOR_ANIM); + end_y = (int)evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_Y_FOR_ANIM); + + if (cur_y == end_y && cur_x == end_x) { + goto_if (NULL == _content_set_page_inner(proxy_page), ERROR); + /* unfreeze the scroller after setting the content */ + if (scroller) scroller_unfreeze(scroller); + + evas_object_data_del(scroller, PRIVATE_DATA_KEY_EDIT_IS_LONGPRESSED); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_X_FOR_ANIM); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_Y_FOR_ANIM); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_MOVING); + edit_change_focus(scroller, proxy_page); + + return ECORE_CALLBACK_CANCEL; + } + vec_y = (end_y - cur_y)/ANIM_RATE; + if (0 == vec_y) { + if (end_y - cur_y < 0) vec_y = -1; + else if (end_y - cur_y > 0) vec_y = 1; + } + cur_y += vec_y; + + vec_x = (end_x - cur_x)/ANIM_RATE; + if (0 == vec_x) { + if (end_x - cur_x < 0) vec_x = -1; + else if (end_x - cur_x > 0) vec_x = 1; + } + cur_x += vec_x; + + evas_object_move(page_inner, cur_x, cur_y); + + return ECORE_CALLBACK_RENEW; + +ERROR: + if (proxy_page) { + if (scroller) scroller_unfreeze(scroller); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_MOVING); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_X_FOR_ANIM); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_Y_FOR_ANIM); + + } + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _longpress_timer_cb(void *data) +{ + Evas_Object *proxy_page = NULL; + page_info_s *proxy_page_info = NULL; + Ecore_Timer *timer; + + proxy_page = data; + retv_if(!proxy_page, ECORE_CALLBACK_CANCEL); + + proxy_page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + retv_if(!proxy_page_info, ECORE_CALLBACK_CANCEL); + + timer = evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_LONGPRESS_TIMER); + if (timer) ecore_timer_del(timer); + else return ECORE_CALLBACK_CANCEL; + + evas_object_data_set(proxy_page_info->scroller, PRIVATE_DATA_KEY_EDIT_IS_LONGPRESSED, (void *) 1); + + if (evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_EDIT_DISABLE_REORDERING)) { + _D("long-press is not supported on this page"); + scroller_freeze(proxy_page_info->scroller); + util_create_toast_popup(proxy_page_info->scroller, _("IDS_HS_TPOP_CANNOT_REORDER_NOTIFICATION_BOARD_ITEMS")); + return ECORE_CALLBACK_CANCEL; + } + + _D("longpress start for proxy_page(%p)", proxy_page); + + page_unfocus(proxy_page); + scroller_disable_focus_on_scroll(proxy_page_info->scroller); + scroller_disable_index_on_scroll(proxy_page_info->scroller); + + retv_if(!evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_PRESSED), ECORE_CALLBACK_CANCEL); + retv_if(!_content_unset_page_inner(proxy_page), ECORE_CALLBACK_CANCEL); + + elm_object_signal_emit(proxy_page_info->layout, "show", "checker"); + scroller_bring_in_center_of(proxy_page_info->scroller, proxy_page, SCROLLER_FREEZE_ON, NULL, NULL, NULL, NULL); + effect_play_vibration(); + + return ECORE_CALLBACK_CANCEL; + +} + + + +static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ei = event_info; + Evas_Object *proxy_page = data; + Evas_Object *page_current = NULL; + Evas_Object *page_inner = NULL; + Ecore_Timer *timer = NULL; + Ecore_Animator *anim = NULL; + page_info_s *page_info = NULL; + + int x = ei->output.x; + int y = ei->output.y; + int inner_x, inner_y, inner_w, inner_h; + int sx; + + _D("edit : Down (%d, %d)", x, y); + + ret_if(!proxy_page); + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + if (scroller_is_scrolling(page_info->scroller)) return; + + anim = evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_MOVING); + if (anim) return; + + page_current = scroller_get_focused_page(page_info->scroller); + ret_if(!page_current); + if (proxy_page != page_current) return; + + page_inner = elm_object_part_content_get(proxy_page, "inner"); + if (!page_inner) { + page_inner = evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_INNER); + ret_if(!page_inner); + elm_object_part_content_set(proxy_page, "inner", page_inner); + } + + evas_object_data_set(page_info->scroller, PRIVATE_DATA_KEY_SCROLLER_PRESS_PAGE, proxy_page); + evas_object_data_set(page_info->scroller, DATA_KEY_EVENT_UPPER_PAGE, proxy_page); + + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_PRESSED, (void *) 1); + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_DOWN_X, (void *) x); + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_DOWN_Y, (void *) y); + + evas_object_geometry_get(page_inner, &inner_x, &inner_y, &inner_w, &inner_h); + + /* this data key is used the destination in animation of item's set. + If the destination of animation can be changed, you set the changed value in _up_cb or other function */ + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_X_FOR_ANIM, (void *) inner_x); + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_Y_FOR_ANIM, (void *) inner_y); + + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_X_FOR_MOVING, (void *) inner_x); + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_Y_FOR_MOVING, (void *) inner_y); + + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_W, (void *) inner_w); + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_H, (void *) inner_h); + + elm_scroller_region_get(page_info->scroller, &sx, NULL, NULL, NULL); + sx += inner_x; + evas_object_data_set(page_info->scroller, PRIVATE_DATA_KEY_SCROLLER_X, (void *) sx); + evas_object_data_del(page_info->scroller, PRIVATE_DATA_KEY_EDIT_IS_LONGPRESSED); + + timer = ecore_timer_add(LONGPRESS_TIME, _longpress_timer_cb, proxy_page); + if (timer) evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_LONGPRESS_TIMER, timer); + else _E("Cannot add a timer"); +} + + + +static void _call_object(Evas_Object *proxy_page, int cur_x, int cur_y) +{ + Evas_Object *parent = NULL; + Evas_Object *tmp = NULL; + Eina_List *obj_list = NULL; + page_info_s *page_info = NULL; + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->scroller); + + obj_list = evas_tree_objects_at_xy_get(main_get_info()->e, NULL, cur_x, cur_y); + ret_if(!obj_list); + + EINA_LIST_FREE(obj_list, tmp) { + parent = tmp; + while (parent) { + if (evas_object_data_get(parent, DATA_KEY_EVENT_UPPER_IS_ON)) { + Evas_Object *old_obj = evas_object_data_get(page_info->scroller, DATA_KEY_EVENT_UPPER_PAGE); + if (old_obj != parent) { + _D("Call upper_end(%p) & upper_start(%p)", old_obj, parent); + evas_object_smart_callback_call(old_obj, "upper_end", NULL); + evas_object_smart_callback_call(parent, "upper_start", NULL); + evas_object_data_set(page_info->scroller, DATA_KEY_EVENT_UPPER_PAGE, parent); + } else { + evas_object_smart_callback_call(parent, "upper", proxy_page); + } + + eina_list_free(obj_list); + return; + } + + parent = evas_object_smart_parent_get(parent); + if (parent == page_info->scroller) { + evas_object_data_set(page_info->scroller, DATA_KEY_EVENT_UPPER_PAGE, parent); + break; + } + } + } +} + + + +static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Move *ei = event_info; + Evas_Object *proxy_page = data; + Evas_Object *page_inner = NULL; + Ecore_Timer *timer = NULL; + page_info_s *page_info = NULL; + Ecore_Animator *anim = NULL; + + int down_x, down_y, inner_x, inner_y; + int cur_x, cur_y, vec_x, vec_y; + + ret_if(!proxy_page); + if (!evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_PRESSED)) { + return; + } + + anim = evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_MOVING); + if (anim) return; + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + cur_x = ei->cur.output.x; + cur_y = ei->cur.output.y; + + down_x = (int) evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_DOWN_X); + down_y = (int) evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_DOWN_Y); + + inner_x = (int) evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_X_FOR_MOVING); + inner_y = (int) evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_Y_FOR_MOVING); + + vec_x = cur_x - down_x; + vec_y = cur_y - down_y; + + inner_x += vec_x; + inner_y += vec_y; + + timer = evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_LONGPRESS_TIMER); + if (timer && (abs(vec_x) >= LONGPRESS_THRESHOLD || abs(vec_y) >= LONGPRESS_THRESHOLD)) { + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_LONGPRESS_TIMER); + ecore_timer_del(timer); + return; + } + + page_inner = evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_INNER); + if (!page_inner) return; + + evas_object_move(page_inner, inner_x, inner_y); + + _call_object(proxy_page, cur_x, cur_y); +} + + + +static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Object *proxy_page = data; + Evas_Object *old_obj; + Evas_Object *page_current; + Evas_Event_Mouse_Up *ei = event_info; + Ecore_Timer *timer = NULL; + page_info_s *page_info = NULL; + Ecore_Animator *anim = NULL; + + int x = ei->output.x; + int y = ei->output.y; + + _D("edit : Up (%p) (%d, %d)", obj, x, y); + + ret_if(!proxy_page); + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + page_current = scroller_get_focused_page(page_info->scroller); + ret_if(!page_current); + if (page_current != proxy_page) return; + + scroller_enable_focus_on_scroll(page_info->scroller); + scroller_enable_index_on_scroll(page_info->scroller); + + if (evas_object_data_del(page_info->scroller, PRIVATE_DATA_KEY_EDIT_ITEM_IS_MOVED) + && main_get_info()->is_tts) + { + elm_access_say(_("IDS_TTS_BODY_ITEM_MOVED")); + } + + elm_object_signal_emit(page_info->layout, "hide", "checker"); + + evas_object_data_del(page_info->scroller, PRIVATE_DATA_KEY_SCROLLER_PRESS_PAGE); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_PRESSED); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_DOWN_X); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_DOWN_Y); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_X_FOR_MOVING); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_Y_FOR_MOVING); + + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_W); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_H); + old_obj = evas_object_data_del(page_info->scroller, DATA_KEY_EVENT_UPPER_PAGE); + if (old_obj) { + _D("Call upper_end & upper_start"); + evas_object_smart_callback_call(old_obj, "upper_end", NULL); + } + + timer = evas_object_data_del(page_info->scroller, DATA_KEY_EVENT_UPPER_TIMER); + if (timer) ecore_timer_del(timer); + + timer = evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_LONGPRESS_TIMER); + if (timer) { + ecore_timer_del(timer); + timer = NULL; + return; + } + + anim = evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_MOVING); + if (anim) { + ecore_animator_del(anim); + anim = NULL; + } + + if (evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_EDIT_DISABLE_REORDERING)) { + _D("long-press is not supported on this page"); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_X_FOR_ANIM); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_Y_FOR_ANIM); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_MOVING); + scroller_unfreeze(page_info->scroller); + edit_change_focus(page_info->scroller, page_current); + return; + } + + anim = ecore_animator_add(_anim_move_page_to_empty_position, proxy_page); + ret_if(NULL == anim); + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_MOVING, anim); + if (evas_object_data_get(page_info->scroller, PRIVATE_DATA_KEY_EDIT_IS_LONGPRESSED)) { + elm_object_signal_emit(page_info->page_inner, "reset,zoom", "inner"); + } +} + + + +static key_cb_ret_e _add_viewer_back_key_cb(void *data) +{ + _W(""); + Evas_Object *layout = data; + + retv_if(!layout, KEY_CB_RET_CONTINUE); + edit_destroy_add_viewer(layout); + + return KEY_CB_RET_STOP; +} + + + +#if 0 /* We use this when back key isn't used anymore*/ +static Eina_Bool _delay_destroy_add_viewer_cb(void *data) +{ + Evas_Object *layout = data; + + edit_destroy_add_viewer(layout); + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _delay_destroy_edit_cb(void *data) +{ + Evas_Object *layout = data; + + edit_destroy_layout(layout); + return ECORE_CALLBACK_CANCEL; +} + + + +static void _add_viewer_bezel_down_cb(void *data) +{ + Evas_Object *layout = data; + Ecore_Timer *timer = NULL; + + ret_if(!layout); + + timer = evas_object_data_del(layout, PRIVATE_DATA_KEY_TIMER); + if (timer) { + ecore_timer_del(timer); + } + timer = ecore_timer_add(0.1f, _delay_destroy_add_viewer_cb, layout); + evas_object_data_set(layout, PRIVATE_DATA_KEY_TIMER, timer); +} + + + +static void _edit_bezel_down_cb(void *data) +{ + Evas_Object *layout = data; + Ecore_Timer *timer = NULL; + + ret_if(!layout); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + if (!layout_info->edit) { + _D("Layout is not edited"); + return; + } + timer = evas_object_data_del(layout, PRIVATE_DATA_KEY_TIMER); + if (timer) { + ecore_timer_del(timer); + } + timer = ecore_timer_add(0.1f, _delay_destroy_layout_cb, layout); + evas_object_data_set(layout, PRIVATE_DATA_KEY_TIMER, timer); +} +#endif + + + +static key_cb_ret_e _add_viewer_home_key_cb(void *data) +{ + Evas_Object *layout = data; + layout_info_s *layout_info = NULL; + + retv_if(!layout, KEY_CB_RET_CONTINUE); + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, KEY_CB_RET_CONTINUE); + + edit_destroy_add_viewer(layout); + if (layout_info->edit) edit_destroy_layout(layout); + + return KEY_CB_RET_STOP; +} + + + +static char *_access_remove_button_name_cb(void *data, Evas_Object *obj) +{ + char *tmp; + + tmp = strdup(_("IDS_COM_BUTTON_REMOVE_ABB")); + retv_if(!tmp, NULL); + return tmp; +} + + + +#define PROXY_ITEM_EDJ EDJEDIR"/edit.edj" +#define PROXY_ITEM_GROUP "proxy_item" +Evas_Object *_create_proxy_item(Evas_Object *edit_scroller, Evas_Object *real_page) +{ + Evas_Object *proxy_item = NULL; + Evas_Object *proxy_image = NULL; + page_info_s *page_info = NULL; + Eina_Bool ret; + + retv_if(!edit_scroller, NULL); + retv_if(!real_page, NULL); + + page_info = evas_object_data_get(real_page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + /* Proxy Item */ + proxy_item = elm_layout_add(edit_scroller); + retv_if(!proxy_item, NULL); + + ret = elm_layout_file_set(proxy_item, PROXY_ITEM_EDJ, PROXY_ITEM_GROUP); + if (EINA_FALSE == ret) { + _E("cannot set the file into the layout"); + evas_object_del(proxy_item); + return NULL; + } + evas_object_repeat_events_set(proxy_item, EINA_TRUE); + + /* Proxy Image */ + proxy_image = evas_object_image_filled_add(main_get_info()->e); + if (!proxy_item) { + _E("Cannot add an image"); + evas_object_del(proxy_image); + return NULL; + } + + ret = evas_object_image_source_set(proxy_image, page_info->item); + if(EINA_FALSE == ret) _E("Cannot set the source into the proxy image"); + + evas_object_image_source_visible_set(proxy_image, EINA_FALSE); + evas_object_image_source_clip_set(proxy_image, EINA_FALSE); + + elm_object_part_content_set(proxy_item, "proxy_item", proxy_image); + + evas_object_repeat_events_set(proxy_image, EINA_TRUE); + evas_object_size_hint_weight_set(proxy_image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_min_set(proxy_image, ITEM_EDIT_WIDTH, ITEM_EDIT_HEIGHT); + evas_object_resize(proxy_image, ITEM_EDIT_WIDTH, ITEM_EDIT_HEIGHT); + evas_object_show(proxy_image); + + _D("Create a proxy item(%p)", proxy_item); + + return proxy_item; +} + + + +static void _destroy_proxy_item(Evas_Object *proxy_item) +{ + Evas_Object *proxy_image = NULL; + + ret_if(!proxy_item); + + proxy_image = elm_object_part_content_unset(proxy_item, "proxy_item"); + if (proxy_image) { + evas_object_image_source_visible_set(proxy_image, EINA_TRUE); + evas_object_del(proxy_image); + } + + _D("Destroy a proxy item(%p)", proxy_item); + + evas_object_del(proxy_item); +} + + + +HAPI void edit_change_focus(Evas_Object *edit_scroller, Evas_Object *page_current) +{ + Evas_Object *page_focused = NULL; + page_info_s *page_info = NULL; + page_info_s *focused_page_info = NULL; + int unfocusable = 0; + + ret_if(!edit_scroller); + if(!page_current) { + evas_object_data_set(edit_scroller, PRIVATE_DATA_KEY_EDIT_FOCUS_OBJECT, NULL); + return; + } + + page_focused = evas_object_data_get(edit_scroller, PRIVATE_DATA_KEY_EDIT_FOCUS_OBJECT); + if (page_focused == page_current) return; + + page_info = evas_object_data_get(page_current, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->page_inner); + ret_if(!page_info->item); + + /* Blocker has to be disabled even if this is unfocusable */ + elm_object_signal_emit(page_info->page_inner, "disable", "blocker"); + + evas_object_data_set(edit_scroller, PRIVATE_DATA_KEY_EDIT_FOCUS_OBJECT, page_current); + + if(page_focused) { + focused_page_info = evas_object_data_get(page_focused, DATA_KEY_PAGE_INFO); + if (!focused_page_info) goto OUT; + if (!focused_page_info->page_inner) goto OUT; + if (!focused_page_info->item) goto OUT; + + unfocusable = (int) evas_object_data_get(page_focused, PRIVATE_DATA_KEY_EDIT_UNFOCUSABLE); + if (!unfocusable) { + elm_object_signal_emit(focused_page_info->page_inner, "deselect", "cover"); + elm_object_signal_emit(focused_page_info->page_inner, "deselect", "line"); + elm_object_signal_emit(focused_page_info->page_inner, "hide", "del"); + } + elm_object_signal_emit(focused_page_info->page_inner, "enable", "blocker"); + } + +OUT: + /* Unfocusable page */ + unfocusable = (int) evas_object_data_get(page_current, PRIVATE_DATA_KEY_EDIT_UNFOCUSABLE); + if (unfocusable) return; + + /* Focusable page */ + elm_object_signal_emit(page_info->page_inner, "select", "cover"); + elm_object_signal_emit(page_info->page_inner, "select", "line"); + if (page_info->removable) { + elm_object_signal_emit(page_info->page_inner, "show", "del"); + } +} + + + +static void _remove_widget(Evas_Object *page) +{ + Evas_Object *proxy_page = NULL; + Evas_Object *page_current = NULL; + Evas_Object *focused_page = NULL; + + layout_info_s *layout_info = NULL; + edit_info_s *edit_info = NULL; + scroller_info_s *edit_scroller_info = NULL; + page_info_s *page_info = NULL; + + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + layout_info = evas_object_data_get(page_info->layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + + edit_scroller_info = evas_object_data_get(edit_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!edit_scroller_info); + + /* Proxy DBox */ + proxy_page = evas_object_data_get(page, DATA_KEY_PROXY_PAGE); + ret_if(!proxy_page); + + focused_page = evas_object_data_get(edit_info->scroller, PRIVATE_DATA_KEY_EDIT_FOCUS_OBJECT); + if (proxy_page == focused_page) { + evas_object_data_set(edit_info->scroller, PRIVATE_DATA_KEY_EDIT_FOCUS_OBJECT, NULL); + } + + scroller_pop_page(edit_info->scroller, proxy_page); + edit_destroy_proxy_page(proxy_page); + edit_arrange_plus_page(layout_info->edit); + + /* Real DBox */ + scroller_pop_page(layout_info->scroller, page); + /** + * @note + * Delete a box permanently only if a user deletes it. + */ + widget_viewer_evas_set_permanent_delete(page_info->item, 1); + evas_object_del(page_info->item); + page_destroy(page); + page_arrange_plus_page(layout_info->scroller, 0); + + page_current = scroller_get_focused_page(edit_info->scroller); + ret_if(!page_current); + + scroller_region_show_page(edit_info->scroller, page_current, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_ANIMATOR); + edit_change_focus(edit_info->scroller, page_current); +} + + + +static Eina_Bool _minify_widget_anim_cb(void *data) +{ + Evas_Object *proxy_page = data; + int w, h; + + retv_if(!proxy_page, ECORE_CALLBACK_CANCEL); + + evas_object_geometry_get(proxy_page, NULL, NULL, &w, &h); + + w -= SLIPPED_LENGTH; + evas_object_size_hint_min_set(proxy_page, w, h); + + if (w <= 0) { + Evas_Object *real_page = evas_object_data_get(proxy_page, DATA_KEY_REAL_PAGE); + + /* This has to be executed before _remove_widget */ + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_DEL); + + if (real_page) _remove_widget(real_page); + return ECORE_CALLBACK_CANCEL; + } + + return ECORE_CALLBACK_RENEW; + +} + + + +static void _del_widget_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *proxy_page = data; + Evas_Object *page_inner = NULL; + Ecore_Animator *anim = NULL; + + _D("Del is clicked"); + + ret_if(!proxy_page); + page_inner = elm_object_part_content_unset(proxy_page, "inner"); + ret_if(!page_inner); + + evas_object_hide(page_inner); + + anim = evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_DEL); + if (anim) return; + + anim = ecore_animator_add(_minify_widget_anim_cb, proxy_page); + if (anim) evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_DEL, anim); + else _E("Cannot add an animator"); + + elm_access_say(_("IDS_TTS_BODY_ITEM_REMOVED")); +} + + + +static Evas_Object *_add_widget_in_normal(Evas_Object *layout, const char *id, const char *subid) +{ + Evas_Object *page = NULL; + Evas_Object *item = NULL; + Eina_List *page_info_list = NULL; + layout_info_s *layout_info = NULL; + scroller_info_s *scroller_info = NULL; + + retv_if(!layout, NULL); + retv_if(!id, NULL); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, NULL); + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + /* Real DBox */ + item = widget_create(layout_info->scroller, id, NULL, WIDGET_VIEWER_EVAS_DEFAULT_PERIOD); + retv_if(!item, NULL); + widget_viewer_evas_resume_widget(item); + widget_viewer_evas_disable_loading(item); + evas_object_resize(item, scroller_info->page_width, scroller_info->page_height); + evas_object_size_hint_min_set(item, scroller_info->page_width, scroller_info->page_height); + evas_object_show(item); + + page = page_create(layout_info->scroller + , item + , id, NULL + , scroller_info->page_width, scroller_info->page_height + , PAGE_CHANGEABLE_BG_ON, PAGE_REMOVABLE_ON); + goto_if(!page, ERROR); + widget_add_callback(item, page); + page_set_effect(page, page_effect_none, page_effect_none); + + scroller_push_page(layout_info->scroller, page, SCROLLER_PUSH_TYPE_LAST); + page_arrange_plus_page(layout_info->scroller, 1); + + page_info_list = scroller_write_list(layout_info->scroller); + if (page_info_list) { + db_read_list(page_info_list); + scroller_read_list(layout_info->scroller, page_info_list); + page_info_list_destroy(page_info_list); + } + + scroller_region_show_page(layout_info->scroller, page, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_ANIMATOR); + + return page; + +ERROR: + widget_destroy(item); + return NULL; + +} + + + +static Evas_Object *add_widget_in_edit(Evas_Object *layout, const char *id, const char *subid) +{ + Evas_Object *proxy_page = NULL; + Evas_Object *page = NULL; + Evas_Object *page_inner = NULL; + Evas_Object *item = NULL; + layout_info_s *layout_info = NULL; + edit_info_s *edit_info = NULL; + scroller_info_s *scroller_info = NULL; + scroller_info_s *edit_scroller_info = NULL; + page_info_s *proxy_page_info = NULL; + page_info_s *plus_page_info = NULL; + + retv_if(!layout, NULL); + retv_if(!id, NULL); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, NULL); + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + retv_if(!edit_info, NULL); + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + edit_scroller_info = evas_object_data_get(edit_info->scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!edit_scroller_info, NULL); + + plus_page_info = evas_object_data_get(edit_scroller_info->plus_page, DATA_KEY_PAGE_INFO); + retv_if(!plus_page_info, NULL); + + /* Real DBox */ + item = widget_create(layout_info->scroller, id, NULL, WIDGET_VIEWER_EVAS_DEFAULT_PERIOD); + goto_if(!item, ERROR); + widget_viewer_evas_resume_widget(item); + widget_viewer_evas_disable_loading(item); + evas_object_resize(item, scroller_info->page_width, scroller_info->page_height); + evas_object_size_hint_min_set(item, scroller_info->page_width, scroller_info->page_height); + evas_object_show(item); + + page = page_create(layout_info->scroller + , item + , id, NULL + , scroller_info->page_width, scroller_info->page_height + , PAGE_CHANGEABLE_BG_ON, PAGE_REMOVABLE_ON); + goto_if(!page, ERROR); + widget_add_callback(item, page); + page_set_effect(page, page_effect_none, page_effect_none); + + scroller_push_page_before(layout_info->scroller, page, scroller_info->plus_page); + page_arrange_plus_page(layout_info->scroller, 1); + + page_inner = elm_object_part_content_unset(page, "inner"); + if (page_inner) evas_object_move(page_inner, 0, 0); + else _E("Cannot get the page_inner"); + + /* Proxy DBox */ + proxy_page = edit_create_proxy_page(edit_info->scroller, page, PAGE_CHANGEABLE_BG_ON); + goto_if(!proxy_page, ERROR); + + proxy_page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + goto_if(!proxy_page_info, ERROR); + goto_if(!edit_info->plus_page, ERROR); + + elm_object_signal_emit(proxy_page_info->page_inner, "select", "cover_clipper"); + + scroller_push_page_before(edit_info->scroller, proxy_page, edit_info->plus_page); + edit_arrange_plus_page(layout_info->edit); + + evas_object_smart_callback_add(proxy_page_info->focus, "clicked", _clicked_widget_cb, proxy_page); + evas_object_smart_callback_add(proxy_page_info->remove_focus, "clicked", _del_widget_cb, proxy_page); + + /* Update index */ + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_update(scroller_info->index[PAGE_DIRECTION_RIGHT], layout_info->scroller, INDEX_BRING_IN_NONE); + } + + if (edit_scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_update(edit_scroller_info->index[PAGE_DIRECTION_RIGHT], edit_info->scroller, INDEX_BRING_IN_NONE); + } + + index_bring_in_page(edit_scroller_info->index[PAGE_DIRECTION_RIGHT], proxy_page); + edit_change_focus(edit_info->scroller, proxy_page); + scroller_region_show_page(edit_info->scroller, proxy_page, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_ANIMATOR); + elm_object_signal_emit(plus_page_info->page_inner, "deselect", "line"); + elm_object_signal_emit(plus_page_info->page_inner, "deselect", "cover"); + elm_object_signal_emit(plus_page_info->page_inner, "enable", "blocker"); + + return page; + +ERROR: + if (page) { + _remove_widget(page); + } + return NULL; +} + + + +static Eina_Bool _fire_timer_cb(void *data) +{ + Evas_Object *real_page = data; + retv_if(!real_page, ECORE_CALLBACK_CANCEL); + noti_broker_event_fire_to_plugin(EVENT_SOURCE_EDITING, EVENT_TYPE_NOTI_DELETE, real_page); + return ECORE_CALLBACK_CANCEL; +} + + + +static void _remove_noti(Evas_Object *real_page) +{ + Evas_Object *edit_scroller = NULL; + Evas_Object *proxy_page = NULL; + Evas_Object *page_current = NULL; + scroller_info_s *edit_scroller_info = NULL; + page_info_s *page_info = NULL; + page_info_s *proxy_page_info = NULL; + Ecore_Timer *fire_timer = NULL; + + ret_if(!real_page); + + page_info = evas_object_data_get(real_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + proxy_page = evas_object_data_get(real_page, DATA_KEY_PROXY_PAGE); + ret_if(!proxy_page); + + proxy_page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + ret_if(!proxy_page_info); + + edit_scroller = proxy_page_info->scroller; + ret_if(!edit_scroller); + + edit_scroller_info = evas_object_data_get(edit_scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!edit_scroller_info); + + /* Proxy */ + scroller_pop_page(edit_scroller, proxy_page); + edit_destroy_proxy_page(proxy_page); + + page_current = scroller_get_focused_page(edit_scroller); + if (!page_current) { + _D("No focused page"); + return; + } + + edit_change_focus(edit_scroller, page_current); + + /* Noti */ + fire_timer = ecore_timer_add(0.1f, _fire_timer_cb, real_page); + if (!fire_timer) { + _E("Cannot add a timer"); + noti_broker_event_fire_to_plugin(EVENT_SOURCE_EDITING, EVENT_TYPE_NOTI_DELETE, real_page); + } +} + + + +static Eina_Bool _minify_noti_anim_cb(void *data) +{ + Evas_Object *proxy_page = data; + int w, h; + + retv_if(!proxy_page, ECORE_CALLBACK_CANCEL); + + evas_object_geometry_get(proxy_page, NULL, NULL, &w, &h); + + w -= SLIPPED_LENGTH; + evas_object_size_hint_min_set(proxy_page, w, h); + + if (w <= 0) { + Evas_Object *real_page = NULL; + + /* This has to be executed before _remove_noti */ + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_DEL); + + real_page = evas_object_data_get(proxy_page, DATA_KEY_REAL_PAGE); + if (real_page) _remove_noti(real_page); + + return ECORE_CALLBACK_CANCEL; + } + + return ECORE_CALLBACK_RENEW; +} + + + +static void _del_noti_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *proxy_page = data; + Evas_Object *page_inner = NULL; + Ecore_Animator *anim = NULL; + + _D("Del is clicked"); + + ret_if(!proxy_page); + + page_inner = elm_object_part_content_unset(proxy_page, "inner"); + ret_if(!page_inner); + evas_object_hide(page_inner); + + anim = evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_DEL); + if (anim) return; + + anim = ecore_animator_add(_minify_noti_anim_cb, proxy_page); + if (anim) evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_DEL, anim); + else _E("Cannot add an animator"); +} + + + +#define SLIPPED_LENGTH_BEFORE 15 +static Eina_Bool _anim_move_page_before_cb(void *data) +{ + Evas_Object *scroller = data; + Evas_Object *page = NULL; + Evas_Object *rect = NULL; + scroller_info_s *scroller_info = NULL; + int w, h; + + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, ECORE_CALLBACK_CANCEL); + + page = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_PAGE_FOR_MOVING); + evas_object_geometry_get(page, NULL, NULL, &w, &h); + + w += SLIPPED_LENGTH_BEFORE; + evas_object_size_hint_min_set(page, w, h); + if (w >= PAGE_EDIT_WIDTH) { + evas_object_size_hint_min_set(page, PAGE_EDIT_WIDTH, PAGE_EDIT_HEIGHT); + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_PAGE_FOR_MOVING); + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_FOR_MOVING); + rect = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_RECT_FOR_MOVING); + + if (rect) { + elm_box_unpack(scroller_info->box, rect); + evas_object_del(rect); + } else _E("Cannot get the rect"); + + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_update(scroller_info->index[PAGE_DIRECTION_RIGHT], scroller, INDEX_BRING_IN_NONE); + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_RIGHT], page); + } + return ECORE_CALLBACK_CANCEL; + } + return ECORE_CALLBACK_RENEW; +} + + + +HAPI w_home_error_e edit_push_page_before(Evas_Object *scroller, Evas_Object *page, Evas_Object *before) +{ + Evas_Object *rect = NULL; + scroller_info_s *scroller_info = NULL; + Ecore_Animator *anim = NULL; + + retv_if(!scroller, W_HOME_ERROR_FAIL); + retv_if(!page, W_HOME_ERROR_FAIL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, W_HOME_ERROR_FAIL); + + anim = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_FOR_MOVING); + if (anim) return W_HOME_ERROR_FAIL; + + rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_RECT_FOR_MOVING); + if (rect) { + elm_box_unpack(scroller_info->box, rect); + evas_object_del(rect); + } + + rect = evas_object_rectangle_add(main_get_info()->e); + retv_if(!rect, W_HOME_ERROR_FAIL); + evas_object_size_hint_min_set(rect, PAGE_EDIT_WIDTH, PAGE_EDIT_HEIGHT); + evas_object_color_set(rect, 0, 0, 0, 0); + evas_object_show(rect); + + elm_box_pack_after(scroller_info->box, rect, page); + elm_box_unpack(scroller_info->box, page); + if (before) elm_box_pack_before(scroller_info->box, page, before); + else elm_box_pack_end(scroller_info->box, page); + + evas_object_size_hint_min_set(page, 1, PAGE_EDIT_HEIGHT); + + scroller_bring_in_page(scroller, page, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_ANIMATOR); + + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_PAGE_FOR_MOVING, page); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_RECT_FOR_MOVING, rect); + + anim = ecore_animator_add(_anim_move_page_before_cb, scroller); + retv_if(!anim, W_HOME_ERROR_FAIL); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_FOR_MOVING, anim); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_EDIT_ITEM_IS_MOVED, (void *) 1); + + return W_HOME_ERROR_NONE; +} + + + +#define SLIPPED_LENGTH_AFTER 30 +static Eina_Bool _anim_move_page_after_cb(void *data) +{ + Evas_Object *scroller = data; + Evas_Object *page = NULL; + Evas_Object *rect = NULL; + scroller_info_s *scroller_info = NULL; + int w, h; + + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, ECORE_CALLBACK_CANCEL); + + rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_RECT_FOR_MOVING); + retv_if(!rect, ECORE_CALLBACK_CANCEL); + evas_object_geometry_get(rect, NULL, NULL, &w, &h); + + w -= SLIPPED_LENGTH_AFTER; + evas_object_size_hint_min_set(rect, w, h); + if (w <= 0) { + page = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_PAGE_FOR_MOVING); + elm_box_unpack(scroller_info->box, rect); + scroller_bring_in_page(scroller, page, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_INSTANT); + evas_object_del(rect); + + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_update(scroller_info->index[PAGE_DIRECTION_RIGHT], scroller, INDEX_BRING_IN_NONE); + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_RIGHT], page); + } + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_PAGE_FOR_MOVING); + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_FOR_MOVING); + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_RECT_FOR_MOVING); + return ECORE_CALLBACK_CANCEL; + } + return ECORE_CALLBACK_RENEW; +} + + + +HAPI w_home_error_e edit_push_page_after(Evas_Object *scroller, Evas_Object *page, Evas_Object *after) +{ + Evas_Object *rect = NULL; + scroller_info_s *scroller_info = NULL; + Ecore_Animator *anim = NULL; + + retv_if(!scroller, W_HOME_ERROR_FAIL); + retv_if(!page, W_HOME_ERROR_FAIL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, W_HOME_ERROR_FAIL); + + anim = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_FOR_MOVING); + if (anim) return W_HOME_ERROR_FAIL; + + rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_RECT_FOR_MOVING); + if (rect) { + elm_box_unpack(scroller_info->box, rect); + evas_object_del(rect); + } + + rect = evas_object_rectangle_add(main_get_info()->e); + retv_if(!rect, W_HOME_ERROR_FAIL); + evas_object_size_hint_min_set(rect, PAGE_EDIT_WIDTH, PAGE_EDIT_HEIGHT); + evas_object_color_set(rect, 0, 0, 0, 0); + evas_object_show(rect); + + elm_box_pack_before(scroller_info->box, rect, page); + elm_box_unpack(scroller_info->box, page); + if (after) elm_box_pack_after(scroller_info->box, page, after); + else elm_box_pack_start(scroller_info->box, page); + + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_PAGE_FOR_MOVING, page); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_RECT_FOR_MOVING, rect); + + anim = ecore_animator_add(_anim_move_page_after_cb, scroller); + retv_if(!anim, W_HOME_ERROR_FAIL); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_FOR_MOVING, anim); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_EDIT_ITEM_IS_MOVED, (void *) 1); + + return W_HOME_ERROR_NONE; +} + + + +static Eina_Bool _move_timer_cb(void *data) +{ + Evas_Object *proxy_page = data; + Evas_Object *pressed_page = NULL; + page_info_s *page_info = NULL; + scroller_info_s *edit_scroller_info = NULL; + int idx_above_page = -1; + int idx_below_page = -1; + int inner_x, inner_y, sx; + + retv_if(!proxy_page, ECORE_CALLBACK_CANCEL); + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, ECORE_CALLBACK_CANCEL); + retv_if(!page_info->scroller, ECORE_CALLBACK_CANCEL); + evas_object_data_del(page_info->scroller, DATA_KEY_EVENT_UPPER_TIMER); + + evas_object_geometry_get(page_info->page_inner, &inner_x, &inner_y, NULL, NULL); + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_X_FOR_ANIM, (void *) inner_x); + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_PAGE_Y_FOR_ANIM, (void *) inner_y); + + elm_scroller_region_get(page_info->scroller, &sx, NULL, NULL, NULL); + sx += inner_x; + evas_object_data_set(page_info->scroller, PRIVATE_DATA_KEY_SCROLLER_X, (void *)sx); + + idx_below_page = scroller_seek_page_position(page_info->scroller, proxy_page); + retv_if(-1 == idx_below_page, ECORE_CALLBACK_CANCEL); + + pressed_page = evas_object_data_get(page_info->scroller, PRIVATE_DATA_KEY_SCROLLER_PRESS_PAGE); + retv_if(!pressed_page, ECORE_CALLBACK_CANCEL); + + idx_above_page = scroller_seek_page_position(page_info->scroller, pressed_page); + retv_if(-1 == idx_above_page, ECORE_CALLBACK_CANCEL); + + if (idx_above_page < idx_below_page) { + scroller_move_page_prev(page_info->scroller, pressed_page, proxy_page, pressed_page); + } else { + scroller_move_page_next(page_info->scroller, proxy_page, pressed_page, pressed_page); + } + + scroller_bring_in_center_of(page_info->scroller, pressed_page, SCROLLER_FREEZE_ON, NULL, NULL, NULL, NULL); + + edit_scroller_info = evas_object_data_get(page_info->scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!edit_scroller_info, ECORE_CALLBACK_CANCEL); + + /* Update index */ + retv_if(!edit_scroller_info->index[PAGE_DIRECTION_RIGHT], ECORE_CALLBACK_CANCEL); + index_update(edit_scroller_info->index[PAGE_DIRECTION_RIGHT], page_info->scroller, INDEX_BRING_IN_NONE); + index_bring_in_page(edit_scroller_info->index[PAGE_DIRECTION_RIGHT], pressed_page); + + _D("Move an proxy_page(%p, %d) to (%d)", proxy_page, idx_below_page, idx_above_page); + + return ECORE_CALLBACK_CANCEL; +} + + + +#define TIME_MOVE_ITEM 0.1f +static void _upper_start_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *proxy_page = obj; + Evas_Object *pressed_page = NULL; + Ecore_Timer *timer = NULL; + page_info_s *page_info = NULL; + + ret_if(!proxy_page); + + page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + pressed_page = evas_object_data_get(page_info->scroller, PRIVATE_DATA_KEY_SCROLLER_PRESS_PAGE); + ret_if(!pressed_page); + + if (proxy_page == pressed_page) { + timer = evas_object_data_del(page_info->scroller, DATA_KEY_EVENT_UPPER_TIMER); + if (timer) ecore_timer_del(timer); + return; + } + + _D("Upper start : %p", proxy_page); + + timer = evas_object_data_del(page_info->scroller, DATA_KEY_EVENT_UPPER_TIMER); + if (timer) ecore_timer_del(timer); + + timer = ecore_timer_add(TIME_MOVE_ITEM, _move_timer_cb, proxy_page); + if (timer) evas_object_data_set(page_info->scroller, DATA_KEY_EVENT_UPPER_TIMER, timer); + else _E("Cannot add a timer"); +} + + + +static void _upper_cb(void *data, Evas_Object *obj, void *event_info) +{ + ; +} + + + +static void _upper_end_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *page = obj; + page_info_s *page_info = NULL; + Ecore_Timer *timer = NULL; + + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + _D("Upper end : %p", page); + + timer = evas_object_data_del(page_info->scroller, DATA_KEY_EVENT_UPPER_TIMER); + if (timer) ecore_timer_del(timer); +} + + + +Evas_Object *edit_create_proxy_page(Evas_Object *edit_scroller, Evas_Object *real_page, page_changeable_bg_e changable_color) +{ + Evas_Object *proxy_page = NULL; + Evas_Object *proxy_item = NULL; + Evas_Object *remove_focus = NULL; + page_info_s *page_info = NULL; + page_info_s *proxy_page_info = NULL; + + retv_if(!edit_scroller, NULL); + retv_if(!real_page, NULL); + + page_info = evas_object_data_get(real_page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + /* Proxy item */ + proxy_item = _create_proxy_item(edit_scroller, real_page); + retv_if(!proxy_item, NULL); + + /* Proxy Page */ + proxy_page = page_create(edit_scroller + , proxy_item + , page_info->id, page_info->subid + , PAGE_EDIT_WIDTH, PAGE_EDIT_HEIGHT + , changable_color, page_info->removable); + if (!proxy_page) { + _E("Cannot create a page"); + _destroy_proxy_item(proxy_item); + return NULL; + } + + proxy_page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + if (!proxy_page_info) { + _E("Cannot get the proxy_page_info"); + page_destroy(proxy_page); + _destroy_proxy_item(proxy_item); + return NULL; + } + elm_object_signal_emit(proxy_page_info->page_inner, "enable", "blocker"); + + remove_focus = elm_button_add(proxy_page_info->page_inner); + retv_if(!remove_focus, NULL); + + elm_object_style_set(remove_focus, "focus"); + elm_object_part_content_set(proxy_page_info->page_inner, "remove_focus", remove_focus); + elm_access_info_cb_set(remove_focus, ELM_ACCESS_INFO, _access_remove_button_name_cb, NULL); + proxy_page_info->remove_focus = remove_focus; + + evas_object_data_set(proxy_page, DATA_KEY_REAL_PAGE, real_page); + evas_object_data_set(real_page, DATA_KEY_PROXY_PAGE, proxy_page); + + proxy_page_info->direction = page_info->direction; + if (PAGE_DIRECTION_CENTER == page_info->direction) return proxy_page; + + evas_object_event_callback_add(proxy_page_info->page_inner, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, proxy_page); + evas_object_event_callback_add(proxy_page_info->page_inner, EVAS_CALLBACK_MOUSE_MOVE, _move_cb, proxy_page); + evas_object_event_callback_add(proxy_page_info->page_inner, EVAS_CALLBACK_MOUSE_UP, _up_cb, proxy_page); + evas_object_smart_callback_add(proxy_page, "upper_start", _upper_start_cb, NULL); + evas_object_smart_callback_add(proxy_page, "upper", _upper_cb, NULL); + evas_object_smart_callback_add(proxy_page, "upper_end", _upper_end_cb, NULL); + + return proxy_page; +} + + + +void edit_destroy_proxy_page(Evas_Object *proxy_page) +{ + Evas_Object *real_page = NULL; + page_info_s *proxy_page_info = NULL; + Ecore_Animator *anim = NULL; + + ret_if(!proxy_page); + + real_page = evas_object_data_del(proxy_page, DATA_KEY_REAL_PAGE); + if (real_page) evas_object_data_del(real_page, DATA_KEY_PROXY_PAGE); + + anim = evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_ANIM_FOR_MOVING); + if (anim) { + ecore_animator_del(anim); + anim = NULL; + if (NULL == _content_set_page_inner(proxy_page)) _E("cannot set the page"); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_X_FOR_ANIM); + evas_object_data_del(proxy_page, PRIVATE_DATA_KEY_PAGE_Y_FOR_ANIM); + } + + proxy_page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + ret_if(!proxy_page_info); + + if (proxy_page_info->remove_focus) { + evas_object_del(proxy_page_info->remove_focus); + proxy_page_info->remove_focus = NULL; + } + + if (proxy_page_info->item) { + _destroy_proxy_item(proxy_page_info->item); + } + page_destroy(proxy_page); +} + + + +static Eina_Bool _enlarge_widget_anim_cb(void *data) +{ + Evas_Object *effect_page = data; + Evas_Object *bg_rect = NULL; + + int cur_x, cur_y, cur_w, cur_h; + int end_x, end_y, end_w, end_h; + int vec_x, vec_y, vec_w, vec_h; + int divide_factor; + + goto_if(!effect_page, OUT); + + bg_rect = evas_object_data_get(effect_page, DATA_KEY_BG); + goto_if(!bg_rect, OUT); + + end_w = main_get_info()->root_w; + end_h = main_get_info()->root_h; + + end_x = 0; + end_y = 0; + + evas_object_geometry_get(effect_page, &cur_x, &cur_y, &cur_w, &cur_h); + + divide_factor = (int) evas_object_data_get(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR); + if (divide_factor > 1) { + evas_object_data_set(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR, (void *) divide_factor - 1); + } + + vec_x = (end_x - cur_x) / divide_factor; + vec_y = (end_y - cur_y) / divide_factor; + vec_w = (end_w - cur_w) / divide_factor; + vec_h = (end_h - cur_h) / divide_factor; + + if (!vec_x) vec_x = -1; + if (!vec_y) vec_y = -1; + if (!vec_w) vec_w = 1; + if (!vec_h) vec_h = 1; + + cur_x += vec_x; + cur_y += vec_y; + cur_w += vec_w; + cur_h += vec_h; + + if (cur_x < end_x) { + goto OUT; + } + + evas_object_move(effect_page, cur_x, cur_y); + evas_object_resize(effect_page, cur_w, cur_h); + evas_object_move(bg_rect, cur_x, cur_y); + evas_object_resize(bg_rect, cur_w, cur_h); + + return ECORE_CALLBACK_RENEW; + +OUT: + if (effect_page) { + evas_object_data_del(effect_page, PRIVATE_DATA_KEY_ANIM_FOR_ENLARGE); + evas_object_data_del(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR); + evas_object_data_del(effect_page, DATA_KEY_BG); + + edit_destroy_add_viewer(main_get_info()->layout); + _destroy_proxy_bg(bg_rect); + evas_object_del(effect_page); + } + return ECORE_CALLBACK_CANCEL; +} + + + +#define DIVIDE_FACTOR 5 +HAPI void edit_enlarge_effect_widget(void *effect_page) +{ + Evas_Object *clip_bg = NULL; + Ecore_Animator *anim = NULL; + + anim = evas_object_data_get(effect_page, PRIVATE_DATA_KEY_ANIM_FOR_ENLARGE); + if (anim) { + _D("You've already an animator"); + return; + } + + evas_object_raise(effect_page); + + anim = ecore_animator_add(_enlarge_widget_anim_cb, effect_page); + if (anim) { + evas_object_data_set(effect_page, PRIVATE_DATA_KEY_ANIM_FOR_ENLARGE, anim); + evas_object_data_set(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR, (void *) DIVIDE_FACTOR); + } else { + clip_bg = evas_object_data_del(effect_page, DATA_KEY_BG); + if (clip_bg) _destroy_proxy_bg(clip_bg); + evas_object_del(effect_page); + } +} + + + +static void _widget_selected_cb(void *data, Evas_Object *add_viewer, void *event_info) +{ + Evas_Object *layout = data; + Evas_Object *clip_bg = NULL; + layout_info_s *layout_info = NULL; + struct add_viewer_event_info *e = event_info; + + _D("Selected: %s", e->pkg_info.widget_id); + ret_if(!layout); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + if (layout_info->edit) { + evas_object_del(e->pkg_info.image); + if (!add_widget_in_edit(layout, e->pkg_info.widget_id, e->pkg_info.content)) { + _E("Cannot add widget in edit mode"); + } + edit_destroy_add_viewer(layout); + } else { + clip_bg = _create_proxy_bg(e->pkg_info.image); + ret_if(!clip_bg); + evas_object_data_set(e->pkg_info.image, DATA_KEY_BG, clip_bg); + edit_enlarge_effect_widget(e->pkg_info.image); + + if (!_add_widget_in_normal(layout, e->pkg_info.widget_id, e->pkg_info.content)) { + _E("Cannot add widget in widget scroller"); + } + } + + /* Only for right layout */ + wms_change_favorite_order(W_HOME_WMS_BACKUP); +} + + + +HAPI Evas_Object *edit_create_add_viewer(Evas_Object *layout) +{ + Evas_Object *add_viewer = NULL; + layout_info_s *layout_info = NULL; + + retv_if(!layout, NULL); + + if (evas_object_data_get(layout, DATA_KEY_ADD_VIEWER)) { + _D("There is already the add-viewer"); + return NULL; + } + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, NULL); + + add_viewer = evas_object_add_viewer_add(layout); + retv_if(!add_viewer, NULL); + + evas_object_size_hint_weight_set(add_viewer, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_min_set(add_viewer, main_get_info()->root_w, main_get_info()->root_h); + evas_object_resize(add_viewer, main_get_info()->root_w, main_get_info()->root_h); + evas_object_smart_callback_add(add_viewer, "selected", _widget_selected_cb, layout); + evas_object_show(add_viewer); + elm_object_part_content_set(layout, "add_viewer", add_viewer); + elm_object_signal_emit(layout, "show", "add_viewer"); + + if (layout_info->edit) { + elm_object_tree_focus_allow_set(layout_info->edit, EINA_FALSE); + } else { + elm_object_tree_focus_allow_set(layout_info->scroller, EINA_FALSE); + layout_del_mouse_cb(layout); + } + elm_object_tree_focus_allow_set(add_viewer, EINA_TRUE); + + evas_object_data_set(layout, DATA_KEY_ADD_VIEWER, add_viewer); + + if (W_HOME_ERROR_NONE != key_register_cb(KEY_TYPE_BACK, _add_viewer_back_key_cb, layout)) { + _E("Cannot register the key callback"); + } + if (W_HOME_ERROR_NONE != key_register_cb(KEY_TYPE_HOME, _add_viewer_home_key_cb, layout)) { + _E("Cannot register the key callback"); + } +#if 0 + if (W_HOME_ERROR_NONE != gesture_register_cb(BEZEL_DOWN, _add_viewer_bezel_down_cb, layout)) { + _E("Cannot register the gesture callback"); + } +#endif + + return add_viewer; +} + + + +static void _del_add_viewer(void *data, Evas_Object *o, const char *emission, const char *source) +{ + Evas_Object *add_viewer = NULL; + Evas_Object *layout = data; + layout_info_s *layout_info = NULL; + + ret_if(!layout); + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + add_viewer = elm_object_part_content_unset(layout, "add_viewer"); + ret_if(!add_viewer); + + if (layout_info->edit) { + /* If you want to set the EINA_TRUE in this API, + you have to control the tree focus set when using content_set or content_unset API + in the layout that elm_object_tree_focus_allow_set is EINA_TRUE*/ + elm_object_tree_focus_allow_set(layout_info->edit, EINA_FALSE); + } else { + elm_object_tree_focus_allow_set(layout_info->scroller, EINA_TRUE); + layout_add_mouse_cb(layout); + } + elm_object_tree_focus_allow_set(add_viewer, EINA_FALSE); + + evas_object_del(add_viewer); + elm_object_signal_callback_del(layout, "add_viewer,hide", "add_viewer", _del_add_viewer); +} + + + +HAPI void edit_destroy_add_viewer(Evas_Object *layout) +{ + Evas_Object *add_viewer = NULL; + layout_info_s *layout_info = NULL; + + ret_if(!layout); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + add_viewer = evas_object_data_del(layout, DATA_KEY_ADD_VIEWER); + if (!add_viewer) return; + +#if 0 + gesture_unregister_cb(BEZEL_DOWN, _add_viewer_bezel_down_cb); +#endif + key_unregister_cb(KEY_TYPE_BACK, _add_viewer_back_key_cb); + key_unregister_cb(KEY_TYPE_HOME, _add_viewer_home_key_cb); + + if (layout_info->edit) elm_object_signal_emit(layout, "hide", "add_viewer"); + else elm_object_signal_emit(layout, "hide,instant", "add_viewer"); + + edje_object_message_signal_process(elm_layout_edje_get(layout)); + + elm_object_signal_callback_add(layout, "add_viewer,hide", "add_viewer", _del_add_viewer, layout); +} + + + +/* You have to free the returned value */ +HAPI char *edit_get_count_str_from_icu(int count) +{ + char *p = NULL; + char *ret_str = NULL; + char *locale = NULL; + char res[LOCALE_LEN] = { 0, }; + + UErrorCode status = U_ZERO_ERROR; + UNumberFormat *num_fmt; + UChar result[20] = { 0, }; + + uint32_t number = count; + int32_t len = (int32_t) (sizeof(result) / sizeof((result)[0])); + + locale = vconf_get_str(VCONFKEY_REGIONFORMAT); + retv_if(!locale, NULL); + + if(locale[0] != '\0') { + p = strstr(locale, ".UTF-8"); + if (p) *p = 0; + } + + num_fmt = unum_open(UNUM_DEFAULT, NULL, -1, locale, NULL, &status); + unum_format(num_fmt, number, result, len, NULL, &status); + u_austrcpy(res, result); + unum_close(num_fmt); + + ret_str = strdup(res); + free(locale); + return ret_str; +} + + + +static void _plus_item_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + edit_info_s *edit_info = NULL; + layout_info_s *layout_info = data; + + _D("Clicked the plus item"); + + ret_if(!layout_info); + ret_if(!layout_info->edit); + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + + edit_change_focus(edit_info->scroller, NULL); + + if (!edit_create_add_viewer(edit_info->layout)) { + _E("Cannot add the add-viewer"); + } + + effect_play_sound(); +} + + + +static void _plus_item_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Evas_Object *page = data; + Evas_Object *box = NULL; + page_info_s *page_info = NULL; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->page_inner); + ret_if(!page_info->item); + + box = elm_object_part_content_get(page_info->page_inner, "line"); + ret_if(!box); + evas_object_color_set(box, 255, 255, 255, 100); + + elm_object_signal_emit(page_info->item, "edit,press", "plus"); +} + + + +static void _plus_item_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Evas_Object *page = data; + Evas_Object *box = NULL; + page_info_s *page_info = NULL; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->page_inner); + ret_if(!page_info->item); + + box = elm_object_part_content_get(page_info->page_inner, "line"); + ret_if(!box); + evas_object_color_set(box, 255, 255, 255, 255); + + elm_object_signal_emit(page_info->item, "edit,release", "plus"); +} + + + +void _destroy_plus_page(Evas_Object *edit) +{ + edit_info_s *edit_info = NULL; + page_info_s *page_info = NULL; + scroller_info_s *scroller_info = NULL; + + ret_if(!edit); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + ret_if(!edit_info->scroller); + ret_if(!edit_info->plus_page); + + scroller_info = evas_object_data_get(edit_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + page_info = evas_object_data_get(edit_info->plus_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + evas_object_del(page_info->item); + + evas_object_data_del(edit_info->plus_page, DATA_KEY_REAL_PAGE); + evas_object_data_del(edit_info->plus_page, PRIVATE_DATA_KEY_EDIT_DO_NOT_SUPPORT_ENLARGE_EFFECT); + page_destroy(edit_info->plus_page); + + edit_info->plus_page = NULL; + scroller_info->plus_page = NULL; +} + + + +#define PLUS_ITEM_EDJ EDJEDIR"/page.edj" +#define PLUS_ITEM_GROUP "plus_item" +Evas_Object *_create_plus_page(Evas_Object *edit) +{ + Evas_Object *page = NULL; + Evas_Object *plus_item = NULL; + layout_info_s *layout_info = NULL; + edit_info_s *edit_info = NULL; + page_info_s *page_info = NULL; + scroller_info_s *scroller_info = NULL; + scroller_info_s *edit_scroller_info = NULL; + Eina_Bool ret; + char max_text[TEXT_LEN] = {0, }; + char *count_str = NULL; + + retv_if(!edit, NULL); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + retv_if(!edit_info, NULL); + + layout_info = evas_object_data_get(edit_info->layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, NULL); + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + edit_scroller_info = evas_object_data_get(edit_info->scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!edit_scroller_info, NULL); + + plus_item = elm_layout_add(edit_info->scroller); + goto_if(!plus_item, ERROR); + + ret = elm_layout_file_set(plus_item, PLUS_ITEM_EDJ, PLUS_ITEM_GROUP); + goto_if(EINA_FALSE == ret, ERROR); + evas_object_size_hint_weight_set(plus_item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_min_set(plus_item, ITEM_EDIT_WIDTH, ITEM_EDIT_HEIGHT); + evas_object_show(plus_item); + + count_str = edit_get_count_str_from_icu(MAX_WIDGET); + if (!count_str) { + _E("count_str is NULL"); + count_str = calloc(1, LOCALE_LEN); + retv_if(!count_str, NULL); + snprintf(count_str, LOCALE_LEN, "%d", MAX_WIDGET); + } + + snprintf(max_text + , sizeof(max_text) + , _("IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB") + , count_str); + elm_object_part_text_set(plus_item, "max_text", max_text); + free(count_str); + + page = page_create(edit_info->scroller, + plus_item, + NULL, NULL, + edit_scroller_info->page_width, edit_scroller_info->page_height, + PAGE_CHANGEABLE_BG_OFF, PAGE_REMOVABLE_OFF); + if (!page) { + _E("Cannot create the page"); + evas_object_del(plus_item); + return NULL; + } + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + goto_if(!page_info, ERROR); + goto_if(!page_info->page_inner, ERROR); + + elm_object_signal_emit(page_info->page_inner, "enable", "blocker"); + elm_object_signal_emit(plus_item, "show,edit", "plus_item"); + + elm_access_info_cb_set(page_info->focus, ELM_ACCESS_TYPE, NULL, NULL); + elm_access_info_cb_set(page_info->focus, ELM_ACCESS_INFO, _access_plus_button_name_cb, NULL); + elm_object_signal_callback_add(plus_item, "click", "plus_item", _plus_item_clicked_cb, layout_info); + elm_object_signal_callback_add(plus_item, "down", "plus_item", _plus_item_down_cb, page); + elm_object_signal_callback_add(plus_item, "up", "plus_item", _plus_item_up_cb, page); + + + evas_object_data_set(page, DATA_KEY_REAL_PAGE, scroller_info->plus_page); + evas_object_data_set(page, PRIVATE_DATA_KEY_EDIT_DO_NOT_SUPPORT_ENLARGE_EFFECT, (void *) 1); + evas_object_data_set(scroller_info->plus_page, DATA_KEY_PROXY_PAGE, page); + + edit_info->plus_page = page; + edit_scroller_info->plus_page = page; + + return page; + +ERROR: + _destroy_plus_page(edit); + return NULL; +} + + + +static Evas_Object *_create_center_page(Evas_Object *edit, page_direction_e page_direction) +{ + Evas_Object *center_page = NULL; + layout_info_s *layout_info = NULL; + edit_info_s *edit_info = NULL; + scroller_info_s *scroller_info = NULL; + scroller_info_s *edit_scroller_info = NULL; + page_info_s *center_page_info = NULL; + + retv_if(!edit, NULL); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + retv_if(!edit_info, NULL); + + layout_info = evas_object_data_get(edit_info->layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, NULL); + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + edit_scroller_info = evas_object_data_get(edit_info->scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!edit_scroller_info, NULL); + + /* Create the center page */ + center_page = edit_create_proxy_page(edit_info->scroller, scroller_info->center, PAGE_CHANGEABLE_BG_ON); + if (!center_page) { + _E("Cannot create a page"); + return NULL; + } + evas_object_data_set(center_page, PRIVATE_DATA_KEY_EDIT_UNFOCUSABLE, (void *) 1); + + center_page_info = evas_object_data_get(center_page, DATA_KEY_PAGE_INFO); + if (!center_page_info) { + _E("Cannot get the page_info"); + edit_destroy_proxy_page(center_page); + return NULL; + } + elm_access_info_cb_set(center_page_info->focus, ELM_ACCESS_CONTEXT_INFO, _access_tab_to_move_cb, center_page); + + if (page_direction == PAGE_DIRECTION_LEFT) { + evas_object_smart_callback_add(center_page_info->focus, "clicked", _clicked_center_cb, center_page); + } else { + evas_object_smart_callback_add(center_page_info->focus, "clicked", _clicked_noti_cb, center_page); + } + elm_object_signal_emit(center_page_info->page_inner, "disable", "cover"); + elm_object_signal_emit(center_page_info->page_inner, "select", "cover_clipper"); + elm_object_signal_emit(center_page_info->page_inner, "enable", "blocker"); + + edit_info->center_page = center_page; + + return center_page; +} + + + +static void _destroy_center_page(Evas_Object *edit) +{ + edit_info_s *edit_info = NULL; + + ret_if(!edit); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + ret_if(!edit_info->center_page); + + evas_object_data_del(edit_info->center_page, PRIVATE_DATA_KEY_EDIT_UNFOCUSABLE); + + edit_destroy_proxy_page(edit_info->center_page); + edit_info->center_page = NULL; +} + + + +static w_home_error_e _scroller_push_right_page(Evas_Object *edit, Evas_Object *scroller) +{ + Evas_Object *page = NULL; + Evas_Object *center_page = NULL; + Evas_Object *plus_page = NULL; + Eina_List *list = NULL; + scroller_info_s *scroller_info = NULL; + edit_info_s *edit_info = NULL; + page_info_s *page_info = NULL; + int count = 0; + + retv_if(!edit, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(!scroller, W_HOME_ERROR_INVALID_PARAMETER); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + retv_if(!edit_info, W_HOME_ERROR_FAIL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, W_HOME_ERROR_FAIL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, W_HOME_ERROR_FAIL); + + center_page = _create_center_page(edit, PAGE_DIRECTION_RIGHT); + if (center_page) { + scroller_push_page(edit_info->scroller, center_page, SCROLLER_PUSH_TYPE_CENTER); + } + + EINA_LIST_FREE(list, page) { + Evas_Object *proxy_page = NULL; + page_info_s *proxy_page_info = NULL; + Evas_Object *page_inner; + + continue_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) continue; + if (PAGE_DIRECTION_RIGHT != page_info->direction) continue; + if (page == scroller_info->plus_page) continue; + + page_inner = elm_object_part_content_unset(page, "inner"); + if (!page_inner) { + elm_object_part_content_set(page, "inner", page_info->page_inner); + page_inner = elm_object_part_content_unset(page, "inner"); + if (!page_inner) { + _E("Fault - Impossible"); + page_inner = page_info->page_inner; + } + } + evas_object_move(page_inner, 0, 0); + + widget_viewer_evas_resume_widget(page_info->item); + + proxy_page = edit_create_proxy_page(edit_info->scroller, page, PAGE_CHANGEABLE_BG_ON); + continue_if(!proxy_page); + + proxy_page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + if (!proxy_page_info) { + _E("Cannot get the page_info"); + edit_destroy_proxy_page(proxy_page); + continue; + } + elm_object_signal_emit(proxy_page_info->page_inner, "select", "cover_clipper"); + + elm_access_info_cb_set(proxy_page_info->focus, ELM_ACCESS_CONTEXT_INFO, _access_tab_to_move_cb, NULL); + evas_object_smart_callback_add(proxy_page_info->focus, "clicked", _clicked_widget_cb, proxy_page); + evas_object_smart_callback_add(proxy_page_info->remove_focus, "clicked", _del_widget_cb, proxy_page); + + scroller_push_page(edit_info->scroller, proxy_page, SCROLLER_PUSH_TYPE_LAST); + count++; + } + + /* Plus page */ + plus_page = _create_plus_page(edit); + retv_if(!plus_page, W_HOME_ERROR_FAIL); + scroller_push_page(edit_info->scroller, plus_page, SCROLLER_PUSH_TYPE_LAST); + edit_arrange_plus_page(edit); + + return W_HOME_ERROR_NONE; +} + + + +static void _scroller_pop_right_page(Evas_Object *edit) +{ + Evas_Object *proxy_page = NULL; + Evas_Object *real_page = NULL; + Eina_List *edit_list = NULL; + edit_info_s *edit_info = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *proxy_page_info = NULL; + page_info_s *real_page_info = NULL; + + ret_if(!edit); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + + scroller_info = evas_object_data_get(edit_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + scroller_pop_page(edit_info->scroller, edit_info->center_page); + _destroy_center_page(edit); + + if (edit_info->plus_page) { + evas_object_data_del(edit_info->plus_page, DATA_KEY_REAL_PAGE); + evas_object_data_del(scroller_info->plus_page, DATA_KEY_PROXY_PAGE); + _destroy_plus_page(edit); + } + + edit_list = elm_box_children_get(scroller_info->box); + if (!edit_list) { + _D("There is no page"); + return; + } + + EINA_LIST_FREE(edit_list, proxy_page) { + continue_if(!proxy_page); + + elm_box_unpack(scroller_info->box, proxy_page); + + proxy_page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + continue_if(!proxy_page_info); + + real_page = evas_object_data_get(proxy_page, DATA_KEY_REAL_PAGE); + continue_if(!real_page); + + real_page_info = evas_object_data_get(real_page, DATA_KEY_PAGE_INFO); + continue_if(!real_page_info); + + elm_object_part_content_set(real_page, "inner", real_page_info->page_inner); + + edit_destroy_proxy_page(proxy_page); + } +} + + + +#define PRIVATE_DATA_KEY_SCROLLER_PAD_BF "p_sc_pbf" +#define PRIVATE_DATA_KEY_SCROLLER_PAD_AF "p_sc_paf" +static void _add_padding(Evas_Object *edit_scroller) +{ + Evas_Object *pad_bf, *pad_af; + scroller_info_s *edit_scroller_info = NULL; + + ret_if(!edit_scroller); + + edit_scroller_info = evas_object_data_get(edit_scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!edit_scroller_info); + + pad_bf = evas_object_rectangle_add(main_get_info()->e); + ret_if(!pad_bf); + evas_object_size_hint_min_set(pad_bf, PAGE_EDIT_SIDE_PAD_WIDTH, PAGE_EDIT_HEIGHT); + evas_object_color_set(pad_bf, 0, 0, 0, 0); + evas_object_show(pad_bf); + elm_box_pack_start(edit_scroller_info->box_layout, pad_bf); + evas_object_data_set(edit_scroller, PRIVATE_DATA_KEY_SCROLLER_PAD_BF, pad_bf); + + pad_af = evas_object_rectangle_add(main_get_info()->e); + ret_if(!pad_af); + evas_object_size_hint_min_set(pad_af, PAGE_EDIT_SIDE_PAD_WIDTH, PAGE_EDIT_HEIGHT); + evas_object_color_set(pad_af, 0, 0, 0, 0); + evas_object_show(pad_af); + elm_box_pack_end(edit_scroller_info->box_layout, pad_af); + evas_object_data_set(edit_scroller, PRIVATE_DATA_KEY_SCROLLER_PAD_AF, pad_af); +} + + + +static void _remove_padding(Evas_Object *edit_scroller) +{ + Evas_Object *pad_bf, *pad_af; + + ret_if(!edit_scroller); + + pad_bf = evas_object_data_del(edit_scroller, PRIVATE_DATA_KEY_SCROLLER_PAD_BF); + if (pad_bf) evas_object_del(pad_bf); + + pad_af = evas_object_data_del(edit_scroller, PRIVATE_DATA_KEY_SCROLLER_PAD_AF); + if (pad_af) evas_object_del(pad_af); +} + + + +static void _edit_scroll_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *edit_scroller = obj; + Evas_Object *page_current = NULL; + scroller_info_s *edit_scroller_info = NULL; + + ret_if(!edit_scroller); + + edit_scroller_info = evas_object_data_get(edit_scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!edit_scroller_info); + + if (evas_object_data_get(edit_scroller, PRIVATE_DATA_KEY_EDIT_IS_LONGPRESSED)) return; + if (!edit_scroller_info->scroll_cover) return; + + page_current = scroller_get_focused_page(edit_scroller); + ret_if(!page_current); + edit_change_focus(edit_scroller, page_current); +} + + + +static w_home_error_e _scroller_push_left_page(Evas_Object *edit, Evas_Object *scroller) +{ + Evas_Object *page = NULL; + Evas_Object *center_page = NULL; + Eina_List *list = NULL; + scroller_info_s *scroller_info = NULL; + edit_info_s *edit_info = NULL; + page_info_s *page_info = NULL; + + retv_if(!edit, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(!scroller, W_HOME_ERROR_INVALID_PARAMETER); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + retv_if(!edit_info, W_HOME_ERROR_FAIL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, W_HOME_ERROR_FAIL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, W_HOME_ERROR_FAIL); + + center_page = _create_center_page(edit, PAGE_DIRECTION_LEFT); + if (center_page) { + scroller_push_page(edit_info->scroller, center_page, SCROLLER_PUSH_TYPE_CENTER); + } + + EINA_LIST_FREE(list, page) { + Evas_Object *proxy_page = NULL; + page_info_s *proxy_page_info = NULL; + + continue_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) continue; + if (PAGE_DIRECTION_LEFT != page_info->direction) continue; + + proxy_page = edit_create_proxy_page(edit_info->scroller, page, PAGE_CHANGEABLE_BG_OFF); + continue_if(!proxy_page); + + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_EDIT_DISABLE_REORDERING, (void *) 1); + + proxy_page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + if (!proxy_page_info) { + _E("Cannot get the page_info"); + edit_destroy_proxy_page(proxy_page); + continue; + } + + if (scroller_info->center_neighbor_left == page) { + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_EDIT_UNFOCUSABLE, (void *) 1); + elm_object_signal_emit(proxy_page_info->page_inner, "disable", "cover"); + } + elm_object_signal_emit(proxy_page_info->page_inner, "select", "cover_clipper"); + + elm_access_info_cb_set(proxy_page_info->focus, ELM_ACCESS_CONTEXT_INFO, _access_tab_to_move_cb, NULL); + + evas_object_smart_callback_add(proxy_page_info->focus, "clicked", _clicked_noti_cb, proxy_page); + evas_object_smart_callback_add(proxy_page_info->remove_focus, "clicked", _del_noti_cb, proxy_page); + + scroller_push_page(edit_info->scroller, proxy_page, SCROLLER_PUSH_TYPE_CENTER_LEFT); + } + + return W_HOME_ERROR_NONE; +} + + + +static void _scroller_pop_left_page(Evas_Object *edit) +{ + Evas_Object *edit_page = NULL; + Eina_List *edit_list = NULL; + edit_info_s *edit_info = NULL; + scroller_info_s *edit_scroller_info = NULL; + page_info_s *page_info = NULL; + + ret_if(!edit); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + + scroller_pop_page(edit_info->scroller, edit_info->center_page); + _destroy_center_page(edit); + + edit_scroller_info = evas_object_data_get(edit_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!edit_scroller_info); + + edit_list = elm_box_children_get(edit_scroller_info->box); + ret_if(!edit_list); + + EINA_LIST_FREE(edit_list, edit_page) { + continue_if(!edit_page); + + page_info = evas_object_data_get(edit_page, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + + evas_object_data_del(edit_page, PRIVATE_DATA_KEY_EDIT_DISABLE_REORDERING); + evas_object_data_del(edit_page, PRIVATE_DATA_KEY_EDIT_UNFOCUSABLE); + scroller_pop_page(edit_info->scroller, edit_page); + edit_destroy_proxy_page(edit_page); + } +} + + + +static char *_access_page_num_cb(Evas_Object *scroller) +{ + Evas_Object *page = NULL; + page_info_s *page_info = NULL; + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + int count = 0; + int cur = 0; + char number[BUFSZE]; + char *tmp; + + retv_if(NULL == scroller, NULL); + + page = scroller_get_focused_page(scroller); + retv_if(!page, NULL); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, NULL); + + count = eina_list_count(list); + cur = scroller_seek_page_position(scroller, page) + 1; + + snprintf(number, sizeof(number), _("IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS"), cur, count); + + tmp = strdup(number); + if (!tmp) return NULL; + return tmp; +} + + + +static void _edit_anim_stop_cb(void *data, Evas_Object *scroller, void *event_info) +{ + Evas_Object *press_page = NULL; + char *tmp = NULL; + + _D("stop the scroller(%p) animation", scroller); + + ret_if(!scroller); + + if (!main_get_info()->is_tts) return; + + press_page = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_PRESS_PAGE); + ret_if(!press_page); + + tmp = _access_page_num_cb(scroller); + if (tmp) { + elm_access_say(tmp); + free(tmp); + } +} + + + +#define EDIT_EDJ EDJEDIR"/edit.edj" +#define EDIT_GROUP "edit" +HAPI Evas_Object *_create_right_layout(Evas_Object *layout) +{ + Evas_Object *edit = NULL; + Evas_Object *edit_scroller = NULL; + + layout_info_s *layout_info = NULL; + scroller_info_s *edit_scroller_info = NULL; + edit_info_s *edit_info = NULL; + Eina_Bool ret; + + retv_if(!layout, NULL); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, NULL); + + edit = elm_layout_add(layout); + retv_if(NULL == edit, NULL); + + edit_info = calloc(1, sizeof(edit_info_s)); + if (!edit_info) { + _E("Cannot calloc for edit_info"); + free(edit_info); + return NULL; + } + evas_object_data_set(edit, DATA_KEY_EDIT_INFO, edit_info); + + ret = elm_layout_file_set(edit, EDIT_EDJ, EDIT_GROUP); + if (EINA_FALSE == ret) { + _E("cannot set the file into the layout"); + free(edit_info); + evas_object_del(edit); + return NULL; + } + evas_object_size_hint_weight_set(edit, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_min_set(edit, main_get_info()->root_w, main_get_info()->root_h); + evas_object_resize(edit, main_get_info()->root_w, main_get_info()->root_h); + evas_object_show(edit); + + layout_del_mouse_cb(layout); + + edit_scroller = scroller_create(layout, edit, PAGE_EDIT_WIDTH, PAGE_EDIT_HEIGHT, SCROLLER_INDEX_SINGULAR); + if (!edit_scroller) { + _E("Cannot create edit_scroller"); + free(edit_info); + evas_object_del(edit); + return NULL; + } + evas_object_smart_callback_add(edit_scroller, "scroll", _edit_scroll_cb, NULL); + evas_object_smart_callback_add(edit_scroller, "scroll,anim,stop", _edit_anim_stop_cb, NULL); + _add_padding(edit_scroller); + + elm_object_part_content_set(layout, "edit", edit); + elm_object_part_content_set(edit, "scroller", edit_scroller); + + edit_info->layout = layout; + edit_info->scroller = edit_scroller; + + layout_info->edit = edit; + + edit_scroller_info = evas_object_data_get(edit_scroller, DATA_KEY_SCROLLER_INFO); + if (!edit_scroller_info) { + _E("Cannot create scroller"); + scroller_destroy(layout); + free(layout_info); + evas_object_del(layout); + return NULL; + } + edit_info->scroller = edit_scroller; + + edit_scroller_info->index[PAGE_DIRECTION_RIGHT] = index_create(edit, edit_scroller, PAGE_DIRECTION_RIGHT); + if (!edit_scroller_info->index[PAGE_DIRECTION_RIGHT]) _E("Cannot create the right index"); + else elm_object_part_content_set(edit, "index", edit_scroller_info->index[PAGE_DIRECTION_RIGHT]); + + _scroller_push_right_page(edit, layout_info->scroller); + + return edit; +} + + + +HAPI void _destroy_right_layout(Evas_Object *layout) +{ + layout_info_s *layout_info = NULL; + scroller_info_s *edit_scroller_info = NULL; + scroller_info_s *scroller_info = NULL; + edit_info_s *edit_info = NULL; + Evas_Object *focus_page = NULL; + + ret_if(!layout); + + edit_destroy_add_viewer(layout); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + ret_if(!layout_info->edit); + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + + if (!evas_object_data_get(layout, PRIVATE_DATA_KEY_EDIT_SYNC_IS_DONE)) { + _sync_from_edit_to_normal(layout); + } + evas_object_data_del(layout, PRIVATE_DATA_KEY_EDIT_SYNC_IS_DONE); + + layout_add_mouse_cb(layout); + + edit_scroller_info = evas_object_data_get(edit_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!edit_scroller_info); + + focus_page = scroller_get_focused_page(layout_info->scroller); + scroller_push_page(layout_info->scroller, scroller_info->plus_page, SCROLLER_PUSH_TYPE_LAST); + if (focus_page) scroller_region_show_page(layout_info->scroller, focus_page, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT); + else _E("Cannot get the focused page"); + + if (edit_scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_destroy(edit_scroller_info->index[PAGE_DIRECTION_RIGHT]); + } + + _scroller_pop_right_page(layout_info->edit); + _remove_padding(edit_info->scroller); + + evas_object_data_del(edit_info->scroller, PRIVATE_DATA_KEY_EDIT_FOCUS_OBJECT); + evas_object_data_del(edit_info->scroller, PRIVATE_DATA_KEY_EDIT_IS_LONGPRESSED); + scroller_destroy(layout_info->edit); + + evas_object_del(layout_info->edit); + free(edit_info); + layout_info->edit = NULL; + + /* Only for right layout */ + wms_change_favorite_order(W_HOME_WMS_BACKUP); +} + + + +#define EDIT_EDJ EDJEDIR"/edit.edj" +#define EDIT_GROUP "edit" +HAPI Evas_Object *_create_left_layout(Evas_Object *layout) +{ + Evas_Object *edit = NULL; + Evas_Object *edit_scroller = NULL; + Evas_Object *box = NULL; + + layout_info_s *layout_info = NULL; + scroller_info_s *edit_scroller_info = NULL; + edit_info_s *edit_info = NULL; + Eina_Bool ret; + + retv_if(!layout, NULL); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, NULL); + + edit = elm_layout_add(layout); + retv_if(NULL == edit, NULL); + + edit_info = calloc(1, sizeof(edit_info_s)); + if (!edit_info) { + _E("Cannot calloc for edit_info"); + free(edit_info); + return NULL; + } + evas_object_data_set(edit, DATA_KEY_EDIT_INFO, edit_info); + + ret = elm_layout_file_set(edit, EDIT_EDJ, EDIT_GROUP); + if (EINA_FALSE == ret) { + _E("cannot set the file into the layout"); + free(edit_info); + evas_object_del(edit); + return NULL; + } + evas_object_size_hint_weight_set(edit, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_min_set(edit, main_get_info()->root_w, main_get_info()->root_h); + evas_object_resize(edit, main_get_info()->root_w, main_get_info()->root_h); + evas_object_show(edit); + + layout_del_mouse_cb(layout); + + evas_object_smart_callback_call(layout, LAYOUT_SMART_SIGNAL_EDIT_ON, layout); + + edit_scroller = scroller_create(layout, edit, PAGE_EDIT_WIDTH, PAGE_EDIT_HEIGHT, SCROLLER_INDEX_SINGULAR); + if (!edit_scroller) { + _E("Cannot create edit_scroller"); + free(edit_info); + evas_object_del(edit); + return NULL; + } + evas_object_smart_callback_add(edit_scroller, "scroll", _edit_scroll_cb, NULL); + _add_padding(edit_scroller); + + box = elm_object_content_get(edit_scroller); + evas_object_size_hint_align_set(box, 1.0, 0.5); + + elm_object_part_content_set(layout, "edit", edit); + elm_object_part_content_set(edit, "scroller", edit_scroller); + + edit_info->layout = layout; + edit_info->scroller = edit_scroller; + + layout_info->edit = edit; + + edit_scroller_info = evas_object_data_get(edit_scroller, DATA_KEY_SCROLLER_INFO); + if (!edit_scroller_info) { + _E("Cannot create scroller"); + scroller_destroy(layout); + free(layout_info); + evas_object_del(layout); + return NULL; + } + edit_info->scroller = edit_scroller; + + edit_scroller_info->index[PAGE_DIRECTION_LEFT] = index_create(edit, edit_scroller, PAGE_DIRECTION_LEFT); + if (!edit_scroller_info->index[PAGE_DIRECTION_LEFT]) _E("Cannot create the left index"); + else elm_object_part_content_set(edit, "index", edit_scroller_info->index[PAGE_DIRECTION_LEFT]); + + _scroller_push_left_page(edit, layout_info->scroller); + + return edit; +} + + + +HAPI void _destroy_left_layout(Evas_Object *layout) +{ + layout_info_s *layout_info = NULL; + scroller_info_s *edit_scroller_info = NULL; + edit_info_s *edit_info = NULL; + + ret_if(!layout); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + ret_if(!layout_info->edit); + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + + edit_scroller_info = evas_object_data_get(edit_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!edit_scroller_info); + + _scroller_pop_left_page(layout_info->edit); + _remove_padding(edit_info->scroller); + + if (edit_scroller_info->index[PAGE_DIRECTION_LEFT]) { + index_destroy(edit_scroller_info->index[PAGE_DIRECTION_LEFT]); + } + + scroller_destroy(layout_info->edit); + + layout_add_mouse_cb(layout); + + free(edit_info); + evas_object_data_del(layout_info->edit, DATA_KEY_EDIT_INFO); + evas_object_del(layout_info->edit); + layout_info->edit = NULL; + + evas_object_smart_callback_call(layout, LAYOUT_SMART_SIGNAL_EDIT_OFF, layout); +} + + + +static key_cb_ret_e _edit_back_key_cb(void *data) +{ + _W(""); + Evas_Object *layout = data; + Evas_Object *effect_page = NULL; + Evas_Object *proxy_page = NULL; + layout_info_s *layout_info = NULL; + edit_info_s *edit_info = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + + retv_if(!layout, KEY_CB_RET_CONTINUE); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, KEY_CB_RET_CONTINUE); + + if (!layout_info->edit) { + _D("Layout is not edited"); + return KEY_CB_RET_CONTINUE; + } + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + goto_if(!edit_info, OUT); + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + goto_if(!scroller_info, OUT); + + proxy_page = scroller_get_focused_page(edit_info->scroller); + if (!proxy_page) goto OUT; + if (evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_EDIT_DO_NOT_SUPPORT_ENLARGE_EFFECT)) goto OUT; + + effect_page = edit_create_enlarge_effect_page(proxy_page); + if (effect_page) edit_enlarge_effect_page(effect_page); + else goto OUT; + + return KEY_CB_RET_STOP; + +OUT: + if (!scroller_get_right_page(edit_info->scroller, proxy_page)) { + Evas_Object *real_page = NULL; + int i = 0; + + _D("The proxy page(%p) does not have the right neighbor.", proxy_page); + + elm_scroller_last_page_get(layout_info->scroller, &i, NULL); + real_page = scroller_get_page_at(layout_info->scroller, i); + if (real_page) { + _D("The last real page is (%p)", real_page); + scroller_region_show_page(layout_info->scroller, real_page, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT); + if (scroller_info->plus_page == real_page) { + _D("The last page is the plus page"); + page_info = evas_object_data_get(real_page, DATA_KEY_PAGE_INFO); + if (page_info) { + if (page_info->item) elm_object_signal_emit(page_info->item, "show,widget,ani", "plus_item"); + elm_object_signal_emit(page_info->page_inner, "deselect", "line"); + } + } + } + } + edit_destroy_layout(layout); + return KEY_CB_RET_STOP; +} + + + +static key_cb_ret_e _edit_home_key_cb(void *data) +{ + Evas_Object *layout = data; + Evas_Object *effect_page = NULL; + Evas_Object *proxy_page = NULL; + layout_info_s *layout_info = NULL; + edit_info_s *edit_info = NULL; + + retv_if(!layout, KEY_CB_RET_CONTINUE); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, KEY_CB_RET_CONTINUE); + + if (!layout_info->edit) { + _D("Layout is not edited"); + return KEY_CB_RET_CONTINUE; + } + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + goto_if(!edit_info, OUT); + + if (evas_object_data_get(edit_info->scroller, PRIVATE_DATA_KEY_EDIT_IS_LONGPRESSED)) return KEY_CB_RET_STOP; + + proxy_page = scroller_get_focused_page(edit_info->scroller); + if (!proxy_page) goto OUT; + if (evas_object_data_get(proxy_page, PRIVATE_DATA_KEY_EDIT_DO_NOT_SUPPORT_ENLARGE_EFFECT)) goto OUT; + + effect_page = edit_create_enlarge_effect_page(proxy_page); + if (effect_page) edit_enlarge_effect_page(effect_page); + else goto OUT; + + return KEY_CB_RET_STOP; + +OUT: + edit_destroy_layout(layout); + return KEY_CB_RET_CONTINUE; +} + + + +static void _destroy_proxy_bg(Evas_Object *clip_bg) +{ + Evas_Object *proxy_bg = NULL; + + proxy_bg = evas_object_data_del(clip_bg, PRIVATE_DATA_KEY_PROXY_BG); + if(proxy_bg) evas_object_del(proxy_bg); + evas_object_del(clip_bg); +} + + + +static Evas_Object *_create_proxy_bg(Evas_Object *item) +{ + Evas_Object *bg = NULL; + Evas_Object *clip_bg = NULL; + Evas_Object *proxy_bg = NULL; + Eina_Bool ret; + int x, y, w, h; + + clip_bg = evas_object_rectangle_add(main_get_info()->e); + retv_if(!clip_bg, NULL); + + evas_object_geometry_get(item, &x, &y, &w, &h); + evas_object_resize(clip_bg, w, h); + evas_object_move(clip_bg, x, y); + evas_object_color_set(clip_bg, 255, 255, 255, 255); + evas_object_show(clip_bg); + + bg = evas_object_data_get(main_get_info()->win, DATA_KEY_BG); + goto_if(!bg, ERROR); + + proxy_bg = evas_object_image_filled_add(main_get_info()->e); + goto_if(!proxy_bg, ERROR); + + evas_object_data_set(clip_bg, PRIVATE_DATA_KEY_PROXY_BG, proxy_bg); + + ret = evas_object_image_source_set(proxy_bg, bg); + goto_if(EINA_FALSE == ret, ERROR); + evas_object_image_source_visible_set(proxy_bg, EINA_TRUE); + evas_object_image_source_clip_set(proxy_bg, EINA_FALSE); + evas_object_resize(proxy_bg, main_get_info()->root_w, main_get_info()->root_h); + evas_object_move(proxy_bg, 0, 0); + evas_object_show(proxy_bg); + + evas_object_clip_set(proxy_bg, clip_bg); + + return clip_bg; + +ERROR: + _destroy_proxy_bg(clip_bg); + return NULL; +} + + + +static w_home_error_e _lang_changed_cb(void *data) +{ + Evas_Object *scroller = data; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + char max_text[TEXT_LEN] = {0, }; + char *count_str = NULL; + + retv_if(!scroller, W_HOME_ERROR_FAIL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, W_HOME_ERROR_FAIL); + + page_info = evas_object_data_get(scroller_info->plus_page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, W_HOME_ERROR_FAIL); + + count_str = edit_get_count_str_from_icu(MAX_WIDGET); + if (!count_str) { + _E("count_str is NULL"); + count_str = calloc(1, LOCALE_LEN); + retv_if(!count_str, W_HOME_ERROR_FAIL); + snprintf(count_str, LOCALE_LEN, "%d", MAX_WIDGET); + } + + snprintf(max_text + , sizeof(max_text) + , _("IDS_HS_BODY_THE_MAXIMUM_NUMBER_OF_WIDGETS_HPD_HAS_BEEN_REACHED_DELETE_SOME_WIDGETS_AND_TRY_AGAIN_ABB") + , count_str); + elm_object_part_text_set(page_info->item, "max_text", max_text); + free(count_str); + + return W_HOME_ERROR_NONE; +} + + + +HAPI Evas_Object *edit_create_layout(Evas_Object *layout, edit_mode_e edit_mode) +{ + Evas_Object *edit = NULL; + layout_info_s *layout_info = NULL; + edit_info_s *edit_info = NULL; + + retv_if(!layout, NULL); + + _W("Create the edit layout"); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, NULL); + + if (W_HOME_ERROR_NONE != key_register_cb(KEY_TYPE_BACK, _edit_back_key_cb, layout)) { + _E("Cannot register the key callback"); + } + + if (W_HOME_ERROR_NONE != key_register_cb(KEY_TYPE_HOME, _edit_home_key_cb, layout)) { + _E("Cannot register the key callback"); + } +#if 0 + if (W_HOME_ERROR_NONE != gesture_register_cb(BEZEL_DOWN, _edit_bezel_down_cb, layout)) { + _E("Cannot register the gesture callback"); + } +#endif + + switch (edit_mode) { + case EDIT_MODE_LEFT: + edit = _create_left_layout(layout); + break; + case EDIT_MODE_CENTER: + break; + case EDIT_MODE_RIGHT: + edit = _create_right_layout(layout); + break; + default: + _E("Cannot reach here"); + break; + } + elm_object_signal_emit(layout, "show", "edit"); + elm_object_signal_emit(edit, "init", "edit"); + elm_object_signal_emit(layout, "hide", "scroller"); + + evas_object_data_set(layout, DATA_KEY_EDIT_MODE, (void *) edit_mode); + layout_info->edit = edit; + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + if (edit_info && edit_info->scroller) { + scroller_focus(edit_info->scroller); + main_register_cb(APP_STATE_LANGUAGE_CHANGED, _lang_changed_cb, edit_info->scroller); + } else _E("Cannot get the edit_info & edit_info->scroller"); + + elm_object_tree_focus_allow_set(layout_info->scroller, EINA_FALSE); + /* If you want to set the EINA_TRUE in this API, + you have to control the tree focus set when using content_set or content_unset API + in the layout that elm_object_tree_focus_allow_set is EINA_TRUE*/ + elm_object_tree_focus_allow_set(layout_info->edit, EINA_FALSE); + + return edit; +} + + + +HAPI void edit_destroy_layout(void *layout) +{ + Evas_Object *current_page = NULL; + layout_info_s *layout_info = NULL; + scroller_info_s *scroller_info = NULL; + edit_mode_e edit_mode = (int) evas_object_data_del(layout, DATA_KEY_EDIT_MODE); + + ret_if(!layout); + + main_unregister_cb(APP_STATE_LANGUAGE_CHANGED, _lang_changed_cb); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + ret_if(!layout_info->edit); + + key_unregister_cb(KEY_TYPE_BACK, _edit_back_key_cb); + key_unregister_cb(KEY_TYPE_HOME, _edit_home_key_cb); +#if 0 + gesture_unregister_cb(BEZEL_DOWN, _edit_bezel_down_cb); +#endif + + elm_object_tree_focus_allow_set(layout_info->scroller, EINA_TRUE); + elm_object_tree_focus_allow_set(layout_info->edit, EINA_FALSE); + + _D("Destroy the edit layout : %d", edit_mode); + + switch (edit_mode) { + case EDIT_MODE_LEFT: + _destroy_left_layout(layout); + break; + case EDIT_MODE_CENTER: + break; + case EDIT_MODE_RIGHT: + _destroy_right_layout(layout); + break; + default: + _E("Cannot reach here"); + break; + } + + layout_info->edit = NULL; + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + current_page = scroller_get_focused_page(layout_info->scroller); + ret_if(!current_page); + + if (scroller_info->index[PAGE_DIRECTION_LEFT]) { + index_update(scroller_info->index[PAGE_DIRECTION_LEFT], layout_info->scroller, INDEX_BRING_IN_NONE); + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_LEFT], current_page); + } + + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_update(scroller_info->index[PAGE_DIRECTION_RIGHT], layout_info->scroller, INDEX_BRING_IN_NONE); + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_RIGHT], current_page); + } + + elm_object_signal_emit(layout, "hide", "edit"); + elm_object_signal_emit(layout, "show", "scroller"); +} + + + +static Eina_Bool _minify_page_anim_cb(void *data) +{ + Evas_Object *effect_page = data; + Evas_Object *end_page = NULL; + Evas_Object *page_inner = NULL; + + page_info_s *end_page_info = NULL; + + int cur_x, cur_y, cur_w, cur_h; + int end_x, end_y, end_w, end_h; + int vec_x, vec_y, vec_w, vec_h; + int divide_factor; + + retv_if(!effect_page, ECORE_CALLBACK_CANCEL); + + end_page = evas_object_data_get(effect_page, DATA_KEY_PROXY_PAGE); + retv_if(!end_page, ECORE_CALLBACK_CANCEL); + + end_page_info = evas_object_data_get(end_page, DATA_KEY_PAGE_INFO); + goto_if(!end_page_info, ERROR); + + page_inner = end_page_info->page_inner; + goto_if(!page_inner, ERROR); + + evas_object_geometry_get(page_inner, &end_x, &end_y, &end_w, &end_h); + evas_object_geometry_get(effect_page, &cur_x, &cur_y, &cur_w, &cur_h); + + divide_factor = (int) evas_object_data_get(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR); + if (divide_factor > 2) { + evas_object_data_set(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR, (void *) divide_factor - 1); + } + + vec_x = (end_x - cur_x) / divide_factor; + vec_y = (end_y - cur_y) / divide_factor; + vec_w = (end_w - cur_w) / divide_factor; + vec_h = (end_h - cur_h) / divide_factor; + + if (!vec_x) vec_x = 1; + if (!vec_y) vec_y = 1; + if (!vec_w) vec_w = -1; + if (!vec_h) vec_h = -1; + + cur_x += vec_x; + cur_y += vec_y; + cur_w += vec_w; + cur_h += vec_h; + + if (cur_x > end_x) cur_x = end_x; + if (cur_y > end_y) cur_y = end_y; + if (cur_w < end_w) cur_w = end_w; + if (cur_h < end_h) cur_h = end_h; + + if (cur_x >= end_x) { + evas_object_data_del(effect_page, PRIVATE_DATA_KEY_ANIM_FOR_MINIFY); + evas_object_data_del(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR); + edit_destroy_minify_effect_page(effect_page); + return ECORE_CALLBACK_CANCEL; + } + + evas_object_move(effect_page, cur_x, cur_y); + evas_object_resize(effect_page, cur_w, cur_h); + + return ECORE_CALLBACK_RENEW; + +ERROR: + _E("Critical! Effect page will be removed."); + evas_object_del(effect_page); + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _enlarge_page_anim_cb(void *data) +{ + Evas_Object *effect_page = data; + Evas_Object *bg_rect = NULL; + Evas_Object *layout = NULL; + Evas_Object *real_page = NULL; + page_info_s *page_info = NULL; + layout_info_s *layout_info = NULL; + + int cur_x, cur_y, cur_w, cur_h; + int end_x, end_y, end_w, end_h; + int vec_x, vec_y, vec_w, vec_h; + int divide_factor; + double rel; + + retv_if(!effect_page, ECORE_CALLBACK_CANCEL); + + layout = main_get_info()->layout; + retv_if(!layout, ECORE_CALLBACK_CANCEL); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, ECORE_CALLBACK_CANCEL); + retv_if(!layout_info->scroller, ECORE_CALLBACK_CANCEL); + + bg_rect = evas_object_data_get(effect_page, DATA_KEY_BG); + goto_if(!bg_rect, OUT); + + real_page = evas_object_data_get(effect_page, DATA_KEY_REAL_PAGE); + goto_if(!real_page, OUT); + + page_info = evas_object_data_get(real_page, DATA_KEY_PAGE_INFO); + goto_if(!page_info, OUT); + + rel = (double) main_get_info()->root_w / ITEM_EDIT_WIDTH; + end_w = PAGE_EDIT_WIDTH * rel; + end_h = PAGE_EDIT_HEIGHT * rel; + + end_x = (end_w - main_get_info()->root_w) / -2; + end_y = (end_h - main_get_info()->root_h) / -2; + + evas_object_geometry_get(effect_page, &cur_x, &cur_y, &cur_w, &cur_h); + + divide_factor = (int) evas_object_data_get(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR); + if (divide_factor > 1) { + evas_object_data_set(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR, (void *) divide_factor - 1); + } + + vec_x = (end_x - cur_x) / divide_factor; + vec_y = (end_y - cur_y) / divide_factor; + vec_w = (end_w - cur_w) / divide_factor; + vec_h = (end_h - cur_h) / divide_factor; + + if (!vec_x) vec_x = -1; + if (!vec_y) vec_y = -1; + if (!vec_w) vec_w = 1; + if (!vec_h) vec_h = 1; + + cur_x += vec_x; + cur_y += vec_y; + cur_w += vec_w; + cur_h += vec_h; + + if (cur_x < end_x) { + goto OUT; + } + + evas_object_move(effect_page, cur_x, cur_y); + evas_object_resize(effect_page, cur_w, cur_h); + evas_object_move(bg_rect, cur_x, cur_y); + evas_object_resize(bg_rect, cur_w, cur_h); + + return ECORE_CALLBACK_RENEW; + +OUT: + evas_object_data_del(effect_page, PRIVATE_DATA_KEY_ANIM_FOR_ENLARGE); + evas_object_data_del(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR); + + edit_destroy_layout(layout); + /* Layout has to be updated before after destroying the layout */ + edje_object_message_signal_process(elm_layout_edje_get(layout)); + edit_destroy_enlarge_effect_page(effect_page); + + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI void edit_minify_effect_page(void *effect_page) +{ + Ecore_Animator *anim = NULL; + + ret_if(!effect_page); + + anim = evas_object_data_get(effect_page, PRIVATE_DATA_KEY_ANIM_FOR_MINIFY); + if (anim) { + _D("You've already an animator"); + return; + } + + anim = ecore_animator_add(_minify_page_anim_cb, effect_page); + if (anim) { + evas_object_data_set(effect_page, PRIVATE_DATA_KEY_ANIM_FOR_MINIFY, anim); + evas_object_data_set(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR, (void *) DIVIDE_FACTOR); + } else { + edit_destroy_minify_effect_page(effect_page); + } +} + + + +HAPI Evas_Object *edit_create_minify_effect_page(Evas_Object *page) +{ + Evas_Object *effect_page = NULL; + page_info_s *page_info = NULL; + Eina_Bool ret; + double rel; + int width, height, x, y; + + retv_if(!page, NULL); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + if (page_info->removable) { + elm_object_signal_emit(page_info->page_inner, "hide", "del"); + } + + elm_object_signal_emit(page_info->page_inner, "deselect", "cover"); + elm_object_signal_emit(page_info->page_inner, "deselect", "cover_clipper"); + elm_object_signal_emit(page_info->page_inner, "deselect", "line"); + edje_object_message_signal_process(elm_layout_edje_get(page_info->page_inner)); + + if (evas_object_data_get(page, PRIVATE_DATA_KEY_EDIT_UNFOCUSABLE)) { + elm_object_signal_emit(page_info->page_inner, "disable", "cover"); + elm_object_signal_emit(page_info->page_inner, "deselect", "line"); + } else { + elm_object_signal_emit(page_info->page_inner, "select", "cover"); + elm_object_signal_emit(page_info->page_inner, "select", "line"); + } + elm_object_signal_emit(page_info->page_inner, "select", "cover_clipper"); + scroller_disable_cover_on_scroll(page_info->scroller); + + effect_page = evas_object_image_filled_add(main_get_info()->e); + retv_if(!effect_page, NULL); + + ret = evas_object_image_source_set(effect_page, page); + if (EINA_FALSE == ret) { + _E("Cannot set the source into the proxy image"); + evas_object_del(effect_page); + return NULL; + } + evas_object_image_source_visible_set(effect_page, EINA_FALSE); + evas_object_image_source_clip_set(effect_page, EINA_FALSE); + + rel = (double) main_get_info()->root_w / ITEM_EDIT_WIDTH; + width = PAGE_EDIT_WIDTH * rel; + height = PAGE_EDIT_HEIGHT * rel; + + x = (width - main_get_info()->root_w) / -2; + y = (height - main_get_info()->root_h) / -2; + + evas_object_size_hint_min_set(effect_page, width, height); + evas_object_resize(effect_page, width, height); + evas_object_move(effect_page, x, y); + evas_object_show(effect_page); + + evas_object_data_set(effect_page, DATA_KEY_PROXY_PAGE, page); + + return effect_page; + +} + + + +HAPI void edit_destroy_minify_effect_page(Evas_Object *effect_page) +{ + Evas_Object *page = NULL; + Evas_Object *page_current = NULL; + page_info_s *page_info = NULL; + + ret_if(!effect_page); + + page = evas_object_data_del(effect_page, DATA_KEY_PROXY_PAGE); + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + scroller_enable_cover_on_scroll(page_info->scroller); + + if (page_info->removable) { + elm_object_signal_emit(page_info->page_inner, "show", "del"); + } + + evas_object_image_source_visible_set(effect_page, EINA_TRUE); + evas_object_del(effect_page); + + page_current = scroller_get_focused_page(page_info->scroller); + ret_if(!page_current); + edit_change_focus(page_info->scroller, page_current); +} + + + +HAPI void edit_enlarge_effect_page(void *effect_page) +{ + Evas_Object *real_page = NULL; + layout_info_s *layout_info = NULL; + page_info_s *page_info = NULL; + Ecore_Animator *anim = NULL; + + ret_if(!effect_page); + + real_page = evas_object_data_get(effect_page, DATA_KEY_REAL_PAGE); + goto_if(!real_page, ERROR); + + page_info = evas_object_data_get(real_page, DATA_KEY_PAGE_INFO); + goto_if(!page_info, ERROR); + goto_if(!page_info->layout, ERROR); + + layout_info = evas_object_data_get(page_info->layout, DATA_KEY_LAYOUT_INFO); + goto_if(!layout_info, ERROR); + goto_if(!layout_info->scroller, ERROR); + + anim = evas_object_data_get(effect_page, PRIVATE_DATA_KEY_ANIM_FOR_ENLARGE); + if (anim) { + _D("You've already an animator"); + return; + } + + anim = ecore_animator_add(_enlarge_page_anim_cb, effect_page); + if (anim) { + evas_object_data_set(effect_page, PRIVATE_DATA_KEY_ANIM_FOR_ENLARGE, anim); + evas_object_data_set(effect_page, PRIVATE_DATA_KEY_DIVIDE_FACTOR, (void *) DIVIDE_FACTOR); + } else { + edit_destroy_enlarge_effect_page(effect_page); + } + + if (real_page) { + scroller_region_show_page(layout_info->scroller, real_page, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT); + } + edje_object_message_signal_process(elm_layout_edje_get(page_info->layout)); + + return; + +ERROR: + _E("Destroy the effect page(%p)", effect_page); + edit_destroy_enlarge_effect_page(effect_page); +} + + + +HAPI Evas_Object *edit_create_enlarge_effect_page(Evas_Object *page) +{ + Evas_Object *clip_bg = NULL; + Evas_Object *effect_page = NULL; + Evas_Object *real_page = NULL; + page_info_s *page_info = NULL; + layout_info_s *layout_info = NULL; + Eina_Bool ret; + int x, y, w, h; + + retv_if(!page, NULL); + + if (main_get_info()->layout) { + layout_info = evas_object_data_get(main_get_info()->layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, NULL); + if (layout_info->edit) elm_object_signal_emit(layout_info->edit, "hide", "edit"); + } + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + real_page = evas_object_data_get(page, DATA_KEY_REAL_PAGE); + retv_if(!real_page, NULL); + + if (page_info->removable) { + elm_object_signal_emit(page_info->page_inner, "hide", "del"); + } + + elm_object_signal_emit(page_info->page_inner, "deselect", "cover"); + elm_object_signal_emit(page_info->page_inner, "deselect", "cover_clipper"); + elm_object_signal_emit(page_info->page_inner, "deselect,im", "line"); + edje_object_message_signal_process(elm_layout_edje_get(page_info->page_inner)); + + clip_bg = _create_proxy_bg(page_info->item); + retv_if(!clip_bg, NULL); + + effect_page = evas_object_image_filled_add(main_get_info()->e); + if (!effect_page) { + _E("Cannot add effect page"); + _destroy_proxy_bg(clip_bg); + return NULL; + } + + evas_object_data_set(effect_page, DATA_KEY_REAL_PAGE, real_page); + evas_object_data_set(effect_page, DATA_KEY_BG, clip_bg); + + ret = evas_object_image_source_set(effect_page, page_info->page_inner); + if (EINA_FALSE == ret) { + _E("Cannot set the source into the effect image"); + edit_destroy_enlarge_effect_page(effect_page); + return NULL; + } + evas_object_image_source_visible_set(effect_page, EINA_FALSE); + evas_object_image_source_clip_set(effect_page, EINA_FALSE); + + evas_object_geometry_get(page, &x, &y, &w, &h); + + evas_object_resize(effect_page, w, h); + evas_object_move(effect_page, x, y); + evas_object_show(effect_page); + + return effect_page; +} + + + +HAPI void edit_destroy_enlarge_effect_page(Evas_Object *effect_page) +{ + Evas_Object *page = NULL; + Evas_Object *clip_bg = NULL; + page_info_s *page_info = NULL; + + ret_if(!effect_page); + + clip_bg = evas_object_data_del(effect_page, DATA_KEY_BG); + if (clip_bg) _destroy_proxy_bg(clip_bg); + + page = evas_object_data_del(effect_page, DATA_KEY_REAL_PAGE); + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + evas_object_image_source_visible_set(effect_page, EINA_TRUE); + evas_object_del(effect_page); +} + + + +static Evas_Object *_create_refresh_left_page(Evas_Object *edit, Evas_Object *page) +{ + Evas_Object *proxy_page = NULL; + page_info_s *proxy_page_info = NULL; + edit_info_s *edit_info = NULL; + layout_info_s *layout_info = NULL; + scroller_info_s *scroller_info = NULL; + + retv_if(!page, NULL); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + retv_if(!edit_info, NULL); + + layout_info = evas_object_data_get(edit_info->layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, NULL); + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + proxy_page = edit_create_proxy_page(edit_info->scroller, page, PAGE_CHANGEABLE_BG_OFF); + retv_if(!proxy_page, NULL); + + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_EDIT_DISABLE_REORDERING, (void *) 1); + proxy_page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + goto_if(!proxy_page_info, ERROR); + + if (scroller_info->center_neighbor_left == page) { + evas_object_data_set(proxy_page, PRIVATE_DATA_KEY_EDIT_UNFOCUSABLE, (void *) 1); + elm_object_signal_emit(proxy_page_info->page_inner, "disable", "cover"); + elm_object_signal_emit(proxy_page_info->page_inner, "select", "cover_clipper"); + } + + elm_access_info_cb_set(proxy_page_info->focus, ELM_ACCESS_CONTEXT_INFO, _access_tab_to_move_cb, NULL); + + evas_object_smart_callback_add(proxy_page_info->focus, "clicked", _clicked_noti_cb, proxy_page); + evas_object_smart_callback_add(proxy_page_info->remove_focus, "clicked", _del_noti_cb, proxy_page); + + proxy_page_info->direction = PAGE_DIRECTION_LEFT; + + return proxy_page; + +ERROR: + if (proxy_page) { + edit_destroy_proxy_page(proxy_page); + } + return NULL; +} + + + +static Evas_Object *_create_refresh_right_page(Evas_Object *edit, Evas_Object *page) +{ + Evas_Object *proxy_page = NULL; + page_info_s *proxy_page_info = NULL; + edit_info_s *edit_info = NULL; + scroller_info_s *scroller_info = NULL; + + retv_if(edit, NULL); + retv_if(page, NULL); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + retv_if(!edit_info, NULL); + + scroller_info = evas_object_data_get(edit_info->scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + proxy_page = edit_create_proxy_page(edit_info->scroller, page, PAGE_CHANGEABLE_BG_ON); + retv_if(!proxy_page, NULL); + + proxy_page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + goto_if(!proxy_page_info, ERROR); + + evas_object_smart_callback_add(proxy_page_info->focus, "clicked", _clicked_widget_cb, proxy_page); + evas_object_smart_callback_add(proxy_page_info->remove_focus, "clicked", _del_widget_cb, proxy_page); + + proxy_page_info->direction = PAGE_DIRECTION_RIGHT; + + return proxy_page; + +ERROR: + if (proxy_page) { + edit_destroy_proxy_page(proxy_page); + } + return NULL; +} + + + +HAPI void edit_refresh_scroller(Evas_Object *edit, page_direction_e direction) +{ + Evas_Object *page = NULL; + Evas_Object *proxy_page = NULL; + Eina_List *list = NULL; + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + edit_info_s *edit_info = NULL; + layout_info_s *layout_info = NULL; + page_info_s *page_info = NULL; + scroller_info_s *scroller_info = NULL; + + ret_if(!edit); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + + layout_info = evas_object_data_get(edit_info->layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + /*Add proxy page which didn't exist in eidt scroller list*/ + switch (direction) { + case PAGE_DIRECTION_LEFT: + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + if (page_info->direction != PAGE_DIRECTION_LEFT) continue; + proxy_page = evas_object_data_get(page, DATA_KEY_PROXY_PAGE); + if (!proxy_page) { + proxy_page = _create_refresh_left_page(edit, page); + break_if(!proxy_page); + } else scroller_pop_page(edit_info->scroller, proxy_page); + scroller_push_page(edit_info->scroller, proxy_page, SCROLLER_PUSH_TYPE_CENTER_LEFT); + } + break; + case PAGE_DIRECTION_RIGHT: + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + if (page_info->direction != PAGE_DIRECTION_RIGHT) continue; + proxy_page = evas_object_data_get(page, DATA_KEY_PROXY_PAGE); + if (!proxy_page) { + proxy_page = _create_refresh_right_page(edit, page); + break_if(!proxy_page); + if (edit_info->plus_page) { + scroller_push_page_before(edit_info->scroller, proxy_page, edit_info->plus_page); + } else { + scroller_push_page_before(edit_info->scroller, proxy_page, NULL); + } + } + } + break; + default: + break; + } + eina_list_free(list); +} + + + +HAPI void edit_arrange_plus_page(Evas_Object *edit) +{ + layout_info_s *layout_info = NULL; + edit_info_s *edit_info = NULL; + page_info_s *page_info = NULL; + int count = 0; + + ret_if(!edit); + + _D("Arrange the plus page"); + + edit_info = evas_object_data_get(edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + ret_if(!edit_info->plus_page); + ret_if(!edit_info->scroller); + + page_info = evas_object_data_get(edit_info->plus_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + count = scroller_count_direction(edit_info->scroller, PAGE_DIRECTION_RIGHT); + if (count > MAX_WIDGET) { + _D("Diable the plus page, count:%d", count); + + elm_object_signal_callback_del(page_info->item, "click", "plus_item", _plus_item_clicked_cb); + elm_object_signal_callback_del(page_info->item, "down", "plus_item", _plus_item_down_cb); + elm_object_signal_callback_del(page_info->item, "up", "plus_item", _plus_item_up_cb); + + elm_object_signal_emit(page_info->item, "max", "plus_in_edit"); + elm_object_focus_allow_set(page_info->focus, EINA_FALSE); + + edit_info->is_max = 1; + } else { + _D("Enable the plus page, count:%d", count); + + ret_if(!edit_info->layout); + layout_info = evas_object_data_get(edit_info->layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + /* Callbacks could be added infinitely */ + if (edit_info->is_max) { + elm_object_signal_callback_add(page_info->item, "click", "plus_item", _plus_item_clicked_cb, layout_info); + elm_object_signal_callback_add(page_info->item, "down", "plus_item", _plus_item_down_cb, edit_info->plus_page); + elm_object_signal_callback_add(page_info->item, "up", "plus_item", _plus_item_up_cb, edit_info->plus_page); + + edit_info->is_max = 0; + } + + elm_object_signal_emit(page_info->item, "no_max", "plus_in_edit"); + elm_object_focus_allow_set(page_info->focus, EINA_TRUE); + } +} + + + +// End of this file diff --git a/home/src/effect.c b/home/src/effect.c new file mode 100755 index 0000000..9202d05 --- /dev/null +++ b/home/src/effect.c @@ -0,0 +1,121 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "main.h" +#include "effect.h" + + +static struct { + bool sound_status; + int is_feedback_initialized; +} effect_info = { + .sound_status = 0, + .is_feedback_initialized = 0, +}; + + + +HAPI inline void effect_set_sound_status(bool status) +{ + effect_info.sound_status = status; +} + + + +HAPI inline int effect_get_sound_status(void) +{ + return effect_info.sound_status; +} + + + +HAPI w_home_error_e effect_init(void) +{ + retv_if(1 == effect_info.is_feedback_initialized, W_HOME_ERROR_NONE); + retv_if(0 != feedback_initialize(), W_HOME_ERROR_FAIL); + retv_if(runtime_info_get_value_bool(RUNTIME_INFO_KEY_SILENT_MODE_ENABLED, &effect_info.sound_status) < 0, W_HOME_ERROR_FAIL); + + effect_info.is_feedback_initialized = 1; + + return W_HOME_ERROR_NONE; +} + + + +HAPI void effect_fini(void) +{ + ret_if(0 == effect_info.is_feedback_initialized); + ret_if(0 != feedback_deinitialize()); + + effect_info.is_feedback_initialized = 0; +} + + + +HAPI void effect_play_sound(void) +{ + int state = main_get_info()->state; + + if (APP_STATE_PAUSE == state) + { + _D("Do not play sound"); + return; + } + + if (effect_info.is_feedback_initialized == 0) { + effect_init(); + } + + ret_if(runtime_info_get_value_bool(RUNTIME_INFO_KEY_SILENT_MODE_ENABLED, &effect_info.sound_status) < 0); + + if (effect_info.sound_status) { + feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_TOUCH_TAP); + } +} + + + +HAPI void effect_play_vibration(void) +{ + int state = main_get_info()->state; + + if (APP_STATE_PAUSE == state) + { + _D("Do not play vibration"); + return; + } + + if (effect_info.is_feedback_initialized == 0) { + effect_init(); + } + + feedback_play_type(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_HOLD); +} + + + +// End of a file diff --git a/home/src/gesture.c b/home/src/gesture.c new file mode 100755 index 0000000..aeaef02 --- /dev/null +++ b/home/src/gesture.c @@ -0,0 +1,225 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#include +#include + +#include "util.h" +#include "main.h" +#include "log.h" +#include "gesture.h" +#include "effect.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "layout.h" +#include "layout_info.h" +#include "tutorial.h" +#include "dbus.h" +#include "apps/apps_main.h" + +#define LCD_ON_REASON_GESTURE "gesture" +#define VCONFKEY_SIMPLE_CLOCK_STATUS "db/setting/simpleclock_mode" +#define VCONFKEY_RESERVED_APPS_STATUS "memory/starter/reserved_apps_status" + +#define CB_LIST_MAX 3 + +static Eina_List *cbs_list[CB_LIST_MAX]; + +typedef struct { + void (*result_cb)(void *); + void *result_data; +} gesture_cb_s; + +static Evas_Object *_layout_get(void) { + Evas_Object *win = main_get_info()->win; + Evas_Object *layout = NULL; + + if (win != NULL) { + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + } + + return layout; +} + +static Evas_Object *_scroller_get(void) { + Evas_Object *win = main_get_info()->win; + Evas_Object *layout = NULL; + Evas_Object *scroller = NULL; + + if (win != NULL) { + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + if (layout != NULL) { + scroller = elm_object_part_content_get(layout, "scroller"); + } + } + + return scroller; +} + +static Eina_Bool _apps_hide_idler_cb(void *data) +{ + apps_main_launch(APPS_LAUNCH_HIDE); + + return ECORE_CALLBACK_CANCEL; +} + +static void _clock_show(void) +{ + int is_clock_displayed = 0; + Eina_Bool is_apps_displayed = (apps_main_is_visible() == EINA_TRUE) ? 1 : 0; + + Evas_Object *scroller = _scroller_get(); + ret_if(scroller == NULL); + Evas_Object *layout = _layout_get(); + ret_if(layout == NULL); + + if (tutorial_is_exist() == 1) { + return ; + } + + /* delete edit/addviewer layout */ + layout_set_idle(layout); + + if (is_clock_displayed == 0) { + scroller_bring_in_by_push_type(scroller, SCROLLER_PUSH_TYPE_CENTER, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT_SHOW); + } + + int w, h; + Evas *e; + Ecore_Evas *ee; + Ecore_X_GC gc; + ee = ecore_evas_ecore_evas_get(evas_object_evas_get(main_get_info()->win)); + e = ecore_evas_get(ee); + evas_output_viewport_get(e, NULL, NULL, &w, &h); + evas_obscured_clear(e); + evas_damage_rectangle_add(e, 0, 0, w, h); + ecore_evas_manual_render(ee); + + gc = ecore_x_gc_new(0, ECORE_X_GC_VALUE_MASK_FOREGROUND, NULL); + ecore_x_pixmap_paste(elm_win_xwindow_get(main_get_info()->win) + , ecore_x_window_root_first_get(), gc, 0, 0, main_get_info()->root_w, main_get_info()->root_h, 0, 0); + ecore_x_sync(); + +#if 0 /* EFL private features */ + gesture_home_window_effect_set(0); +#endif + elm_win_raise(main_get_info()->win); + + /* hiding apps */ + if (is_apps_displayed == 1) { + _D("need to hide apps"); + ecore_idler_add(_apps_hide_idler_cb, NULL); + } +} + +#define ALPM_MANAGER_STATUS_SHOW "show" +#define ALPM_MANAGER_STATUS_HIDE "hide" +static void _alpm_manager_status_changed_cb(void *user_data, void *event_info) +{ + char *status = event_info; + ret_if(status == NULL); + + _W("alpm status:%s", status); + + if (strcmp(status, ALPM_MANAGER_STATUS_SHOW) == 0) { + // do nothing + } else if (strcmp(status, ALPM_MANAGER_STATUS_SIMPLE_HIDE) == 0) { + _clock_show(); + _W("clock show"); + } +} + + + +HAPI void home_gesture_init(void) +{ + if (home_dbus_register_cb(DBUS_EVENT_ALPM_MANAGER_STATE_CHANGED, _alpm_manager_status_changed_cb, NULL) != W_HOME_ERROR_NONE) { + _E("Failed to register alpm manager status changed cb"); + } +} + +HAPI void home_gesture_fini(void) +{ + home_dbus_unregister_cb(DBUS_EVENT_ALPM_MANAGER_STATE_CHANGED, _alpm_manager_status_changed_cb); +} + + + +HAPI w_home_error_e gesture_register_cb( + int mode, + void (*result_cb)(void *), void *result_data) +{ + retv_if(NULL == result_cb, W_HOME_ERROR_INVALID_PARAMETER); + + gesture_cb_s *cb = calloc(1, sizeof(gesture_cb_s)); + retv_if(!cb, W_HOME_ERROR_FAIL); + + cb->result_cb = result_cb; + cb->result_data = result_data; + + cbs_list[mode] = eina_list_append(cbs_list[mode], cb); + retv_if(NULL == cbs_list[mode], W_HOME_ERROR_FAIL); + + return W_HOME_ERROR_NONE; +} + + + +HAPI void gesture_unregister_cb( + int mode, + void (*result_cb)(void *)) +{ + const Eina_List *l; + const Eina_List *n; + gesture_cb_s *cb; + EINA_LIST_FOREACH_SAFE(cbs_list[mode], l, n, cb) { + continue_if(NULL == cb); + if (result_cb != cb->result_cb) { + continue; + } + cbs_list[mode] = eina_list_remove(cbs_list[mode], cb); + free(cb); + return; + } +} + + + +extern void gesture_execute_cbs(int mode) +{ + const Eina_List *l; + const Eina_List *n; + gesture_cb_s *cb; + EINA_LIST_FOREACH_SAFE(cbs_list[mode], l, n, cb) { + continue_if(n); + cb->result_cb(cb->result_data); + } +} + + diff --git a/home/src/index.c b/home/src/index.c new file mode 100644 index 0000000..1d3400f --- /dev/null +++ b/home/src/index.c @@ -0,0 +1,438 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "layout_info.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "index_info.h" +#include "index.h" +#include "scroller.h" + + + +typedef struct { + Evas_Object *page; + int index; +} page_index_s; + + + +HAPI void index_bring_in_page(Evas_Object *index, Evas_Object *page) +{ + Elm_Object_Item *idx_it = NULL; + const Eina_List *l = NULL; + index_info_s *index_info = NULL; + page_index_s *page_index = NULL; + int idx = 0; + int found = 0; + + ret_if(!index); + ret_if(!page); + + index_info = evas_object_data_get(index, DATA_KEY_INDEX_INFO); + ret_if(!index_info); + ret_if(!index_info->page_index_list); + + EINA_LIST_FOREACH(index_info->page_index_list, l, page_index) { + if (page_index->page == page) { + idx = page_index->index; + found = 1; + break; + } + } + + if (!found) { + _E("Cannot find a page(%p)", page); + return; + } + + idx_it = elm_index_item_find(index, (void *) idx); + if (idx_it) { + elm_index_item_selected_set(idx_it, EINA_TRUE); + } else { + _E("Critical, the index(%p) cannot find the page(%p:%d)", index, page, idx); + } +} + + + +HAPI Evas_Object *index_create(Evas_Object *layout, Evas_Object *scroller, page_direction_e direction) +{ + Evas_Object *index = NULL; + scroller_info_s *scroller_info = NULL; + index_info_s *index_info = NULL; + + retv_if(!layout, NULL); + retv_if(!scroller, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + index = elm_index_add(layout); + retv_if(!index, NULL); + + index_info = calloc(1, sizeof(index_info_s)); + if (!index_info) { + _E("Cannot calloc for index_info"); + evas_object_del(index); + return NULL; + } + evas_object_data_set(index, DATA_KEY_INDEX_INFO, index_info); + + evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(index, EVAS_HINT_FILL, EVAS_HINT_FILL); + + elm_object_theme_set(index, main_get_info()->theme); + elm_object_style_set(index, "thumbnail"); + elm_index_horizontal_set(index, EINA_TRUE); + elm_index_autohide_disabled_set(index, EINA_TRUE); + elm_index_level_go(index, 0); + evas_object_show(index); + + index_info->direction = direction; + index_info->layout = layout; + index_info->scroller = scroller; + + return index; +} + + + +HAPI void index_destroy(Evas_Object *index) +{ + index_info_s *index_info = NULL; + page_index_s *page_index = NULL; + + ret_if(!index); + + index_info = evas_object_data_del(index, DATA_KEY_INDEX_INFO); + ret_if(!index_info); + + if (index_info->page_index_list) { + EINA_LIST_FREE(index_info->page_index_list, page_index) { + free(page_index); + } + index_info->page_index_list = NULL; + } + + free(index_info); + elm_index_item_clear(index); + evas_object_del(index); +} + + + +#define MAX_INDEX_NUMBER 17 +static void _update_left(Evas_Object *scroller, Evas_Object *index, const Eina_List *list) +{ + Evas_Object *page = NULL; + Elm_Object_Item *idx_it = NULL; + Eina_List *reverse_list = NULL; + const Eina_List *l = NULL; + + index_info_s *index_info = NULL; + page_info_s *page_info = NULL; + page_index_s *page_index = NULL; + page_direction_e before_direction = PAGE_DIRECTION_LEFT; + + int extra_idx = 0, page_index_inserting = 0; + int center_inserted = 0, other_inserted = 0, cur_inserted = 0; + int center_count = 0, other_count = 0, cur_count = 0; + int cur_mid_idx = 0; + int total_count = 0, total_inserted = 0; + + ret_if(!index); + ret_if(!list); + + index_info = evas_object_data_get(index, DATA_KEY_INDEX_INFO); + ret_if(!index_info); + + /* 0. Remove an old page_index_list */ + if (index_info->page_index_list) { + EINA_LIST_FREE(index_info->page_index_list, page_index) { + free(page_index); + } + index_info->page_index_list = NULL; + } + + /* 1. Make indexes (cur/center/other) */ + total_count = scroller_count(scroller); + total_inserted = scroller_count_direction(scroller, PAGE_DIRECTION_LEFT); + if (scroller_count_direction(scroller, PAGE_DIRECTION_CENTER)) total_inserted++; + if (scroller_count_direction(scroller, PAGE_DIRECTION_RIGHT)) total_inserted++; + + if (total_inserted > MAX_INDEX_NUMBER) { + total_inserted = MAX_INDEX_NUMBER; + } + + reverse_list = eina_list_reverse_clone(list); + ret_if(!reverse_list); + + total_inserted--; + EINA_LIST_FREE(reverse_list, page) { + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + + if (page_info->direction == PAGE_DIRECTION_CENTER) { + if (!center_inserted && total_inserted >= 0) { + center_inserted++; + idx_it = elm_index_item_prepend(index, NULL, NULL, (void *) total_inserted); + total_inserted--; +#ifdef RUN_ON_DEVICE + elm_object_item_style_set(idx_it, "item/vertical/clock"); +#endif + } + center_count++; + } else if (page_info->direction == index_info->direction) { + if (total_inserted >= 0) { + cur_inserted++; + idx_it = elm_index_item_prepend(index, NULL, NULL, (void *) total_inserted); + total_inserted--; +#ifdef RUN_ON_DEVICE + elm_object_item_style_set(idx_it, "item/vertical/page"); +#endif + } + cur_count++; + } else { + if (!other_inserted && total_inserted >= 0) { + other_inserted++; + idx_it = elm_index_item_prepend(index, NULL, NULL, (void *) total_inserted); + total_inserted--; +#ifdef RUN_ON_DEVICE + elm_object_item_style_set(idx_it, "item/vertical/noti"); +#endif + } + other_count++; + } + _D("page:%p, total_inserted:%d, idx_it:%p", page, total_inserted, idx_it); + } + + cur_mid_idx = (cur_inserted - 1) / 2; + extra_idx = total_count - other_count - center_count - cur_inserted; + + /* 2. Make a new page_index_list */ + page_index_inserting = -1; + EINA_LIST_FOREACH(list, l, page) { + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + + page_index = calloc(1, sizeof(page_index_s)); + continue_if(!page_index); + + if (before_direction == page_info->direction) { + if (index_info->direction == page_info->direction) { + if (page_index_inserting == cur_mid_idx && extra_idx > 0) { + extra_idx--; + } else { + page_index_inserting++; + } + } + } else { + before_direction = page_info->direction; + page_index_inserting++; + } + + page_index->page = page; + page_index->index = page_index_inserting; + + _D("Index(%p-%d) is updating, page(%p-%d:%d)(start:%d, mid:%d, extra:%d)" + , index, index_info->direction + , page, page_info->direction, page_index_inserting + , 0, cur_mid_idx, extra_idx); + + index_info->page_index_list = eina_list_append(index_info->page_index_list, page_index); + } +} + + + +static void _update_right(Evas_Object *scroller, Evas_Object *index, const Eina_List *list) +{ + Evas_Object *page = NULL; + Elm_Object_Item *idx_it = NULL; + const Eina_List *l = NULL; + + index_info_s *index_info = NULL; + page_info_s *page_info = NULL; + page_index_s *page_index = NULL; + page_direction_e before_direction = PAGE_DIRECTION_MAX; + + int extra_idx = 0, page_index_inserting = 0; + int center_inserted = 0, other_inserted = 0, cur_inserted = 0; + int center_count = 0, other_count = 0, cur_count = 0, index_number = 0; + int cur_start_idx = 0, cur_mid_idx = 0; + int total_count = 0, total_inserted = 0; + + ret_if(!index); + ret_if(!list); + + index_info = evas_object_data_get(index, DATA_KEY_INDEX_INFO); + ret_if(!index_info); + + /* 0. Remove an old page_index_list */ + if (index_info->page_index_list) { + EINA_LIST_FREE(index_info->page_index_list, page_index) { + free(page_index); + } + index_info->page_index_list = NULL; + } + + /* 1. Make indexes (cur/center/other) */ + total_count = scroller_count(scroller); + total_inserted = scroller_count_direction(scroller, PAGE_DIRECTION_RIGHT); + if (scroller_count_direction(scroller, PAGE_DIRECTION_CENTER)) total_inserted++; + if (scroller_count_direction(scroller, PAGE_DIRECTION_LEFT)) total_inserted++; + + if (total_inserted > MAX_INDEX_NUMBER) { + total_inserted = MAX_INDEX_NUMBER; + } + + EINA_LIST_FOREACH(list, l, page) { + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + + if (page_info->direction == PAGE_DIRECTION_CENTER) { + if (!center_inserted) { + center_inserted++; + idx_it = elm_index_item_append(index, NULL, NULL, (void *) index_number); + index_number++; +#ifdef RUN_ON_DEVICE + elm_object_item_style_set(idx_it, "item/vertical/clock"); +#endif + } + center_count++; + } else if (page_info->direction == index_info->direction) { + if (index_number < total_inserted) { + if (!cur_inserted) { + cur_start_idx = index_number; + } + + cur_inserted++; + idx_it = elm_index_item_append(index, NULL, NULL, (void *) index_number); + index_number++; +#ifdef RUN_ON_DEVICE + elm_object_item_style_set(idx_it, "item/vertical/page"); +#endif + } + cur_count++; + } else { + if (!other_inserted) { + other_inserted++; + idx_it = elm_index_item_append(index, NULL, NULL, (void *) index_number); + index_number++; +#ifdef RUN_ON_DEVICE + elm_object_item_style_set(idx_it, "item/vertical/noti"); +#endif + } + other_count++; + } + _D("page:%p, total_inserted:%d, idx_it:%p", page, total_inserted, idx_it); + } + + cur_mid_idx = (cur_start_idx * 2 + cur_inserted - 1) / 2; + extra_idx = total_count - other_count - center_count - cur_inserted; + + /* 2. Make a new page_index_list */ + page_index_inserting = -1; + EINA_LIST_FOREACH(list, l, page) { + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + + page_index = calloc(1, sizeof(page_index_s)); + continue_if(!page_index); + + if (before_direction == page_info->direction) { + if (index_info->direction == page_info->direction) { + if (page_index_inserting == cur_mid_idx && extra_idx > 0) { + extra_idx--; + } else { + page_index_inserting++; + } + } + } else { + before_direction = page_info->direction; + page_index_inserting++; + } + + page_index->page = page; + page_index->index = page_index_inserting; + + _D("Index(%p-%d) is updating, page(%p-%d:%d)(start:%d, mid:%d, extra:%d)" + , index, index_info->direction + , page, page_info->direction, page_index_inserting + , 0, cur_mid_idx, extra_idx); + + index_info->page_index_list = eina_list_append(index_info->page_index_list, page_index); + } +} + + + +HAPI void index_update(Evas_Object *index, Evas_Object *scroller, index_bring_in_e after) +{ + Evas_Object *page_current = NULL; + Eina_List *list = NULL; + + scroller_info_s *scroller_info = NULL; + index_info_s *index_info = NULL; + + ret_if(!index); + ret_if(!scroller); + + _D("Index(%p) is clear", index); + elm_index_item_clear(index); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + index_info = evas_object_data_get(index, DATA_KEY_INDEX_INFO); + ret_if(!index_info); + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + elm_object_theme_set(index, main_get_info()->theme); + elm_object_style_set(index, "thumbnail"); + + if (PAGE_DIRECTION_LEFT == index_info->direction) { + _update_left(scroller, index, list); + } else { + _update_right(scroller, index, list); + } + eina_list_free(list); + + elm_index_level_go(index, 0); + + if (INDEX_BRING_IN_AFTER == after) { + page_current = scroller_get_focused_page(scroller); + ret_if(!page_current); + index_bring_in_page(index, page_current); + } +} + + + + // End of file diff --git a/home/src/item_info.c b/home/src/item_info.c new file mode 100755 index 0000000..281fdff --- /dev/null +++ b/home/src/item_info.c @@ -0,0 +1,94 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "item_info.h" + +HAPI item_info_s *item_info_create(const char *id, const char *subid) +{ + item_info_s *item_info = NULL; + + item_info = calloc(1, sizeof(item_info_s)); + retv_if(!item_info, NULL); + + if (id) { + item_info->id = strdup(id); + if (!item_info->id) { + free(item_info); + return NULL; + } + } + + if (subid) { + item_info->subid = strdup(subid); + if (!item_info->subid) { + free(item_info->id); + free(item_info); + return NULL; + } + } + + if (id && item_info_is_removable(id)) { + item_info->removable = 1; + } + + return item_info; +} + + + +HAPI void item_info_destroy(item_info_s *item_info) +{ + ret_if(!item_info); + + free(item_info->id); + free(item_info->subid); + free(item_info); +} + + + +HAPI void item_info_list_destroy(Eina_List *item_info_list) +{ + item_info_s *item_info = NULL; + + ret_if(!item_info_list); + + EINA_LIST_FREE(item_info_list, item_info) { + continue_if(!item_info); + item_info_destroy(item_info); + } +} + + + +#define APPID_APPS_WIDGET "org.tizen.apps-widget" +HAPI int item_info_is_removable(const char *id) +{ + retv_if(!id, 1); + return strcmp(id, APPID_APPS_WIDGET); +} + + + +// End of a file diff --git a/home/src/key.c b/home/src/key.c new file mode 100755 index 0000000..35ccef8 --- /dev/null +++ b/home/src/key.c @@ -0,0 +1,228 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "layout_info.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "key.h" +#include "minictrl.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" + + + +#define CB_LIST_MAX 1 +static struct { + Eina_Bool pressed; + Ecore_Event_Handler *press_handler; + Ecore_Event_Handler *release_handler; + + Eina_Bool register_handler; + Ecore_Timer *long_press; + Eina_Bool home_grabbed; + Eina_List *cbs_list[CB_LIST_MAX]; +} key_info = { + .pressed = 0, + .press_handler = NULL, + .release_handler = NULL, + + .register_handler = EINA_FALSE, + .long_press = NULL, + .home_grabbed = EINA_FALSE, + .cbs_list = {NULL, }, +}; + + + +typedef struct { + key_cb_ret_e (*result_cb)(void *); + void *result_data; +} key_cb_s; + + + +HAPI w_home_error_e key_register_cb( + int type, + key_cb_ret_e (*result_cb)(void *), void *result_data) +{ + retv_if(NULL == result_cb, W_HOME_ERROR_INVALID_PARAMETER); + + key_cb_s *cb = calloc(1, sizeof(key_cb_s)); + retv_if(NULL == cb, W_HOME_ERROR_FAIL); + + cb->result_cb = result_cb; + cb->result_data = result_data; + + key_info.cbs_list[type] = eina_list_prepend(key_info.cbs_list[type], cb); + retv_if(NULL == key_info.cbs_list[type], W_HOME_ERROR_FAIL); + + return W_HOME_ERROR_NONE; +} + + + +HAPI void key_unregister_cb( + int type, + key_cb_ret_e (*result_cb)(void *)) +{ + + const Eina_List *l; + const Eina_List *n; + key_cb_s *cb; + EINA_LIST_FOREACH_SAFE(key_info.cbs_list[type], l, n, cb) { + continue_if(NULL == cb); + if (result_cb != cb->result_cb) continue; + key_info.cbs_list[type] = eina_list_remove(key_info.cbs_list[type], cb); + free(cb); + return; + } +} + + + +static void _execute_cbs(int type) +{ + const Eina_List *l; + const Eina_List *n; + key_cb_s *cb; + EINA_LIST_FOREACH_SAFE(key_info.cbs_list[type], l, n, cb) { + continue_if(NULL == cb); + continue_if(NULL == cb->result_cb); + if (KEY_CB_RET_STOP == cb->result_cb(cb->result_data)) { + _W("back key execution has been stopped"); + break; + } + } +} + + + +#define HOME_KEY_ESC "XF86PowerOff" +static Eina_Bool _key_release_cb(void *data, int type, void *event) +{ + Evas_Event_Key_Up *ev = event; + + retv_if(EINA_FALSE == key_info.register_handler, ECORE_CALLBACK_PASS_ON); + retv_if(NULL == ev, ECORE_CALLBACK_PASS_ON); + + _D("Key(%s) released %d", ev->keyname, key_info.pressed); + + if (key_info.pressed == EINA_FALSE) { + return ECORE_CALLBACK_PASS_ON; + } + + if (!strcmp(ev->keyname, KEY_BACK)) { + _execute_cbs(KEY_TYPE_BACK); + } else if (!strcmp(ev->keyname, KEY_MENU)) { + _execute_cbs(KEY_TYPE_BEZEL_UP); + } + + key_info.pressed = EINA_FALSE; + + return ECORE_CALLBACK_PASS_ON; +} + + + +static Eina_Bool _key_press_cb(void *data, int type, void *event) +{ + Evas_Event_Key_Down *ev = event; + + retv_if(EINA_FALSE == key_info.register_handler, ECORE_CALLBACK_PASS_ON); + retv_if(NULL == ev, ECORE_CALLBACK_PASS_ON); + + key_info.pressed = EINA_TRUE; + _D("Key pressed %d", key_info.pressed); + + retv_if(APP_STATE_PAUSE == main_get_info()->state, ECORE_CALLBACK_PASS_ON); + + return ECORE_CALLBACK_PASS_ON; +} + + + +HAPI void key_register(void) +{ + if (!key_info.release_handler) { + key_info.release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL); + if (!key_info.release_handler) { + _E("Failed to register a key up event handler"); + } + } + + if (!key_info.press_handler) { + key_info.press_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_press_cb, NULL); + if (!key_info.press_handler) { + _E("Failed to register a key down event handler"); + } + } + + if (utilx_grab_key(ecore_x_display_get(), elm_win_xwindow_get(main_get_info()->win), KEY_MENU, TOP_POSITION_GRAB) != 0) { + _E("Failed to grab KEY_MENU"); + } + + key_info.pressed = EINA_FALSE; + key_info.register_handler = EINA_TRUE; +} + + + +HAPI void key_unregister(void) +{ + if (key_info.long_press) { + ecore_timer_del(key_info.long_press); + key_info.long_press = NULL; + } + + if (key_info.release_handler) { + ecore_event_handler_del(key_info.release_handler); + key_info.release_handler = NULL; + } + + if (key_info.press_handler) { + ecore_event_handler_del(key_info.press_handler); + key_info.press_handler = NULL; + } + + if (utilx_ungrab_key(ecore_x_display_get(), elm_win_xwindow_get(main_get_info()->win), KEY_MENU) != 0) { + _E("Failed to ungrab KEY_MENU"); + } + + key_info.register_handler = EINA_FALSE; +} + + + +HAPI void key_cb_execute(int type) +{ + _execute_cbs(type); +} + +// End of a file diff --git a/home/src/lang.c b/home/src/lang.c new file mode 100755 index 0000000..03665c0 --- /dev/null +++ b/home/src/lang.c @@ -0,0 +1,145 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" + +static Eina_List *lang_list; +static Eina_List *cbs_list; + +typedef struct { + Evas_Object *obj; + const char *group; + const char *id; + int domain; +} lang_element; + +typedef struct { + w_home_error_e (*result_cb)(void *); + void *result_data; +} lang_cb_s; + + + +HAPI w_home_error_e lang_add_id(Evas_Object *obj, const char *group, const char *id, int domain) +{ + lang_element *le; + + retv_if(NULL == obj, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(NULL == group, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(NULL == id, W_HOME_ERROR_INVALID_PARAMETER); + + le = malloc(sizeof(lang_element)); + retv_if(NULL == le, W_HOME_ERROR_FAIL); + + le->obj = obj; + le->group = group; + le->id = id; + le->domain = domain; + + lang_list = eina_list_append(lang_list, le); + + return W_HOME_ERROR_NONE; +} + + + +HAPI void lang_remove_id(Evas_Object *obj, const char *group) +{ + const Eina_List *l; + const Eina_List *n; + lang_element *le; + + ret_if(NULL == obj); + ret_if(NULL == group); + + EINA_LIST_FOREACH_SAFE(lang_list, l, n, le) { + if (le->obj == obj && !strcmp(group, le->group)) { + lang_list = eina_list_remove(lang_list, le); + free(le); + return; + } + } +} + + + +HAPI w_home_error_e lang_register_cb(w_home_error_e (*result_cb)(void *), void *result_data) +{ + retv_if(NULL == result_cb, W_HOME_ERROR_INVALID_PARAMETER); + + lang_cb_s *cb = calloc(1, sizeof(lang_cb_s)); + retv_if(NULL == cb, W_HOME_ERROR_FAIL); + + cb->result_cb = result_cb; + cb->result_data = result_data; + + cbs_list = eina_list_append(cbs_list, cb); + retv_if(NULL == cbs_list, W_HOME_ERROR_FAIL); + + return W_HOME_ERROR_NONE; +} + + + +HAPI void lang_unregister_cb(w_home_error_e (*result_cb)(void *)) +{ + const Eina_List *l; + const Eina_List *n; + lang_cb_s *cb; + EINA_LIST_FOREACH_SAFE(cbs_list, l, n, cb) { + continue_if(NULL == cb); + if (result_cb != cb->result_cb) continue; + cbs_list = eina_list_remove(cbs_list, cb); + free(cb); + return; + } +} + + + +HAPI void lang_refresh_ids(void) +{ + const Eina_List *l; + const Eina_List *n; + lang_element *le; + char *temp; + + EINA_LIST_FOREACH_SAFE(lang_list, l, n, le) { + if (le->domain) { + temp = D_(le->id); + } else { + temp = _(le->id); + } + + elm_object_part_text_set(le->obj, le->group, temp); + } + + lang_cb_s *cb; + EINA_LIST_FOREACH_SAFE(cbs_list, l, n, cb) { + continue_if(NULL == cb); + continue_if(NULL == cb->result_cb); + + if (W_HOME_ERROR_NONE != cb->result_cb(cb->result_data)) _E("There are some problems"); + } +} + +// End of a file diff --git a/home/src/layout.c b/home/src/layout.c new file mode 100755 index 0000000..c46cd51 --- /dev/null +++ b/home/src/layout.c @@ -0,0 +1,974 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "util.h" +#include "conf.h" +#include "log.h" +#include "main.h" +#include "db.h" +#include "edit.h" +#include "edit_info.h" +#include "effect.h" +#include "key.h" +#include "layout.h" +#include "layout_info.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "index.h" +#include "util.h" +#include "xml.h" +#include "clock_service.h" +#include "power_mode.h" +#include "apps/apps_main.h" +#include "gesture.h" +#include "notification/notification.h" + +#define PRIVATE_DATA_KEY_LAYOUT_DOWN_X "p_l_x" +#define PRIVATE_DATA_KEY_LAYOUT_DOWN_Y "p_l_y" +#define PRIVATE_DATA_KEY_LAYOUT_PRESSED "p_l_ps" +#define PRIVATE_DATA_KEY_LAYOUT_TIMER "p_l_t" +#define PRIVATE_DATA_KEY_CHECKER_TYPE "ck_tp" +#define PRIVATE_DATA_KEY_DOWN_X "dw_x" +#define PRIVATE_DATA_KEY_DOWN_Y "dw_y" +#define PRIVATE_DATA_KEY_LAYOUT_G_DOWN_Y "gdw_y" +#define PRIVATE_DATA_KEY_LAYOUT_G_FKICKUP_DONE "gdw_f_d" +#define PRIVATE_DATA_KEY_LEFT_CHECKER "top_ck" +#define PRIVATE_DATA_KEY_RIGHT_CHECKER "bt_ck" +#define PRIVATE_DATA_KEY_READY_TO_BEZEL_DOWN "pd_rt_bd" +#define PRIVATE_DATA_KEY_CENTER_LONG_PRESSED "pd_c_l_p" + +#define MOVE_LEFT -1 +#define MOVE_RIGHT 1 + +#define THRESHOLD_BEZEL_UP_H 60 +#define THRESHOLD_BEZEL_UP_END_D_H 25 +#define THRESHOLD_BEZEL_UP_MOVE_D_H 25 +#define THRESHOLD_MOMENTUM_FLICK_Y 450 +#define LONGPRESS_GRAY_ZONE_W 50 +#define LONGPRESS_GRAY_ZONE_H 100 + +static w_home_error_e _pause_result_cb(void *data) +{ + Evas_Object *layout = data; + Evas_Object *page = NULL; + layout_info_s *layout_info = NULL; + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, W_HOME_ERROR_FAIL); + + page = scroller_get_focused_page(layout_info->scroller); + retv_if(!page, W_HOME_ERROR_FAIL); + page_focus(page); + + /* If TTS is on, use focus */ + if (main_get_info()->is_tts) { + elm_object_tree_focus_allow_set(layout, EINA_FALSE); + _D("tree_focus_allow_set layout(%p) as FALSE", layout); + } + + return W_HOME_ERROR_NONE; +} + + + +static w_home_error_e _resume_result_cb(void *data) +{ + Evas_Object *layout = data; + layout_info_s *layout_info = NULL; + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, W_HOME_ERROR_FAIL); + + if (layout_info->tutorial) { + /* If TTS is on, use focus */ + if (main_get_info()->is_tts) { + elm_object_tree_focus_allow_set(layout, EINA_FALSE); + _D("tree_focus_allow_set layout(%p) as FALSE", layout); + } + } else { + Evas_Object *layout = NULL; + Evas_Object *scroller = NULL; + + layout = evas_object_data_get(main_get_info()->win, DATA_KEY_LAYOUT); + if (!layout) { + return W_HOME_ERROR_FAIL; + } + + /* If TTS is on, use focus */ + if (main_get_info()->is_tts) { + elm_object_tree_focus_allow_set(layout, EINA_TRUE); + _D("tree_focus_allow_set layout(%p) as TRUE", layout); + } + + scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + if (!scroller) { + return W_HOME_ERROR_FAIL; + } + } + + return W_HOME_ERROR_NONE; +} + + + +static w_home_error_e _reset_result_cb(void *data) +{ + return W_HOME_ERROR_NONE; +} + + + +static Eina_Bool _longpress_timer_cb(void *data) +{ + int no_effect = 0; + Evas_Object *layout = data; + Evas_Object *proxy_page = NULL; + Evas_Object *effect_page = NULL; + layout_info_s *layout_info = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + edit_info_s *edit_info = NULL; + + retv_if(!layout, ECORE_CALLBACK_CANCEL); + evas_object_data_del(layout, PRIVATE_DATA_KEY_LAYOUT_TIMER); + + _D("Enter the edit mode"); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, ECORE_CALLBACK_CANCEL); + retv_if(!layout_info->pressed_page, ECORE_CALLBACK_CANCEL); + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, ECORE_CALLBACK_CANCEL); + + page_info = evas_object_data_get(layout_info->pressed_page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, ECORE_CALLBACK_CANCEL); + + if (!page_info->layout_longpress) { + _D("long-press is not supported on this page"); + return ECORE_CALLBACK_CANCEL; + } + + switch (page_info->direction) { + case PAGE_DIRECTION_LEFT: + _D("There is already a pressed item"); + evas_object_data_set(layout_info->pressed_page, DATA_KEY_PAGE_ONHOLD_COUNT, (void*)1); + retv_if(!edit_create_layout(layout, EDIT_MODE_LEFT), ECORE_CALLBACK_CANCEL); + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + retv_if(!edit_info, ECORE_CALLBACK_CANCEL); + + proxy_page = evas_object_data_get(layout_info->pressed_page, DATA_KEY_PROXY_PAGE); + retv_if(!proxy_page, ECORE_CALLBACK_CANCEL); + + effect_page = edit_create_minify_effect_page(proxy_page); + retv_if(!effect_page, ECORE_CALLBACK_CANCEL); + + scroller_region_show_center_of(edit_info->scroller, proxy_page, SCROLLER_FREEZE_OFF, NULL, NULL, edit_minify_effect_page, effect_page); + break; + case PAGE_DIRECTION_CENTER: + if (util_feature_enabled_get(FEATURE_CLOCK_SELECTOR) == 1) { + if (clock_service_clock_selector_launch() > 0) { + evas_object_data_set(layout_info->pressed_page, DATA_KEY_PAGE_ONHOLD_COUNT, (void*)1); + evas_object_data_set(layout, PRIVATE_DATA_KEY_CENTER_LONG_PRESSED, (void*)1); + scroller_freeze(layout_info->scroller); + } + } else { + no_effect = 1; + } + break; + case PAGE_DIRECTION_RIGHT: + if (main_get_info()->is_tts) return ECORE_CALLBACK_CANCEL; + if (layout_info->pressed_item) { + _D("There is already a pressed item"); + widget_viewer_evas_feed_mouse_up_event(layout_info->pressed_item); + } + retv_if(!edit_create_layout(layout, EDIT_MODE_RIGHT), ECORE_CALLBACK_CANCEL); + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + retv_if(!edit_info, ECORE_CALLBACK_CANCEL); + + proxy_page = evas_object_data_get(layout_info->pressed_page, DATA_KEY_PROXY_PAGE); + retv_if(!proxy_page, ECORE_CALLBACK_CANCEL); + + effect_page = edit_create_minify_effect_page(proxy_page); + retv_if(!effect_page, ECORE_CALLBACK_CANCEL); + + scroller_region_show_center_of(edit_info->scroller, proxy_page, SCROLLER_FREEZE_OFF, NULL, NULL, edit_minify_effect_page, effect_page); + + if (layout_info->pressed_page == scroller_info->plus_page) { + evas_object_data_set(layout_info->pressed_item, DATA_KEY_IS_LONGPRESS, (void *)1); + } + break; + default: + _D("Cannot reach here"); + break; + } + + if (no_effect == 0) { + effect_play_vibration(); + } + + return ECORE_CALLBACK_CANCEL; +} + + + +static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ei = event_info; + Evas_Object *layout = obj; + Ecore_Timer *timer = NULL; + + int is_gray_zone = 0; + int x = ei->output.x; + int y = ei->output.y; + + _D("Mouse is down on the layout"); + + timer = evas_object_data_del(layout, PRIVATE_DATA_KEY_LAYOUT_TIMER); + if (timer) ecore_timer_del(timer); + + evas_object_data_set(layout, PRIVATE_DATA_KEY_LAYOUT_PRESSED, (void *) 1); + evas_object_data_set(layout, PRIVATE_DATA_KEY_LAYOUT_DOWN_X, (void *) x); + evas_object_data_set(layout, PRIVATE_DATA_KEY_LAYOUT_DOWN_Y, (void *) y); + + double longpress_time = LONGPRESS_TIME; + layout_info_s *layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + if (layout_info != NULL) { + Evas_Object *page = scroller_get_focused_page(layout_info->scroller); + if (page != NULL) { + page_info_s *page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (page_info != NULL) { + if (page_info->direction == PAGE_DIRECTION_CENTER) { + longpress_time = 0.4f; + } + } + } + } + + if ((x <= LONGPRESS_GRAY_ZONE_W) || (x >= (main_get_info()->root_w - LONGPRESS_GRAY_ZONE_W))) { + is_gray_zone = 1; + } + if ((y <= LONGPRESS_GRAY_ZONE_H) || (y >= (main_get_info()->root_h - LONGPRESS_GRAY_ZONE_H))) { + is_gray_zone = 1; + } + if (is_gray_zone == 1) { + _W("we don't add a longpress timer, it's too close to home key"); + return; + } + + timer = ecore_timer_add(longpress_time, _longpress_timer_cb, layout); + if (timer) evas_object_data_set(layout, PRIVATE_DATA_KEY_LAYOUT_TIMER, timer); + else _E("Cannot add a timer"); +} + + + +static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Move *ei = event_info; + Evas_Object *layout = obj; + Ecore_Timer *timer = NULL; + + int down_x, down_y, vec_x, vec_y; + int cur_x = ei->cur.output.x; + int cur_y = ei->cur.output.y; + + if (!evas_object_data_get(layout, PRIVATE_DATA_KEY_LAYOUT_PRESSED)) return; + + down_x = (int) evas_object_data_get(layout, PRIVATE_DATA_KEY_LAYOUT_DOWN_X); + down_y = (int) evas_object_data_get(layout, PRIVATE_DATA_KEY_LAYOUT_DOWN_Y); + + vec_x = cur_x - down_x; + vec_y = cur_y - down_y; + + timer = evas_object_data_get(layout, PRIVATE_DATA_KEY_LAYOUT_TIMER); + if (timer && (abs(vec_x) >= LONGPRESS_THRESHOLD || abs(vec_y) >= LONGPRESS_THRESHOLD)) { + evas_object_data_del(layout, PRIVATE_DATA_KEY_LAYOUT_TIMER); + ecore_timer_del(timer); + } +} + + + +static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Object *layout = obj; + Ecore_Timer *timer = NULL; + layout_info_s *layout_info = NULL; + + _D("Mouse is up on the layout"); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + timer = evas_object_data_del(layout, PRIVATE_DATA_KEY_LAYOUT_TIMER); + if (timer) ecore_timer_del(timer); + + if (evas_object_data_del(layout, PRIVATE_DATA_KEY_CENTER_LONG_PRESSED) != NULL) { + if (layout_info->scroller) { + scroller_unfreeze(layout_info->scroller); + scroller_bring_in_by_push_type(layout_info->scroller, SCROLLER_PUSH_TYPE_CENTER, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_ANIMATOR); + } + } +} + + + +static void _bezel_up_cb(void *data) +{ + Evas_Object *layout = data; + Evas_Object *scroller = NULL; + Evas_Object *focused_page = NULL; + + _D("Bezel up cb"); + + ret_if(!layout); + + scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + ret_if(!scroller); + + if (PAGE_DIRECTION_CENTER != scroller_get_current_page_direction(scroller)) { + return; + } + + if (util_feature_enabled_get(FEATURE_APPS) == 0) { + elm_object_signal_emit(layout, "bottom,show", "layout"); + return; + } + + if (util_feature_enabled_get(FEATURE_APPS_BY_BEZEL_UP) == 0) { + return; + } + + if (scroller_is_scrolling(scroller)) { + return; + } + + if (layout_is_edit_mode(layout)) { + return; + } + + focused_page = scroller_get_focused_page(scroller); + if (focused_page != NULL) { + evas_object_data_set(focused_page, DATA_KEY_PAGE_ONHOLD_COUNT, (void*)1); + } + + apps_main_show_count_add(); + apps_main_launch(APPS_LAUNCH_SHOW); +} + + + +static key_cb_ret_e _bezel_up_key_cb(void *data) +{ + Evas_Object *layout = data; + Evas_Object *scroller = NULL; + Evas_Object *focused_page = NULL; + + _D("Bezel up"); + + retv_if(!layout, KEY_CB_RET_CONTINUE); + + scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + retv_if(!scroller, KEY_CB_RET_CONTINUE); + + if (PAGE_DIRECTION_CENTER != scroller_get_current_page_direction(scroller)) { + return KEY_CB_RET_CONTINUE; + } + + if (util_feature_enabled_get(FEATURE_APPS) == 0) { + util_create_toast_popup(scroller, _("IDS_ST_TPOP_ACTION_NOT_AVAILABLE_WHILE_POWER_SAVING_PLUS_ENABLED")); + return KEY_CB_RET_CONTINUE; + } + + if (util_feature_enabled_get(FEATURE_APPS_BY_BEZEL_UP) == 0) { + return KEY_CB_RET_CONTINUE; + } + + if (scroller_is_scrolling(scroller)) { + return KEY_CB_RET_CONTINUE; + } + + focused_page = scroller_get_focused_page(scroller); + if (focused_page != NULL) { + evas_object_data_set(focused_page, DATA_KEY_PAGE_ONHOLD_COUNT, (void*)1); + } + + apps_main_show_count_add(); + apps_main_launch(APPS_LAUNCH_SHOW); + + return KEY_CB_RET_STOP; +} + + + +HAPI void layout_add_mouse_cb(Evas_Object *layout) +{ + evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, NULL); + evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_MOVE, _move_cb, NULL); + evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP, _up_cb, NULL); +} + + + +HAPI void layout_del_mouse_cb(Evas_Object *layout) +{ + evas_object_event_callback_del(layout, EVAS_CALLBACK_MOUSE_DOWN, _down_cb); + evas_object_event_callback_del(layout, EVAS_CALLBACK_MOUSE_MOVE, _move_cb); + evas_object_event_callback_del(layout, EVAS_CALLBACK_MOUSE_UP, _up_cb); +} + + + +static Eina_Bool _move_timer_cb(void *data) +{ + Evas_Object *scroller = data; + Evas_Object *cur_page = NULL; + Evas_Object *move_page = NULL; + scroller_info_s *scroller_info = NULL; + int checker_type = 0; + + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + checker_type = (int)evas_object_data_get(scroller, PRIVATE_DATA_KEY_CHECKER_TYPE); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, ECORE_CALLBACK_CANCEL); + + cur_page = scroller_get_focused_page(scroller); + if (MOVE_LEFT == checker_type) { + move_page = scroller_get_left_page(scroller, cur_page); + if (move_page && scroller_info->center != move_page) { + elm_object_signal_emit(scroller_info->layout, "left,show", "layout"); + edit_push_page_before(scroller, cur_page, move_page); + } + } else { + move_page = scroller_get_right_page(scroller, cur_page); + if (move_page && scroller_info->plus_page != move_page) { + elm_object_signal_emit(scroller_info->layout, "right,show", "layout"); + edit_push_page_after(scroller, cur_page, move_page); + } + } + + return ECORE_CALLBACK_RENEW; +} + + + +#define TIME_MOVE_SCROLLER 1.0f +static void _upper_start_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *layout = data; + Evas_Object *checker = obj; + Ecore_Timer *timer = NULL; + + layout_info_s *layout_info = NULL; + edit_info_s *edit_info = NULL; + int checker_type = 0; + + _D("Upper start for the checker"); + + ret_if(!layout); + ret_if(!checker); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + + checker_type = (int) evas_object_data_get(checker, PRIVATE_DATA_KEY_CHECKER_TYPE); + evas_object_data_set(edit_info->scroller, PRIVATE_DATA_KEY_CHECKER_TYPE, (void *)checker_type); + + timer = evas_object_data_del(edit_info->scroller, DATA_KEY_EVENT_UPPER_TIMER); + if (timer) ecore_timer_del(timer); + + timer = ecore_timer_add(TIME_MOVE_SCROLLER, _move_timer_cb, edit_info->scroller); + if (timer) evas_object_data_set(edit_info->scroller, DATA_KEY_EVENT_UPPER_TIMER, timer); + else _E("Cannot add a timer"); +} + + + +static void _upper_end_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *layout = data; + Evas_Object *checker = obj; + Ecore_Timer *timer = NULL; + + layout_info_s *layout_info = NULL; + edit_info_s *edit_info = NULL; + + _D("Upper end for the checker"); + + ret_if(!checker); + ret_if(!layout); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + edit_info = evas_object_data_get(layout_info->edit, DATA_KEY_EDIT_INFO); + ret_if(!edit_info); + + timer = evas_object_data_del(edit_info->scroller, DATA_KEY_EVENT_UPPER_TIMER); + if (timer) ecore_timer_del(timer); + evas_object_data_del(edit_info->scroller, PRIVATE_DATA_KEY_CHECKER_TYPE); +} + + + +static Evas_Event_Flags _flick_start_cb(void *data, void *event_info) +{ + int gesture_down_y = 0; + Evas_Object *layout = data; + Elm_Gesture_Line_Info *ei = (Elm_Gesture_Line_Info *)event_info; + retv_if(!layout, EVAS_EVENT_FLAG_NONE); + retv_if(!ei, EVAS_EVENT_FLAG_NONE); + + gesture_down_y = (int) evas_object_data_get(layout, PRIVATE_DATA_KEY_LAYOUT_G_DOWN_Y); + + if (gesture_down_y <= THRESHOLD_BEZEL_UP_H + && ei->momentum.my >= THRESHOLD_MOMENTUM_FLICK_Y) { + evas_object_data_set(layout, PRIVATE_DATA_KEY_READY_TO_BEZEL_DOWN, (void *) 1); + } + + return EVAS_EVENT_FLAG_NONE; +} + + + +static Evas_Event_Flags _flick_move_cb(void *data, void *event_info) +{ + int gesture_down_y = 0; + Evas_Object *layout = data; + Elm_Gesture_Line_Info *ei = (Elm_Gesture_Line_Info *)event_info; + retv_if(!layout, EVAS_EVENT_FLAG_NONE); + retv_if(!ei, EVAS_EVENT_FLAG_NONE); + + int is_flickup_done = (int) evas_object_data_get(layout, PRIVATE_DATA_KEY_LAYOUT_G_FKICKUP_DONE); + gesture_down_y = (int) evas_object_data_get(layout, PRIVATE_DATA_KEY_LAYOUT_G_DOWN_Y); + int vector_y = ei->momentum.y2 - ei->momentum.y1; + int distance_x = abs( ei->momentum.x1 - ei->momentum.x2); + int distance_y = abs(vector_y); + +#if 0 //DEBUG + _D("gesture_down_y:%d", gesture_down_y); + _D("ei->momentum.my:%d", ei->momentum.my); + _D("is_flickup_done:%d", is_flickup_done); + _D("vector_y:%d", vector_y); + _D("distance_x:%d", distance_x); + _D("distance_y:%d", distance_y); +#endif + + if (vector_y < 0 && + (ei->momentum.my <= -THRESHOLD_MOMENTUM_FLICK_Y || distance_y >= THRESHOLD_BEZEL_UP_MOVE_D_H) && + distance_x < distance_y) { + if (is_flickup_done == 0) { + if (gesture_down_y >= (main_get_info()->root_h - THRESHOLD_BEZEL_UP_H)) { + gesture_execute_cbs(BEZEL_UP); + } + evas_object_smart_callback_call(layout, LAYOUT_SMART_SIGNAL_FLICK_UP, layout); + evas_object_data_set(layout, PRIVATE_DATA_KEY_LAYOUT_G_FKICKUP_DONE, (void *) 1); + } + } + + return EVAS_EVENT_FLAG_NONE; +} + + + +static void _gesture_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ei = event_info; + Evas_Object *layout = obj; + + int y = ei->output.y; + + _D("Mouse is down on the gesture layer:%d", y); + + evas_object_data_del(layout, PRIVATE_DATA_KEY_LAYOUT_G_FKICKUP_DONE); + evas_object_data_set(layout, PRIVATE_DATA_KEY_LAYOUT_G_DOWN_Y, (void *) y); + +} + + + +static Evas_Event_Flags _flick_end_cb(void *data, void *event_info) +{ + int gesture_down_y = 0; + Evas_Object *layout = data; + Elm_Gesture_Line_Info *ei = (Elm_Gesture_Line_Info *)event_info; + retv_if(!layout, EVAS_EVENT_FLAG_NONE); + retv_if(!ei, EVAS_EVENT_FLAG_NONE); + + if (evas_object_data_del(layout, PRIVATE_DATA_KEY_READY_TO_BEZEL_DOWN)) { + gesture_execute_cbs(BEZEL_DOWN); + } + + int is_flickup_done = (int) evas_object_data_get(layout, PRIVATE_DATA_KEY_LAYOUT_G_FKICKUP_DONE); + gesture_down_y = (int) evas_object_data_get(layout, PRIVATE_DATA_KEY_LAYOUT_G_DOWN_Y); + int vector_y = ei->momentum.y2 - ei->momentum.y1; + int distance_x = abs( ei->momentum.x1 - ei->momentum.x2); + int distance_y = abs(vector_y); + +#if 0 //DEBUG + _D("gesture_down_y:%d", gesture_down_y); + _D("ei->momentum.my:%d", ei->momentum.my); + _D("is_flickup_done:%d", is_flickup_done); + _D("vector_y:%d", vector_y); + _D("distance_x:%d", distance_x); + _D("distance_y:%d", distance_y); +#endif + + if (vector_y < 0 && + distance_y >= THRESHOLD_BEZEL_UP_END_D_H && //cannot use momentum + distance_x < distance_y) { + if (is_flickup_done == 0) { + if (gesture_down_y >= (main_get_info()->root_h - THRESHOLD_BEZEL_UP_H)) { + gesture_execute_cbs(BEZEL_UP); + } + evas_object_smart_callback_call(layout, LAYOUT_SMART_SIGNAL_FLICK_UP, layout); + evas_object_data_set(layout, PRIVATE_DATA_KEY_LAYOUT_G_FKICKUP_DONE, (void *) 1); + } + } + + return EVAS_EVENT_FLAG_NONE; +} + + + +static void _attach_gesture_layer(Evas_Object *layout) +{ + Evas_Object *gesture_layer = NULL; + ret_if(!layout); + + gesture_layer = elm_gesture_layer_add(layout); + ret_if(!gesture_layer); + + evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, _gesture_down_cb, NULL); + + elm_gesture_layer_attach(gesture_layer, layout); + elm_gesture_layer_cb_set(gesture_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_START, _flick_start_cb, layout); + elm_gesture_layer_cb_set(gesture_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_END, _flick_end_cb, layout); + elm_gesture_layer_cb_set(gesture_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_MOVE, _flick_move_cb, layout); +} + + + +static Evas_Object *_create_checker(Evas_Object *layout, int type) +{ + Evas_Object *checker; + + retv_if(!layout, NULL); + + checker = elm_button_add(layout); + evas_object_size_hint_weight_set(checker, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(checker, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_color_set(checker, 0, 0, 0, 0); + if (MOVE_LEFT == type) { + elm_object_part_content_set(layout, "left_checker", checker); + evas_object_data_set(checker, PRIVATE_DATA_KEY_CHECKER_TYPE, (void *)MOVE_LEFT); + } else if (MOVE_RIGHT == type) { + elm_object_part_content_set(layout, "right_checker", checker); + evas_object_data_set(checker, PRIVATE_DATA_KEY_CHECKER_TYPE, (void *)MOVE_RIGHT); + } + evas_object_data_set(checker, DATA_KEY_EVENT_UPPER_IS_ON, (void *) 1); + + evas_object_smart_callback_add(checker, "upper_start", _upper_start_cb, layout); + evas_object_smart_callback_add(checker, "upper_end", _upper_end_cb, layout); + evas_object_show(checker); + + return checker; +} + + + +static void _destroy_checker(Evas_Object *checker) +{ + evas_object_data_del(checker, DATA_KEY_EVENT_UPPER_IS_ON); + evas_object_data_del(checker, PRIVATE_DATA_KEY_CHECKER_TYPE); + evas_object_del(checker); +} + + + +#define FILE_LAYOUT_EDJ EDJEDIR"/layout.edj" +#define GROUP_LAYOUT "layout" +HAPI Evas_Object *layout_create(Evas_Object *win) +{ + Evas_Object *layout = NULL; + Evas_Object *checker = NULL; + Evas_Object *scroller = NULL; + layout_info_s *layout_info = NULL; + scroller_info_s *scroller_info = NULL; + Eina_Bool ret; + + retv_if(!win, NULL); + + layout = elm_layout_add(win); + retv_if(NULL == layout, NULL); + + layout_info = calloc(1, sizeof(layout_info_s)); + if (!layout_info) { + _E("Cannot calloc for layout_info"); + evas_object_del(layout); + return NULL; + } + evas_object_data_set(layout, DATA_KEY_LAYOUT_INFO, layout_info); + layout_info->win = win; + + ret = elm_layout_file_set(layout, FILE_LAYOUT_EDJ, GROUP_LAYOUT); + if (EINA_FALSE == ret) { + _E("cannot set the file into the layout"); + free(layout_info); + evas_object_del(layout); + return NULL; + } + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_min_set(layout, main_get_info()->root_w, main_get_info()->root_h); + evas_object_resize(layout, main_get_info()->root_w, main_get_info()->root_h); + evas_object_show(layout); + + evas_object_data_set(win, DATA_KEY_LAYOUT, layout); + evas_object_data_set(layout, DATA_KEY_WIN, win); + + if (W_HOME_ERROR_NONE != main_register_cb(APP_STATE_PAUSE, _pause_result_cb, layout)) { + _E("Cannot register the pause callback"); + } + + if (W_HOME_ERROR_NONE != main_register_cb(APP_STATE_RESUME, _resume_result_cb, layout)) { + _E("Cannot register the resume callback"); + } + + if (W_HOME_ERROR_NONE != main_register_cb(APP_STATE_RESET, _reset_result_cb, layout)) { + _E("Cannot register the reset callback"); + } + + if (W_HOME_ERROR_NONE != gesture_register_cb(BEZEL_UP, _bezel_up_cb, layout)) { + _E("Cannot register the gesture callback"); + } + + if (W_HOME_ERROR_NONE != key_register_cb(KEY_TYPE_BEZEL_UP, _bezel_up_key_cb, layout)) { + _E("Cannot register the key callback"); + } + + layout_add_mouse_cb(layout); + + checker = _create_checker(layout, MOVE_LEFT); + evas_object_data_set(layout, PRIVATE_DATA_KEY_LEFT_CHECKER, checker); + + checker = _create_checker(layout, MOVE_RIGHT); + evas_object_data_set(layout, PRIVATE_DATA_KEY_RIGHT_CHECKER, checker); + + scroller = scroller_create(layout, layout, main_get_info()->root_w, main_get_info()->root_h, SCROLLER_INDEX_PLURAL); + if (!scroller) { + _E("Cannot create scroller"); + free(layout_info); + evas_object_del(layout); + return NULL; + } + notification_init(scroller); + elm_object_part_content_set(layout, "scroller", scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + if (!scroller_info) { + _E("Cannot create scroller"); + notification_fini(scroller); + scroller_destroy(layout); + free(layout_info); + evas_object_del(layout); + return NULL; + } + layout_info->scroller = scroller; + + /* Scroller has to unpack all page_inners on scroll */ + scroller_info->unpack_page_inners_on_scroll = 1; + scroller_info->scroll_effect = 1; + + scroller_info->index[PAGE_DIRECTION_LEFT] = index_create(layout, scroller, PAGE_DIRECTION_LEFT); + if (!scroller_info->index[PAGE_DIRECTION_LEFT]) _E("Cannot create the left index"); + else elm_object_part_content_set(layout, "left_index", scroller_info->index[PAGE_DIRECTION_LEFT]); + + scroller_info->index[PAGE_DIRECTION_RIGHT] = index_create(layout, scroller, PAGE_DIRECTION_RIGHT); + if (!scroller_info->index[PAGE_DIRECTION_RIGHT]) _E("Cannot create the right index"); + else elm_object_part_content_set(layout, "right_index", scroller_info->index[PAGE_DIRECTION_RIGHT]); + layout_hide_index(layout); + + _attach_gesture_layer(layout); + + return layout; +} + + + +HAPI void layout_destroy(Evas_Object *win) +{ + Evas_Object *layout = NULL; + Evas_Object *checker = NULL; + Evas_Object *scroller = NULL; + layout_info_s *layout_info = NULL; + scroller_info_s *scroller_info = NULL; + Eina_List *page_info_list = NULL; + + ret_if(win); + + layout = evas_object_data_del(win, DATA_KEY_LAYOUT); + ret_if(!layout); + + scroller = evas_object_data_del(layout, DATA_KEY_SCROLLER); + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + if (scroller_info->index[PAGE_DIRECTION_LEFT]) { + index_destroy(scroller_info->index[PAGE_DIRECTION_LEFT]); + } + + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_destroy(scroller_info->index[PAGE_DIRECTION_RIGHT]); + } + + scroller_pop_pages(scroller, PAGE_DIRECTION_ANY); + notification_fini(scroller); + scroller_destroy(layout); + + checker = evas_object_data_del(layout, PRIVATE_DATA_KEY_LEFT_CHECKER); + if (checker) { + _destroy_checker(checker); + } + + checker = evas_object_data_del(layout, PRIVATE_DATA_KEY_RIGHT_CHECKER); + if (checker) { + _destroy_checker(checker); + } + + main_unregister_cb(APP_STATE_PAUSE, _pause_result_cb); + main_unregister_cb(APP_STATE_RESUME, _resume_result_cb); + main_unregister_cb(APP_STATE_RESET, _reset_result_cb); + gesture_unregister_cb(BEZEL_UP, _bezel_up_cb); + key_unregister_cb(KEY_TYPE_BEZEL_UP, _bezel_up_key_cb); + + evas_object_data_del(layout, DATA_KEY_WIN); + + layout_info = evas_object_data_del(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + page_info_list_destroy(page_info_list); + free(layout_info); + + evas_object_del(layout); +} + + + +HAPI void layout_show_left_index(Evas_Object *layout) +{ + ret_if(!layout); + elm_object_signal_emit(layout, "show", "left_index"); + elm_object_signal_emit(layout, "hide", "right_index"); +} + + + +HAPI void layout_show_right_index(Evas_Object *layout) +{ + ret_if(!layout); + elm_object_signal_emit(layout, "show", "right_index"); + elm_object_signal_emit(layout, "hide", "left_index"); +} + + + +HAPI void layout_hide_index(Evas_Object *layout) +{ + ret_if(!layout); + elm_object_signal_emit(layout, "hide", "right_index"); + elm_object_signal_emit(layout, "hide", "left_index"); +} + + + +HAPI int layout_is_edit_mode(Evas_Object *layout) +{ + layout_info_s *layout_info = NULL; + + retv_if(!layout, 0); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, 0); + + return layout_info->edit? 1 : 0; +} + + + +HAPI void layout_set_idle(Evas_Object *layout) +{ + layout_info_s *layout_info = NULL; + + ret_if(!layout); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + if (evas_object_data_get(layout, DATA_KEY_ADD_VIEWER) != NULL) { + _D("destroy a addviewer"); + edit_destroy_add_viewer(layout); + } + + if (layout_info->edit != NULL) { + _D("destroy a editing layout"); + edit_destroy_layout(layout); + } +} + + + +HAPI int layout_is_idle(Evas_Object *layout) +{ + layout_info_s *layout_info = NULL; + + retv_if(!layout, 1); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, 1); + + if (evas_object_data_get(layout, DATA_KEY_ADD_VIEWER) != NULL) { + _W("Addview is exist"); + return 0; + } + + if (layout_info->edit != NULL) { + _W("editing is in progress"); + return 0; + } + + return 1; +} +// End of file diff --git a/home/src/main.c b/home/src/main.c new file mode 100755 index 0000000..43a2b59 --- /dev/null +++ b/home/src/main.c @@ -0,0 +1,1430 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "bg.h" +#include "conf.h" +#include "layout.h" +#include "layout_info.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "pkgmgr.h" +#include "win.h" +#include "key.h" +#include "effect.h" +#include "page_info.h" +#include "page.h" +#include "scroller_info.h" +#include "scroller.h" +#include "minictrl.h" +#include "clock_service.h" +#include "dbus.h" +#include "gesture.h" +#include "add-viewer.h" +#include "power_mode.h" +#include "noti_broker.h" +#include "wms.h" +#include "tutorial.h" +#include "apps/apps_main.h" +#include "critical_log.h" +#include "db.h" +#include "xml.h" +#include "widget.h" +#include "edit.h" +#include "popup.h" + +#define HOME_SERVICE_KEY "home_op" +#define HOME_SERVICE_VALUE_POWERKEY "powerkey" +#define HOME_SERVICE_VALUE_EDIT "edit" +#define HOME_SERVICE_VALUE_SHOW_APPS "show_apps" +#define HOME_SERVICE_VALUE_SHOW_NOTI "show_noti" +#define HOME_SERVICE_VALUE_APPS_EDIT "apps_edit" +#define HOME_SERVICE_VALUE_FIRST_BOOT "first_boot" + +#define VCONFKEY_HOME_VISIBILITY "memory/homescreen/clock_visibility" + +#define PRIVATE_DATA_KEY_FOCUS_IN_EVENT_HANDLER "k_fi_ev_hd" +#define PRIVATE_DATA_KEY_FOCUS_OUT_EVENT_HANDLER "k_fo_ev_hd" +#define PRIVATE_DATA_KEY_VISIBILITY_EVENT_HANDLER "k_vi_ev_hd" + +#define APP_CONTROL_OPERATION_MAIN "http://tizen.org/appcontrol/operation/main" + +#define VISIBILITY_TIMEOUT 8.0f +#define LAZY_NOTI_TIMER 3.0f +#define LAZY_WIDGET_TIMER 5.0f + + +static main_s main_info = { + .theme = NULL, + .layout = NULL, + + .state = APP_STATE_CREATE, + .is_mapbuf = 0, + .apps_pid = 0, + .is_tts = false, + .is_lcd_on = -1, + .is_alpm_clock_enabled = 0, + + .safety_init_timer = NULL, +}; + + + +typedef struct { + w_home_error_e (*result_cb)(void *); + void *result_data; +} main_cb_s; + + + +static void _activate_window_job_cb(void *data); + + + +HAPI main_s *main_get_info(void) +{ + return &main_info; +} + + + +static void _home_visibility_vconf_set(int is_visible) +{ + int ret = 0; + + if ((ret = preference_set_int(VCONFKEY_HOME_VISIBILITY, is_visible)) != 0) { + _E("Failed to set key:%s(%d) value:%d", VCONFKEY_HOME_VISIBILITY, ret, is_visible); + } +} + + + +static int _is_window_on_top(void) +{ + int pid = -1; + char *cmd = NULL; + + pid = util_find_top_visible_window(&cmd); + if (pid == -1) { + _E("Failed to get top visible window pid"); + } + + if (pid == getpid()) { + free(cmd); + return 1; + } + + free(cmd); + + return 0; +} + + + +static int _is_tutorial_enabled(void) +{ + int ret = 0; + int tutorial_enabled = 0; + if ((ret = vconf_get_int(VCONF_KEY_HOME_IS_TUTORIAL, &tutorial_enabled)) != 0) { + _E("Cannot get the vconf for %s %d", VCONF_KEY_HOME_IS_TUTORIAL, ret); + return 0; + } + + return tutorial_enabled; +} + + + +static int _is_lcd_turned_on(void) +{ + display_state_e val = DISPLAY_STATE_NORMAL; + + if (main_info.is_lcd_on >= 0) { + return main_get_info()->is_lcd_on; + } else { + if (device_display_get_state(&val) < 0) { + _E("Failed to get DISPLAY STATE"); + } + + if (val == DISPLAY_STATE_NORMAL || val == DISPLAY_STATE_SCREEN_DIM) { + return 1; + } + } + + return 0; +} + + + +static void _del_list(void *data) +{ + Eina_List *page_info_list = data; + ret_if(!page_info_list); + page_info_list_destroy(page_info_list); +} + + + +static inline char *_ltrim(char *str) +{ + retv_if(NULL == str, NULL); + while (*str && (*str == ' ' || *str == '\t' || *str == '\n')) str ++; + return str; +} + + + +static inline int _rtrim(char *str) +{ + int len; + + retv_if(NULL == str, 0); + + len = strlen(str); + while (--len >= 0 && (str[len] == ' ' || str[len] == '\n' || str[len] == '\t')) { + str[len] = '\0'; + } + + return len; +} + + + +Eina_List *_create_tts_list(const char *file) +{ + retv_if(!file, NULL); + + FILE *fp; + char *line = NULL; + size_t size = 0; + ssize_t read; + char *data = NULL; + Eina_List *list = NULL; + + fp = fopen(file, "r"); + retv_if(!fp, NULL); + + while ((read = getline(&line, &size, fp)) != -1) { + char *begin; + + if (size <= 0) { + free(line); + line = NULL; + break; + } + + begin = _ltrim(line); + _rtrim(line); + + if (*begin == '#' || *begin == '\0') { + free(line); + line = NULL; + continue; + } + + data = strdup(begin); + list = eina_list_append(list, data); + + if (line) { + free(line); + line = NULL; + } + } + + fclose(fp); + + return list; +} + + +void _destroy_tts_list(Eina_List *list) +{ + char *data = NULL; + + ret_if(!list); + + EINA_LIST_FREE(list, data) { + free(data); + } +} + + + +static int _page_info_in_list(page_info_s *page_info, Eina_List *list) +{ + char *name = NULL; + const Eina_List *l, *ln; + + retv_if(!list, 0); + retv_if(!page_info, 0); + retv_if(!page_info->id, 0); + + EINA_LIST_FOREACH_SAFE(list, l, ln, name) { + continue_if(!name); + if(!strcmp(name, page_info->id)) return 1; + } + + return 0; +} + + +#define BLACK_LIST RESDIR"/tts_black.list" +#define WHITE_LIST RESDIR"/tts_white.list" +static void _tts_cb(void *data, Evas_Object *obj, void *event_info) +{ + int val = -1; + + _W("Change TTS"); + + if (0 == vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &val) + && main_info.is_tts != val) + { + Evas_Object *scroller = NULL; + Eina_List *page_info_list = NULL; + page_info_s *page_info = NULL; + layout_info_s *layout_info = NULL; + scroller_info_s *scroller_info = NULL; + Eina_List *white_list = NULL; + Eina_List *black_list = NULL; + const Eina_List *l, *ln; + + main_info.is_tts = val; + apps_main_list_tts(val); + + layout_info = evas_object_data_get(main_info.layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + if (evas_object_data_get(main_info.layout, DATA_KEY_ADD_VIEWER) != NULL) { + _D("destroy a addviewer"); + edit_destroy_add_viewer(main_info.layout); + } + + if (layout_info->edit != NULL) { + _D("destroy a editing layout"); + edit_destroy_layout(main_info.layout); + } + + scroller = evas_object_data_get(main_info.layout, DATA_KEY_SCROLLER); + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + page_info_list = db_write_list(); + + if (main_info.is_tts) { + _W("TTS is on"); + + white_list = _create_tts_list(WHITE_LIST); + ret_if(!white_list); + + black_list = _create_tts_list(BLACK_LIST); + ret_if(!black_list); + + EINA_LIST_FOREACH_SAFE(page_info_list, l, ln, page_info) { + if(_page_info_in_list(page_info, white_list)) continue; + if(_page_info_in_list(page_info, black_list)) { + page_info_list = eina_list_remove(page_info_list, page_info); + continue; + } + } + + _destroy_tts_list(white_list); + _destroy_tts_list(black_list); + + if (W_HOME_ERROR_NONE != db_read_list(page_info_list)) { + _E("Cannot write items into the DB"); + } + + /* If TTS is on, use focus & do not use the enhanced scroller. */ + elm_object_tree_focus_allow_set(main_info.layout, EINA_TRUE); + _D("tree_focus_allow_set layout(%p) as TRUE", main_info.layout); + + page_focus(scroller_info->center); + scroller_backup_inner_focus(scroller); + scroller_restore_inner_focus(scroller); + } else { + _W("TTS is off"); + + /* If TTS is off, do not use focus */ + elm_object_tree_focus_allow_set(main_info.layout, EINA_FALSE); + _D("tree_focus_allow_set layout(%p) as FALSE", main_info.layout); + } + + scroller_pop_pages(scroller, PAGE_DIRECTION_RIGHT); + scroller_push_pages(scroller, page_info_list, _del_list, page_info_list); + } + + if (apps_main_is_visible() == EINA_TRUE) { + apps_main_launch(APPS_LAUNCH_HIDE); + } + + /* UX requirement: activate home window when TTS option is changed */ + ecore_job_add(_activate_window_job_cb, NULL); +} + + + +static void _tutorial_cb(keynode_t *node, void *data) +{ + int tutorial_enabled = _is_tutorial_enabled(); + + if (tutorial_enabled == 0) { + if (main_info.state == APP_STATE_RESUME) { + _home_visibility_vconf_set(1); + } else { + _home_visibility_vconf_set(0); + } + + popup_show(POPUP_STAGE_AFTER_TUTORIAL); + } +} + + + +static void _init_theme(void) +{ + main_info.theme = elm_theme_new(); + elm_theme_ref_set(main_info.theme, NULL); + elm_theme_extension_add(main_info.theme, EDJEDIR"/index.edj"); +} + + + +static void _destroy_theme(void) +{ + elm_theme_extension_del(main_info.theme, EDJEDIR"/index.edj"); + elm_theme_free(main_info.theme); + main_info.theme = NULL; +} + + + +static Eina_Bool _appcore_flush_cb(void *data) +{ + if (APP_STATE_PAUSE != main_info.state) return ECORE_CALLBACK_CANCEL; + if (0 != appcore_flush_memory()) _E("Cannot flush memory"); + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI void main_inc_booting_state(void) +{ + main_info.booting_state++; + if (BOOTING_STATE_DONE > main_info.booting_state) return; + + w_home_error_e ret = W_HOME_ERROR_NONE; + do { + ret = pkgmgr_reserve_list_pop_request(); + } while (W_HOME_ERROR_NONE == ret); + + /* Cache memory is cleared when the application paused (every time, after 5 seconds (in appcore)), + * but after running in a minimized mode (HIDE_LAUNCH) application have status AS_RUNNING. + * Application have status AS_PAUSED only after change of visibility to hidden condition by user (on hiding window) + * Cleaning must be performed only once after application loading in hidden condition + * (and stay in a hidden condition at time of cleaning). + */ + if (APP_STATE_PAUSE == main_info.state) { + ecore_timer_add(5.0f, _appcore_flush_cb, NULL); + } +} + + + +HAPI void main_dec_booting_state(void) +{ + main_info.booting_state--; +} + + + +HAPI int main_get_booting_state(void) +{ + return main_info.booting_state; +} + + + +HAPI w_home_error_e main_register_cb( + int state, + w_home_error_e (*result_cb)(void *), void *result_data) +{ + main_cb_s *cb = NULL; + + retv_if(NULL == result_cb, W_HOME_ERROR_INVALID_PARAMETER); + + cb = calloc(1, sizeof(main_cb_s)); + retv_if(NULL == cb, W_HOME_ERROR_FAIL); + + cb->result_cb = result_cb; + cb->result_data = result_data; + + main_info.cbs_list[state] = eina_list_append(main_info.cbs_list[state], cb); + retv_if(NULL == main_info.cbs_list[state], W_HOME_ERROR_FAIL); + + return W_HOME_ERROR_NONE; +} + + + +HAPI void main_unregister_cb( + int state, + w_home_error_e (*result_cb)(void *)) +{ + const Eina_List *l; + const Eina_List *n; + main_cb_s *cb; + EINA_LIST_FOREACH_SAFE(main_info.cbs_list[state], l, n, cb) { + continue_if(NULL == cb); + if (result_cb != cb->result_cb) continue; + main_info.cbs_list[state] = eina_list_remove(main_info.cbs_list[state], cb); + free(cb); + return; + } +} + + + +static void _execute_cbs(int state) +{ + const Eina_List *l; + const Eina_List *n; + main_cb_s *cb; + EINA_LIST_FOREACH_SAFE(main_info.cbs_list[state], l, n, cb) { + continue_if(NULL == cb); + continue_if(NULL == cb->result_cb); + + if (W_HOME_ERROR_NONE != cb->result_cb(cb->result_data)) _E("There are some problems"); + } +} + + + +static int _dead_cb(int pid, void *data) +{ + _D("PID(%d) is dead", pid); + /* Who manages the idle clock? home_item_idle_clock_app_dead_cb */ + clock_service_event_app_dead_cb(pid); + + return 1; +} + + + +#if 0 /* EFL private features */ +static Eina_Bool _window_effect_setting_cb(void *data) +{ + gesture_home_window_effect_set(1); + + return ECORE_CALLBACK_CANCEL; +} +#endif + + + +static void _resume_cb(void *data) +{ + _D("Resumed"); + + if (main_info.state == APP_STATE_RESUME) { + _E("resumed already"); + return; + } + +#if 0 /* EFL private features */ + ecore_timer_add(0.2f, _window_effect_setting_cb, NULL); +#endif + + if (apps_main_is_visible() && main_info.is_win_visible == 0) { + _E("Apps is showing"); + return; + } + + if (_is_tutorial_enabled() == 0) { + _home_visibility_vconf_set(1); + } + + main_info.state = APP_STATE_RESUME; + _execute_cbs(APP_STATE_RESUME); + + if (main_info.is_alpm_clock_enabled == 0) { + if (_is_lcd_turned_on() == 1) { + _W("clock/widget resumed"); + widget_viewer_evas_notify_resumed_status_of_viewer(); + clock_service_resume(); + } + } +} + + + +static void _pause_cb(void *data) +{ + _D("Paused"); + + if (main_info.state == APP_STATE_PAUSE) { + _E("paused already"); + return; + } + + _home_visibility_vconf_set(0); + + main_info.state = APP_STATE_PAUSE; + _execute_cbs(APP_STATE_PAUSE); + + /* DYNAMICBOX pause */ + _W("clock/widget paused"); + widget_viewer_evas_notify_paused_status_of_viewer(); + clock_service_pause(); +} + + + +static void _setup_wizard_cb(keynode_t *node, void *data) +{ + Eina_List *page_info_list = NULL; + layout_info_s *layout_info = NULL; + const char *file = NULL; + int setup_wizard = 1; + + if (vconf_get_int(VCONFKEY_SETUP_WIZARD_STATE, &setup_wizard) < 0) { + _E("Failed to get VCONFKEY_SETUP_WIZARD_STATE"); + } + + if (setup_wizard) { + _W("Setup wizard is still on"); + return; + } + + /* If setup_wizard is off, please ignore this callback */ + vconf_ignore_key_changed(VCONFKEY_SETUP_WIZARD_STATE, _setup_wizard_cb); + + /* Below routines is same with _widget_load_init_timer_cb. */ + if (main_info.is_tts) { + _W("TTS is on"); + file = TTS_XML_FILE; + } else { + _W("TTS is off"); + file = DEFAULT_XML_FILE; + } + + if (file && 0 == access(file, R_OK)) { + _W("We'll read the file(%s)", file); + } else { + _E("Cannot access the file(%s)", file); + file = DEFAULT_XML_FILE; + } + + page_info_list = xml_write_list(file); + if (!page_info_list) { + _E("Critical! Cannot read xml file(%s)", file); + return; + } + + if (W_HOME_ERROR_NONE != db_read_list(page_info_list)) { + _E("Cannot write items into the DB"); + } + + layout_info = evas_object_data_get(main_info.layout, DATA_KEY_LAYOUT_INFO); + if (layout_info) { + scroller_push_pages(layout_info->scroller, page_info_list, _del_list, page_info_list); + } +} + + + +static Eina_Bool _widget_load_init_timer_cb(void *data) +{ + const char *file = NULL; + Eina_List *page_info_list = NULL; + layout_info_s *layout_info = NULL; + + _W("Loads DBoxes"); + + if (emergency_mode_enabled_get()) { + _W("Emergency mode, we don't need to add widgets."); + return ECORE_CALLBACK_CANCEL; + } + + /* Order is very important. Do not change if-statments */ + if (main_info.first_boot) { + int setup_wizard = 0; + + main_info.first_boot = 0; + + if (vconf_get_int(VCONFKEY_SETUP_WIZARD_STATE, &setup_wizard) < 0) { + _E("Failed to get VCONFKEY_SETUP_WIZARD_STATE"); + } + + if (setup_wizard) { + _W("Setup wizard is still on"); + if (vconf_notify_key_changed(VCONFKEY_SETUP_WIZARD_STATE, _setup_wizard_cb, NULL) < 0) { + _E("Failed to register the setup_wizard callback"); + } + return ECORE_CALLBACK_CANCEL; + } + + /* Below routines is same with _setup_wizard_cb */ + if (main_info.is_tts) { + _W("TTS is on"); + file = TTS_XML_FILE; + } else { + _W("TTS is off"); + file = DEFAULT_XML_FILE; + } + + if (file && 0 == access(file, R_OK)) { + _W("We'll read the file(%s)", file); + } else { + _E("Cannot access the file(%s)", file); + file = DEFAULT_XML_FILE; + } + + page_info_list = xml_write_list(file); + if (!page_info_list) { + _E("Critical! Cannot read xml file(%s)", file); + return ECORE_CALLBACK_CANCEL; + } + + if (W_HOME_ERROR_NONE != db_read_list(page_info_list)) { + _E("Cannot write items into the DB"); + } + } else { + _W("Read DB for initial list"); + page_info_list = db_write_list(); + } + + layout_info = evas_object_data_get(main_info.layout, DATA_KEY_LAYOUT_INFO); + if (layout_info) { + scroller_push_pages(layout_info->scroller, page_info_list, _del_list, page_info_list); + } + + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _noti_broker_init_timer_cb(void *data) +{ + _W("loading noti broker"); + noti_broker_init(); + + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _clock_service_init_timer_cb(void *data) +{ + _W("clock service init"); + clock_service_init(); + minicontrol_init(); + power_mode_ui_init(); + + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _visibility_timeout_cb(void *data) +{ + _E("Visibility event is not reached in %lf seconds", VISIBILITY_TIMEOUT); + + effect_init(); + _clock_service_init_timer_cb(data); + _widget_load_init_timer_cb(NULL); + + main_info.safety_init_timer = NULL; + main_info.is_service_initialized = 1; + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _window_visibility_cb(void *data, int type, void *event) +{ + Ecore_X_Event_Window_Visibility_Change *ev = event; + retv_if(ev == NULL, ECORE_CALLBACK_PASS_ON); + + if (!main_info.win) { + return ECORE_CALLBACK_PASS_ON; + } + + Ecore_X_Window xWin = elm_win_xwindow_get(main_info.win); + + if (xWin != ev->win) { + return ECORE_CALLBACK_PASS_ON; + } + + _W("Window [0x%X] is now visible(%d)", xWin, ev->fully_obscured); + + if (ev->fully_obscured == 1) { + main_info.is_win_visible = 0; + } else { + main_info.is_win_visible = 1; + } + + if (main_info.is_service_initialized == 0) { + if (main_info.safety_init_timer) { + /** + * Delete the safety timer, + * We are successfully get the visibility change event. + * So we don't need to keep the safety timer anymore. + * Delete it. + */ + ecore_timer_del(main_info.safety_init_timer); + main_info.safety_init_timer = NULL; + } + + _clock_service_init_timer_cb(NULL); + + if (!ecore_timer_add(LAZY_NOTI_TIMER, _noti_broker_init_timer_cb, NULL)) { + _E("Failed to create a new timer for noti-broker"); + _noti_broker_init_timer_cb(NULL); + } + + if (!ecore_timer_add(LAZY_WIDGET_TIMER, _widget_load_init_timer_cb, NULL)) { + _E("Failed to create a new timer for widget initializer"); + _widget_load_init_timer_cb(NULL); + } + + effect_init(); + + main_info.is_service_initialized = 1; + } + + return ECORE_CALLBACK_PASS_ON; +} + + + +static Eina_Bool _window_focus_in_cb(void *data, int type, void *event) +{ + Ecore_X_Event_Window_Focus_In *ev = event; + + if (!main_info.win) { + return ECORE_CALLBACK_PASS_ON; + } + + Ecore_X_Window xWin = elm_win_xwindow_get(main_info.win); + if (xWin == ev->win) { + _D("focus in"); + _resume_cb(NULL); + } else { + _E("win[%d], ev->win[%d]", xWin, ev->win); + } + + return ECORE_CALLBACK_PASS_ON; +} + + + +static Eina_Bool _window_focus_out_cb(void *data, int type, void *event) +{ + Ecore_X_Event_Window_Focus_Out *ev = event; + + if (!main_info.win) { + return ECORE_CALLBACK_PASS_ON; + } + + Ecore_X_Window xWin = elm_win_xwindow_get(main_info.win); + if (xWin == ev->win) { + _D("focus out"); + _pause_cb(NULL); + + if (tutorial_is_exist()) { + Ecore_X_Window xwin = ecore_x_window_focus_get(); + if (tutorial_is_apps(xwin)) { + _D("tutorial shows apps"); + tutorial_set_transient_for(xwin); + } else if (tutorial_is_indicator(xwin)) { + _D("tutorial shows indicator"); + tutorial_set_transient_for(xwin); + } else { + _E("Cannot reach here"); + } + } + } else { + _E("win[%d], ev->win[%d]", xWin, ev->win); + } + + return ECORE_CALLBACK_PASS_ON; +} + + + +static void _change_apps_order_cb(keynode_t *node, void *data) +{ + int value = -1; + + /* check Emergency Mode */ + if (emergency_mode_enabled_get()) { + _E("emergency mode enabled"); + return; + } + + // 0 : init, 1 : backup request, 2 : restore request, 3: write done + if (vconf_get_int(VCONF_KEY_WMS_APPS_ORDER, &value) < 0) { + _E("Failed to get VCONFKEY_WMS_APPS_ORDER"); + return; + } + + _D("Change apps order vconf:[%d]", value); + wms_change_apps_order(value); +} + + + +static void _alpm_manager_status_changed_cb(void *user_data, void *event_info) +{ + char *status = event_info; + ret_if(status == NULL); + + _W("alpm status:%s", status); + + main_s *main_info = main_get_info(); + ret_if(main_info == NULL); + + if (strcmp(status, ALPM_MANAGER_STATUS_SHOW) == 0) { + main_info->is_alpm_clock_enabled = 1; + + } else if (strcmp(status, ALPM_MANAGER_STATUS_ALPM_HIDE) == 0) { + _D("is win visible?:%d", main_info->is_win_visible); + main_info->is_alpm_clock_enabled = 0; + if (main_info->state == APP_STATE_RESUME || main_info->is_win_visible == 1) { + if (_is_lcd_turned_on() == 1) { + _W("clock/widget resumed"); + widget_viewer_evas_notify_resumed_status_of_viewer(); + clock_service_resume(); + } + } + } else if (strcmp(status, ALPM_MANAGER_STATUS_SIMPLE_HIDE) == 0) { + main_info->is_alpm_clock_enabled = 0; + widget_viewer_evas_notify_resumed_status_of_viewer(); + clock_service_resume(); + } +} + + +static void _lcd_on_cb(void *user_data, void *event_info) +{ + main_s *main_info = main_get_info(); + ret_if(main_info == NULL); + + _W("LCD: off->on"); + main_info->is_lcd_on = 1; + if (main_info->state == APP_STATE_RESUME) { + if (main_info->is_alpm_clock_enabled == 0) { + _W("clock/widget resumed"); + widget_viewer_evas_notify_resumed_status_of_viewer(); + clock_service_resume(); + } + } +} + +static void _lcd_off_cb(void *user_data, void *event_info) +{ + main_s *main_info = main_get_info(); + ret_if(main_info == NULL); + + _D("LCD: on->off"); + main_info->is_lcd_on = 0; + if (main_info->state == APP_STATE_RESUME) { + _W("clock/widget paused"); + widget_viewer_evas_notify_paused_status_of_viewer(); + clock_service_pause(); + } +} + + + +#define LANGUAGE_MALI "ml_IN" +#define LANGUAGE_GEORGIA "ka_GE" +static void _check_lang(void) +{ + char *lang = NULL; + + lang = vconf_get_str(VCONFKEY_LANGSET); + if (!lang) { + return; + } + elm_language_set(lang); + + free(lang); +} + + + +#define TUTORIAL_TIMER 1.5f +static bool _create_cb(void *data) +{ + Evas_Object *bg = NULL; + int tutorial_enabled = 0; + Ecore_Event_Handler *handler; + + _D("Created"); + home_dbus_init(NULL); + power_mode_init(); + db_init(DB_FILE_NORMAL); + + main_info.state = APP_STATE_CREATE; + evas_object_add_viewer_init(); + + if (vconf_notify_key_changed(VCONF_KEY_WMS_APPS_ORDER, _change_apps_order_cb, NULL) < 0) { + _E("Failed to register the changed_apps_order callback"); + } + /* wms vconf has to be dealt after pushing pages */ + + if (vconf_notify_key_changed(VCONF_KEY_HOME_IS_TUTORIAL, _tutorial_cb, NULL) < 0) { + _E("Failed to register the tutorial callback"); + } + + retv_if(vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &main_info.is_tts) < 0, W_HOME_ERROR_FAIL); + _check_lang(); + + wms_register_setup_wizard_vconf(); + +#if 1 //TBD + home_gesture_init(); + if (home_dbus_register_cb(DBUS_EVENT_LCD_ON, _lcd_on_cb, NULL) != W_HOME_ERROR_NONE) { + _E("Failed to register lcd status changed cb"); + } + if (home_dbus_register_cb(DBUS_EVENT_LCD_OFF, _lcd_off_cb, NULL) != W_HOME_ERROR_NONE) { + _E("Failed to register lcd status changed cb"); + } +#else + if (device_add_callback(DEVICE_CALLBACK_DISPLAY_STATE, _display_state_cb, NULL) < 0) { + _E("Failed to add the display state callback"); + } +#endif + if (home_dbus_register_cb(DBUS_EVENT_ALPM_MANAGER_STATE_CHANGED, _alpm_manager_status_changed_cb, NULL) != W_HOME_ERROR_NONE) { + _E("Failed to register alpm manager status changed cb"); + } + + /** + * Register the X Event handlers before creating our Window. + * If you don't want to be bothered by timing issue of these **cking events ;) + */ + handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, _window_focus_in_cb, NULL); + if (!handler) { + _E("Failed to add an ecore event handler (FOCUS_IN)"); + } + evas_object_data_set(main_info.win, PRIVATE_DATA_KEY_FOCUS_IN_EVENT_HANDLER, handler); + + handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _window_focus_out_cb, NULL); + if (!handler) { + _E("Failed to add an ecore event handler (FOCUS_OUT)"); + } + evas_object_data_set(main_info.win, PRIVATE_DATA_KEY_FOCUS_OUT_EVENT_HANDLER, handler); + + handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE, _window_visibility_cb, NULL); + if (!handler) { + _E("Failed to add an ecore event handler (VISIBILITY_CHANGE)"); + } + evas_object_data_set(main_info.win, PRIVATE_DATA_KEY_VISIBILITY_EVENT_HANDLER, handler); + + main_info.win = win_create("W-Home"); + retv_if(!main_info.win, false); + evas_object_smart_callback_add(main_info.win, "access,changed", _tts_cb, NULL); + + /* DYNAMICBOX init */ + widget_init(main_info.win); + + /* Key register */ + key_register(); + + bg = bg_create(main_info.win); + if (!bg) { + _E("Cannot create bg"); + win_destroy(main_info.win); + return false; + } + + main_info.layout = layout_create(main_info.win); + if (!main_info.layout) { + _E("Cannot create layout"); + bg_destroy(main_info.win); + win_destroy(main_info.win); + return false; + } + + if (main_info.is_tts) { + /* If TTS is on, use focus & do not use the enhanced scroller. */ + _D("Set tree focus as true"); + elm_object_tree_focus_allow_set(main_info.layout, EINA_TRUE); + } else { + /* If TTS is off, do not use focus */ + _D("Set tree focus as false"); + elm_object_tree_focus_allow_set(main_info.layout, EINA_FALSE); + } + + _execute_cbs(APP_STATE_CREATE); + + /* After creating a window */ + _init_theme(); + + clock_service_event_register(); + /** + * This function initialize the noti-broker. + * But we already manage it from this file. + * and the _load function uses timer to initialize the noti. + * It uses 10 secs..... + */ + noti_broker_load(); + + /* + * workaround: when window visibiltiy cb isn't called + */ + main_info.safety_init_timer = ecore_timer_add(VISIBILITY_TIMEOUT, _visibility_timeout_cb, NULL); + if (!main_info.safety_init_timer) { + _E("Failed to create a fallback init timer for safety"); + } + + if (preference_get_int(VCONF_KEY_HOME_IS_TUTORIAL_ENABLED_TO_RUN, &tutorial_enabled) != 0) { + _E("Cannot get the vconf for %s", VCONF_KEY_HOME_IS_TUTORIAL_ENABLED_TO_RUN); + } + + if (tutorial_enabled && util_feature_enabled_get(FEATURE_TUTORIAL) == 1) { + if (!tutorial_create(main_info.layout)) { + _E("Cannot create a tutorial"); + } + } + + /** + * Dead callback should be called after initialize all services. + * So we should register this at the last of this function. + */ + aul_listen_app_dead_signal(_dead_cb, NULL); + + return true; +} + + + +static void _terminate_cb(void *data) +{ + layout_info_s *layout_info = NULL; + + main_dec_booting_state(); + evas_object_add_viewer_fini(); + + _D("Terminated"); + + home_dbus_fini(NULL); + + apps_main_fini(); + + + home_dbus_unregister_cb(DBUS_EVENT_LCD_ON, _lcd_on_cb); + home_dbus_unregister_cb(DBUS_EVENT_LCD_OFF, _lcd_off_cb); + home_dbus_unregister_cb(DBUS_EVENT_ALPM_MANAGER_STATE_CHANGED, _alpm_manager_status_changed_cb); + + Ecore_Event_Handler *handler = evas_object_data_del(main_info.win, PRIVATE_DATA_KEY_FOCUS_IN_EVENT_HANDLER); + if (handler) ecore_event_handler_del(handler); + + handler = evas_object_data_del(main_info.win, PRIVATE_DATA_KEY_FOCUS_OUT_EVENT_HANDLER); + if (handler) ecore_event_handler_del(handler); + + handler = evas_object_data_del(main_info.win, PRIVATE_DATA_KEY_VISIBILITY_EVENT_HANDLER); + if (handler) ecore_event_handler_del(handler); + + main_info.state = APP_STATE_TERMINATE; + _execute_cbs(APP_STATE_TERMINATE); + + wms_unregister_setup_wizard_vconf(); + + layout_info = evas_object_data_get(main_info.layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + if (layout_info->tutorial) { + tutorial_destroy(layout_info->tutorial); + layout_info->tutorial = NULL; + } + + _destroy_theme(); + + vconf_ignore_key_changed(VCONF_KEY_WMS_APPS_ORDER, _change_apps_order_cb); + vconf_ignore_key_changed(VCONF_KEY_HOME_IS_TUTORIAL, _tutorial_cb); + + effect_fini(); + + clock_service_event_deregister(); + + /* Clock Service fini */ + clock_service_fini(); + + /* Minicontrol fini */ + minicontrol_fini(); + + noti_broker_fini(); + + /* Emergency Mode fini */ + power_mode_fini(); + + /*! + * DBUS fini + * Gesture fini + * calling sequence is meaningful + */ + home_gesture_fini(); + + bg_destroy(main_info.win); + + /* Key unregister */ + key_unregister(); + + win_destroy(main_info.win); + + /* DYNAMICBOX fini */ + widget_fini(); + + if (main_info.apps_pid) { + aul_terminate_pid(main_info.apps_pid); + main_info.apps_pid = 0; + } +} + + + +static Eina_Bool _show_noti_timer_cb(void *data) +{ + Evas_Object *scroller = data; + retv_if(scroller == NULL, ECORE_CALLBACK_CANCEL); + + scroller_bring_in_by_push_type(scroller, SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_LEFT, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_ANIMATOR); + + return ECORE_CALLBACK_CANCEL; +} + + + +static void _activate_window_job_cb(void *data) +{ + ret_if(!main_info.win); + + _D("Activate the window"); + elm_win_activate(main_info.win); + home_dbus_home_raise_signal_send(); + + _resume_cb(NULL); +} + + + +static Evas_Object *_layout_get(void) +{ + Evas_Object *layout = NULL; + + if (!main_info.win) { + return NULL; + } + + layout = evas_object_data_get(main_info.win, DATA_KEY_LAYOUT); + + return layout; +} + + + +static Evas_Object *_scroller_get(void) +{ + Evas_Object *layout = _layout_get(); + retv_if(layout == NULL, NULL); + + return elm_object_part_content_get(layout, "scroller"); +} + + + +static void _app_control(app_control_h service, void *data) +{ + /* powerkey bundle */ + char *service_val = NULL; + + apps_main_init(); + + app_control_get_extra_data(service, HOME_SERVICE_KEY, &service_val); + _D("Service value : %s", service_val); + + if (service_val) { + int is_clock_displayed = 0; + int is_window_on_top = _is_window_on_top(); + is_window_on_top = (apps_main_is_visible() == EINA_TRUE) ? 0 : is_window_on_top; + Evas_Object *layout = _layout_get(); + Evas_Object *scroller = _scroller_get(); + if (scroller_get_current_page_direction(scroller) == PAGE_DIRECTION_CENTER) { + is_clock_displayed = 1; + } + + if (!strncmp(service_val, HOME_SERVICE_VALUE_POWERKEY, strlen(HOME_SERVICE_VALUE_POWERKEY))) { + int tutorial_exist = tutorial_is_exist(); + + _D("Powerkey operation"); + + if(tutorial_exist) { + is_window_on_top = 1; + } else { + apps_main_launch(APPS_LAUNCH_HIDE); + } + + if (is_clock_displayed == 1) { + _D("clock is displayed"); + if (is_window_on_top == 1) { + _D("home window is top"); + if (_is_lcd_turned_on() == 1) { + if (layout_is_idle(layout) == 1) { + home_dbus_lcd_off_signal_send(); + } else { + _W("home isn't in idle"); + } + } + } + } else if (!tutorial_exist) { + scroller_bring_in_by_push_type(scroller, SCROLLER_PUSH_TYPE_CENTER, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_ANIMATOR); + } + + key_cb_execute(KEY_TYPE_HOME); + } else if (!strncmp(service_val, HOME_SERVICE_VALUE_EDIT, strlen(HOME_SERVICE_VALUE_EDIT))) { + _D("Edit operation"); + } else if (!strncmp(service_val, HOME_SERVICE_VALUE_SHOW_APPS, strlen(HOME_SERVICE_VALUE_SHOW_APPS))) { + if (util_feature_enabled_get(FEATURE_APPS) == 1) { + apps_main_launch(APPS_LAUNCH_SHOW); + _D("Show apps operation"); + } + } else if (!strncmp(service_val, HOME_SERVICE_VALUE_APPS_EDIT, strlen(HOME_SERVICE_VALUE_APPS_EDIT))) { + _D("Apps edit operation"); + apps_main_launch(APPS_LAUNCH_EDIT); + is_window_on_top = 1; + + } else if (!strncmp(service_val, HOME_SERVICE_VALUE_SHOW_NOTI, strlen(HOME_SERVICE_VALUE_SHOW_NOTI))) { + _D("Show noti operation"); + ecore_timer_add(0.250f, _show_noti_timer_cb, scroller); + } else if (!strncmp(service_val, HOME_SERVICE_VALUE_FIRST_BOOT, strlen(HOME_SERVICE_VALUE_FIRST_BOOT))) { + _D("First boot operation"); + main_info.first_boot = 1; + } + + if (is_window_on_top == 0) { + ecore_job_add(_activate_window_job_cb, NULL); + } + + free(service_val); + } else { + ecore_job_add(_activate_window_job_cb, NULL); + _execute_cbs(APP_STATE_RESET); + } +} + + + +static void _language_changed(app_event_info_h event_info, void *user_data) +{ + _D(""); + apps_main_language_chnage(); + evas_object_add_viewer_reload(); + + _check_lang(); + _execute_cbs(APP_STATE_LANGUAGE_CHANGED); +} + + + + +int main(int argc, char *argv[]) +{ + int ret; + ui_app_lifecycle_callback_s lifecycle_callback = {0, }; + app_event_handler_h event_handlers[5] = {NULL, }; + char *clock_pkgname; + + if (CRITICAL_LOG_INIT(util_basename(argv[0])) < 0) { + _E("Failed to initiate the critical log system"); + } + + lifecycle_callback.create = _create_cb; + lifecycle_callback.terminate = _terminate_cb; + lifecycle_callback.pause = _pause_cb; + lifecycle_callback.resume = _resume_cb; + lifecycle_callback.app_control = _app_control; + + ui_app_add_event_handler(&event_handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, NULL, NULL); + ui_app_add_event_handler(&event_handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, NULL, NULL); + ui_app_add_event_handler(&event_handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, NULL, NULL); + ui_app_add_event_handler(&event_handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, _language_changed, NULL); + ui_app_add_event_handler(&event_handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, NULL, NULL); + + if (setenv("ELM_ENGINE", "gl", 1) < 0) { + _E("setenv(ELM_ENGINE) is failed: %s", strerror(errno)); + } + + if (setenv("COREGL_FASTPATH", "1", 1) < 0) { + _E("setenv(COREGL_FASTPATH) is failed: %s", strerror(errno)); + } + + if (setenv("BUFMGR_LOCK_TYPE", "always", 0) < 0) { + _E("setenv(BUFMGR_LOCK_TYPE) is failed: %s", strerror(errno)); + } + + if (setenv("BUFMGR_MAP_CACHE", "true", 0) < 0) { + _E("setenv(BUFMGR_MAP_CACHE) is failed: %s", strerror(errno)); + } + + /* initial mode set */ + if (emergency_mode_enabled_get() == 1) { + clock_service_mode_set(CLOCK_SERVICE_MODE_EMERGENCY); + } + if (cooldown_mode_enabled_get() == 1) { + clock_service_mode_set(CLOCK_SERVICE_MODE_COOLDOWN); + } + + /* Launch the clock */ + if ((clock_pkgname = clock_service_clock_pkgname_get()) != NULL) { + clock_util_provider_launch(clock_pkgname, NULL, CLOCK_CONF_NONE); + free(clock_pkgname); + } + + ret = ui_app_main(argc, argv, &lifecycle_callback, &main_info); + CRITICAL_LOG_FINI(); + return ret; +} + + + +// End of a file diff --git a/home/src/mapbuf.c b/home/src/mapbuf.c new file mode 100755 index 0000000..ea0e32e --- /dev/null +++ b/home/src/mapbuf.c @@ -0,0 +1,250 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "mapbuf.h" + +#define PRIVATE_DATA_KEY_MAPBUF_ENABLED "p_mb_en" + + +HAPI Evas_Object *mapbuf_get_mapbuf(Evas_Object *obj) +{ + Evas_Object *mapbuf; + + if (obj == NULL) return NULL; + + mapbuf = evas_object_data_get(obj, DATA_KEY_MAPBUF); + if (!mapbuf && evas_object_data_get(obj, DATA_KEY_PAGE)) { + mapbuf = obj; + } + + return mapbuf; +} + + + +HAPI Evas_Object *mapbuf_get_page(Evas_Object *obj) +{ + Evas_Object *page; + + retv_if(NULL == obj, NULL); + + page = evas_object_data_get(obj, DATA_KEY_PAGE); + if (!page && evas_object_data_get(obj, DATA_KEY_MAPBUF)) { + page = obj; + } + + return page; +} + + + +HAPI void mapbuf_set_color(Evas_Object *obj, int a) +{ + Evas_Object *mapbuf = mapbuf_get_mapbuf(obj); + ret_if(NULL == mapbuf); + + int i; + for (i = 0; i < 4; i ++) { + elm_mapbuf_point_color_set(mapbuf, i, a, a, a, a); + } +} + + + +static void _move_pages(Evas_Object *page) +{ + ret_if(NULL == page); + + Evas_Object *scroller = evas_object_data_get(page, DATA_KEY_SCROLLER); + if (NULL == scroller) return; + + Evas_Coord x, y; + evas_object_geometry_get(scroller, &x, &y, NULL, NULL); + evas_object_move(page, x, y); +} + + + +HAPI w_home_error_e mapbuf_enable(Evas_Object *obj, int force) +{ + Evas_Object *mapbuf = mapbuf_get_mapbuf(obj); + retv_if(NULL == mapbuf, W_HOME_ERROR_FAIL); + + Evas_Object *page = mapbuf_get_page(obj); + retv_if(NULL == page, W_HOME_ERROR_FAIL); + + if (force) { + evas_object_data_set(mapbuf, PRIVATE_DATA_KEY_MAPBUF_ENABLED, (void*)0); + _move_pages(page); + elm_mapbuf_enabled_set(mapbuf, 1); + return W_HOME_ERROR_NONE; + } + + int cnt = (int)evas_object_data_get(mapbuf, PRIVATE_DATA_KEY_MAPBUF_ENABLED); + cnt ++; + evas_object_data_set(mapbuf, PRIVATE_DATA_KEY_MAPBUF_ENABLED, (void*)cnt); + + if (cnt == 0) { + if (!elm_mapbuf_enabled_get(mapbuf)) { + _move_pages(page); + elm_mapbuf_enabled_set(mapbuf, 1); + } + } + + return W_HOME_ERROR_NONE; +} + + + +HAPI int mapbuf_is_enabled(Evas_Object *obj) +{ + Evas_Object *mapbuf; + mapbuf = mapbuf_get_mapbuf(obj); + if (!mapbuf) { + return 0; + } + + return elm_mapbuf_enabled_get(mapbuf); +} + + + +HAPI int mapbuf_disable(Evas_Object *obj, int force) +{ + Evas_Object *mapbuf; + int cnt; + + mapbuf = mapbuf_get_mapbuf(obj); + if (!mapbuf) { + _D("Failed to get the mapbuf object"); + return W_HOME_ERROR_FAIL; + } + + if (force) { + evas_object_data_set(mapbuf, PRIVATE_DATA_KEY_MAPBUF_ENABLED, (void*)-1); + elm_mapbuf_enabled_set(mapbuf, 0); + return W_HOME_ERROR_NONE; + } + + cnt = (int)evas_object_data_get(mapbuf, PRIVATE_DATA_KEY_MAPBUF_ENABLED); + if (cnt == 0) { + if (elm_mapbuf_enabled_get(mapbuf)) { + elm_mapbuf_enabled_set(mapbuf, 0); + } + } + + cnt --; + evas_object_data_set(mapbuf, PRIVATE_DATA_KEY_MAPBUF_ENABLED, (void*)cnt); + + return W_HOME_ERROR_NONE; +} + + + +HAPI Evas_Object *mapbuf_bind(Evas_Object *box, Evas_Object *page) +{ + Evas_Object *mapbuf; + + mapbuf = elm_mapbuf_add(box); + if (!mapbuf) { + _E("Failed to create a new mapbuf"); + return NULL; + } + + elm_mapbuf_smooth_set(mapbuf, EINA_TRUE); + elm_mapbuf_alpha_set(mapbuf, EINA_TRUE); + elm_object_content_set(mapbuf, page); + + evas_object_data_set(page, DATA_KEY_MAPBUF, mapbuf); + evas_object_data_set(mapbuf, DATA_KEY_PAGE, page); + + evas_object_show(mapbuf); + + return mapbuf; +} + + + +HAPI Evas_Object *mapbuf_unbind(Evas_Object *obj) +{ + Evas_Object *page; + Evas_Object *mapbuf; + + page = evas_object_data_get(obj, DATA_KEY_PAGE); + if (page) { + mapbuf = obj; + } else { + page = obj; + mapbuf = evas_object_data_get(obj, DATA_KEY_MAPBUF); + } + + if (mapbuf) { + elm_mapbuf_enabled_set(mapbuf, 0); + evas_object_data_del(page, DATA_KEY_MAPBUF); + evas_object_data_del(mapbuf, DATA_KEY_PAGE); + evas_object_data_del(mapbuf, PRIVATE_DATA_KEY_MAPBUF_ENABLED); + page = elm_object_content_unset(mapbuf); + evas_object_del(mapbuf); + } + return page; +} + + + +HAPI int mapbuf_can_be_made(Evas_Object *obj) +{ + if (!main_get_info()->is_mapbuf) return 0; + + Evas_Object *page = evas_object_data_get(obj, DATA_KEY_PAGE); + if (!page) page = obj; + retv_if(NULL == page, 0); + + bool mapbuf_disabled_page = (bool) evas_object_data_get(page, DATA_KEY_MAPBUF_DISABLED_PAGE); + if (mapbuf_disabled_page) return 0; + + return 1; +} + + + +HAPI int mapbuf_can_be_on(Evas_Object *obj) +{ + if (!main_get_info()->is_mapbuf) return 0; + + Evas_Object *page = evas_object_data_get(obj, DATA_KEY_PAGE); + if (!page) page = obj; + retv_if(NULL == page, 0); + + bool mapbuf_disabled_page = (bool) evas_object_data_get(page, DATA_KEY_MAPBUF_DISABLED_PAGE); + if (mapbuf_disabled_page) return 0; + + return 1; +} + + + +// End of a file diff --git a/home/src/minictrl.c b/home/src/minictrl.c new file mode 100755 index 0000000..e6c451d --- /dev/null +++ b/home/src/minictrl.c @@ -0,0 +1,145 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "layout.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "page.h" +#include "minictrl.h" +#include "power_mode.h" +#include "clock_service.h" + +/*! + * functions to handle MC IPC & object + */ + +static void _minicontrol_monitor_cb(minicontrol_action_e action, + const char *name, + unsigned int width, + unsigned int height, + minicontrol_priority_e priority, + void *data) +{ + clock_h clock; + char tmp_name[4096]; + const char *org_name = NULL; + int pid; + + /** + * "name" always has PID as a string. + */ + + /* Remove '[', ']' from name or pid string */ + if (sscanf(name, "[%d]", &pid) != 1) { + if (sscanf(name, "[%[^]]]", tmp_name) == 1) { + org_name = name; + name = (const char *)tmp_name; + } else { + _E("Failed to extract name (%s)", name); + } + pid = -1; + } + _D("Extract pid(%d) or name(%s) from origin name(%s)", pid, name, org_name); + + clock = clock_manager_clock_get(CLOCK_ATTACHED); + if (!clock) { + _E("Try to get CANDIDATE"); + clock = clock_manager_clock_get(CLOCK_CANDIDATE); + } else if (pid > 0) { + if (clock->pid == pid) { + } else { + clock_h clock_candidate; + + clock_candidate = clock_manager_clock_get(CLOCK_CANDIDATE); + if (clock_candidate) { + if (clock_candidate->pid == pid) { + clock = clock_candidate; + } else { + _E("pid(%d) is wrong", pid); + clock = NULL; + } + } + } + } else { + if (clock->pkgname && !strstr(clock->pkgname, name)) { + clock_h clock_candidate; + + clock_candidate = clock_manager_clock_get(CLOCK_CANDIDATE); + if (clock_candidate) { + if (clock_candidate->pkgname && strstr(clock_candidate->pkgname, name)) { + clock = clock_candidate; + } else { + _E("pid(%d) is wrong", pid); + clock = NULL; + } + } + } else if (!clock->pkgname) { + clock_h clock_candidate; + + clock_candidate = clock_manager_clock_get(CLOCK_CANDIDATE); + if (clock_candidate) { + if (clock_candidate->pkgname && strstr(clock_candidate->pkgname, name)) { + clock = clock_candidate; + } else { + _E("pid(%d) is wrong", pid); + clock = NULL; + } + } + } + } + + if (clock) { + clock_inf_minictrl_event_hooker(action, clock->pid, org_name ? org_name : name, 1, width, height); + } else { + _E("Monitor: NO CLOCK?"); + } +} + +/*! + * constructor/deconstructor + */ +HAPI void minicontrol_init(void) +{ + int ret = minicontrol_monitor_start(_minicontrol_monitor_cb, NULL); + if (ret != MINICONTROL_ERROR_NONE) { + _E("Failed to attach minicontrol monitor:%d", ret); + } +} + +HAPI void minicontrol_fini(void) +{ + int ret = minicontrol_monitor_stop(); + if (ret != MINICONTROL_ERROR_NONE) { + _E("Failed to deattach minicontrol monitor:%d", ret); + } +} diff --git a/home/src/minictrl_manager.c b/home/src/minictrl_manager.c new file mode 100755 index 0000000..1702558 --- /dev/null +++ b/home/src/minictrl_manager.c @@ -0,0 +1,216 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "layout.h" +#include "page_info.h" +#include "page.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "minictrl.h" + +static struct _info { + Eina_List *item_list; +} s_info = { + .item_list = NULL, +}; + +/*! + * functions to handle linked-list for MC object + */ +static Minictrl_Entry *_minictrl_entry_new(const char *name, const char *service_name, int category, Evas_Object *view) +{ + Minictrl_Entry *entry = NULL; + retv_if(view == NULL, NULL); + retv_if(name == NULL, NULL); + retv_if(service_name == NULL, NULL); + + entry = (Minictrl_Entry *)calloc(1, sizeof(Minictrl_Entry)); + if (entry != NULL) { + entry->category = category; + entry->name = strdup(name); + entry->service_name = strdup(service_name); + entry->view = view; + } else { + _E("failed to allocate memory"); + } + + return entry; +} + +static void _minictrl_entry_del(Minictrl_Entry *item) +{ + free(item->name); + free(item->service_name); + free(item); +} + +static Minictrl_Entry *_minictrl_entry_get_by_category(int category) +{ + Minictrl_Entry *entry = NULL; + + if (category != MC_CATEGORY_CLOCK && + category != MC_CATEGORY_NOTIFICATION && + category != MC_CATEGORY_DASHBOARD) { + return NULL; + } + + Eina_List *l = NULL; + EINA_LIST_FOREACH(s_info.item_list, l, entry) { + if (entry != NULL) { + if (entry->category == category) { + return entry; + } + } + } + + _E("Failed to find entry with category:%d", category); + + return NULL; +} + +static Minictrl_Entry *_minictrl_entry_get_by_name(const char *name) +{ + Minictrl_Entry *entry = NULL; + retv_if(name == NULL, NULL); + + Eina_List *l = NULL; + EINA_LIST_FOREACH(s_info.item_list, l, entry) { + if (entry != NULL && entry->name != NULL) { + if (strcmp(entry->name, name) == 0) { + return entry; + } + } + } + + _E("Failed to find entry with name:%s", name); + + return NULL; +} + +static int _minictrl_entry_del_by_name(const char *name) +{ + int ret = 0; + + Minictrl_Entry *entry = _minictrl_entry_get_by_name(name); + if (entry != NULL) { + s_info.item_list = eina_list_remove(s_info.item_list, entry); + _minictrl_entry_del(entry); + ret = 1; + } + + return ret; +} + +static int _minictrl_entry_del_by_category(int category) +{ + int ret = 0; + + Minictrl_Entry *entry = _minictrl_entry_get_by_category(category); + if (entry != NULL) { + s_info.item_list = eina_list_remove(s_info.item_list, entry); + _minictrl_entry_del(entry); + ret = 1; + } + + return ret; +} + +HAPI void minictrl_manager_entry_add_with_data(const char *name, const char *service_name, int category, Evas_Object *view) +{ + /*! + * below category can't have multiple instance + */ + switch (category) { + case MC_CATEGORY_CLOCK: + case MC_CATEGORY_DASHBOARD: + if (_minictrl_entry_del_by_category(category) == 1) { + _E("Exceptional, Why multiple instance exist?"); + } + break; + } + + Minictrl_Entry *entry = _minictrl_entry_new(name, service_name, category, view); + if (entry != NULL) { + s_info.item_list = eina_list_append(s_info.item_list, entry); + } +} + +HAPI Evas_Object *minictrl_manager_view_get_by_name(const char *name) +{ + retv_if(name == NULL, NULL); + + Minictrl_Entry *entry = _minictrl_entry_get_by_name(name); + if (entry != NULL) { + return entry->view; + } + + return NULL; +} + +HAPI Evas_Object *minictrl_manager_view_get_by_category(int category) +{ + Minictrl_Entry *entry = _minictrl_entry_get_by_category(category); + if (entry != NULL) { + return entry->view; + } + + return NULL; +} + +HAPI Minictrl_Entry *minictrl_manager_entry_get_by_category(int category) +{ + return _minictrl_entry_get_by_category(category); +} + +HAPI Minictrl_Entry *minictrl_manager_entry_get_by_name(const char *name) +{ + return _minictrl_entry_get_by_name(name); +} + +HAPI int minictrl_manager_entry_del_by_category(int category) +{ + return _minictrl_entry_del_by_category(category); +} + +HAPI int minictrl_manager_entry_del_by_name(const char *name) +{ + return _minictrl_entry_del_by_name(name); +} + +HAPI void minictrl_manager_entry_foreach(Minictrl_Entry_Foreach_Cb cb, void *user_data) +{ + Minictrl_Entry *entry = NULL; + ret_if(cb == NULL); + + Eina_List *l = NULL; + EINA_LIST_FOREACH(s_info.item_list, l, entry) { + if (entry != NULL) { + cb(entry, user_data); + } + } +} diff --git a/home/src/minictrl_util.c b/home/src/minictrl_util.c new file mode 100755 index 0000000..86c0620 --- /dev/null +++ b/home/src/minictrl_util.c @@ -0,0 +1,153 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "layout.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "page.h" +#include "scroller.h" +#include "minictrl.h" + +HAPI char *minicontrol_appid_get_by_pid(int pid) +{ + int ret = AUL_R_OK; + char *dup_pkgname = NULL; + char pkgname[512 + 1] = { 0, }; + + ret = aul_app_get_pkgname_bypid(pid, pkgname, sizeof(pkgname)); + if (ret == AUL_R_OK) { + if (strlen(pkgname) <= 0) { + return NULL; + } + } + + dup_pkgname = strdup(pkgname); + if (!dup_pkgname) { + _E("Failed to dup string"); + } + + return dup_pkgname; +} + +HAPI void minicontrol_magic_set(Evas_Object *obj) { + if (obj != NULL) { + evas_object_data_set(obj, MINICTRL_DATA_KEY_MAGIC, (void *)MINICONTROL_MAGIC); + } +} + +HAPI int minicontrol_magic_get(Evas_Object *obj) { + if (obj != NULL) { + return (int)evas_object_data_get(obj, MINICTRL_DATA_KEY_MAGIC); + } + + return 0x0; +} + +HAPI void minicontrol_name_set(Evas_Object *obj, const char *name) { + char *name_old = NULL; + + name_old = evas_object_data_get(obj, MINICTRL_DATA_KEY_NAME); + if (name_old != NULL) { + evas_object_data_del(obj, MINICTRL_DATA_KEY_NAME); + free(name_old); + } + + if (obj != NULL && name != NULL) { + evas_object_data_set(obj, MINICTRL_DATA_KEY_NAME, (void *)strdup(name)); + } +} + +HAPI char *minicontrol_name_get(Evas_Object *obj) { + if (obj != NULL) { + return (char *)evas_object_data_get(obj, MINICTRL_DATA_KEY_NAME); + } + + return NULL; +} + +HAPI void minicontrol_category_set(Evas_Object *obj, int category) { + if (obj != NULL) { + evas_object_data_set(obj, MINICTRL_DATA_KEY_CATEGORY, (void *)category); + } +} + +HAPI int minicontrol_category_get(Evas_Object *obj) { + if (obj != NULL) { + return (int)evas_object_data_get(obj, MINICTRL_DATA_KEY_CATEGORY); + } + + return 0; +} + +HAPI void minicontrol_pid_set(Evas_Object *obj, int pid) { + if (obj != NULL) { + evas_object_data_set(obj, MINICTRL_DATA_KEY_PID, (void *)pid); + } +} + +HAPI int minicontrol_pid_get(Evas_Object *obj) { + if (obj != NULL) { + return (int)evas_object_data_get(obj, MINICTRL_DATA_KEY_PID); + } + + return 0; +} + +HAPI void minicontrol_visibility_set(Evas_Object *obj, int visibility) { + if (obj != NULL) { + evas_object_data_set(obj, MINICTRL_DATA_KEY_VISIBILITY, (void *)visibility); + } +} + +HAPI int minicontrol_visibility_get(Evas_Object *obj) { + if (obj != NULL) { + return (int)evas_object_data_get(obj, MINICTRL_DATA_KEY_VISIBILITY); + } + + return 0; +} + +HAPI int minicontrol_message_send(Evas_Object *minictrl, char *message) +{ + Ecore_Evas *ee = NULL; + Evas_Object *plug_img = NULL; + retv_if(message == NULL, 0); + retv_if(minictrl == NULL, 0); + + plug_img = elm_plug_image_object_get(minictrl); + retv_if(plug_img == NULL, 0); + ee = ecore_evas_object_ecore_evas_get(plug_img); + retv_if(ee == NULL, 0); + ecore_evas_msg_parent_send(ee, 0, 0, message, strlen(message) + 1); + + return 1; +} diff --git a/home/src/noti_broker.c b/home/src/noti_broker.c new file mode 100755 index 0000000..56667b9 --- /dev/null +++ b/home/src/noti_broker.c @@ -0,0 +1,665 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "layout.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "page.h" +#include "key.h" +#include "tutorial.h" +#include "noti_broker.h" +#include "apps/apps_main.h" +#include "critical_log.h" + +#define NOTI_BROKER_ERROR_NONE 0 +#define NOTI_BROKER_ERROR_FAIL -1 +#define NOTI_BROKER_PLUGIN_PATH "/usr/lib/libnoti-sample.so" + +/* + * Events, To notify events to plugin + */ +const int EVENT_SOURCE_SCROLLER = 0x00000000; +const int EVENT_SOURCE_VIEW = 0x00000001; +const int EVENT_SOURCE_EDITING = 0x00000002; + +const int EVENT_RET_NONE = 0x00000000; +const int EVENT_RET_CONTINUE = 0x00000004; +const int EVENT_RET_STOP = 0x00000008; + +#define EVENT_TYPE_ANIM 0x00000000 +const int EVENT_TYPE_ANIM_START = EVENT_TYPE_ANIM | 0x0; +const int EVENT_TYPE_ANIM_STOP = EVENT_TYPE_ANIM | 0x1; +#define EVENT_TYPE_DRAG 0x00001000 +const int EVENT_TYPE_DRAG_START = EVENT_TYPE_DRAG | 0x0; +const int EVENT_TYPE_DRAG_STOP = EVENT_TYPE_DRAG | 0x1; +#define EVENT_TYPE_EDGE 0x00002000 +const int EVENT_TYPE_EDGE_LEFT = EVENT_TYPE_EDGE | 0x0; +const int EVENT_TYPE_EDGE_RIGHT = EVENT_TYPE_EDGE | 0x1; +#define EVENT_TYPE_EDIT 0x00004000 +const int EVENT_TYPE_EDIT_START = EVENT_TYPE_EDIT | 0x0; +const int EVENT_TYPE_EDIT_STOP = EVENT_TYPE_EDIT | 0x1; +#define EVENT_TYPE_NOTI 0x00008000 +const int EVENT_TYPE_NOTI_DELETE = EVENT_TYPE_NOTI | 0x0; +const int EVENT_TYPE_NOTI_DELETE_ALL = EVENT_TYPE_NOTI | 0x1; +#define EVENT_TYPE_MOUSE 0x00010000 +const int EVENT_TYPE_MOUSE_DOWN = EVENT_TYPE_MOUSE | 0x0; +const int EVENT_TYPE_MOUSE_UP = EVENT_TYPE_MOUSE | 0x1; +#define EVENT_TYPE_SCROLL 0x00020000 +const int EVENT_TYPE_SCROLLING = EVENT_TYPE_SCROLL | 0x0; +#define EVENT_TYPE_KEY 0x00040000 +const int EVENT_TYPE_KEY_BACK = EVENT_TYPE_KEY | 0x0; +#define EVENT_TYPE_APPS 0x00080000 +const int EVENT_TYPE_APPS_SHOW = EVENT_TYPE_APPS | 0x0; +const int EVENT_TYPE_APPS_HIDE = EVENT_TYPE_APPS | 0x1; + +/* + * Categories, To discrete views + */ +const int CATEGORY_NOTIFICATION = 0x00000001; +const int CATEGORY_DASHBOARD = 0x00000002; + +/* + * Functions, To handle requests from plugin + */ +#define FUNCTION_DEF(X) const int X = E_##X +#define FUNCTION_VAL(X) E_##X +enum { + FUNCTION_VAL(FUNCTION_NONE) = 0x0, + FUNCTION_VAL(FUNCTION_PAGE_CREATE) = 0x00000001, + FUNCTION_VAL(FUNCTION_PAGE_DESTROY) = 0x00000002, + FUNCTION_VAL(FUNCTION_PAGE_ADD) = 0x00000004, + FUNCTION_VAL(FUNCTION_PAGE_REMOVE) = 0x00000008, + FUNCTION_VAL(FUNCTION_PAGE_SHOW) = 0x00000010, + FUNCTION_VAL(FUNCTION_PAGE_RELOAD) = 0x00000020, + FUNCTION_VAL(FUNCTION_PAGE_ITEM_SET) = 0x00000040, + FUNCTION_VAL(FUNCTION_PAGE_ITEM_GET) = 0x00000080, + FUNCTION_VAL(FUNCTION_SCROLLER_LEFT_PAGE_GET) = 0x00000100, + FUNCTION_VAL(FUNCTION_SCROLLER_RIGHT_PAGE_GET) = 0x00000200, + FUNCTION_VAL(FUNCTION_SCROLLER_FOCUSED_PAGE_GET) = 0x00000400, + FUNCTION_VAL(FUNCTION_WINDOW_ACTIVATE) = 0x00000800, + FUNCTION_VAL(FUNCTION_WINDOW_GET) = 0x00001000, + FUNCTION_VAL(FUNCTION_PAGE_SHOW_NO_DELAY) = 0x00002000, + FUNCTION_VAL(FUNCTION_PAGE_FOCUS_OBJECT_GET) = 0x00004000, + FUNCTION_VAL(FUNCTION_PAGE_REORDER) = 0x00008000, +}; +FUNCTION_DEF(FUNCTION_NONE); +FUNCTION_DEF(FUNCTION_PAGE_CREATE); +FUNCTION_DEF(FUNCTION_PAGE_DESTROY); +FUNCTION_DEF(FUNCTION_PAGE_ADD); +FUNCTION_DEF(FUNCTION_PAGE_REMOVE); +FUNCTION_DEF(FUNCTION_PAGE_SHOW); +FUNCTION_DEF(FUNCTION_PAGE_SHOW_NO_DELAY); +FUNCTION_DEF(FUNCTION_PAGE_RELOAD); +FUNCTION_DEF(FUNCTION_PAGE_REORDER); +FUNCTION_DEF(FUNCTION_PAGE_ITEM_SET); +FUNCTION_DEF(FUNCTION_PAGE_ITEM_GET); +FUNCTION_DEF(FUNCTION_PAGE_FOCUS_OBJECT_GET); +FUNCTION_DEF(FUNCTION_SCROLLER_LEFT_PAGE_GET); +FUNCTION_DEF(FUNCTION_SCROLLER_RIGHT_PAGE_GET); +FUNCTION_DEF(FUNCTION_SCROLLER_FOCUSED_PAGE_GET); +FUNCTION_DEF(FUNCTION_WINDOW_ACTIVATE); +FUNCTION_DEF(FUNCTION_WINDOW_GET); + + +struct broker_function { + int function; + int (*process) (const char *id, int category, void *view, void *data, void *result); +}; + +typedef struct _Noti_Broker_Plugin_Handler { + int (*init) (void *parent, void *data); + int (*fini) (void); + int (*event) (int source, int event, void *data); +} Noti_Broker_Plugin_Handler; + +static struct _s_info { + int is_loaded; + int is_initialized; + void *dl_handler; + Noti_Broker_Plugin_Handler handle; +} s_info = { + .is_loaded = 0, + .is_initialized = 0, + .dl_handler = NULL, + .handle = {NULL,NULL,NULL}, +}; + +static Evas_Object *_layout_get(void) +{ + Evas_Object *win = main_get_info()->win; + retv_if(win == NULL, NULL); + + return evas_object_data_get(win, DATA_KEY_LAYOUT); +} + +static Evas_Object *_scroller_get(void) +{ + Evas_Object *win = main_get_info()->win; + Evas_Object *layout = NULL; + Evas_Object *scroller = NULL; + + if (win != NULL) { + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + if (layout != NULL) { + scroller = elm_object_part_content_get(layout, "scroller"); + } + } + + return scroller; +} + +/*! + * To handle requests from plugin + */ +static int _handler_page_create(const char *id, int category, void *view, void *data, void *result) +{ + Evas_Object *page = NULL; + Evas_Object *scroller = _scroller_get(); + retv_if(scroller == NULL, NOTI_BROKER_ERROR_FAIL); + + page_removable_e removable = PAGE_REMOVABLE_ON; + + if (category == CATEGORY_DASHBOARD) { + removable = PAGE_REMOVABLE_OFF; + } + + page = page_create(scroller + , (Evas_Object*)view + , NULL, NULL + , main_get_info()->root_w, main_get_info()->root_h + , PAGE_CHANGEABLE_BG_OFF, removable); + if (page != NULL && result != NULL) { + *((Evas_Object **)result) = page; + page_set_effect(page, page_effect_none, page_effect_none); + + return NOTI_BROKER_ERROR_NONE; + } + + return NOTI_BROKER_ERROR_FAIL; +} + +static int _handler_page_destroy(const char *id, int category, void *view, void *data, void *result) +{ + Evas_Object *page = view; + + page_destroy(page); + + return NOTI_BROKER_ERROR_NONE; +} + +static int _handler_page_add(const char *id, int category, void *view, void *data, void *result) +{ + int ret = W_HOME_ERROR_NONE; + Evas_Object *page = view; + Evas_Object *scroller = _scroller_get();; + retv_if(page == NULL, NOTI_BROKER_ERROR_FAIL); + retv_if(scroller == NULL, NOTI_BROKER_ERROR_FAIL); + + if (category == CATEGORY_NOTIFICATION) { + ret = scroller_push_page(scroller, page, SCROLLER_PUSH_TYPE_CENTER_LEFT); + } else if (category == CATEGORY_DASHBOARD) { + ret = scroller_push_page(scroller, page, SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_LEFT); + } + + return (ret == W_HOME_ERROR_NONE) ? NOTI_BROKER_ERROR_NONE : NOTI_BROKER_ERROR_FAIL; +} + +static int _handler_page_remove(const char *id, int category, void *view, void *data, void *result) +{ + int ret = NOTI_BROKER_ERROR_NONE; + Evas_Object *page = view; + Evas_Object *scroller = _scroller_get(); + retv_if(page == NULL, NOTI_BROKER_ERROR_FAIL); + retv_if(scroller == NULL, NOTI_BROKER_ERROR_FAIL); + + if (scroller_pop_page(scroller, page) == NULL) { + _E("Failed to remove page(%p)", page); + ret = NOTI_BROKER_ERROR_FAIL; + } + evas_object_hide(page); + + return ret; +} + +static int _handler_page_show(const char *id, int category, void *view, void *data, void *result) +{ + Evas_Object *page = view; + Evas_Object *scroller = _scroller_get(); + retv_if(scroller == NULL, NOTI_BROKER_ERROR_FAIL); + + if (tutorial_is_exist() == 1) { + _E("tutorial is exist, can't bring the page"); + return NOTI_BROKER_ERROR_FAIL; + } + + scroller_bring_in_page(scroller, page, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_ANIMATOR); + + return NOTI_BROKER_ERROR_NONE; +} + +static int _handler_page_show_no_delay(const char *id, int category, void *view, void *data, void *result) +{ + Evas_Object *page = view; + Evas_Object *scroller = _scroller_get(); + retv_if(scroller == NULL, NOTI_BROKER_ERROR_FAIL); + + scroller_bring_in_page(scroller, page, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT_SHOW); + + return NOTI_BROKER_ERROR_NONE; +} + +static int _handler_page_reload(const char *id, int category, void *view, void *data, void *result) +{ + int ret = W_HOME_ERROR_NONE; + Evas_Object *page = view; + Evas_Object *scroller = _scroller_get(); + retv_if(scroller == NULL, NOTI_BROKER_ERROR_FAIL); + + if (category == CATEGORY_NOTIFICATION) { + ret = scroller_push_page(scroller, page, SCROLLER_PUSH_TYPE_CENTER_LEFT); + } else if (category == CATEGORY_DASHBOARD) { + if (scroller_pop_page(scroller, page) == NULL) { + _E("Failed to pop page(%p)", page); + } + ret = scroller_push_page(scroller, page, SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_LEFT); + } + + return (ret == W_HOME_ERROR_NONE) ? NOTI_BROKER_ERROR_NONE : NOTI_BROKER_ERROR_FAIL; +} + +static int _handler_page_reorder(const char *id, int category, void *view, void *data, void *result) +{ + Eina_List *list = data; + Evas_Object *scroller = _scroller_get(); + retv_if(list == NULL, NOTI_BROKER_ERROR_FAIL); + retv_if(scroller == NULL, NOTI_BROKER_ERROR_FAIL); + + scroller_reorder_with_list(scroller, list, PAGE_DIRECTION_LEFT); + + return NOTI_BROKER_ERROR_NONE; +} + +static int _handler_page_item_set(const char *id, int category, void *view, void *data, void *result) +{ + Evas_Object *page = view; + Evas_Object *item = data; + retv_if(page == NULL, NOTI_BROKER_ERROR_FAIL); + retv_if(item == NULL, NOTI_BROKER_ERROR_FAIL); + + page_set_item(page, item); + + return NOTI_BROKER_ERROR_NONE; +} + +static int _handler_page_item_get(const char *id, int category, void *view, void *data, void *result) +{ + Evas_Object *page = view; + retv_if(page == NULL, NOTI_BROKER_ERROR_FAIL); + retv_if(result == NULL, NOTI_BROKER_ERROR_FAIL); + + *((Evas_Object **)result) = page_get_item(page); + + return NOTI_BROKER_ERROR_NONE; +} + +static int _handler_page_focus_object_get(const char *id, int category, void *view, void *data, void *result) +{ + Evas_Object *page = view; + page_info_s *page_info = NULL; + retv_if(page == NULL, NOTI_BROKER_ERROR_FAIL); + retv_if(result == NULL, NOTI_BROKER_ERROR_FAIL); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(page_info == NULL, NOTI_BROKER_ERROR_FAIL); + *((Evas_Object **)result) = page_info->focus; + + return NOTI_BROKER_ERROR_NONE; +} + +static int _handler_scroller_left_page_get(const char *id, int category, void *view, void *data, void *result) +{ + Evas_Object *page = view; + Evas_Object *scroller = _scroller_get(); + retv_if(page == NULL, NOTI_BROKER_ERROR_FAIL); + retv_if(scroller == NULL, NOTI_BROKER_ERROR_FAIL); + retv_if(result == NULL, NOTI_BROKER_ERROR_FAIL); + + *((Evas_Object **)result) = scroller_get_left_page(scroller, page); + + return NOTI_BROKER_ERROR_NONE; +} + +static int _handler_scroller_right_page_get(const char *id, int category, void *view, void *data, void *result) +{ + Evas_Object *page = view; + Evas_Object *scroller = _scroller_get(); + retv_if(page == NULL, NOTI_BROKER_ERROR_FAIL); + retv_if(scroller == NULL, NOTI_BROKER_ERROR_FAIL); + retv_if(result == NULL, NOTI_BROKER_ERROR_FAIL); + + *((Evas_Object **)result) = scroller_get_right_page(scroller, page); + + return NOTI_BROKER_ERROR_NONE; +} + +static int _handler_scroller_focused_page_get(const char *id, int category, void *view, void *data, void *result) +{ + Evas_Object *scroller = _scroller_get(); + retv_if(scroller == NULL, NOTI_BROKER_ERROR_FAIL); + retv_if(result == NULL, NOTI_BROKER_ERROR_FAIL); + + *((Evas_Object **)result) = scroller_get_focused_page(scroller); + + return NOTI_BROKER_ERROR_NONE; +} + +static int _handler_window_activate(const char *id, int category, void *view, void *data, void *result) +{ + Evas_Object *win = main_get_info()->win; + retv_if(win == NULL, NOTI_BROKER_ERROR_FAIL); + + if (tutorial_is_exist() == 1) { + _E("tutorial is exist, can't activate home window"); + return NOTI_BROKER_ERROR_FAIL; + } + + elm_win_activate(win); + + if (apps_main_is_visible() == EINA_TRUE) { + apps_main_launch(APPS_LAUNCH_HIDE); + } + + return NOTI_BROKER_ERROR_NONE; +} + +static int _handler_window_get(const char *id, int category, void *view, void *data, void *result) +{ + retv_if(result == NULL, NOTI_BROKER_ERROR_FAIL); + + *((Evas_Object **)result) = main_get_info()->win; + + return NOTI_BROKER_ERROR_NONE; +} + +int noti_broker_request(int function, const char *id, int category, void *view, void *data, void *result) +{ + //do something + Evas_Object *scroller = _scroller_get(); + retv_if(scroller == NULL, -1); + + if (function == FUNCTION_PAGE_CREATE || + function == FUNCTION_PAGE_DESTROY || + function == FUNCTION_PAGE_ADD || + function == FUNCTION_PAGE_REMOVE || + function == FUNCTION_PAGE_SHOW || + function == FUNCTION_PAGE_RELOAD || + function == FUNCTION_PAGE_REORDER) { + _W("%x %s %d %p %p %p", function, id, category, view, data, result); + } + + static struct broker_function fn_table[] = { + { + .function = FUNCTION_VAL(FUNCTION_PAGE_CREATE), + .process = _handler_page_create, + }, + { + .function = FUNCTION_VAL(FUNCTION_PAGE_DESTROY), + .process = _handler_page_destroy, + }, + { + .function = FUNCTION_VAL(FUNCTION_PAGE_ADD), + .process = _handler_page_add, + }, + { + .function = FUNCTION_VAL(FUNCTION_PAGE_REMOVE), + .process = _handler_page_remove, + }, + { + .function = FUNCTION_VAL(FUNCTION_PAGE_SHOW), + .process = _handler_page_show, + }, + { + .function = FUNCTION_VAL(FUNCTION_PAGE_RELOAD), + .process = _handler_page_reload, + }, + { + .function = FUNCTION_VAL(FUNCTION_PAGE_REORDER), + .process = _handler_page_reorder, + }, + { + .function = FUNCTION_VAL(FUNCTION_PAGE_ITEM_SET), + .process = _handler_page_item_set, + }, + { + .function = FUNCTION_VAL(FUNCTION_PAGE_ITEM_GET), + .process = _handler_page_item_get, + }, + { + .function = FUNCTION_VAL(FUNCTION_SCROLLER_LEFT_PAGE_GET), + .process = _handler_scroller_left_page_get, + }, + { + .function = FUNCTION_VAL(FUNCTION_SCROLLER_RIGHT_PAGE_GET), + .process = _handler_scroller_right_page_get, + }, + { + .function = FUNCTION_VAL(FUNCTION_SCROLLER_FOCUSED_PAGE_GET), + .process = _handler_scroller_focused_page_get, + }, + { + .function = FUNCTION_VAL(FUNCTION_WINDOW_ACTIVATE), + .process = _handler_window_activate, + }, + { + .function = FUNCTION_VAL(FUNCTION_WINDOW_GET), + .process = _handler_window_get, + }, + { + .function = FUNCTION_VAL(FUNCTION_PAGE_SHOW_NO_DELAY), + .process = _handler_page_show_no_delay, + }, + { + .function = FUNCTION_VAL(FUNCTION_PAGE_FOCUS_OBJECT_GET), + .process = _handler_page_focus_object_get, + }, + { + .function = FUNCTION_VAL(FUNCTION_NONE), + .process = NULL, + }, + }; + + int i = 0; + int ret = NOTI_BROKER_ERROR_NONE; + for (i = 0; fn_table[i].function != FUNCTION_VAL(FUNCTION_NONE); i++) { + if (function == fn_table[i].function && fn_table[i].process != NULL) { + ret = fn_table[i].process(id, category, view, data, result); + } + } + + return ret; +} + +static void _scroller_evas_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + int event_type = (int)data; + + noti_broker_event_fire_to_plugin(EVENT_SOURCE_SCROLLER, event_type, event_info); +} + +static void _layout_smart_cb(void *data, Evas_Object *scroller, void *event_info) +{ + int event_type = (int)data; + + noti_broker_event_fire_to_plugin(EVENT_SOURCE_VIEW, event_type, event_info); +} + +static void _scroller_smart_cb(void *data, Evas_Object *scroller, void *event_info) +{ + int event_type = (int)data; + + noti_broker_event_fire_to_plugin(EVENT_SOURCE_SCROLLER, event_type, event_info); +} + +static key_cb_ret_e _noti_broker_back_cb(void *data) +{ + int ret = EVENT_RET_CONTINUE; + if (tutorial_is_exist() == 1) { + return KEY_CB_RET_CONTINUE; + } + + ret = noti_broker_event_fire_to_plugin(EVENT_SOURCE_VIEW, EVENT_TYPE_KEY_BACK, NULL); + if (ret == EVENT_RET_STOP) { + _W("stop back key execution"); + return KEY_CB_RET_STOP; + } + + _W("continue the back key execution"); + return KEY_CB_RET_CONTINUE; +} + +static void _evas_object_events_register(Evas_Object *layout, Evas_Object *scroller) +{ + evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_DOWN, _scroller_evas_cb, (void*)EVENT_TYPE_MOUSE_DOWN); + evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP, _scroller_evas_cb, (void*)EVENT_TYPE_MOUSE_UP); + + evas_object_smart_callback_add(scroller, "scroll,anim,start", _scroller_smart_cb, (void*)EVENT_TYPE_ANIM_START); + evas_object_smart_callback_add(scroller, "scroll,anim,stop", _scroller_smart_cb, (void*)EVENT_TYPE_ANIM_STOP); + evas_object_smart_callback_add(scroller, "scroll,drag,start", _scroller_smart_cb, (void*)EVENT_TYPE_DRAG_START); + evas_object_smart_callback_add(scroller, "scroll,drag,stop", _scroller_smart_cb, (void*)EVENT_TYPE_DRAG_STOP); + evas_object_smart_callback_add(scroller, "edge,left", _scroller_smart_cb, (void*)EVENT_TYPE_EDGE_LEFT); + evas_object_smart_callback_add(scroller, "edge,right", _scroller_smart_cb, (void*)EVENT_TYPE_EDGE_RIGHT); + evas_object_smart_callback_add(scroller, "scroll", _scroller_smart_cb, (void*)EVENT_TYPE_SCROLL); + + evas_object_smart_callback_add(layout, LAYOUT_SMART_SIGNAL_EDIT_ON, + _layout_smart_cb, (void *)EVENT_TYPE_EDIT_START); + evas_object_smart_callback_add(layout, LAYOUT_SMART_SIGNAL_EDIT_OFF, + _layout_smart_cb, (void *)EVENT_TYPE_EDIT_STOP); + + key_register_cb(KEY_TYPE_BACK, _noti_broker_back_cb, NULL); +} + +Eina_Bool _init_timeout_cb(void *data) +{ + if (s_info.is_initialized == 0) { + _W("noti broker isn't initialized"); + noti_broker_init(); + } + + return ECORE_CALLBACK_CANCEL; +} + +/*! + * constructor/deconstructor + */ +HAPI void noti_broker_load(void) +{ + char *errmsg = NULL; + void *dl_handle = NULL; + + _W("loading noti broker plugin start"); + dl_handle = dlopen(NOTI_BROKER_PLUGIN_PATH, RTLD_LOCAL | RTLD_NOW | RTLD_DEEPBIND); + _W("loading noti broker plugin done"); + + errmsg = dlerror(); + if (errmsg) { + _E("dlerror(can be ignored): %s\n", errmsg); + CRITICAL_LOG("dlopen failed: %s\n", errmsg); + } + ret_if(dl_handle == NULL); + + s_info.handle.init = dlsym(dl_handle, "noti_board_plugin_init"); + if (s_info.handle.init == NULL) { + _E("Failed to find noti_board_plugin_init"); + goto ERR; + } + + s_info.handle.fini = dlsym(dl_handle, "noti_board_plugin_fini"); + if (s_info.handle.fini == NULL) { + _E("Failed to find noti_board_plugin_fini"); + goto ERR; + } + + s_info.handle.event = dlsym(dl_handle, "noti_board_plugin_event"); + if (s_info.handle.event == NULL) { + _E("Failed to find noti_board_plugin_event"); + goto ERR; + } + + s_info.is_loaded = 1; + s_info.dl_handler = dl_handle; + + ecore_timer_add(10.0f, _init_timeout_cb, NULL); + + return ; + +ERR: + if (dl_handle) dlclose(dl_handle); +} + +HAPI void noti_broker_init(void) +{ + Evas_Object *layout = _layout_get(); + Evas_Object *scroller = _scroller_get(); + ret_if(s_info.is_loaded == 0); + ret_if(s_info.is_initialized == 1); + ret_if(layout == NULL); + ret_if(scroller == NULL); + + s_info.is_initialized = 1; + s_info.handle.init(scroller, scroller); + _evas_object_events_register(layout, scroller); +} + +HAPI void noti_broker_fini(void) +{ + ret_if(s_info.is_loaded == 0); + s_info.is_loaded = 0; + + s_info.handle.fini(); + s_info.is_initialized = 0; + + if (s_info.dl_handler != NULL) { + dlclose(s_info.dl_handler); + } +} + +/*! + * To notify events to plugin + */ +HAPI int noti_broker_event_fire_to_plugin(int source, int event, void *data) +{ + retv_if(s_info.is_loaded == 0, EVENT_RET_NONE); + + if (event == EVENT_TYPE_APPS_SHOW || + event == EVENT_TYPE_APPS_HIDE) { + _W("source:%d event:%x", source, event); + } + + return s_info.handle.event(source, event, data); +} diff --git a/home/src/notification/detail.c b/home/src/notification/detail.c new file mode 100644 index 0000000..a599219 --- /dev/null +++ b/home/src/notification/detail.c @@ -0,0 +1,583 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "conf.h" +#include "main.h" +#include "key.h" +#include "notification/detail.h" +#include "notification/time.h" + +#define NOTIFICATION_EDJ_FILE EDJEDIR"/noti.edj" +#define NOTIFICATION_DETAIL_GROUP "detail" +#define PRIVATE_DATA_KEY_WIN "pdkw" +#define PRIVATE_DATA_KEY_SCROLLER "pdks" +#define PRIVATE_DATA_KEY_RECT "pdkr" +#define PRIVATE_DATA_KEY_ITEM_INFO "pdkii" + + + +const char *const DETAIL_WINDOW_NAME = "Detail notification window"; + + + +struct { + Eina_List *list; + Eina_List *event_list; +} detail_s = { + .list = NULL, + .event_list = NULL, +}; + + + +typedef struct { + int type; + void (*event_cb)(void *, void *); + void *data; +} detail_event_s; + + + +HAPI int detail_register_event_cb(int type, void (*event_cb)(void *, void *), void *data) +{ + detail_event_s *detail_event_info = NULL; + + retv_if(!event_cb, W_HOME_ERROR_INVALID_PARAMETER); + + detail_event_info = calloc(1, sizeof(detail_event_s)); + retv_if(!detail_event_info, W_HOME_ERROR_OUT_OF_MEMORY); + + detail_event_info->type = type; + detail_event_info->event_cb = event_cb; + detail_event_info->data = data; + + detail_s.event_list = eina_list_append(detail_s.event_list, detail_event_info); + + return W_HOME_ERROR_NONE; +} + + + +HAPI void detail_unregister_event_cb(int type, void (*event_cb)(void *, void *)) +{ + detail_event_s *detail_event_info = NULL; + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + + ret_if(!event_cb); + + EINA_LIST_FOREACH_SAFE(detail_s.event_list, l, ln, detail_event_info) { + if (detail_event_info->type == type + && detail_event_info->event_cb == event_cb) + { + detail_s.event_list = eina_list_remove(detail_s.event_list, detail_event_info); + break; + } + } +} + + + +HAPI detail_item_s *detail_list_append_info(int priv_id, const char *pkgname, const char *icon, const char *title, const char *content, time_t time) +{ + detail_item_s *detail_item_info = NULL; + + retv_if(!pkgname, NULL); + + detail_item_info = calloc(1, sizeof(detail_item_s)); + retv_if(!detail_item_info, NULL); + + detail_item_info->priv_id = priv_id; + detail_item_info->pkgname = strdup(pkgname); + goto_if(!detail_item_info->pkgname, ERROR); + + if (icon) { + detail_item_info->icon = strdup(icon); + goto_if(!detail_item_info->icon, ERROR); + } + + if (title) { + detail_item_info->title = strdup(title); + goto_if(!detail_item_info->title, ERROR); + } + + if (content) { + detail_item_info->content = strdup(content); + goto_if(!detail_item_info->content, ERROR); + } + + detail_item_info->time = time; + + detail_s.list = eina_list_prepend(detail_s.list, detail_item_info); + + return detail_item_info; + +ERROR: + if (detail_item_info) { + free(detail_item_info->content); + free(detail_item_info->title); + free(detail_item_info->icon); + free(detail_item_info->pkgname); + free(detail_item_info); + } + + return NULL; +} + + + +HAPI detail_item_s *detail_list_remove_list(int priv_id) +{ + detail_item_s *detail_item_info = NULL; + const Eina_List *l = NULL; + + EINA_LIST_FOREACH(detail_s.list, l, detail_item_info) { + if (detail_item_info->priv_id == priv_id) { + detail_s.list = eina_list_remove(detail_s.list, detail_item_info); + return detail_item_info; + } + } + + return NULL; +} + + + +HAPI void detail_list_remove_info(int priv_id) +{ + detail_item_s *detail_item_info = NULL; + const Eina_List *l = NULL; + + EINA_LIST_FOREACH(detail_s.list, l, detail_item_info) { + if (detail_item_info->priv_id == priv_id) { + detail_s.list = eina_list_remove(detail_s.list, detail_item_info); + free(detail_item_info->content); + free(detail_item_info->title); + free(detail_item_info->icon); + free(detail_item_info->pkgname); + free(detail_item_info); + break; + } + } +} + + + +HAPI void detail_list_remove_pkgname(const char *pkgname) +{ + Eina_List *l = NULL; + Eina_List *ln = NULL; + detail_item_s *detail_item_info = NULL; + + EINA_LIST_FOREACH_SAFE(detail_s.list, l, ln, detail_item_info) { + continue_if(!detail_item_info->pkgname); + if (!strcmp(detail_item_info->pkgname, pkgname)) { + detail_s.list = eina_list_remove(detail_s.list, detail_item_info); + free(detail_item_info->content); + free(detail_item_info->title); + free(detail_item_info->icon); + free(detail_item_info->pkgname); + free(detail_item_info); + } + } +} + + + +HAPI detail_item_s *detail_list_get_info(int priv_id) +{ + const Eina_List *l = NULL; + detail_item_s *detail_item_info = NULL; + + EINA_LIST_FOREACH(detail_s.list, l, detail_item_info) { + if (detail_item_info->priv_id == priv_id) { + return detail_item_info; + } + } + + return NULL; +} + + + +HAPI int detail_list_count_pkgname(const char *pkgname) +{ + const Eina_List *l = NULL; + detail_item_s *detail_item_info = NULL; + int count = 0; + + EINA_LIST_FOREACH(detail_s.list, l, detail_item_info) { + continue_if(!detail_item_info->pkgname); + if (!strcmp(detail_item_info->pkgname, pkgname)) { + count++; + } + } + + return count; +} + + + +HAPI detail_item_s *detail_list_get_latest_info(const char *pkgname) +{ + detail_item_s *detail_item_info = NULL; + const Eina_List *l = NULL; + + EINA_LIST_FOREACH(detail_s.list, l, detail_item_info) { + continue_if(!detail_item_info->pkgname); + if (!strcmp(detail_item_info->pkgname, pkgname)) { + return detail_item_info; + } + } + + return NULL; +} + + + +static void _delete_detail_item_cb(void *data, Evas_Object *obj, void *event_info) +{ + detail_item_s *detail_item_info = data; + detail_event_s *detail_event_info = NULL; + Evas_Object *win = NULL; + const Eina_List *l = NULL; + int count = 0; + + ret_if(!detail_item_info); + ret_if(!detail_item_info->item); + + win = evas_object_data_get(detail_item_info->item, PRIVATE_DATA_KEY_WIN); + ret_if(!win); + + /* Cannot search the removed detail_item_info, anymore */ + detail_s.list = eina_list_remove(detail_s.list, detail_item_info); + + EINA_LIST_FOREACH(detail_s.event_list, l, detail_event_info) { + continue_if(!detail_event_info->event_cb); + if (DETAIL_EVENT_REMOVE_ITEM != detail_event_info->type) { + continue; + } + detail_event_info->event_cb(detail_item_info, detail_event_info->data); + } + + count = detail_list_count_pkgname(detail_item_info->pkgname); + if (count <= 0) { + detail_destroy_win(win); + } + + detail_destroy_item(detail_item_info); + detail_list_remove_info(detail_item_info->priv_id); +} + + + +HAPI void detail_destroy_item(detail_item_s *detail_item_info) +{ + Evas_Object *btn = NULL; + Evas_Object *icon = NULL; + Evas_Object *rect = NULL; + + ret_if(!detail_item_info); + ret_if(!detail_item_info->item); + + _D("Destroy a detail item[%s:%s:%s]", detail_item_info->icon, detail_item_info->title, detail_item_info->content); + + btn = elm_object_part_content_unset(detail_item_info->item, "del,btn"); + if (btn) evas_object_del(btn); + + icon = elm_object_part_content_unset(detail_item_info->item, "icon"); + if (icon) evas_object_del(icon); + + rect = elm_object_part_content_unset(detail_item_info->item, "bg"); + if (rect) evas_object_del(rect); + + evas_object_data_del(detail_item_info->item, PRIVATE_DATA_KEY_WIN); + evas_object_data_del(detail_item_info->item, PRIVATE_DATA_KEY_ITEM_INFO); + evas_object_del(detail_item_info->item); + detail_item_info->item = NULL; +} + + + +HAPI Evas_Object *detail_create_item(Evas_Object *parent, detail_item_s *detail_item_info) +{ + Evas_Object *item = NULL; + Evas_Object *rect = NULL; + Evas_Object *icon = NULL; + Evas_Object *button = NULL; + + char *text_time = NULL; + char buf[BUFSZE] = {0, }; + + Eina_Bool ret = EINA_FALSE; + + retv_if(!parent, NULL); + retv_if(!detail_item_info, NULL); + + item = elm_layout_add(parent); + retv_if(!item, NULL); + detail_item_info->item = item; + + ret = elm_layout_file_set(item, NOTIFICATION_EDJ_FILE, NOTIFICATION_DETAIL_GROUP); + goto_if(EINA_FALSE == ret, ERROR); + + evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_min_set(item, main_get_info()->root_w, main_get_info()->root_h); + evas_object_data_set(item, PRIVATE_DATA_KEY_WIN, evas_object_data_get(parent, PRIVATE_DATA_KEY_WIN)); + evas_object_data_set(item, PRIVATE_DATA_KEY_ITEM_INFO, detail_item_info); + evas_object_show(item); + + /* BG */ + rect = evas_object_rectangle_add(evas_object_evas_get(parent)); + goto_if(!rect, ERROR); + evas_object_size_hint_min_set(rect, main_get_info()->root_w, main_get_info()->root_h); + evas_object_color_set(rect, 0, 0, 0, 0); + evas_object_show(rect); + elm_object_part_content_set(item, "bg", rect); + + _D("Create a detail item[%s:%s:%s]", detail_item_info->icon, detail_item_info->title, detail_item_info->content); + + /* Icon */ + if (detail_item_info->icon) { + icon = elm_icon_add(item); + goto_if(!icon, ERROR); + goto_if(elm_image_file_set(icon, detail_item_info->icon, NULL) == EINA_FALSE, ERROR); + + elm_image_preload_disabled_set(icon, EINA_TRUE); + elm_image_smooth_set(icon, EINA_TRUE); + elm_image_no_scale_set(icon, EINA_FALSE); + + evas_object_size_hint_min_set(icon, NOTIFICATION_ICON_WIDTH, NOTIFICATION_ICON_HEIGHT); + evas_object_show(icon); + + elm_object_part_content_set(item, "icon", icon); + elm_object_signal_emit(item, "show,icon", "icon"); + } + + /* Title */ + if (detail_item_info->title) { + elm_object_part_text_set(item, "title", detail_item_info->title); + } + + /* Time */ + if (detail_item_info->time) { + notification_time_to_string(&detail_item_info->time, buf, sizeof(buf)); + text_time = elm_entry_utf8_to_markup(buf); + } + if (text_time) { + elm_object_part_text_set(item, "time", text_time); + free(text_time); + } + + /* Content */ + if (detail_item_info->content) { + elm_object_part_text_set(item, "text", detail_item_info->content); + } + + /* Delete Button */ + button = elm_button_add(item); + goto_if(!button, ERROR); + + elm_object_style_set(button, "focus"); + elm_object_part_content_set(item, "del,btn", button); + evas_object_smart_callback_add(button, "clicked", _delete_detail_item_cb, detail_item_info); + + return item; + +ERROR: + if (icon) evas_object_del(icon); + if (rect) evas_object_del(rect); + if (item) evas_object_del(item); + return NULL; +} + + + +HAPI void detail_destroy_scroller(Evas_Object *scroller) +{ + detail_item_s *detail_item_info = NULL; + Evas_Object *box = NULL; + Evas_Object *item = NULL; + Eina_List *list = NULL; + + ret_if(!scroller); + + box = elm_object_content_unset(scroller); + goto_if(!box, OUT); + evas_object_data_del(box, PRIVATE_DATA_KEY_WIN); + + list = elm_box_children_get(box); + goto_if(!list, OUT); + + EINA_LIST_FREE(list, item) { + detail_item_info = evas_object_data_get(item, PRIVATE_DATA_KEY_ITEM_INFO); + continue_if(!detail_item_info); + continue_if(!detail_item_info->item); + elm_box_unpack(box, detail_item_info->item); + detail_destroy_item(detail_item_info); + } + +OUT: + evas_object_del(box); + evas_object_del(scroller); +} + + + +HAPI Evas_Object *detail_create_scroller(Evas_Object *win, const char *pkgname) +{ + Evas_Object *scroller = NULL; + Evas_Object *box = NULL; + + const Eina_List *l = NULL; + detail_item_s *detail_item_info = NULL; + + retv_if(!win, NULL); + + _D("Create a detail scroller"); + + scroller = elm_scroller_add(win); + retv_if(!scroller, NULL); + + elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE); + elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_scroller_content_min_limit(scroller, EINA_FALSE, EINA_TRUE); + elm_scroller_single_direction_set(scroller, ELM_SCROLLER_SINGLE_DIRECTION_HARD); + + evas_object_move(scroller, 0, 0); + evas_object_resize(scroller, main_get_info()->root_w, main_get_info()->root_h); + evas_object_show(scroller); + + box = elm_box_add(scroller); + if (!box) { + _E("Cannot create box_layout"); + evas_object_del(scroller); + return NULL; + } + + elm_box_horizontal_set(box, EINA_FALSE); + /* The weight of box has to be set as EVAS_HINT_EXPAND on y-axis. */ + evas_object_size_hint_weight_set(box, 0.0, EVAS_HINT_EXPAND); + evas_object_data_set(box, PRIVATE_DATA_KEY_WIN, win); + evas_object_show(box); + + elm_object_content_set(scroller, box); + + EINA_LIST_FOREACH(detail_s.list, l, detail_item_info) { + continue_if(!detail_item_info->pkgname); + if (!strcmp(detail_item_info->pkgname, pkgname)) { + Evas_Object *item = detail_create_item(box, detail_item_info); + continue_if(!item); + elm_box_pack_start(box, item); + } + } + + return scroller; +} + + + +static key_cb_ret_e _detail_back_cb(void *data) +{ + Evas_Object *win = data; + + _D("Back key is released"); + + retv_if(!win, KEY_CB_RET_STOP); + detail_destroy_win(win); + + return KEY_CB_RET_STOP; +} + + + +HAPI void detail_destroy_win(Evas_Object *win) +{ + Evas_Object *rect = NULL; + Evas_Object *scroller = NULL; + + ret_if(!win); + + key_unregister_cb(KEY_TYPE_BACK, _detail_back_cb); + + rect = evas_object_data_del(win, PRIVATE_DATA_KEY_RECT); + if (rect) { + evas_object_del(rect); + } + + scroller = evas_object_data_del(win, PRIVATE_DATA_KEY_SCROLLER); + if (scroller) { + detail_destroy_scroller(scroller); + } + + evas_object_del(win); +} + + + +HAPI Evas_Object *detail_create_win(const char *pkgname) +{ + Evas_Object *win = NULL; + Evas_Object *rect = NULL; + Evas_Object *scroller = NULL; + + retv_if(!pkgname, NULL); + + _D("Create a detail window"); + + win = elm_win_add(NULL, "Detail Notification", ELM_WIN_BASIC); + retv_if(!win, NULL); + + elm_win_title_set(win, DETAIL_WINDOW_NAME); + elm_win_borderless_set(win, EINA_TRUE); + elm_win_alpha_set(win, EINA_FALSE); + elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_HIDE); + + evas_object_color_set(win, 0, 0, 0, 255); + evas_object_resize(win, main_get_info()->root_w, main_get_info()->root_h); + evas_object_move(win, 0, 0); + evas_object_show(win); + elm_win_activate(win); + + rect = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rect, 100, 0, 0, 100); + evas_object_move(rect, 0, 0); + evas_object_resize(rect, main_get_info()->root_w, main_get_info()->root_h); + evas_object_data_set(win, PRIVATE_DATA_KEY_RECT, rect); + elm_win_resize_object_add(win, rect); + evas_object_show(rect); + + scroller = detail_create_scroller(win, pkgname); + goto_if(!scroller, ERROR); + evas_object_data_set(win, PRIVATE_DATA_KEY_SCROLLER, scroller); + + key_register_cb(KEY_TYPE_BACK, _detail_back_cb, win); + + return win; + +ERROR: + evas_object_del(win); + return NULL; +} + + + diff --git a/home/src/notification/notification.c b/home/src/notification/notification.c new file mode 100644 index 0000000..d2cccc5 --- /dev/null +++ b/home/src/notification/notification.c @@ -0,0 +1,238 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "util.h" +#include "log.h" +#include "main.h" +#include "page_info.h" +#include "page.h" +#include "scroller_info.h" +#include "scroller.h" +#include "notification/detail.h" +#include "notification/notification.h" +#include "notification/simple.h" +#include "notification/summary.h" +#include "notification/time.h" + +#define PRIAVTE_DATA_KEY_PKGNAME "pdkpn" + + + +static void _remove_detail_item_event_cb(void *event_info, void *data) +{ + detail_item_s *detail_item_info = event_info; + Evas_Object *scroller = data; + Evas_Object *page = NULL; + Evas_Object *focused_page = NULL; + int count = 0; + + ret_if(!detail_item_info); + ret_if(!detail_item_info->pkgname); + + _D("Receive an event to remove an item"); + + focused_page = scroller_get_focused_page(scroller); + if (!focused_page) + _E("There is no focused page"); + + page = summary_get_page(scroller, detail_item_info->pkgname); + ret_if(!page); + + count = detail_list_count_pkgname(detail_item_info->pkgname); + if (count > 0) { + detail_item_s *latest_info = NULL; + Evas_Object *item = NULL; + + latest_info = detail_list_get_latest_info(detail_item_info->pkgname); + ret_if(!latest_info); + + item = page_get_item(page); + summary_destroy_item(item); + + _D("Refresh the summary item"); + + item = summary_create_item(page + , latest_info->pkgname + , latest_info->icon + , latest_info->title + , latest_info->content + , count + , &latest_info->time); + ret_if(!item); + page_set_item(page, item); + } else { + _D("Remove the summary page"); + summary_destroy_page(page); + } + + scroller_bring_in_page(scroller, focused_page, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_ANIMATOR); +} + + + +/* + * typedef enum _notification_op_data_type { + * NOTIFICATION_OP_DATA_MIN = 0, // Default + * NOTIFICATION_OP_DATA_TYPE, // Operation type + * NOTIFICATION_OP_DATA_PRIV_ID, // Private ID + * NOTIFICATION_OP_DATA_NOTI, // Notification handler + * NOTIFICATION_OP_DATA_EXTRA_INFO_1, // Reserved + * NOTIFICATION_OP_DATA_EXTRA_INFO_2, // Reserved + * NOTIFICATION_OP_DATA_MAX, // Max flag + * } notification_op_data_type_e; + */ +/* + * typedef enum _notification_op_type { + * NOTIFICATION_OP_NONE = 0, // Default + * NOTIFICATION_OP_INSERT = 1, // Notification inserted + * NOTIFICATION_OP_UPDATE, // Notification updated + * NOTIFICATION_OP_DELETE, // Notification deleted + * NOTIFICATION_OP_DELETE_ALL, // Notifications deleted + * NOTIFICATION_OP_REFRESH, // Deprecated + * NOTIFICATION_OP_SERVICE_READY, // Notification service is ready + * } notification_op_type_e; +*/ +static void _detailed_changed_cb(void *data, notification_type_e type, notification_op *op_list, int num_op) +{ + Evas_Object *win = NULL; + Evas_Object *scroller = data; + Evas_Object *page = NULL; + + detail_item_s *detail_item_info = NULL; + notification_h noti = NULL; + + char *domain = NULL; + char *dir = NULL; + char *pkgname = NULL; + char *icon = NULL; + char *title = NULL; + char *content = NULL; + + int op_type = 0; + int applist = NOTIFICATION_DISPLAY_APP_ALL; + int i = 0; + int count = 0; + int flags = 0; + int priv_id = 0; + time_t time; + + ret_if(!scroller); + ret_if(!op_list); + ret_if(num_op < 1); + + for (; i < num_op; i++) { + notification_op_get_data(op_list + i, NOTIFICATION_OP_DATA_PRIV_ID, &priv_id); + notification_op_get_data(op_list + i, NOTIFICATION_OP_DATA_TYPE, &op_type); + notification_op_get_data(op_list + i, NOTIFICATION_OP_DATA_NOTI, ¬i); + + /* FIXME : This API will be deprecated on Tizen 2.3 */ + notification_get_text_domain(noti, &domain, &dir); + if (!domain && !dir) { + bindtextdomain(domain, dir); + } + + notification_get_pkgname(noti, &pkgname); + notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, &icon); + notification_get_text(noti, NOTIFICATION_TEXT_TYPE_TITLE, &title); + notification_get_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT, &content); + notification_get_time_from_text(noti, NOTIFICATION_TEXT_TYPE_TITLE, &time); + + _D("Notification operation type : %d", op_type); + + switch (op_type) { + case NOTIFICATION_OP_INSERT: + case NOTIFICATION_OP_UPDATE: + detail_item_info = detail_list_append_info(priv_id, pkgname, icon, title, content, time); + break_if(!detail_item_info); + + count = detail_list_count_pkgname(pkgname); + if (count > 1) { + page = summary_get_page(scroller, pkgname); + if (page) summary_destroy_page(page); + } + page = summary_create_page(scroller, pkgname, icon, title, content, count, &time); + ret_if(!page); + scroller_push_page(scroller, page, SCROLLER_PUSH_TYPE_CENTER_LEFT); + + if (main_get_info()->state == APP_STATE_PAUSE) { + win = simple_create_win(icon, title); + if (!win) { + _E("cannot create a notification window"); + } + } + break; + case NOTIFICATION_OP_DELETE: + detail_item_info = detail_list_remove_list(priv_id); + break_if(!detail_item_info); + _remove_detail_item_event_cb(detail_item_info, scroller); + detail_list_remove_info(detail_item_info->priv_id); + break; + case NOTIFICATION_OP_DELETE_ALL: + _E("We don't support NOTIFICATION_OP_DELETE_ALL"); + break; + default: + _D("default case"); + break; + } + + notification_get_display_applist(noti, &applist); + if (applist & NOTIFICATION_DISPLAY_APP_TICKER) { + _D("App ticker is displayed"); + } + + notification_get_property(noti, &flags); + if (flags & NOTIFICATION_PROP_DISABLE_TICKERNOTI) { + _D("Disable ticker notifications"); + } + } + + return; +} + + + +HAPI int notification_init(Evas_Object *scroller) +{ + int ret = NOTIFICATION_ERROR_NONE; + + retv_if(!scroller, W_HOME_ERROR_INVALID_PARAMETER); + + ret = notification_register_detailed_changed_cb(_detailed_changed_cb, scroller); + retv_if(NOTIFICATION_ERROR_NONE != ret, W_HOME_ERROR_FAIL); + + notification_time_init(); + detail_register_event_cb(DETAIL_EVENT_REMOVE_ITEM, _remove_detail_item_event_cb, scroller); + + return W_HOME_ERROR_NONE; +} + + + +HAPI void notification_fini(Evas_Object *scroller) +{ + int ret = NOTIFICATION_ERROR_NONE; + + detail_unregister_event_cb(DETAIL_EVENT_REMOVE_ITEM, _remove_detail_item_event_cb); + notification_time_fini(); + + ret = notification_unregister_detailed_changed_cb(_detailed_changed_cb, scroller); + ret_if(NOTIFICATION_ERROR_NONE != ret); +} diff --git a/home/src/notification/simple.c b/home/src/notification/simple.c new file mode 100644 index 0000000..b3fc67e --- /dev/null +++ b/home/src/notification/simple.c @@ -0,0 +1,191 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "util.h" +#include "log.h" +#include "conf.h" +#include "main.h" + +#define NOTIFICATION_EDJ_FILE EDJEDIR"/noti.edj" +#define NOTIFICATION_SIMPLE_GROUP "simple" +#define PRIVATE_DATA_KEY_TIMER "pdkt" +#define PRIVATE_DATA_KEY_ITEM "pdki" +#define NOTIFICATION_SIMPLE_DESTROY_TIME (3.0f) + + + +HAPI void simple_destroy_item(Evas_Object *item) +{ + Evas_Object *btn = NULL; + Evas_Object *icon = NULL; + + btn = elm_object_part_content_unset(item, "del,btn"); + if (btn) evas_object_del(btn); + + icon = elm_object_part_content_unset(item, "icon"); + if (icon) evas_object_del(icon); + + evas_object_del(item); +} + + + +static void _delete_simple_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win = data; + Evas_Object *item = NULL; + + ret_if(!win); + + item = evas_object_data_get(win, PRIVATE_DATA_KEY_ITEM); + if (item) { + simple_destroy_item(item); + } +} + + + +HAPI Evas_Object *simple_create_item(Evas_Object *win, const char *icon_path, const char *title) +{ + Evas_Object *item = NULL; + Evas_Object *icon = NULL; + Evas_Object *button = NULL; + + Eina_Bool ret = EINA_FALSE; + + retv_if(!win, NULL); + + item = elm_layout_add(win); + retv_if(!item, NULL); + + ret = elm_layout_file_set(item, NOTIFICATION_EDJ_FILE, NOTIFICATION_SIMPLE_GROUP); + goto_if(EINA_FALSE == ret, ERROR); + + evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(item); + + /* Icon */ + if (icon_path) { + icon = elm_icon_add(item); + goto_if(!icon, ERROR); + goto_if(elm_image_file_set(icon, icon_path, NULL) == EINA_FALSE, ERROR); + + evas_object_size_hint_min_set(icon, NOTIFICATION_ICON_WIDTH, NOTIFICATION_ICON_HEIGHT); + elm_image_preload_disabled_set(icon, EINA_TRUE); + elm_image_smooth_set(icon, EINA_TRUE); + elm_image_no_scale_set(icon, EINA_FALSE); + elm_object_part_content_set(item, "icon", icon); + evas_object_show(icon); + elm_object_signal_emit(item, "show,icon", "icon"); + } + + /* Title */ + if (title) { + elm_object_part_text_set(item, "title", title); + } + + button = elm_button_add(item); + goto_if(!button, ERROR); + elm_object_style_set(button, "focus"); + elm_object_part_content_set(item, "del,btn", button); + evas_object_smart_callback_add(button, "clicked", _delete_simple_cb, win); + + return item; + +ERROR: + if (icon) evas_object_del(icon); + if (item) evas_object_del(item); + return NULL; +} + + + +HAPI void simple_destroy_win(Evas_Object *win) +{ + Evas_Object *item = NULL; + Ecore_Timer *timer = NULL; + + ret_if(!win); + + timer = evas_object_data_del(win, PRIVATE_DATA_KEY_TIMER); + if (timer) { + ecore_timer_del(timer); + } + + item = evas_object_data_del(win, PRIVATE_DATA_KEY_ITEM); + if (item) { + simple_destroy_item(item); + } + + evas_object_del(win); +} + + + +static Eina_Bool _delete_win_timer_cb(void *data) +{ + Evas_Object *win = data; + retv_if(!win, ECORE_CALLBACK_CANCEL); + simple_destroy_win(win); + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI Evas_Object *simple_create_win(const char *icon_path, const char *title) +{ + Evas_Object *win = NULL; + Evas_Object *item = NULL; + Ecore_Timer *timer = NULL; + + win = elm_win_add(NULL, "Notification", ELM_WIN_NOTIFICATION); + retv_if(!win, NULL); + + /* FIXME : We have to fix the height of this window */ + evas_object_resize(win, main_get_info()->root_w, main_get_info()->root_h / 2); + evas_object_move(win, 0, 0); + evas_object_show(win); + + elm_win_borderless_set(win, EINA_TRUE); + elm_win_alpha_set(win, EINA_FALSE); + elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_HIDE); + elm_win_activate(win); + + item = simple_create_item(win, icon_path, title); + goto_if(!item, ERROR); + + evas_object_data_set(win, PRIVATE_DATA_KEY_ITEM, item); + elm_win_resize_object_add(win, item); + + timer = ecore_timer_add(NOTIFICATION_SIMPLE_DESTROY_TIME, _delete_win_timer_cb, win); + if (timer) { + evas_object_data_set(win, PRIVATE_DATA_KEY_TIMER, timer); + } else { + _E("cannot add a timer"); + } + + return win; + +ERROR: + evas_object_del(win); + return NULL; +} + + + diff --git a/home/src/notification/summary.c b/home/src/notification/summary.c new file mode 100644 index 0000000..477790e --- /dev/null +++ b/home/src/notification/summary.c @@ -0,0 +1,277 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "util.h" +#include "log.h" +#include "conf.h" +#include "main.h" +#include "page_info.h" +#include "page.h" +#include "scroller_info.h" +#include "scroller.h" +#include "notification/detail.h" +#include "notification/time.h" + +#define NOTIFICATION_EDJ_FILE EDJEDIR"/noti.edj" +#define NOTIFICATION_SUMMARY_GROUP "summary" +#define PRIVATE_DATA_KEY_PKGNAME "pdkp" + + + +HAPI Evas_Object *summary_get_page(Evas_Object *scroller, const char *pkgname) +{ + Evas_Object *page = NULL; + char *tmp = NULL; + int idx = 0; + + retv_if(!scroller, NULL); + retv_if(!pkgname, NULL); + + do { + page = scroller_get_page_at(scroller, idx); + if (!page) break; + idx++; + + tmp = evas_object_data_get(page, PRIVATE_DATA_KEY_PKGNAME); + if (!tmp) break; + + if (!strcmp(tmp, pkgname)) { + return page; + } + } while (tmp); + + _D("There is no page for %s's summary", pkgname); + + return NULL; +} + + + +static void _launch_summary_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win = NULL; + Evas_Object *page = data; + char *pkgname = NULL; + + ret_if(!page); + + pkgname = evas_object_data_get(page, PRIVATE_DATA_KEY_PKGNAME); + ret_if(!pkgname); + + _D("Create a detail window"); + + win = detail_create_win(pkgname); + ret_if(!win); +} + + + +HAPI void summary_destroy_item(Evas_Object *item) +{ + Evas_Object *btn = NULL; + Evas_Object *icon = NULL; + Evas_Object *rect = NULL; + + ret_if(!item); + + btn = elm_object_part_content_unset(item, "del,btn"); + if (btn) evas_object_del(btn); + + btn = elm_object_part_content_unset(item, "launch,btn"); + if (btn) evas_object_del(btn); + + icon = elm_object_part_content_unset(item, "icon"); + if (icon) evas_object_del(icon); + + rect = elm_object_part_content_unset(item, "bg"); + if (rect) evas_object_del(rect); + + evas_object_del(item); +} + + + +HAPI void summary_destroy_page(Evas_Object *page) +{ + Evas_Object *item = NULL; + char *pkgname = NULL; + + ret_if(!page); + + item = page_get_item(page); + if (item) { + summary_destroy_item(item); + } + pkgname = evas_object_data_del(page, PRIVATE_DATA_KEY_PKGNAME); + free(pkgname); + + page_destroy(page); +} + + + +static void _delete_summary_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *page = data; + ret_if(!page); + _D("Destroy a summary page"); + summary_destroy_page(page); +} + + + +HAPI Evas_Object *summary_create_item(Evas_Object *page, const char *pkgname, const char *icon_path, const char *title, const char *content, int count, time_t *time) +{ + Evas_Object *item = NULL; + Evas_Object *rect = NULL; + Evas_Object *icon = NULL; + Evas_Object *launch_button = NULL; + Evas_Object *delete_button = NULL; + + char *text_time = NULL; + char buf[BUFSZE] = {0, }; + + Eina_Bool ret = EINA_FALSE; + + retv_if(!page, NULL); + retv_if(!pkgname, NULL); + + item = elm_layout_add(page); + retv_if(!item, NULL); + + ret = elm_layout_file_set(item, NOTIFICATION_EDJ_FILE, NOTIFICATION_SUMMARY_GROUP); + goto_if(EINA_FALSE == ret, ERROR); + + evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(item); + + /* BG */ + rect = evas_object_rectangle_add(evas_object_evas_get(page)); + goto_if(!rect, ERROR); + evas_object_size_hint_min_set(rect, main_get_info()->root_w, main_get_info()->root_h); + evas_object_color_set(rect, 0, 0, 0, 0); + evas_object_show(rect); + elm_object_part_content_set(item, "bg", rect); + + /* Icon */ + if (icon_path) { + icon = elm_icon_add(item); + goto_if(!icon, ERROR); + goto_if(elm_image_file_set(icon, icon_path, NULL) == EINA_FALSE, ERROR); + + elm_image_preload_disabled_set(icon, EINA_TRUE); + elm_image_smooth_set(icon, EINA_TRUE); + elm_image_no_scale_set(icon, EINA_FALSE); + + evas_object_size_hint_min_set(icon, NOTIFICATION_ICON_WIDTH, NOTIFICATION_ICON_HEIGHT); + evas_object_show(icon); + + elm_object_part_content_set(item, "icon", icon); + elm_object_signal_emit(item, "show,icon", "icon"); + } + + /* Title */ + if (title) { + elm_object_part_text_set(item, "title", title); + } + + /* Time */ + if (time) { + notification_time_to_string(time, buf, sizeof(buf)); + text_time = elm_entry_utf8_to_markup(buf); + } + if (text_time) { + elm_object_part_text_set(item, "time", text_time); + free(text_time); + } + + /* Content */ + if (content) { + elm_object_part_text_set(item, "text", content); + } + + /* Count */ + if (count) { + snprintf(buf, sizeof(buf), "%d", count); + elm_object_part_text_set(item, "count", buf); + } + + /* Launch Button */ + launch_button = elm_button_add(item); + goto_if(!launch_button, ERROR); + elm_object_style_set(launch_button, "focus"); + elm_object_part_content_set(item, "launch,btn", launch_button); + evas_object_smart_callback_add(launch_button, "clicked", _launch_summary_cb, page); + + /* Delete Button */ + delete_button = elm_button_add(item); + goto_if(!delete_button, ERROR); + elm_object_style_set(delete_button, "focus"); + elm_object_part_content_set(item, "del,btn", delete_button); + evas_object_smart_callback_add(delete_button, "clicked", _delete_summary_cb, page); + + return item; + +ERROR: + if (launch_button) evas_object_del(launch_button); + if (icon) evas_object_del(icon); + if (rect) evas_object_del(rect); + if (item) evas_object_del(item); + return NULL; +} + + + +HAPI Evas_Object *summary_create_page(Evas_Object *parent, const char *pkgname, const char *icon_path, const char *title, const char *content, int count, time_t *time) +{ + + Evas_Object *page = NULL; + Evas_Object *item = NULL; + + char *tmp = NULL; + + retv_if(!parent, NULL); + retv_if(!pkgname, NULL); + + page = page_create(parent + , NULL + , NULL + , NULL + , main_get_info()->root_w, main_get_info()->root_h + , PAGE_CHANGEABLE_BG_OFF, PAGE_REMOVABLE_OFF); + goto_if(!page, ERROR); + + tmp = strdup(pkgname); + goto_if(!tmp, ERROR); + + evas_object_data_set(page, PRIVATE_DATA_KEY_PKGNAME, tmp); + + item = summary_create_item(page, pkgname, icon_path, title, content, count, time); + goto_if(!item, ERROR); + + page_set_item(page, item); + + return page; + +ERROR: + if (page) page_destroy(page); + if (item) summary_destroy_item(item); + + return NULL; +} diff --git a/home/src/notification/time.c b/home/src/notification/time.c new file mode 100644 index 0000000..6f95757 --- /dev/null +++ b/home/src/notification/time.c @@ -0,0 +1,705 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "util.h" +#include "log.h" + +#define BUF_FORMATTER 64 + + + +static struct { + char *timezone; + char *locale; + + i18n_udatepg_h generator; + i18n_udate_format_h formatter_time; + i18n_udate_format_h formatter_ampm; + i18n_udate_format_h formatter_time_24; + i18n_udate_format_h formatter_date; + + int timeformat; + Eina_Bool is_pre; +} notification_time_s = { + .timezone = NULL, + .locale = NULL, + + .generator = NULL, + .formatter_time = NULL, + .formatter_ampm = NULL, + .formatter_time_24 = NULL, + .formatter_date = NULL, + + .timeformat = 0, + .is_pre = EINA_FALSE, +}; + + + +static char *_get_timezone(void) +{ + char *timezone = NULL; + + int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE, &timezone); + if (ret < 0) { + _E("fail to get the locale time zone value(%d)", ret); + } + + if (!timezone) { + _E("system settings fail to get value: time zone"); + } + _D("time zone : %s", timezone); + + return timezone; +} + + + +static char *_get_locale(void) +{ + char *locale = NULL; + int ret = -1; + + ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, &locale); + if (ret < 0) { + _E("fail to get the locale country value(%d)", ret); + return strdup("en_US"); + } + + if (!locale) { + _E("system settings fail to get value: region format"); + return strdup("en_US"); + } + _D("locale is %s", locale); + + return locale; +} + + + +static int _get_timeformat(void) +{ + bool val = false; + int ret = -1; + + ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, &val); + if (ret < 0) { + _E("fail to get the timeformat(%d)", ret); + } + + return val; +} + + + +static i18n_udatepg_h _get_generator(void) +{ + i18n_udatepg_h generator = NULL; + int status = I18N_ERROR_INVALID_PARAMETER; + + status = i18n_ulocale_set_default(NULL); + retv_if(status != I18N_ERROR_NONE, NULL); + + status = i18n_udatepg_create(notification_time_s.locale, &generator); + if (status != I18N_ERROR_NONE) { + _E("udatepg_creation is failed"); + return NULL; + } + + _D("Get a generator success"); + + return generator; +} + + + +static i18n_udate_format_h _get_time_formatter(void) +{ + i18n_uchar u_pattern[BUF_FORMATTER] = {0, }; + i18n_uchar u_timezone[BUF_FORMATTER] = {0, }; + i18n_uchar u_best_pattern[BUF_FORMATTER] = {0, }; + i18n_udate_format_h formatter = NULL; + + char a_best_pattern[BUF_FORMATTER] = {0, }; + char *a_best_pattern_fixed = NULL; + + int32_t u_best_pattern_capacity; + int32_t best_pattern_len; + int status = I18N_ERROR_INVALID_PARAMETER; + + /* only 12 format */ + if (!i18n_ustring_copy_ua_n(u_pattern, "h:mm", sizeof(u_pattern))) { + _E("ustring_copy() is failed."); + return NULL; + } + + u_best_pattern_capacity = + (int32_t) (sizeof(u_best_pattern) / sizeof((u_best_pattern)[0])); + + status = i18n_udatepg_get_best_pattern(notification_time_s.generator, u_pattern, i18n_ustring_get_length(u_pattern), + u_best_pattern, u_best_pattern_capacity, &best_pattern_len); + if (status != I18N_ERROR_NONE) { + _E("get best pattern() failed(%d)", status); + return NULL; + } + + /* remove am/pm of best pattern */ + retv_if(!i18n_ustring_copy_au(a_best_pattern, u_best_pattern), NULL); + _D("best pattern [%s]", a_best_pattern); + + a_best_pattern_fixed = strtok(a_best_pattern, "a"); + a_best_pattern_fixed = strtok(a_best_pattern_fixed, " "); + _D("best pattern fixed [%s]", a_best_pattern_fixed); + + if (a_best_pattern_fixed) { + /* exception - da_DK */ + if (strncmp(notification_time_s.locale, "da_DK", 5) == 0 + || strncmp(notification_time_s.locale, "mr_IN", 5) == 0){ + + char *a_best_pattern_changed = g_strndup("h:mm", 4); + _D("best pattern is changed [%s]", a_best_pattern_changed); + if (a_best_pattern_changed) { + i18n_ustring_copy_ua(u_best_pattern, a_best_pattern_changed); + g_free(a_best_pattern_changed); + } + } + else { + retv_if(!i18n_ustring_copy_ua(u_best_pattern, a_best_pattern_fixed), NULL); + } + } + + /* change char to UChar */ + retv_if(!i18n_ustring_copy_n(u_pattern, u_best_pattern, sizeof(u_pattern)), NULL); + + /* get formatter */ + i18n_ustring_copy_ua_n(u_timezone, notification_time_s.timezone, sizeof(u_timezone)); + status = i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, notification_time_s.locale, u_timezone, -1, + u_pattern, -1, &formatter); + if (!formatter) { + _E("time_create() is failed.%d", status); + + return NULL; + } + + _D("getting time formatter success"); + return formatter; +} + + + +static i18n_udate_format_h _get_time_formatter_24(void) +{ + i18n_uchar u_pattern[BUF_FORMATTER] = {0,}; + i18n_uchar u_timezone[BUF_FORMATTER] = {0,}; + i18n_uchar u_best_pattern[BUF_FORMATTER] = {0,}; + i18n_udate_format_h formatter = NULL; + + char a_best_pattern[BUF_FORMATTER] = {0.}; + char *a_best_pattern_fixed = NULL; + + int32_t u_best_pattern_capacity; + int32_t best_pattern_len; + int status = I18N_ERROR_INVALID_PARAMETER; + + /* only 12 format */ + if (!i18n_ustring_copy_ua_n(u_pattern, "H:mm", sizeof(u_pattern))) { + _E("ustring_copy() is failed."); + return NULL; + } + + u_best_pattern_capacity = + (int32_t) (sizeof(u_best_pattern) / sizeof((u_best_pattern)[0])); + + status = i18n_udatepg_get_best_pattern(notification_time_s.generator, u_pattern, i18n_ustring_get_length(u_pattern), + u_best_pattern, u_best_pattern_capacity, &best_pattern_len); + if (status != I18N_ERROR_NONE) { + _E("get best pattern() failed(%d)", status); + return NULL; + } + + /* remove am/pm of best pattern */ + retv_if(!i18n_ustring_copy_au(a_best_pattern, u_best_pattern), NULL); + _D("best pattern [%s]", a_best_pattern); + + a_best_pattern_fixed = strtok(a_best_pattern, "a"); + a_best_pattern_fixed = strtok(a_best_pattern_fixed, " "); + _D("best pattern fixed [%s]", a_best_pattern_fixed); + + if (a_best_pattern_fixed) { + /* exception - pt_BR(HH'h'mm), id_ID, da_DK */ + if (strncmp(a_best_pattern_fixed, "HH'h'mm", 7) == 0 + || strncmp(notification_time_s.locale, "id_ID", 5) == 0 + || strncmp(notification_time_s.locale, "da_DK", 5) == 0 + || strncmp(notification_time_s.locale, "mr_IN", 5) == 0) { + + char *a_best_pattern_changed = g_strndup("HH:mm", 5); + _D("best pattern is changed [%s]", a_best_pattern_changed); + if (a_best_pattern_changed) { + i18n_ustring_copy_ua(u_best_pattern, a_best_pattern_changed); + g_free(a_best_pattern_changed); + } + } + else { + retv_if(!i18n_ustring_copy_ua(u_best_pattern, a_best_pattern_fixed), NULL); + } + } + + /* change char to UChar */ + retv_if(!i18n_ustring_copy_n(u_pattern, u_best_pattern, sizeof(u_pattern)), NULL); + + /* get formatter */ + i18n_ustring_copy_ua_n(u_timezone, notification_time_s.timezone, sizeof(u_timezone)); + status = i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, notification_time_s.locale, u_timezone, -1, + u_pattern, -1, &formatter); + if (!formatter) { + _E("time24_create() is failed."); + return NULL; + } + + _D("Getting time formatter success"); + + return formatter; +} + + + +static i18n_udate_format_h _get_date_formatter(void) +{ + i18n_uchar u_timezone[BUF_FORMATTER] = {0, }; + i18n_uchar u_skeleton[BUF_FORMATTER] = {0, }; + i18n_uchar u_best_pattern[BUF_FORMATTER] = {0, }; + i18n_udate_format_h formatter = NULL; + + int32_t u_best_pattern_capacity; + int32_t skeleton_len = 0; + int status = I18N_ERROR_INVALID_PARAMETER; + + i18n_ustring_copy_ua_n(u_skeleton, "MMMEd", strlen("MMMEd")); + skeleton_len = i18n_ustring_get_length(u_skeleton); + + u_best_pattern_capacity = + (int32_t) (sizeof(u_best_pattern) / sizeof((u_best_pattern)[0])); + status = i18n_udatepg_get_best_pattern(notification_time_s.generator, u_skeleton, skeleton_len, + u_best_pattern, u_best_pattern_capacity, &status); + if (status != I18N_ERROR_NONE) { + _E("get best pattern() failed(%d)", status); + return NULL; + } + + if (strncmp(notification_time_s.locale, "fi_FI", 5) == 0) { + char *a_best_pattern_changed = g_strndup("ccc, d. MMM", 11); + _D("date formatter best pattern is changed [%s]", a_best_pattern_changed); + if (a_best_pattern_changed) { + i18n_ustring_copy_ua(u_best_pattern, a_best_pattern_changed); + g_free(a_best_pattern_changed); + } + } + + i18n_ustring_copy_ua_n(u_timezone, notification_time_s.timezone, sizeof(u_timezone)); + status = i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, notification_time_s.locale, u_timezone, -1, u_best_pattern, -1, &formatter); + + if (!formatter) { + _E("udate_create() is failed."); + return NULL; + } + + _D("getting date formatter success"); + + return formatter; + +} + + + +static i18n_udate_format_h _get_ampm_formatter(void) +{ + i18n_uchar u_timezone[BUF_FORMATTER] = {0, }; + i18n_uchar u_skeleton[BUF_FORMATTER] = {0, }; + i18n_uchar u_best_pattern[BUF_FORMATTER] = {0, }; + i18n_udate_format_h formatter = NULL; + + char a_best_pattern[BUF_FORMATTER] = {0, }; + int32_t skeleton_len = 0; + int32_t u_best_pattern_capacity; + int status = I18N_ERROR_INVALID_PARAMETER; + + i18n_ustring_copy_ua_n(u_skeleton, "hhmm", strlen("hhmm")); + skeleton_len = i18n_ustring_get_length(u_skeleton); + + u_best_pattern_capacity = + (int32_t) (sizeof(u_best_pattern) / sizeof((u_best_pattern)[0])); + status = i18n_udatepg_get_best_pattern(notification_time_s.generator, u_skeleton, skeleton_len, + u_best_pattern, u_best_pattern_capacity, &status); + if (status != I18N_ERROR_NONE) { + _E("get best pattern() failed(%d)", status); + return NULL; + } + + i18n_ustring_copy_au(a_best_pattern, u_best_pattern); + i18n_ustring_copy_ua(u_best_pattern, "a"); + + if (a_best_pattern[0] == 'a') { + notification_time_s.is_pre = EINA_TRUE; + } else { + notification_time_s.is_pre = EINA_FALSE; + } + + /* get formatter */ + i18n_ustring_copy_ua_n(u_timezone, notification_time_s.timezone, sizeof(u_timezone)); + status = i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, notification_time_s.locale, u_timezone, -1, u_best_pattern, -1, &formatter); + if (!formatter) { + _E("ampm_create() is failed."); + return NULL; + } + + _D("getting ampm formatter success"); + + return formatter; +} + + + +static void _set_formatters(void) +{ + notification_time_s.generator = _get_generator(); + notification_time_s.formatter_time = _get_time_formatter(); + notification_time_s.formatter_ampm = _get_ampm_formatter(); + notification_time_s.formatter_time_24 = _get_time_formatter_24(); + notification_time_s.formatter_date = _get_date_formatter(); +} + + + +static void _remove_formatters(void) +{ + if (notification_time_s.generator) { + i18n_udatepg_destroy(notification_time_s.generator); + notification_time_s.generator = NULL; + } + + if (notification_time_s.formatter_time) { + i18n_udate_destroy(notification_time_s.formatter_time); + notification_time_s.formatter_time = NULL; + } + + if (notification_time_s.formatter_ampm) { + i18n_udate_destroy(notification_time_s.formatter_ampm); + notification_time_s.formatter_ampm = NULL; + } + + if (notification_time_s.formatter_time_24) { + i18n_udate_destroy(notification_time_s.formatter_time_24); + notification_time_s.formatter_time_24 = NULL; + } + + if (notification_time_s.formatter_date) { + i18n_udate_destroy(notification_time_s.formatter_date); + notification_time_s.formatter_date = NULL; + } +} + + + +static i18n_uchar *_uastrcpy(const char *chars) +{ + int len = 0; + i18n_uchar *str = NULL; + + len = strlen(chars); + str = (i18n_uchar *) malloc(sizeof(i18n_uchar) *(len + 1)); + if (!str) { + return NULL; + } + + i18n_ustring_copy_ua(str, chars); + + return str; +} + + + +static void _set_timezone(const char *timezone) +{ + int ec = I18N_ERROR_NONE; + i18n_uchar *str = NULL; + + ret_if(!timezone); + + str = _uastrcpy(timezone); + + ec = i18n_ucalendar_set_default_timezone(str); + if (ec != I18N_ERROR_NONE) { + _E("ucal_setDefaultTimeZone() FAILED"); + } + free(str); +} + + + +static void _time_changed_cb(system_settings_key_e key, void *data) +{ + _D("System setting key : %d", key); + + if (notification_time_s.locale) { + free(notification_time_s.locale); + notification_time_s.locale = NULL; + } + notification_time_s.locale = _get_locale(); + + if (notification_time_s.timezone) { + free(notification_time_s.timezone); + notification_time_s.timezone = NULL; + } + notification_time_s.timezone = _get_timezone(); + notification_time_s.timeformat = _get_timeformat(); + _set_timezone(notification_time_s.timezone); + + _D("[%d][%s][%s]", notification_time_s.timeformat, notification_time_s.locale, notification_time_s.timezone); + + _remove_formatters(); + _set_formatters(); +} + + + +static void _register_settings(void) +{ + int ret = -1; + + ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_TIME_CHANGED, _time_changed_cb, NULL); + if (ret < 0) { + _E("Failed to set time changed cb.(%d)", ret); + } + + ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, _time_changed_cb, NULL); + if (ret < 0) { + _E("Failed to set language setting's changed cb.(%d)", ret); + } + notification_time_s.locale = _get_locale(); + + ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE, _time_changed_cb, NULL); + if (ret < 0) { + _E("Failed to set time zone change cb(%d)", ret); + } + notification_time_s.timezone = _get_timezone(); + + ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, _time_changed_cb, NULL); + if (ret < 0) { + _E("Failed to set time format about 24 hour changed cb(%d).", ret); + } + notification_time_s.timeformat = _get_timeformat(); +} + + + +static void _unregister_settings(void) +{ + int ret = -1; + + ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_TIME_CHANGED); + if (ret < 0) { + _E("Failed to unset time changed(%d).", ret); + } + + ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE); + if (ret < 0) { + _E("Failed to unset locale language(%d).", ret); + } + + ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE); + if (ret < 0) { + _E("Failed to unset time zone changed cb(%d).", ret); + } + + ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR); + if (ret < 0) { + _E("Failed to unset locale time format about 24 hour(%d).", ret); + } +} + + + +static int _get_date(time_t *intime, char *buf, int buf_len) +{ + i18n_udate u_time = (i18n_udate)(*intime) * 1000; + i18n_uchar u_formatted_str[BUF_FORMATTER] = {0, }; + int32_t u_formatted_str_capacity; + int32_t formatted_str_len = -1; + int status = I18N_ERROR_INVALID_PARAMETER; + + u_formatted_str_capacity = + (int32_t)(sizeof(u_formatted_str) / sizeof((u_formatted_str)[0])); + + status = i18n_udate_format_date(notification_time_s.formatter_date, u_time, u_formatted_str, u_formatted_str_capacity, NULL, &formatted_str_len); + if (status != I18N_ERROR_NONE) { + _E("udat_format() failed"); + return -1; + } + + if (formatted_str_len <= 0) { + _E("formatted_str_len is less than 0"); + } + + buf = i18n_ustring_copy_au_n(buf, u_formatted_str, (int32_t)buf_len); + _SD("date:(%d)[%s][%d]", formatted_str_len, buf, *intime); + + return 0; +} + + + +static int _get_ampm(time_t *intime, char *buf, int buf_len, int *ampm_len) +{ + i18n_udate u_time = (i18n_udate) (*intime) * 1000; + i18n_uchar u_formatted_str[BUF_FORMATTER] = {0,}; + int32_t u_formatted_str_capacity; + int32_t formatted_str_len = -1; + int status = I18N_ERROR_INVALID_PARAMETER; + + retv_if(!notification_time_s.formatter_ampm, -1); + + /* calculate formatted string capacity */ + u_formatted_str_capacity = + (int32_t)(sizeof(u_formatted_str) / sizeof((u_formatted_str)[0])); + + /* fomatting date using formatter */ + status = i18n_udate_format_date(notification_time_s.formatter_ampm, u_time, u_formatted_str, u_formatted_str_capacity, NULL, &formatted_str_len); + if (status != I18N_ERROR_NONE) { + _E("udat_format() failed"); + return -1; + } + + if (formatted_str_len <= 0) { + _E("formatted_str_len is less than 0"); + } + + + (*ampm_len) = i18n_ustring_get_length(u_formatted_str); + + buf = i18n_ustring_copy_au_n(buf, u_formatted_str, (int32_t)buf_len); + _SD("ampm:(%d)[%s][%d]", formatted_str_len, buf, *intime); + + return 0; +} + + + +static int _get_time(time_t *intime, char *buf, int buf_len, Eina_Bool is_time_24) +{ + i18n_udate u_time = (i18n_udate) (*intime) * 1000; + i18n_uchar u_formatted_str[BUF_FORMATTER] = {0,}; + int32_t u_formatted_str_capacity; + int32_t formatted_str_len = -1; + int status = I18N_ERROR_INVALID_PARAMETER; + + /* calculate formatted string capacity */ + u_formatted_str_capacity = + (int32_t)(sizeof(u_formatted_str) / sizeof((u_formatted_str)[0])); + + /* fomatting date using formatter */ + if (is_time_24) { + retv_if(notification_time_s.formatter_time_24 == NULL, -1); + status = i18n_udate_format_date(notification_time_s.formatter_time_24, u_time, u_formatted_str, u_formatted_str_capacity, NULL, &formatted_str_len); + } else { + retv_if(notification_time_s.formatter_time == NULL, -1); + status = i18n_udate_format_date(notification_time_s.formatter_time, u_time, u_formatted_str, u_formatted_str_capacity, NULL, &formatted_str_len); + } + if (status != I18N_ERROR_NONE) { + _E("udat_format() failed"); + return -1; + } + + if (formatted_str_len <= 0) + _E("formatted_str_len is less than 0"); + + buf = i18n_ustring_copy_au_n(buf, u_formatted_str, (int32_t)buf_len); + _SD("time:(%d)[%s][%d]", formatted_str_len, buf, *intime); + + return 0; +} + + + +w_home_error_e notification_time_to_string(time_t *time, char *string, int len) +{ + char utc_date[BUFSZE] = {0, }; + char utc_time[BUFSZE] = {0, }; + char utc_ampm[BUFSZE] = {0, }; + char *time_str = NULL; + + int ampm_length = 0; + Eina_Bool is_24hour = EINA_FALSE; + + retv_if(!string, W_HOME_ERROR_FAIL); + + _get_date(time, utc_date, sizeof(utc_date)); + if (notification_time_s.timeformat) { + _get_time(time, utc_time, sizeof(utc_time), EINA_TRUE); + is_24hour = EINA_TRUE; + } else { + _get_ampm(time, utc_ampm, sizeof(utc_ampm), &m_length); + _get_time(time, utc_time, sizeof(utc_time), EINA_FALSE); + is_24hour = EINA_FALSE; + } + + _D("utc_time=%s, utc_ampm=[%d]%s", utc_time, ampm_length, utc_ampm); + + if (is_24hour == EINA_TRUE){ + time_str = g_strdup(utc_time); + } else { + if (notification_time_s.is_pre == EINA_TRUE) { + time_str = g_strdup_printf("%s %s", utc_ampm, utc_time); + } else { + time_str = g_strdup_printf("%s %s", utc_time, utc_ampm); + } + } + _D("time_str=%s", time_str); + + strncpy(string, time_str, len); + string[len-1] = '\0'; + g_free(time_str); + + return W_HOME_ERROR_NONE; +} + + + +void notification_time_init(void) +{ + _register_settings(); + _set_formatters(); +} + + + +void notification_time_fini(void) +{ + _remove_formatters(); + _unregister_settings(); +} + + + diff --git a/home/src/page.c b/home/src/page.c new file mode 100644 index 0000000..1830a0d --- /dev/null +++ b/home/src/page.c @@ -0,0 +1,1046 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "util.h" +#include "conf.h" +#include "edit.h" +#include "edit_info.h" +#include "effect.h" +#include "layout.h" +#include "layout_info.h" +#include "log.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "page.h" +#include "scroller.h" +#include "index.h" +#include "bg.h" +#include "add-viewer_package.h" + +#define PRIVATE_DATA_KEY_PAGE_ACCESS_OBJECT "pg_pd_ao" +#define PRIVATE_DATA_KEY_PAGE_FOCUS_OBJECT "p_fo" +#define PRIVATE_DATA_KEY_PAGE_LEFT_EFFECT "p_le" +#define PRIVATE_DATA_KEY_PAGE_RIGHT_EFFECT "p_re" + + + +static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Object *page = obj; + page_info_s *page_info = NULL; + Evas_Coord x, y, w, h; + + ret_if(!page); + + evas_object_geometry_get(page, &x, &y, &w, &h); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + page_info->appended = EINA_TRUE; + _D("Page(%p) is appended into the scroller (%d:%d:%d:%d)", page, x, y, w, h); + + evas_object_event_callback_del(page, EVAS_CALLBACK_MOVE, _move_cb); +} + + + +static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ei = event_info; + Evas_Object *page = data; + + layout_info_s *layout_info = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + + int x = ei->output.x; + int y = ei->output.y; + + _D("Down (%p)(%d, %d)", page, x, y); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + layout_info = evas_object_data_get(page_info->layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + layout_info->pressed_page = page; + layout_info->pressed_item = page_info->item; + if (layout_info->pressed_page == scroller_info->plus_page) { + evas_object_data_set(layout_info->pressed_item, DATA_KEY_IS_LONGPRESS, (void *)0); + } +} + + + +static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Up *ei = event_info; + Evas_Object *page = data; + + layout_info_s *layout_info = NULL; + page_info_s *page_info = NULL; + + int x = ei->output.x; + int y = ei->output.y; + + _D("Up (%p)(%d, %d)", page, x, y); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + layout_info = evas_object_data_get(page_info->layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + layout_info->pressed_page = page; + layout_info->pressed_item = NULL; + + if (evas_object_data_get(page, DATA_KEY_PAGE_ONHOLD_COUNT)) { + evas_object_data_del(page, DATA_KEY_PAGE_ONHOLD_COUNT); + ei->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + _D("Event ON_HOLD flag set on a page(%p)", page); + } +} + + + +#if CIRCLE_TYPE +#define LINE_IMAGE_DIR IMAGEDIR"/widget_circle_bg_stroke.png" +#else +#define LINE_IMAGE_DIR IMAGEDIR"/b_home_screen_widget_line.png" +#endif +static Evas_Object *_create_page_line(Evas_Object *page_inner) +{ + Evas_Object *image = NULL; + Evas_Object *box = NULL; + int ret; + + image = evas_object_image_filled_add(main_get_info()->e); + retv_if(!image, NULL); + + evas_object_image_smooth_scale_set(image, EINA_TRUE); + evas_object_image_load_size_set(image, ITEM_EDIT_LINE_WIDTH, ITEM_EDIT_LINE_HEIGHT); + evas_object_image_file_set(image, LINE_IMAGE_DIR, NULL); + + ret = evas_object_image_load_error_get(image); + goto_if (EVAS_LOAD_ERROR_NONE != ret, ERROR); + + evas_object_image_fill_set(image, 0, 0, ITEM_EDIT_LINE_WIDTH, ITEM_EDIT_LINE_HEIGHT); + evas_object_image_border_set(image, 9, 9, 9, 9); + + evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(image, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(image); + + box = elm_box_add(page_inner); + goto_if(!box, ERROR); + + evas_object_size_hint_min_set(image, ITEM_EDIT_LINE_WIDTH+2, ITEM_EDIT_LINE_HEIGHT+2); + evas_object_size_hint_max_set(image, ITEM_EDIT_LINE_WIDTH+2, ITEM_EDIT_LINE_HEIGHT+2); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + + elm_box_pack_end(box, image); + + elm_object_part_content_set(page_inner, "line", box); + + return box; + +ERROR: + evas_object_del(image); + return NULL; +} + + + +static void _destroy_page_line(Evas_Object *page) +{ + Evas_Object *image = NULL; + Evas_Object *box = NULL; + Eina_List *list = NULL; + + ret_if(!page); + box = elm_object_part_content_get(page, "line"); + ret_if(!box); + + list = elm_box_children_get(box); + if (!list) { + evas_object_del(box); + return; + } + + EINA_LIST_FREE(list, image) { + evas_object_del(image); + } + evas_object_del(box); +} + + + +HAPI void page_destroy(Evas_Object *page) +{ + page_info_s *page_info = NULL; + + ret_if(!page); + + page_info = evas_object_data_del(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + _destroy_page_line(page_info->page_inner); + + evas_object_del(page_info->focus); + evas_object_del(page_info->page_inner_area); + evas_object_del(page_info->page_inner_bg); + + evas_object_data_del(page_info->page_inner, PRIVATE_DATA_KEY_PAGE_ACCESS_OBJECT); + evas_object_data_del(page_info->page_inner, DATA_KEY_PAGE_INFO); + evas_object_del(page_info->page_inner); + evas_object_del(page_info->page_rect); + + evas_object_data_del(page, DATA_KEY_EVENT_UPPER_IS_ON); + + free(page_info->id); + free(page_info->subid); + free(page_info->title); + free(page_info); + evas_object_del(page); +} + + + +static char *_access_page_num_cb(void *data, Evas_Object *obj) +{ + Evas_Object *scroller = data; + Evas_Object *page = NULL; + page_info_s *page_info = NULL; + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + int count = 0; + int cur = 0; + char number[BUFSZE]; + char *tmp; + + retv_if(NULL == scroller, NULL); + + page = scroller_get_focused_page(scroller); + retv_if(!page, NULL); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + if (PAGE_DIRECTION_CENTER == page_info->direction) { + _D("This page is the center page"); + return NULL; + } + + if (widget_viewer_evas_is_widget(page_get_item(page)) == 1) { + if (page_info->need_to_read == EINA_FALSE) { + return NULL; + } + + if (page_info->need_to_unhighlight == EINA_TRUE) { + return NULL; + } + + if (!widget_viewer_evas_is_faulted(page_info->item)) { + page_info->need_to_read = EINA_FALSE; + } + } + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, NULL); + + count = eina_list_count(list); + cur = scroller_seek_page_position(scroller, page) + 1; + + snprintf(number, sizeof(number), _("IDS_AT_BODY_PAGE_P1SD_OF_P2SD_T_TTS"), cur, count); + + tmp = strdup(number); + if (!tmp) return NULL; + return tmp; +} + + + +static char *_access_plus_button_name_cb(void *data, Evas_Object *obj) +{ + char *tmp; + + tmp = strdup(_("IDS_HS_BODY_ADD_WIDGET")); + retv_if(!tmp, NULL); + return tmp; +} + + + +#define PAGE_EDJE_FILE EDJEDIR"/page.edj" +HAPI Evas_Object *page_create(Evas_Object *scroller + , Evas_Object *item + , const char *id + , const char *subid + , int width, int height + , page_changeable_bg_e changeable_bg + , page_removable_e removable) +{ + Evas_Object *page = NULL; + Evas_Object *focus = NULL; + Evas_Object *page_rect = NULL; + Evas_Object *page_inner = NULL; + Evas_Object *page_inner_area = NULL; + Evas_Object *page_inner_bg = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + + retv_if(!scroller, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + page = elm_layout_add(scroller); + retv_if(!page, NULL); + elm_layout_file_set(page, PAGE_EDJE_FILE, "page"); + /* Do not have weight for unpacking from elm_box */ + evas_object_size_hint_weight_set(page, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_min_set(page, width, height); + evas_object_move(page, -10000, -10000); + evas_object_show(page); + evas_object_event_callback_add(page, EVAS_CALLBACK_MOVE, _move_cb, NULL); + + page_info = calloc(1, sizeof(page_info_s)); + if (!page_info) { + _E("Cannot calloc for page_info"); + evas_object_del(page); + return NULL; + } + evas_object_data_set(page, DATA_KEY_PAGE_INFO, page_info); + evas_object_data_set(page, DATA_KEY_EVENT_UPPER_IS_ON, (void *) 1); + + page_rect = evas_object_rectangle_add(main_get_info()->e); + goto_if(!page_rect, ERROR); + evas_object_size_hint_min_set(page_rect, width, height); + evas_object_show(page_rect); + elm_object_part_content_set(page, "bg", page_rect); + evas_object_color_set(page_rect, 0, 0, 0, 0); + + page_inner = elm_layout_add(scroller); + goto_if(NULL == page_inner, ERROR); + elm_layout_file_set(page_inner, PAGE_EDJE_FILE, "page_inner"); + evas_object_size_hint_weight_set(page_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_repeat_events_set(page_inner, EINA_TRUE); + evas_object_show(page_inner); + elm_object_part_content_set(page, "inner", page_inner); + evas_object_event_callback_add(page_inner, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, page); + evas_object_event_callback_add(page_inner, EVAS_CALLBACK_MOUSE_UP, _up_cb, page); + evas_object_data_set(page_inner, DATA_KEY_PAGE_INFO, page_info); + + page_inner_area = evas_object_rectangle_add(main_get_info()->e); + goto_if(!page_inner_area, ERROR); + evas_object_size_hint_min_set(page_inner_area, width, height); + evas_object_resize(page_inner_area, width, height); + evas_object_color_set(page_inner_area, 0, 0, 0, 0); + evas_object_repeat_events_set(page_inner_area, EINA_TRUE); + evas_object_show(page_inner_area); + elm_object_part_content_set(page_inner, "area", page_inner_area); + + page_inner_bg = evas_object_rectangle_add(main_get_info()->e); + goto_if(!page_inner_bg, ERROR); + evas_object_size_hint_weight_set(page_inner_bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_color_set(page_inner_bg, 0, 0, 0, 0); + evas_object_repeat_events_set(page_inner_bg, EINA_TRUE); + evas_object_show(page_inner_bg); + elm_object_part_content_set(page_inner, "bg", page_inner_bg); + + if (item) { + elm_object_part_content_set(page_inner, "item", item); + } + + if (!_create_page_line(page_inner)) { + _E("cannot create line"); + } + + if (id) { + page_info->id = strdup(id); + if (!page_info->id) { + _E("Critical, cannot strdup for id"); + } + } + + if (subid) { + page_info->subid = strdup(subid); + if (!page_info->subid) { + _E("Critical, cannot strdup for subid"); + } + } + + if (changeable_bg) { + bg_register_object(page_inner); + } + + evas_object_data_set(page_inner, PRIVATE_DATA_KEY_PAGE_ACCESS_OBJECT, NULL); + + focus = elm_button_add(page_inner); + retv_if(NULL == focus, NULL); + + elm_object_style_set(focus, "focus"); + elm_object_part_content_set(page_inner, "focus", focus); + + elm_access_info_cb_set(focus, ELM_ACCESS_TYPE, NULL, NULL); + elm_access_info_cb_set(focus, ELM_ACCESS_STATE, _access_page_num_cb, scroller); + evas_object_size_hint_weight_set(focus, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_focus_allow_set(focus, EINA_TRUE); + + page_info->width = width; + page_info->height = height; + + page_info->layout = scroller_info->layout; + page_info->scroller = scroller; + page_info->page = page; + page_info->page_rect = page_rect; + page_info->page_inner = page_inner; + page_info->page_inner_area = page_inner_area; + page_info->page_inner_bg = page_inner_bg; + page_info->item = item; + page_info->removable = removable; + page_info->focus = focus; + page_info->layout_longpress = 1; + page_info->appended = EINA_FALSE; + page_info->need_to_read = EINA_FALSE; + page_info->highlighted = EINA_FALSE; + + return page; + +ERROR: + page_destroy(page); + return NULL; +} + + + +static void _plus_item_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Evas_Object *layout = data; + layout_info_s *layout_info = NULL; + + ret_if(!layout); + + _D("clicked plus page"); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + if (evas_object_data_get(obj, DATA_KEY_IS_LONGPRESS)) return; + + if (layout_info->pressed_item) { + _D("There is already a pressed item"); + widget_viewer_evas_feed_mouse_up_event(layout_info->pressed_item); + } + + if (!edit_create_add_viewer(layout)) _E("Cannot add the add-viewer"); + + effect_play_sound(); +} + + + +static void _plus_item_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Evas_Object *page = data; + page_info_s *page_info = NULL; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->item); + + elm_object_signal_emit(page_info->item, "press", "plus"); +} + + + +static void _plus_item_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Evas_Object *page = data; + page_info_s *page_info = NULL; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->item); + + elm_object_signal_emit(page_info->item, "release", "plus"); +} + + + +#define PLUS_ITEM_EDJ EDJEDIR"/page.edj" +#define PLUS_ITEM_GROUP "plus_item" +HAPI Evas_Object *page_create_plus_page(Evas_Object *scroller) +{ + Evas_Object *page = NULL; + Evas_Object *plus_item = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + Eina_Bool ret; + + retv_if(!scroller, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + retv_if(scroller_info->plus_page, NULL); + + plus_item = elm_layout_add(scroller); + retv_if(!plus_item, NULL); + + ret = elm_layout_file_set(plus_item, PLUS_ITEM_EDJ, PLUS_ITEM_GROUP); + if (EINA_FALSE == ret) { + _E("cannot set the file into the layout"); + evas_object_del(plus_item); + return NULL; + } + evas_object_size_hint_weight_set(plus_item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(plus_item, 0.5, 0.5); + evas_object_repeat_events_set(plus_item, EINA_TRUE); + evas_object_show(plus_item); + evas_object_data_set(plus_item, DATA_KEY_IS_LONGPRESS, (void *)0); +#if !CIRCLE_TYPE + elm_object_signal_emit(plus_item, "emul,normal", "plus"); +#endif + + page = page_create(scroller, plus_item, NULL, NULL, scroller_info->page_width, scroller_info->page_height, PAGE_CHANGEABLE_BG_OFF, PAGE_REMOVABLE_OFF); + if (!page) { + _E("Cannot create the page"); + evas_object_del(plus_item); + return NULL; + } + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + goto_if(!page_info, ERROR); + page_info->layout_longpress = 0; + + elm_object_signal_emit(page_info->page_inner, "select", "cover"); + elm_object_signal_emit(page_info->page_inner, "show", "line,widget"); + + elm_access_info_cb_set(page_info->focus, ELM_ACCESS_INFO, _access_plus_button_name_cb, NULL); + //evas_object_smart_callback_add(page_info->focus, "clicked", _plus_item_clicked_cb, scroller_info->layout); + scroller_info->plus_page = page; + + elm_object_signal_emit(plus_item, "show,widget", "plus_item"); + elm_object_signal_callback_add(plus_item, "down", "plus_item", _plus_item_down_cb, page); + elm_object_signal_callback_add(plus_item, "up", "plus_item", _plus_item_up_cb, page); + elm_object_signal_callback_add(plus_item, "click", "plus_item", _plus_item_clicked_cb, page_info->layout); + + return page; + +ERROR: + evas_object_del(page); + + return NULL; +} + + + +HAPI void page_destroy_plus_page(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + page_info = evas_object_data_get(scroller_info->plus_page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + evas_object_data_del(page_info->item, DATA_KEY_IS_LONGPRESS); + + evas_object_del(page_info->item); + page_destroy(scroller_info->plus_page); + + scroller_info->plus_page = NULL; +} + + + +HAPI void page_arrange_plus_page(Evas_Object *scroller, int toast_popup) +{ + scroller_info_s *scroller_info = NULL; + int count = 0; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + count = scroller_count_direction(scroller, PAGE_DIRECTION_RIGHT); + if (count > MAX_WIDGET) { + if (scroller_info->plus_page) { + char text[TEXT_LEN] = {0, }; + char *count_str = NULL; + + scroller_pop_page(scroller, scroller_info->plus_page); + page_destroy_plus_page(scroller); + + if (toast_popup) { + count_str = edit_get_count_str_from_icu(MAX_WIDGET); + if (!count_str) { + _E("count_str is NULL"); + count_str = calloc(1, LOCALE_LEN); + ret_if(!count_str); + snprintf(count_str, LOCALE_LEN, "%d", MAX_WIDGET); + } + + snprintf(text, sizeof(text), _("IDS_HS_TPOP_MAXIMUM_NUMBER_OF_WIDGETS_HPD_REACHED"), count_str); + free(count_str); + util_create_toast_popup(scroller, text); + } + } else { + /* Leave me alone */ + } + } else if (count == MAX_WIDGET) { + /* Leave me alone */ + } else { + if (scroller_info->plus_page) { + /* Leave me alone */ + scroller_pop_page(scroller, scroller_info->plus_page); + scroller_push_page(scroller, scroller_info->plus_page, SCROLLER_PUSH_TYPE_LAST); + } else { + page_create_plus_page(scroller); + page_set_effect(scroller_info->plus_page, page_effect_none, page_effect_none); + scroller_push_page(scroller, scroller_info->plus_page, SCROLLER_PUSH_TYPE_LAST); + } + } +} + + + +Evas_Object *page_set_item(Evas_Object *page, Evas_Object *item) +{ + Evas_Object *old_item = NULL; + page_info_s *page_info = NULL; + + retv_if(!page, NULL); + retv_if(!item, NULL); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + old_item = elm_object_part_content_unset(page_info->page_inner, "item"); + if (old_item) { + _D("You need to free the old item"); + } + + elm_object_part_content_set(page_info->page_inner, "item", item); + page_info->item = item; + + return old_item; +} + + + +HAPI Evas_Object *page_get_item(Evas_Object *page) +{ + page_info_s *page_info = NULL; + + retv_if(!page, NULL); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + return page_info->item; +} + + + +HAPI void page_focus(Evas_Object *page) +{ + Eina_Bool is_focused = EINA_FALSE; + page_info_s *page_info = NULL; + + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->focus); + + is_focused = elm_object_focus_get(page_info->focus); + if (is_focused) return; + + /* + * workaround, to avoid scroller focus become invalid + */ + _D("focus set to %p", page_info->focus); + elm_object_focus_set(page_info->focus, EINA_TRUE); +} + + + +HAPI void page_unfocus(Evas_Object *page) +{ + page_info_s *page_info = NULL; + + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->focus); + + elm_object_focus_set(page_info->focus, EINA_FALSE); +} + + + +HAPI void page_highlight(Evas_Object *page) +{ + page_info_s *page_info = NULL; + + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->focus); + + elm_access_object_register(page_info->focus, page); +} + + + +HAPI void page_unhighlight(Evas_Object *page) +{ + page_info_s *page_info = NULL; + + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->focus); + + elm_access_object_unregister(page_info->focus); +} + + + +/* You have to free returned value */ +HAPI char *page_read_title(Evas_Object *page) +{ + char *title = NULL; + const char *tmp = NULL; + page_info_s *page_info = NULL; + + retv_if(!page, NULL); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + retv_if(!page_info->item, NULL); + + switch (page_info->direction) { + case PAGE_DIRECTION_LEFT: + break; + case PAGE_DIRECTION_CENTER: + break; + case PAGE_DIRECTION_RIGHT: + tmp = widget_viewer_evas_get_title_string(page_info->item); + if (!tmp || strlen(tmp) == 0) { + const char *widget_id; + struct add_viewer_package *pkginfo; + + widget_id = widget_viewer_evas_get_widget_id(page_info->item); + break_if(!widget_id); + + pkginfo = add_viewer_package_find(widget_id); + if (pkginfo) { + tmp = add_viewer_package_list_name(pkginfo); + } + + if (!tmp) { + //Fallback to the widget id + tmp = widget_id; + } + } + break; + default: + _E("Cannot reach here"); + break; + } + if (!tmp) return NULL; + + title = strdup(tmp); + retv_if(!title, NULL); + + return title; +} + + + +HAPI void page_set_effect(Evas_Object *page, void (*left_effect)(Evas_Object *), void (*right_effect)(Evas_Object *)) +{ + ret_if(!page); + + if (left_effect) { + evas_object_data_set(page, PRIVATE_DATA_KEY_PAGE_LEFT_EFFECT, left_effect); + } + + if (right_effect) { + evas_object_data_set(page, PRIVATE_DATA_KEY_PAGE_RIGHT_EFFECT, right_effect); + } +} + + + +HAPI void page_unset_effect(Evas_Object *page) +{ + evas_object_data_del(page, PRIVATE_DATA_KEY_PAGE_LEFT_EFFECT); + evas_object_data_del(page, PRIVATE_DATA_KEY_PAGE_RIGHT_EFFECT); +} + + + +HAPI void *page_get_effect(Evas_Object *page, page_effect_type_e effect_type) +{ + void (*effect)(Evas_Object *) = NULL; + + retv_if(!page, NULL); + + switch (effect_type) { + case PAGE_EFFECT_TYPE_LEFT: + effect = evas_object_data_get(page, PRIVATE_DATA_KEY_PAGE_LEFT_EFFECT); + break; + case PAGE_EFFECT_TYPE_RIGHT: + effect = evas_object_data_get(page, PRIVATE_DATA_KEY_PAGE_RIGHT_EFFECT); + break; + default: + _E("Cannot reach here"); + break; + } + + return effect; +} + + + +HAPI void page_effect_none(Evas_Object *page) +{ + Evas_Map *map = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + int cur_x, cur_y, cur_w, cur_h; + + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->page_inner); + + scroller_info = evas_object_data_get(page_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + /** + * Send mouse up event when we start to scroll pages. + */ + if (page_info->item) { + widget_viewer_evas_feed_mouse_up_event(page_info->item); + } + + evas_object_geometry_get(page, &cur_x, &cur_y, &cur_w, &cur_h); + + map = evas_map_new(4); + ret_if(!map); + + /* LEFT */ + evas_map_point_coord_set(map, 0, cur_x, cur_y, 0); + evas_map_point_image_uv_set(map, 0, 0, 0); + evas_map_point_color_set(map, 0, 255, 255, 255, 255); + + /* RIGHT */ + evas_map_point_coord_set(map, 1, cur_x + cur_w, cur_y, 0); + evas_map_point_image_uv_set(map, 1, cur_w, 0); + evas_map_point_color_set(map, 1, 255, 255, 255, 255); + + /* BOTTOM-RIGHT */ + evas_map_point_coord_set(map, 2, cur_x + cur_w, cur_y + cur_h, 0); + evas_map_point_image_uv_set(map, 2, cur_w, cur_h); + evas_map_point_color_set(map, 2, 255, 255, 255, 255); + + /* BOTTOM-LEFT */ + evas_map_point_coord_set(map, 3, cur_x, cur_y + cur_h, 0); + evas_map_point_image_uv_set(map, 3, 0, cur_h); + evas_map_point_color_set(map, 3, 255, 255, 255, 255); + + evas_object_map_set(page_info->page_inner, map); + evas_object_map_enable_set(page_info->page_inner, EINA_TRUE); + + evas_map_free(map); + + if (!eina_list_data_find_list(scroller_info->effect_page_list, page_info->page_inner)) { + scroller_info->effect_page_list + = eina_list_append(scroller_info->effect_page_list, page_info->page_inner); + } +} + + + + + + +HAPI void page_clean_effect(Evas_Object *scroller) +{ + Evas_Object *page_inner = NULL; + Eina_List *list = NULL; + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + list = scroller_info->effect_page_list; + if (!list) return; + + EINA_LIST_FREE(list, page_inner) { + evas_object_map_enable_set(page_inner, EINA_FALSE); + } + + scroller_info->effect_page_list = NULL; +} + + + +HAPI void page_backup_inner_focus(Evas_Object *page, Evas_Object *prev_page, Evas_Object *next_page) +{ + page_info_s *page_info = NULL; + page_info_s *prev_page_info = NULL; + page_info_s *next_page_info = NULL; + + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + if (prev_page) { + prev_page_info = evas_object_data_get(prev_page, DATA_KEY_PAGE_INFO); + ret_if(!prev_page_info); + } + if (next_page) { + next_page_info = evas_object_data_get(next_page, DATA_KEY_PAGE_INFO); + ret_if(!next_page_info); + } + + if (prev_page) { + elm_object_focus_next_object_set(page_info->focus, prev_page_info->focus, ELM_FOCUS_PREVIOUS); + elm_access_highlight_next_set(page_info->focus, ELM_HIGHLIGHT_DIR_PREVIOUS, prev_page_info->focus); + } + + if (next_page) { + elm_object_focus_next_object_set(page_info->focus, next_page_info->focus, ELM_FOCUS_NEXT); + elm_access_highlight_next_set(page_info->focus, ELM_HIGHLIGHT_DIR_NEXT, next_page_info->focus); + } +} + + + +HAPI void page_restore_inner_focus(Evas_Object *page) +{ + page_info_s *page_info = NULL; + + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + if (page_info->focus_prev) { + elm_object_focus_next_object_set(page_info->focus, page_info->focus_prev, ELM_FOCUS_PREVIOUS); + elm_access_highlight_next_set(page_info->focus, ELM_HIGHLIGHT_DIR_PREVIOUS, page_info->focus_prev); + } else { + elm_object_focus_next_object_set(page_info->focus, NULL, ELM_FOCUS_PREVIOUS); + elm_access_highlight_next_set(page_info->focus, ELM_HIGHLIGHT_DIR_PREVIOUS, NULL); + } + + if (page_info->focus_next) { + elm_object_focus_next_object_set(page_info->focus, page_info->focus_next, ELM_FOCUS_NEXT); + elm_access_highlight_next_set(page_info->focus, ELM_HIGHLIGHT_DIR_NEXT, page_info->focus_next); + } else { + elm_object_focus_next_object_set(page_info->focus, NULL, ELM_FOCUS_NEXT); + elm_access_highlight_next_set(page_info->focus, ELM_HIGHLIGHT_DIR_NEXT, NULL); + } +} + + + +HAPI void page_set_title(Evas_Object *page, const char *title) +{ + page_info_s *page_info = NULL; + + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + free(page_info->title); + + /* Title can be NULL */ + if (title) { + page_info->title = strdup(title); + } else { + page_info->title = NULL; + } +} + + + +HAPI const char *page_get_title(Evas_Object *page) +{ + page_info_s *page_info = NULL; + + retv_if(!page, NULL); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + return page_info->title; +} + + + +HAPI int page_is_appended(Evas_Object *page) +{ + page_info_s *page_info = NULL; + + retv_if(!page, 0); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, 0); + + return page_info->appended == EINA_TRUE ? 1 : 0; +} + + + +// End of this file diff --git a/home/src/page_info.c b/home/src/page_info.c new file mode 100644 index 0000000..704a3fe --- /dev/null +++ b/home/src/page_info.c @@ -0,0 +1,139 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "page_info.h" +#include "util.h" + +HAPI page_info_s *page_info_create(const char *id, const char *subid, double period) +{ + page_info_s *page_info = NULL; + + page_info = calloc(1, sizeof(page_info_s)); + retv_if(!page_info, NULL); + + if (id) { + page_info->id = strdup(id); + if (!page_info->id) { + free(page_info); + return NULL; + } + } + + if (subid) { + page_info->subid = strdup(subid); + if (!page_info->subid) { + free(page_info->id); + free(page_info); + return NULL; + } + } + + if (id) { + page_info->removable = 1; + } + + page_info->period = period; + + return page_info; +} + + + +HAPI void page_info_destroy(page_info_s *page_info) +{ + ret_if(!page_info); + + free(page_info->id); + free(page_info->subid); + free(page_info); +} + + + +HAPI page_info_s *page_info_dup(page_info_s *page_info) +{ + page_info_s *dup = NULL; + + retv_if(!page_info, NULL); + + dup = page_info_create(page_info->id, page_info->subid, page_info->period); + retv_if(!dup, NULL); + + if (page_info->title) { + dup->title = strdup(page_info->title); + } + dup->width = page_info->width; + dup->height = page_info->height; + dup->direction = page_info->direction; + dup->category = page_info->category; + dup->removable = page_info->removable; + + dup->layout = page_info->layout; + dup->scroller = page_info->scroller; + dup->page = page_info->page; + dup->page_rect = page_info->page_rect; + dup->page_inner = page_info->page_inner; + dup->page_inner_area = page_info->page_inner_area; + dup->page_inner_bg = page_info->page_inner_bg; + dup->focus = page_info->focus; + dup->remove_focus = page_info->remove_focus; + dup->item = page_info->item; + dup->focus_prev = page_info->focus_prev; + dup->focus_next = page_info->focus_next; + + dup->ordering = page_info->ordering; + dup->layout_longpress = page_info->layout_longpress; + dup->highlighted = page_info->highlighted; + dup->need_to_unhighlight = page_info->need_to_unhighlight; + dup->highlight_changed = page_info->highlight_changed; + dup->is_scrolled_object = page_info->is_scrolled_object; + + return dup; +} + + + +HAPI void page_info_list_destroy(Eina_List *page_info_list) +{ + page_info_s *page_info = NULL; + + ret_if(!page_info_list); + + EINA_LIST_FREE(page_info_list, page_info) { + continue_if(!page_info); + page_info_destroy(page_info); + } +} + + + +HAPI int page_info_is_removable(const char *id) +{ + if(!id) return 0; + return 1; +} + + + +// End of a file diff --git a/home/src/pkgmgr.c b/home/src/pkgmgr.c new file mode 100644 index 0000000..500b4db --- /dev/null +++ b/home/src/pkgmgr.c @@ -0,0 +1,760 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "pkgmgr.h" + + + +struct pkgmgr_handler { + const char *key; + int (*func)(const char *package, const char *val, void *data); +}; + +typedef struct { + char* package; + char* key; + char* val; +} pkgmgr_reserve_s; + +typedef struct { + char* package; + char* status; +} pkgmgr_request_s; + +typedef struct { + char* pkg_id; + char* app_id; + Evas_Object *item; +} pkgmgr_install_s; + +static struct { + pkgmgr_client *listen_pc; + Eina_List *reserve_list; + Eina_List *request_list; + Eina_List *item_list; + Eina_List *widget_list; + int hold; +} pkg_mgr_info = { + .listen_pc = NULL, + .reserve_list = NULL, + .request_list = NULL, + .item_list = NULL, + .widget_list = NULL, +}; + + + +HAPI void pkgmgr_hold_event(void) +{ + pkg_mgr_info.hold = 1; +} + + + +HAPI void pkgmgr_unhold_event(void) +{ + pkg_mgr_info.hold = 0; +} + + + +static w_home_error_e _append_request_in_list(const char *package, const char *status) +{ + pkgmgr_request_s *rt = NULL; + char *tmp_pkg = NULL; + char *tmp_st = NULL; + + retv_if(NULL == package, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(NULL == status, W_HOME_ERROR_INVALID_PARAMETER); + + rt = calloc(1, sizeof(pkgmgr_request_s)); + retv_if(NULL == rt, W_HOME_ERROR_FAIL); + + tmp_pkg = strdup(package); + goto_if(NULL == tmp_pkg, ERROR); + + rt->package = tmp_pkg; + + tmp_st = strdup(status); + goto_if(NULL == tmp_st, ERROR); + + rt->status = tmp_st; + + pkg_mgr_info.request_list = eina_list_append(pkg_mgr_info.request_list, rt); + goto_if(NULL == pkg_mgr_info.request_list, ERROR); + + return W_HOME_ERROR_NONE; + +ERROR: + free(rt->package); + free(rt->status); + free(rt); + + return W_HOME_ERROR_FAIL; +} + + + +static w_home_error_e _remove_request_in_list(const char *package) +{ + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + pkgmgr_request_s *rt = NULL; + + retv_if(NULL == package, W_HOME_ERROR_INVALID_PARAMETER); + + if (NULL == pkg_mgr_info.request_list) return W_HOME_ERROR_NONE; + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.request_list, l, ln, rt) { + if (!rt) continue; + if (!rt->package) continue; + if (strcmp(rt->package, package)) continue; + + pkg_mgr_info.request_list = eina_list_remove(pkg_mgr_info.request_list, rt); + free(rt->package); + free(rt->status); + free(rt); + return W_HOME_ERROR_NONE; + } + + return W_HOME_ERROR_FAIL; +} + + + +static int _exist_request_in_list(const char *package) +{ + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + pkgmgr_request_s *rt = NULL; + + retv_if(NULL == package, 0); + + if (NULL == pkg_mgr_info.request_list) return 0; + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.request_list, l, ln, rt) { + if (!rt) continue; + if (!rt->package) continue; + if (strcmp(rt->package, package)) continue; + return 1; + } + + return 0; +} + + + +static pkgmgr_request_s *_get_request_in_list(const char *package) +{ + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + pkgmgr_request_s *rt = NULL; + + retv_if(NULL == package, NULL); + + if (NULL == pkg_mgr_info.request_list) return NULL; + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.request_list, l, ln, rt) { + if (!rt) continue; + if (!rt->package) continue; + if (strcmp(rt->package, package)) continue; + return rt; + } + + return NULL; +} + + + +HAPI w_home_error_e pkgmgr_item_list_append_item(const char *pkg_id, const char *app_id, Evas_Object *item) +{ + pkgmgr_install_s *pi = NULL; + char *tmp_pkg_id = NULL; + char *tmp_app_id = NULL; + + retv_if(NULL == pkg_id, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(NULL == app_id, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(NULL == item, W_HOME_ERROR_INVALID_PARAMETER); + + pi = calloc(1, sizeof(pkgmgr_install_s)); + goto_if(NULL == pi, ERROR); + + tmp_pkg_id = strdup(pkg_id); + goto_if(NULL == tmp_pkg_id, ERROR); + + tmp_app_id = strdup(app_id); + goto_if(NULL == tmp_app_id, ERROR); + + pi->pkg_id = tmp_pkg_id; + pi->app_id = tmp_app_id; + pi->item = item; + + pkg_mgr_info.item_list = eina_list_append(pkg_mgr_info.item_list, pi); + goto_if(NULL == pkg_mgr_info.item_list, ERROR); + + return W_HOME_ERROR_NONE; + +ERROR: + free(tmp_app_id); + free(tmp_pkg_id); + free(pi); + + return W_HOME_ERROR_FAIL; +} + + + +HAPI w_home_error_e pkgmgr_item_list_remove_item(const char *pkg_id, const char *app_id, Evas_Object *item) +{ + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + pkgmgr_install_s *pi = NULL; + + retv_if(NULL == pkg_id, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(NULL == app_id, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(NULL == item, W_HOME_ERROR_INVALID_PARAMETER); + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.item_list, l, ln, pi) { + continue_if(NULL == pi); + continue_if(NULL == pi->pkg_id); + continue_if(NULL == pi->app_id); + continue_if(NULL == pi->item); + + if (strcmp(pi->pkg_id, pkg_id)) continue; + if (strcmp(pi->app_id, app_id)) continue; + if (pi->item != item) continue; + + pkg_mgr_info.item_list = eina_list_remove(pkg_mgr_info.item_list, pi); + + free(pi->app_id); + free(pi->pkg_id); + free(pi); + + return W_HOME_ERROR_NONE; + } + + return W_HOME_ERROR_FAIL; +} + + + +HAPI void pkgmgr_item_list_affect_pkgid(const char *pkg_id, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data) +{ + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + pkgmgr_install_s *pi = NULL; + + ret_if(NULL == pkg_mgr_info.item_list); + ret_if(NULL == pkg_id); + ret_if(NULL == _affected_cb); + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.item_list, l, ln, pi) { + continue_if(NULL == pi); + continue_if(NULL == pi->app_id); + continue_if(NULL == pi->item); + + if (strcmp(pkg_id, pi->pkg_id)) continue; + /* It's possible that many items with the same package name are in the install list */ + continue_if(EINA_TRUE != _affected_cb(pi->app_id, pi->item, data)); + } +} + + + +HAPI void pkgmgr_item_list_affect_appid(const char *app_id, Eina_Bool (*_affected_cb)(const char *, Evas_Object *, void *), void *data) +{ + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + pkgmgr_install_s *pi = NULL; + + ret_if(NULL == pkg_mgr_info.item_list); + ret_if(NULL == app_id); + ret_if(NULL == _affected_cb); + + EINA_LIST_FOREACH_SAFE(pkg_mgr_info.item_list, l, ln, pi) { + continue_if(NULL == pi); + continue_if(NULL == pi->app_id); + continue_if(NULL == pi->item); + + if (strcmp(app_id, pi->app_id)) continue; + /* It's possible that many items with the same package name are in the install list */ + continue_if(EINA_TRUE != _affected_cb(pi->app_id, pi->item, data)); + } +} + + + +HAPI w_home_error_e pkgmgr_uninstall(const char *appid) +{ + pkgmgr_client *req_pc = NULL; + int ret = W_HOME_ERROR_NONE; + char *pkgid = NULL; + + retv_if(NULL == appid, W_HOME_ERROR_FAIL); + + req_pc = pkgmgr_client_new(PC_REQUEST); + retv_if(NULL == req_pc, W_HOME_ERROR_FAIL); + + pkgmgrinfo_appinfo_h handle = NULL; + if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_appinfo(appid, &handle)) { + if (PKGMGR_R_OK != pkgmgr_client_free(req_pc)) { + _E("cannot free pkgmgr_client for request."); + } + return W_HOME_ERROR_FAIL; + } + + if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_pkgid(handle, &pkgid)) { + if (PMINFO_R_OK != pkgmgrinfo_appinfo_destroy_appinfo(handle)) { + _E("cannot destroy the appinfo"); + } + + if (PKGMGR_R_OK != pkgmgr_client_free(req_pc)) { + _E("cannot free pkgmgr_client for request."); + } + + return W_HOME_ERROR_FAIL; + } + + if (!pkgid) pkgid = (char *) appid; + + _D("Uninstall a package[%s] from an app[%s]", pkgid, appid); + if (pkgmgr_client_uninstall(req_pc, NULL, pkgid, PM_QUIET, NULL, NULL) < 0) { + _E("cannot uninstall %s.", appid); + ret = W_HOME_ERROR_FAIL; + } + + if (PMINFO_R_OK != pkgmgrinfo_appinfo_destroy_appinfo(handle)) { + _E("cannot destroy the appinfo"); + ret = W_HOME_ERROR_FAIL; + } + + if (PMINFO_R_OK != pkgmgr_client_free(req_pc)) { + _E("cannot free pkgmgr_client"); + ret = W_HOME_ERROR_FAIL; + } + + return ret; +} + + + +static w_home_error_e _start_download(const char *package, void *scroller) +{ + _D("Start downloading for the package(%s)", package); + return W_HOME_ERROR_NONE; +} + + + +static w_home_error_e _start_uninstall(const char *package, void *scroller) +{ + _D("Start uninstalling for the package(%s)", package); + return W_HOME_ERROR_NONE; +} + + + +static w_home_error_e _start_update(const char *package, void *scroller) +{ + _D("Start updating for the package(%s)", package); + return W_HOME_ERROR_NONE; +} + + + +static w_home_error_e _start_recover(const char *package, void *scroller) +{ + _D("Start recovering for the package(%s)", package); + return W_HOME_ERROR_NONE; +} + + + +static w_home_error_e _start_install(const char *package, void *scroller) +{ + _D("Start installing for the package(%s)", package); + return W_HOME_ERROR_NONE; +} + + +static int _get_widget_list_cb(const char *widget_id, int is_prime, void *data) +{ + char *id = NULL; + + retv_if(NULL == widget_id, -1); + + id = strdup(widget_id); + retv_if(!id, -1); + + _D("widget_id(%s %d) with %s", id, is_prime, data); + + pkg_mgr_info.widget_list = eina_list_append(pkg_mgr_info.widget_list, id); + + return 0; +} + + +static w_home_error_e _start(const char *package, const char *val, void *scroller) +{ + struct start_cb_set { + const char *name; + int (*handler)(const char *package, void *scroller); + } start_cb[] = { + { + .name = "download", + .handler = _start_download, + }, + { + .name = "uninstall", + .handler = _start_uninstall, + }, + { + .name = "install", + .handler = _start_install, + }, + { + .name = "update", + .handler = _start_update, + }, + { + .name = "recover", + .handler = _start_recover, + }, + { + .name = NULL, + .handler = NULL, + }, + }; + + _D("package [%s], val [%s]", package, val); + retv_if(_exist_request_in_list(package), W_HOME_ERROR_FAIL); + retv_if(W_HOME_ERROR_NONE != _append_request_in_list(package, val), W_HOME_ERROR_FAIL); + + widget_service_get_widget_list_by_pkgid(package, _get_widget_list_cb, (void*) val); + + register unsigned int i; + for (i = 0; start_cb[i].name; i ++) { + if (strcasecmp(val, start_cb[i].name)) continue; + break_if(NULL == start_cb[i].handler); + return start_cb[i].handler(package, scroller); + } + + _E("Unknown status for starting phase signal'd from package manager"); + return W_HOME_ERROR_NONE; +} + + + +static w_home_error_e _icon_path(const char *package, const char *val, void *scroller) +{ + _D("package(%s) with %s", package, val); + return W_HOME_ERROR_NONE; +} + + + +static w_home_error_e _download_percent(const char *package, const char *val, void *scroller) +{ + _D("package(%s) with %s", package, val); + return W_HOME_ERROR_NONE; +} + + + +static w_home_error_e _install_percent(const char *package, const char *val, void *scroller) +{ + _D("package(%s) with %s", package, val); + if (_exist_request_in_list(package)) return W_HOME_ERROR_NONE; + retv_if(W_HOME_ERROR_NONE != _append_request_in_list(package, "install"), W_HOME_ERROR_FAIL); + return W_HOME_ERROR_NONE; +} + + + +static w_home_error_e _error(const char *package, const char *val, void *scroller) +{ + _D("package(%s) with %s", package, val); + return W_HOME_ERROR_NONE; +} + + + +static int _end_cb(pkgmgrinfo_appinfo_h handle, void *user_data) +{ + char *appid = NULL; + pkgmgr_request_s *rt = NULL; + + retv_if(NULL == handle, -1); + retv_if(NULL == user_data, -1); + + pkgmgrinfo_appinfo_get_appid(handle, &appid); + + rt = user_data; + if (!strcmp(rt->status, "install")) { + /* Install an app */ + } else if (!strcmp(rt->status, "update")) { + /* Update an app */ + } else { + _E("No routines for this status (%s:%s)", rt->package, rt->status); + } + + return 0; +} + + + +static Eina_Bool _uninstall_cb(const char *app_id, Evas_Object *item, void *data) +{ + /* Uninstall a widget */ + + return EINA_TRUE; +} + + + +static w_home_error_e _end(const char *package, const char *val, void *data) +{ + pkgmgr_request_s *rt = NULL; + pkgmgrinfo_pkginfo_h handle = NULL; + + retv_if(!_exist_request_in_list(package), W_HOME_ERROR_FAIL); + + rt = _get_request_in_list(package); + retv_if(NULL == rt, W_HOME_ERROR_FAIL); + retv_if(strcasecmp(val, "ok"), W_HOME_ERROR_FAIL); + + _D("Package(%s) : key(%s) - val(%s)", package, rt->status, val); + + /* Criteria : pkgid */ + if (!strcasecmp("uninstall", rt->status)) { + char *widget_id = NULL; + + pkgmgr_item_list_affect_pkgid(package, _uninstall_cb, NULL); + + EINA_LIST_FREE(pkg_mgr_info.widget_list, widget_id) { + continue_if(NULL == widget_id); + pkgmgr_item_list_affect_pkgid(widget_id, _uninstall_cb, NULL); + free(widget_id); + } + pkg_mgr_info.widget_list = NULL; + + goto OUT; + } + + retv_if(PMINFO_R_OK != pkgmgrinfo_pkginfo_get_pkginfo(package, &handle), W_HOME_ERROR_FAIL); + + /* Criteria : appid */ + if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_list(handle, PMINFO_UI_APP, _end_cb, rt)) { + if (W_HOME_ERROR_NONE != _remove_request_in_list(package)) + _E("cannot remove a request(%s:%s)", rt->package, rt->status); + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + return W_HOME_ERROR_FAIL; + } + +OUT: + if (W_HOME_ERROR_NONE != _remove_request_in_list(package)) + _E("cannot remove a request(%s:%s)", rt->package, rt->status); + if (handle) pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + + return W_HOME_ERROR_NONE; +} + + + +static w_home_error_e _change_pkg_name(const char *package, const char *val, void *scroller) +{ + _D("package(%s) with %s", package, val); + return W_HOME_ERROR_NONE; +} + + + +static struct pkgmgr_handler pkgmgr_cbs[] = { + { "start", _start }, + { "icon_path", _icon_path }, + { "download_percent", _download_percent }, + { "command", NULL }, + { "install_percent", _install_percent }, + { "error", _error }, + { "end", _end }, + { "change_pkg_name", _change_pkg_name }, +}; + + + +static w_home_error_e _pkgmgr_cb(int req_id, const char *pkg_type, const char *package, const char *key, const char *val, const void *pmsg, void *data) +{ + register unsigned int i; + + _D("pkgmgr request [%s:%s] for %s", key, val, package); + + if (BOOTING_STATE_DONE > main_get_info()->booting_state) { + pkgmgr_reserve_list_push_request(package, key, val); + return W_HOME_ERROR_NONE; + } + + if (pkg_mgr_info.hold) { + pkgmgr_reserve_list_push_request(package, key, val); + return W_HOME_ERROR_NONE; + } + + for (i = 0; i < sizeof(pkgmgr_cbs) / sizeof(struct pkgmgr_handler); i++) { + if (strcasecmp(pkgmgr_cbs[i].key, key)) continue; + break_if(!pkgmgr_cbs[i].func); + + if (W_HOME_ERROR_NONE != pkgmgr_cbs[i].func(package, val, NULL)) { + _E("pkgmgr_cbs[%u].func has errors.", i); + } + + return W_HOME_ERROR_NONE; + } + + return W_HOME_ERROR_FAIL; +} + + + +HAPI w_home_error_e pkgmgr_reserve_list_push_request(const char *package, const char *key, const char *val) +{ + char *tmp_package = NULL; + char *tmp_key = NULL; + char *tmp_val = NULL; + + retv_if(NULL == package, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(NULL == key, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(NULL == val, W_HOME_ERROR_INVALID_PARAMETER); + + pkgmgr_reserve_s *pr = calloc(1, sizeof(pkgmgr_reserve_s)); + retv_if(NULL == pr, W_HOME_ERROR_FAIL); + + tmp_package = strdup(package); + goto_if(NULL == tmp_package, ERROR); + pr->package = tmp_package; + + tmp_key = strdup(key); + goto_if(NULL == tmp_key, ERROR); + pr->key = tmp_key; + + tmp_val = strdup(val); + goto_if(NULL == tmp_val, ERROR); + pr->val = tmp_val; + + pkg_mgr_info.reserve_list = eina_list_append(pkg_mgr_info.reserve_list, pr); + goto_if(NULL == pkg_mgr_info.reserve_list, ERROR); + + return W_HOME_ERROR_NONE; + +ERROR: + free(tmp_val); + free(tmp_key); + free(tmp_package); + free(pr); + + return W_HOME_ERROR_FAIL; +} + + + +HAPI w_home_error_e pkgmgr_reserve_list_pop_request(void) +{ + pkgmgr_reserve_s *pr = NULL; + + if (!pkg_mgr_info.reserve_list) return W_HOME_ERROR_NO_DATA; + + pr = eina_list_nth(pkg_mgr_info.reserve_list, 0); + if (!pr) return W_HOME_ERROR_NO_DATA; + pkg_mgr_info.reserve_list = eina_list_remove(pkg_mgr_info.reserve_list, pr); + + goto_if(W_HOME_ERROR_NONE != _pkgmgr_cb(0, NULL, pr->package, pr->key, pr->val, NULL, NULL), ERROR); + + free(pr->package); + free(pr->key); + free(pr->val); + free(pr); + + return W_HOME_ERROR_NONE; + +ERROR: + free(pr->package); + free(pr->key); + free(pr->val); + free(pr); + + return W_HOME_ERROR_FAIL; +} + + + +HAPI w_home_error_e pkgmgr_init(void) +{ + if (NULL != pkg_mgr_info.listen_pc) { + return W_HOME_ERROR_NONE; + } + + pkg_mgr_info.listen_pc = pkgmgr_client_new(PC_LISTENING); + retv_if(NULL == pkg_mgr_info.listen_pc, W_HOME_ERROR_FAIL); + retv_if(pkgmgr_client_listen_status(pkg_mgr_info.listen_pc, + _pkgmgr_cb, NULL) != PKGMGR_R_OK, W_HOME_ERROR_FAIL); + + return W_HOME_ERROR_NONE; +} + + + +HAPI void pkgmgr_fini(void) +{ + ret_if(NULL == pkg_mgr_info.listen_pc); + if (pkgmgr_client_free(pkg_mgr_info.listen_pc) != PKGMGR_R_OK) { + _E("cannot free pkgmgr_client for listen."); + } + pkg_mgr_info.listen_pc = NULL; +} + + + +HAPI int pkgmgr_exist(char *appid) +{ + int ret = 0; + pkgmgrinfo_appinfo_h handle = NULL; + + ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle); + if (PMINFO_R_OK != ret || NULL == handle) { + _SD("%s doesn't exist in this binary", appid); + return 0; + } + + pkgmgrinfo_appinfo_destroy_appinfo(handle); + + return 1; +} + + + +// End of a file diff --git a/home/src/popup.c b/home/src/popup.c new file mode 100755 index 0000000..53a0661 --- /dev/null +++ b/home/src/popup.c @@ -0,0 +1,69 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#include + +#include "conf.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "popup.h" + + + +#define APPID_WC_POPUP "org.tizen.weconn-popup" +#define WC_POPUP_EXTRA_DATA_KEY "http://samsung.com/appcontrol/data/connection_type" +static void _popup_weconn_gear_to_home(void) +{ + app_control_h service = NULL; + ret_if(APP_CONTROL_ERROR_NONE != app_control_create(&service)); + ret_if(NULL == service); + + app_control_add_extra_data(service, WC_POPUP_EXTRA_DATA_KEY, "mobile_data_noti"); + + app_control_set_app_id(service, APPID_WC_POPUP); + int ret = app_control_send_launch_request(service, NULL, NULL); + if (ret != APP_CONTROL_ERROR_NONE) { + _E("Failed to launch:%d", ret); + } + + app_control_destroy(service); +} + +static void _popup_after_tutorial(void) +{ + _W("popup:misc"); + _popup_weconn_gear_to_home(); +} + +void popup_show(int stage) +{ + if (stage == POPUP_STAGE_AFTER_TUTORIAL) { + _popup_after_tutorial(); + } +} diff --git a/home/src/power_mode.c b/home/src/power_mode.c new file mode 100755 index 0000000..ec91fdf --- /dev/null +++ b/home/src/power_mode.c @@ -0,0 +1,412 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "main.h" +#include "layout_info.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "layout.h" +#include "clock_service.h" +#include "db.h" +#include "dbus.h" +#include "tutorial.h" +#include "apps/apps_main.h" +#include "power_mode.h" + +#define COOLDOWN_STATUS_RELEASE "Release" +#define COOLDOWN_STATUS_LIMITATION "LimitAction" +#define COOLDOWN_STATUS_WARNING "WarningAction" + +#define POWER_MODE_POWER_ENHANCED_MODE 1 +#define POWER_MODE_COOLDOWN_MODE 2 + +static struct { + int is_ui_ready; + int ps_mode; + int cooldown_mode; + int applied_mode; + + Eina_List *cbs_list[POWER_MODE_EVENT_MAX]; +} s_info = { + .is_ui_ready = 0, + .ps_mode = 0, + .cooldown_mode = -1, + .applied_mode = -1, + + .cbs_list = {NULL, }, +}; + +typedef struct { + void (*result_cb)(void *, void *); + void *result_data; +} powermode_cb_s; + +HAPI int power_mode_register_cb( + int type, + void (*result_cb)(void *, void *), void *result_data) +{ + retv_if(result_cb == NULL, W_HOME_ERROR_INVALID_PARAMETER); + + powermode_cb_s *cb = calloc(1, sizeof(powermode_cb_s)); + retv_if(cb == NULL, W_HOME_ERROR_FAIL); + + cb->result_cb = result_cb; + cb->result_data = result_data; + + s_info.cbs_list[type] = eina_list_prepend(s_info.cbs_list[type], cb); + retv_if(s_info.cbs_list[type] == NULL, W_HOME_ERROR_FAIL); + + return W_HOME_ERROR_NONE; +} + +HAPI void power_mode_unregister_cb( + int type, + void (*result_cb)(void *, void *)) +{ + const Eina_List *l; + const Eina_List *n; + powermode_cb_s *cb; + EINA_LIST_FOREACH_SAFE(s_info.cbs_list[type], l, n, cb) { + continue_if(cb == NULL); + if (result_cb != cb->result_cb) continue; + s_info.cbs_list[type] = eina_list_remove(s_info.cbs_list[type], cb); + free(cb); + return; + } +} + +static void _execute_cbs(int type, void *event_info) +{ + const Eina_List *l = NULL; + const Eina_List *n = NULL; + powermode_cb_s *cb = NULL; + EINA_LIST_FOREACH_SAFE(s_info.cbs_list[type], l, n, cb) { + continue_if(cb == NULL); + continue_if(cb->result_cb == NULL); + + cb->result_cb(cb->result_data, event_info); + } +} + +static Evas_Object *_layout_get(void) { + Evas_Object *win = main_get_info()->win; + Evas_Object *layout = NULL; + + if (win != NULL) { + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + } + + return layout; +} + +static Evas_Object *_scroller_get(void) { + Evas_Object *win = main_get_info()->win; + Evas_Object *layout = NULL; + Evas_Object *scroller = NULL; + + if (win != NULL) { + layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + if (layout != NULL) { + scroller = elm_object_part_content_get(layout, "scroller"); + } + } + + return scroller; +} + +static Evas_Object *_tutorial_get(void) { + Evas_Object *layout = _layout_get(); + layout_info_s *layout_info = NULL; + Evas_Object *tutorial = NULL; + + if (layout != NULL) { + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + if(layout_info != NULL) { + tutorial = layout_info->tutorial; + } + } + + return tutorial; +} + +static int _psmode_get(void) +{ + int ps_mode = SETTING_PSMODE_NORMAL; + + if(vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &ps_mode) < 0) { + _E("Failed to get VCONFKEY_SETAPPL_PSMODE"); + } + + return ps_mode; +} + +static void _del_list(void *data) +{ + Eina_List *page_info_list = data; + ret_if(!page_info_list); + page_info_list_destroy(page_info_list); +} + +/* + * Emergency Mode + */ +static void _psmode_apply(int mode) +{ + Evas_Object *scroller = _scroller_get(); + ret_if(scroller == NULL); + + _D("changing home to emergency mode to:%d", mode); + + if (mode == SETTING_PSMODE_NORMAL) { + Eina_List *page_info_list = NULL; + + _execute_cbs(POWER_MODE_ENHANCED_OFF, NULL); + + clock_service_request(CLOCK_SERVICE_MODE_NORMAL); + + page_info_list = db_write_list(); + if (page_info_list) { + scroller_push_pages(scroller, page_info_list, _del_list, page_info_list); + } else { + scroller_push_pages(scroller, NULL, NULL, NULL); + } + + if(tutorial_is_first_boot()) tutorial_create(_layout_get()); + } else if (mode == SETTING_PSMODE_WEARABLE_ENHANCED) { + _execute_cbs(POWER_MODE_ENHANCED_ON, NULL); + + if(_tutorial_get()) tutorial_destroy(_tutorial_get()); + + if (apps_main_is_visible() == EINA_TRUE) { + _D("need to hide apps"); + apps_main_launch(APPS_LAUNCH_HIDE); + } + layout_set_idle(_layout_get()); + + clock_service_request(CLOCK_SERVICE_MODE_EMERGENCY); + scroller_region_show_by_push_type(scroller, SCROLLER_PUSH_TYPE_CENTER, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT); + + scroller_pop_pages(scroller, PAGE_DIRECTION_RIGHT); + elm_win_activate(main_get_info()->win); + } +} + +/* + * CoolDown Mode + */ +static int _cooldown_mode_status_to_mode(const char *status) +{ + if (strcmp(status, COOLDOWN_STATUS_RELEASE) == 0) { + return COOLDOWN_MODE_RELEASE; + } else if (strcmp(status, COOLDOWN_STATUS_LIMITATION) == 0) { + return COOLDOWN_MODE_LIMITATION; + } else if (strcmp(status, COOLDOWN_STATUS_WARNING) == 0) { + return COOLDOWN_MODE_WARNING; + } + + return COOLDOWN_MODE_RELEASE; +} + +static int _cooldown_mode_get_from_dbus(void) +{ + int mode = COOLDOWN_MODE_RELEASE; + + char *cooldown_mode = home_dbus_cooldown_status_get(); + _W("cooldown status:%s", cooldown_mode); + if (cooldown_mode != NULL) { + mode = _cooldown_mode_status_to_mode(cooldown_mode); + free(cooldown_mode); + } + + return mode; +} + +static int _cooldown_mode_get(void) +{ + if (s_info.cooldown_mode == -1) { + s_info.cooldown_mode = _cooldown_mode_get_from_dbus(); + } + + return s_info.cooldown_mode; +} + +static void _cooldown_mode_apply(int mode) +{ + Evas_Object *scroller = _scroller_get(); + ret_if(scroller == NULL); + + _D("changing home to cooldown mode:%d", mode); + + if (mode == COOLDOWN_MODE_RELEASE) { + _execute_cbs(POWER_MODE_COOLDOWN_OFF, NULL); + + clock_service_request(CLOCK_SERVICE_MODE_NORMAL); + scroller_unfreeze(scroller); + + if(tutorial_is_first_boot()) tutorial_create(_layout_get()); + } else if (mode == COOLDOWN_MODE_LIMITATION) { + _execute_cbs(POWER_MODE_COOLDOWN_ON, NULL); + + if(_tutorial_get()) tutorial_destroy(_tutorial_get()); + + if (apps_main_is_visible() == EINA_TRUE) { + _D("need to hide apps"); + apps_main_launch(APPS_LAUNCH_HIDE); + } + layout_set_idle(_layout_get()); + + clock_service_request(CLOCK_SERVICE_MODE_COOLDOWN); + scroller_region_show_by_push_type(scroller, SCROLLER_PUSH_TYPE_CENTER, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT); + elm_win_activate(main_get_info()->win); + scroller_freeze(scroller); + } +} + +#define POWER_MODE_POWER_ENHANCED_MODE 1 +#define POWER_MODE_COOLDOWN_MODE 2 + +static void _power_mode_apply(void) +{ + int ps_mode = SETTING_PSMODE_NORMAL; + int cooldown_mode = COOLDOWN_MODE_RELEASE; + + ps_mode = _psmode_get(); + s_info.ps_mode = ps_mode; + + cooldown_mode = _cooldown_mode_get(); + s_info.cooldown_mode = cooldown_mode; + + _D("ps mode:%d cooldown mode:%d", ps_mode, cooldown_mode); + + if (s_info.is_ui_ready == 0) { + _E("ui isn't ready yet, just update power mode flag"); + return ; + } + + if (ps_mode != SETTING_PSMODE_NORMAL && cooldown_mode != COOLDOWN_MODE_RELEASE) { + _cooldown_mode_apply(cooldown_mode); + s_info.applied_mode = POWER_MODE_COOLDOWN_MODE; + + } else if (ps_mode != SETTING_PSMODE_NORMAL && cooldown_mode == COOLDOWN_MODE_RELEASE) { + _psmode_apply(ps_mode); + s_info.applied_mode = POWER_MODE_POWER_ENHANCED_MODE; + + } else if (ps_mode == SETTING_PSMODE_NORMAL && cooldown_mode != COOLDOWN_MODE_RELEASE) { + _cooldown_mode_apply(cooldown_mode); + s_info.applied_mode = POWER_MODE_COOLDOWN_MODE; + + } else { + if (s_info.applied_mode == POWER_MODE_POWER_ENHANCED_MODE) { + _psmode_apply(ps_mode); + } else if (s_info.applied_mode == POWER_MODE_COOLDOWN_MODE) { + _cooldown_mode_apply(cooldown_mode); + } else { + _E("no power mode applied"); + } + s_info.applied_mode = -1; + } +} + +static void _psmode_changed_cb(keynode_t *node, void *data) +{ + _D(""); + _power_mode_apply(); +} + +static void _cooldown_mode_changed_cb(void *user_data, void *event_info) +{ + _D(""); + int mode = COOLDOWN_MODE_RELEASE; + _W("cooldown status:%s", event_info); + if (event_info != NULL) { + mode = _cooldown_mode_status_to_mode(event_info); + s_info.cooldown_mode = mode; + } + + _power_mode_apply(); +} + +/*! + * constructor/deconstructor + */ +HAPI void power_mode_init(void) +{ + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE, _psmode_changed_cb, NULL) < 0) { + _E("Failed to register the VCONFKEY_SETAPPL_PSMODE callback"); + } + + if (home_dbus_register_cb(DBUS_EVENT_COOLDOWN_STATE_CHANGED, _cooldown_mode_changed_cb, NULL) != W_HOME_ERROR_NONE) { + _E("Failed to register cooldown status changed cb"); + } +} + +HAPI void power_mode_ui_init(void) +{ + s_info.is_ui_ready = 1; + + _power_mode_apply(); +} + +HAPI void power_mode_fini(void) +{ + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, _psmode_changed_cb) < 0) { + _E("Failed to ignore the VCONFKEY_SETAPPL_PSMODE callback"); + } + + home_dbus_unregister_cb(DBUS_EVENT_COOLDOWN_STATE_CHANGED, _cooldown_mode_changed_cb); + + s_info.is_ui_ready = 0; +} + +HAPI int emergency_mode_enabled_get(void) +{ + int mode = _psmode_get(); + + if (mode == SETTING_PSMODE_WEARABLE_ENHANCED) { + return 1; + } + + return 0; +} + +HAPI int cooldown_mode_enabled_get(void) +{ + if (_cooldown_mode_get() == COOLDOWN_MODE_LIMITATION) { + return 1; + } + + return 0; +} + +HAPI int cooldown_mode_warning_get(void) +{ + if (_cooldown_mode_get() == COOLDOWN_MODE_WARNING) { + return 1; + } + + return 0; +} diff --git a/home/src/scroller.c b/home/src/scroller.c new file mode 100755 index 0000000..6fc86b9 --- /dev/null +++ b/home/src/scroller.c @@ -0,0 +1,2985 @@ +/* + * Samsung API + * Copyright (c) 2013 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 + +#include "bg.h" +#include "util.h" +#include "wms.h" +#include "conf.h" +#include "power_mode.h" +#include "key.h" +#include "dbus.h" +#include "layout.h" +#include "layout_info.h" +#include "widget.h" +#include "log.h" +#include "main.h" +#include "minictrl.h" +#include "page_info.h" +#include "page.h" +#include "pkgmgr.h" +#include "scroller_info.h" +#include "scroller.h" +#include "index.h" +#include "db.h" + +#define BOX_EDJE EDJEDIR"/box_layout.edj" +#define BOX_GROUP_NAME "box" + +#define PRIVATE_DATA_KEY_HIDE_INDEX_TIMER "p_h_ix_tm" +#define PRIVATE_DATA_KEY_SHOW_END "p_s_e" +#define PRIVATE_DATA_KEY_IS_DUMMY "p_is_dum" +#define PRIVATE_DATA_KEY_SCROLLER_FREEZED "p_sc_is_fr" +#define PRIVATE_DATA_KEY_SCROLLER_PRESSED_PAGE "p_sc_pr_pg" +#define PRIVATE_DATA_KEY_SCROLLER_PUSH_ALL_TIMER "p_p_tm" +#define PRIVATE_DATA_KEY_SCROLLER_LIST "p_sc_l" +#define PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER "p_sc_tmer" +#define PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM "p_sc_anim" +#define PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB "p_sc_job" +#define PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE "p_sc_page" +#define PRIVATE_DATA_KEY_SCROLLER_HIDE_INDEX_TIMER "p_sc_ht" +#define PRIVATE_DATA_KEY_SCROLLER_BEFORE_FUNC "pdk_sc_bf_fn" +#define PRIVATE_DATA_KEY_SCROLLER_BEFORE_FUNC_DATA "pdk_sc_bf_fn_d" +#define PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC "pdk_sc_af_fn" +#define PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC_DATA "pdk_sc_af_fn_d" + + + +static void _mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Ecore_Timer *timer = NULL; + Evas_Object *layout = data; + Evas_Object *scroller = obj; + scroller_info_s *scroller_info = NULL; + + ret_if(!layout); + + home_dbus_scroll_booster_signal_send(200); + + timer = evas_object_data_del(layout, PRIVATE_DATA_KEY_HIDE_INDEX_TIMER); + if (timer) { + ecore_timer_del(timer); + timer = NULL; + } + + elm_object_signal_emit(layout, "show", "index"); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + scroller_info->mouse_down = 1; +} + + + +static void _mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Object *scroller = obj; + scroller_info_s *scroller_info = NULL; + +#if 0 //TBD + home_dbus_scroll_booster_signal_send(0); +#endif + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + scroller_info->mouse_down = 0; +} + + + +HAPI Evas_Object *scroller_get_focused_page(Evas_Object *scroller) +{ + Evas_Object *obj = NULL; + Evas_Object *cur_page = NULL; + Eina_List *list = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + int x, w; + int half_line, whole_line, pad; + + retv_if(!scroller, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + pad = (scroller_info->root_width - scroller_info->page_width) / 2; + half_line = scroller_info->root_width / 2; + whole_line = scroller_info->root_width; + + list = elm_box_children_get(scroller_info->box); + if (!list) return NULL; + + EINA_LIST_FREE(list, obj) { + continue_if(!obj); + if (cur_page) continue; + + page_info = evas_object_data_get(obj, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + + if (!page_info->appended) { + _D("Page(%p) is not appended yet", obj); + continue; + } + + evas_object_geometry_get(obj, &x, NULL, &w, NULL); + if (!w) continue; + if (x + w > half_line && x <= whole_line - pad) { + cur_page = obj; + } else if (x <= half_line && x >= pad) { + cur_page = obj; + } + } + + return cur_page; +} + + + +static int _set_scroller_reverse_by_page(Evas_Object *scroller, Evas_Object *target_page) +{ + Evas_Object *focus_page = NULL; + Evas_Object *tmp = NULL; + Eina_List *list = NULL; + const Eina_List *l; + scroller_info_s *scroller_info = NULL; + int after_focus = 0; + + retv_if(!scroller, 0); + + focus_page = scroller_get_focused_page(scroller); + if (!focus_page) return 0; + + /* Center */ + if (focus_page == target_page) return 0; + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, 0); + + list = elm_box_children_get(scroller_info->box); + if (!list) return 0; + + EINA_LIST_FOREACH(list, l, tmp) { + /* if the target is focused, then it is not after_focus */ + if (tmp == target_page) break; + if (tmp == focus_page) after_focus = 1; + } + eina_list_free(list); + + /* Right side */ + if (after_focus) return 1; + + /* Left side */ + return -1; +} + + + +static void _elm_box_pack_start(Evas_Object *scroller, Evas_Object *page) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + ret_if(!page); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_TRUE, EINA_TRUE); +#endif + + _D("pack_start a page(%p) into the scroller(%p), origin_reverse(1)", page, scroller); + elm_box_pack_start(scroller_info->box, page); + /* recalculate : child box with pages -> parent box */ + elm_box_recalculate(scroller_info->box); + elm_box_recalculate(scroller_info->box_layout); +} + + + +static void _elm_box_pack_end(Evas_Object *scroller, Evas_Object *page) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + ret_if(!page); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_FALSE, EINA_FALSE); +#endif + + _D("pack_end a page(%p) into the scroller(%p), origin_reverse(0)", page, scroller); + elm_box_pack_end(scroller_info->box, page); + /* recalculate : child box with pages -> parent box */ + elm_box_recalculate(scroller_info->box); + elm_box_recalculate(scroller_info->box_layout); +} + + + +static void _elm_box_pack_before(Evas_Object *scroller, Evas_Object *page, Evas_Object *before) +{ + scroller_info_s *scroller_info = NULL; + int reverse_factor; + + ret_if(!scroller); + ret_if(!page); + ret_if(!before); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + reverse_factor = _set_scroller_reverse_by_page(scroller, before); + switch (reverse_factor) { + case -1: + case 0: +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_TRUE, EINA_TRUE); +#endif + _D("pack_before a page(%p) before a page(%p) into the scroller(%p), origin_reverse(1)", page, before, scroller); + break; + case 1: +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_FALSE, EINA_FALSE); +#endif + _D("pack_before a page(%p) before a page(%p) into the scroller(%p), origin_reverse(0)", page, before, scroller); + break; + default: + _E("Cannot reach here : %d", reverse_factor); + break; + } + + elm_box_pack_before(scroller_info->box, page, before); + /* recalculate : child box with pages -> parent box */ + elm_box_recalculate(scroller_info->box); + elm_box_recalculate(scroller_info->box_layout); +} + + + +static void _elm_box_pack_after(Evas_Object *scroller, Evas_Object *page, Evas_Object *after) +{ + scroller_info_s *scroller_info = NULL; + int reverse_factor; + + ret_if(!scroller); + ret_if(!page); + ret_if(!after); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + reverse_factor = _set_scroller_reverse_by_page(scroller, after); + switch (reverse_factor) { + case -1: +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_TRUE, EINA_TRUE); +#endif + _D("pack_after a page(%p) after a page(%p) into the scroller(%p), origin_reverse(1)", page, after, scroller); + break; + case 0: + case 1: +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_FALSE, EINA_FALSE); +#endif + _D("pack_after a page(%p) after a page(%p) into the scroller(%p), origin_reverse(0)", page, after, scroller); + break; + default: + _E("Cannot reach here : %d", reverse_factor); + break; + } + + elm_box_pack_after(scroller_info->box, page, after); + /* recalculate : child box with pages -> parent box */ + elm_box_recalculate(scroller_info->box); + elm_box_recalculate(scroller_info->box_layout); +} + + + +static void _elm_box_unpack(Evas_Object *scroller, Evas_Object *page) +{ + scroller_info_s *scroller_info = NULL; + int reverse_factor; + + ret_if(!scroller); + ret_if(!page); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + ret_if(!scroller_info->box); + + int is_page_exist = 0; + Evas_Object *tmp = NULL; + Eina_List *list = elm_box_children_get(scroller_info->box); + EINA_LIST_FREE(list, tmp) { + continue_if(!tmp); + + if (page == tmp) { + is_page_exist = 1; + } + } + + if (is_page_exist == 0) { + _D("No page to unpack"); + return; + } + + reverse_factor = _set_scroller_reverse_by_page(scroller, page); + switch (reverse_factor) { + case -1: +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_TRUE, EINA_TRUE); +#endif + _D("unpack a page(%p) from the scroller(%p), origin_reverse(1)", page, scroller); + break; + case 0: + case 1: +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_FALSE, EINA_FALSE); +#endif + _D("unpack a page(%p) from the scroller(%p), origin_reverse(0)", page, scroller); + break; + default: + _E("Cannot reach here : %d", reverse_factor); + break; + } + + elm_object_focus_set(page, EINA_FALSE); + elm_box_unpack(scroller_info->box, page); + /* recalculate : child box with pages -> parent box */ + elm_box_recalculate(scroller_info->box); + elm_box_recalculate(scroller_info->box_layout); +} + + + +static Eina_Bool _hide_index_timer_cb(void *data) +{ + Evas_Object *scroller = data; + scroller_info_s *scroller_info = NULL; + + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, ECORE_CALLBACK_CANCEL); + + layout_hide_index(scroller_info->layout); + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_HIDE_INDEX_TIMER); + + return ECORE_CALLBACK_CANCEL; +} + + + +static Evas_Object *_select_singular_index(Evas_Object *scroller) +{ + Evas_Object *cur_page; + scroller_info_s *scroller_info = NULL; + page_direction_e direction; + + retv_if(!scroller, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + cur_page = scroller_get_focused_page(scroller); + retv_if(!cur_page, NULL); + + direction = scroller_get_current_page_direction(scroller); + switch (direction) { + case PAGE_DIRECTION_LEFT: + if (scroller_info->index[PAGE_DIRECTION_LEFT]) { + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_LEFT], cur_page); + } + return scroller_info->index[PAGE_DIRECTION_LEFT]; + case PAGE_DIRECTION_CENTER: + if (scroller_info->index[PAGE_DIRECTION_LEFT]) { + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_LEFT], cur_page); + } + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_RIGHT], cur_page); + } + break; + case PAGE_DIRECTION_RIGHT: + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_RIGHT], cur_page); + } + return scroller_info->index[PAGE_DIRECTION_RIGHT]; + default: + _E("Cannot reach here"); + break; + } + + return NULL; +} + + + +#define HIDE_TIME 1.0f +static Evas_Object *_select_plural_index(Evas_Object *scroller) +{ + Evas_Object *cur_page = NULL; + Ecore_Timer *hide_timer = NULL; + scroller_info_s *scroller_info = NULL; + page_direction_e direction; + + retv_if(!scroller, NULL); + + hide_timer = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_HIDE_INDEX_TIMER); + if (hide_timer) { + ecore_timer_del(hide_timer); + hide_timer = NULL; + } + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + cur_page = scroller_get_focused_page(scroller); + retv_if(!cur_page, NULL); + + direction = scroller_get_current_page_direction(scroller); + switch (direction) { + case PAGE_DIRECTION_LEFT: + layout_show_left_index(scroller_info->layout); + if (scroller_info->index[PAGE_DIRECTION_LEFT]) { + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_LEFT], cur_page); + } + hide_timer = ecore_timer_add(HIDE_TIME, _hide_index_timer_cb, scroller); + if (hide_timer) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_HIDE_INDEX_TIMER, hide_timer); + else _E("Cannot add a hide_timer"); + return scroller_info->index[PAGE_DIRECTION_LEFT]; + case PAGE_DIRECTION_CENTER: + if (scroller_info->index[PAGE_DIRECTION_LEFT]) { + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_LEFT], cur_page); + } + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_RIGHT], cur_page); + } + layout_hide_index(scroller_info->layout); + break; + case PAGE_DIRECTION_RIGHT: + layout_show_right_index(scroller_info->layout); + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_RIGHT], cur_page); + } + hide_timer = ecore_timer_add(HIDE_TIME, _hide_index_timer_cb, scroller); + if (hide_timer) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_HIDE_INDEX_TIMER, hide_timer); + else _E("Cannot add a hide_timer"); + return scroller_info->index[PAGE_DIRECTION_RIGHT]; + default: + break; + } + + return NULL; +} + + + +static void _anim_start_cb(void *data, Evas_Object *scroller, void *event_info) +{ + _D("start the scroller(%p) animation", scroller); +} + + + +static void _anim_stop_cb(void *data, Evas_Object *scroller, void *event_info) +{ + scroller_info_s *scroller_info = NULL; + Evas_Object *page = NULL; + Evas_Coord x, w; + + _D("stop the scroller(%p) animation", scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + elm_scroller_region_get(scroller, &x, NULL, &w, NULL); + if (0 == x % scroller_info->page_width) { + /* If TTS is off, unpack or pack page_inners */ + if (main_get_info()->is_tts) { + page = scroller_get_focused_page(scroller); + page_focus(page); + } + } +} + + + +static void _drag_start_cb(void *data, Evas_Object *scroller, void *event_info) +{ + _D("start to drag the scroller(%p)", scroller); +} + + + +static void _drag_stop_cb(void *data, Evas_Object *scroller, void *event_info) +{ + _D("stop to drag the scroller(%p) animation", scroller); +} + + + +static void _scroll_cb(void *data, Evas_Object *scroller, void *event_info) +{ + double loop_time = 0.0; + static double last_boosted_time = 0.0; + scroller_info_s *scroller_info = NULL; + layout_info_s *layout_info = NULL; + int x, w; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + loop_time = ecore_loop_time_get(); + if (last_boosted_time == 0.0) { + last_boosted_time = loop_time; + } else { + if ((loop_time - last_boosted_time) >= 2.5) { +#if 0 // TBD + home_dbus_scroll_booster_signal_send(2000); +#endif + last_boosted_time = loop_time; + } + } + + /* 1. Focus */ + elm_scroller_region_get(scroller, &x, NULL, &w, NULL); + if (0 == x % scroller_info->page_width) { + /* Page is on the edge */ + scroller_info->scrolling = 0; + if (main_get_info()->is_tts) { + scroller_restore_inner_focus(scroller); + } + } else { + /* Page is not on the edge */ + if (!scroller_info->scrolling) { + scroller_info->scrolling = 1; + if (main_get_info()->is_tts) { + scroller_backup_inner_focus(scroller); + } + } + } + + /* 2. Index */ + layout_info = evas_object_data_get(scroller_info->layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + /* When an user is reordering pages now, index has not to be updated */ + if (!scroller_info->scroll_index) return; + + switch (scroller_info->index_number) { + case SCROLLER_INDEX_SINGULAR: + _select_singular_index(scroller); + break; + case SCROLLER_INDEX_PLURAL: + _select_plural_index(scroller); + break; + default: + _E("Cannot reach here"); + break; + } +} + + + +static w_home_error_e _resume_result_cb(void *data) +{ + Evas_Object *scroller = data; + scroller_info_s *scroller_info = NULL; + + retv_if(!scroller, W_HOME_ERROR_INVALID_PARAMETER); + + _D("Activate the rotary events for Home"); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, W_HOME_ERROR_FAIL); + retv_if(!scroller_info->box, W_HOME_ERROR_FAIL); + + eext_rotary_object_event_activated_set(scroller, EINA_TRUE); + + return W_HOME_ERROR_NONE; +} + + + +static Eina_Bool _rotary_cb(void *data, Evas_Object *obj, Eext_Rotary_Event_Info *rotary_info) +{ + Evas_Object *scroller = obj; + Evas_Object *cur = NULL; + Evas_Object *next = NULL; + + retv_if(!scroller, ECORE_CALLBACK_PASS_ON); + + cur = scroller_get_focused_page(scroller); + retv_if(!cur, ECORE_CALLBACK_PASS_ON); + + _D("Detent detected, obj[%p], direction[%d], timeStamp[%u]", obj, rotary_info->direction, rotary_info->time_stamp); + if (rotary_info->direction == EEXT_ROTARY_DIRECTION_CLOCKWISE) { + next = scroller_get_right_page(scroller, cur); + } else { + next = scroller_get_left_page(scroller, cur); + } + if (next) { + scroller_bring_in_page(scroller, next, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT); + } + + return ECORE_CALLBACK_PASS_ON; +} + + + +static void _init_rotary(Evas_Object *scroller) +{ + ret_if(!scroller); + + _D("lnitialize the rotary event"); + + eext_rotary_object_event_callback_add(scroller, _rotary_cb, NULL); + if (W_HOME_ERROR_NONE != main_register_cb(APP_STATE_RESUME, _resume_result_cb, scroller)) { + _E("Cannot register the pause callback"); + } + scroller_unfreeze(scroller); +} + + + +static void _destroy_rotary(Evas_Object *scroller) +{ + ret_if(!scroller); + + _D("Finish the rotary event"); + + eext_rotary_object_event_callback_del(scroller, _rotary_cb); + main_unregister_cb(APP_STATE_RESUME, _resume_result_cb); + scroller_unfreeze(scroller); +} + + + +HAPI void scroller_destroy(Evas_Object *parent) +{ + Evas_Object *scroller = NULL; + scroller_info_s *scroller_info = NULL; + + ret_if(!parent); + + scroller = elm_object_part_content_unset(parent, "scroller"); + ret_if(!scroller); + + _destroy_rotary(scroller); + + evas_object_data_del(parent, DATA_KEY_SCROLLER); + scroller_info = evas_object_data_del(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + evas_object_data_del(scroller, DATA_KEY_INDEX); + + if (scroller_info->index_update_timer) { + ecore_timer_del(scroller_info->index_update_timer); + scroller_info->index_update_timer = NULL; + } + + evas_object_del(scroller_info->box); + evas_object_del(scroller_info->box_layout); + + free(scroller_info); + evas_object_del(scroller); +} + + + +HAPI void scroller_focus(Evas_Object *scroller) +{ + Evas_Object *page = NULL; + + ret_if(!scroller); + + page = scroller_get_focused_page(scroller); + if (!page) return; + + page_focus(page); +} + + + +HAPI void scroller_highlight(Evas_Object *scroller) +{ + Evas_Object *page = NULL; + Eina_List *list = NULL; + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + ret_if(!scroller_info->box); + scroller_info->enable_highlight = 1; + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + EINA_LIST_FREE(list, page) { + page_highlight(page); + } +} + + + +HAPI void scroller_unhighlight(Evas_Object *scroller) +{ + Evas_Object *page = NULL; + Eina_List *list = NULL; + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + ret_if(!scroller_info->box); + scroller_info->enable_highlight = 0; + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + EINA_LIST_FREE(list, page) { + page_unhighlight(page); + } +} + + + +HAPI Evas_Object *scroller_create(Evas_Object *layout, Evas_Object *parent, int page_width, int page_height, scroller_index_e index_number) +{ + Evas_Object *scroller = NULL; + Evas_Object *box_layout = NULL; + Evas_Object *box = NULL; + scroller_info_s *scroller_info = NULL; + + retv_if(!parent, NULL); + + scroller = elm_scroller_add(parent); + retv_if(!scroller, NULL); + + scroller_info = calloc(1, sizeof(scroller_info_s)); + if (!scroller_info) { + _E("Cannot calloc for scroller_info"); + evas_object_del(scroller); + return NULL; + } + evas_object_data_set(scroller, DATA_KEY_SCROLLER_INFO, scroller_info); + evas_object_data_set(parent, DATA_KEY_SCROLLER, scroller); + evas_object_data_set(scroller, DATA_KEY_INDEX, NULL); + + elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE); + elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_scroller_page_scroll_limit_set(scroller, 1, 1); + elm_scroller_content_min_limit(scroller, EINA_FALSE, EINA_TRUE); + elm_scroller_single_direction_set(scroller, ELM_SCROLLER_SINGLE_DIRECTION_HARD); + elm_scroller_page_size_set(scroller, page_width, page_height); + evas_object_smart_callback_add(scroller, "scroll", _scroll_cb, NULL); + + elm_object_style_set(scroller, "effect"); + evas_object_show(scroller); + elm_object_scroll_lock_y_set(scroller, EINA_TRUE); + elm_object_part_content_set(parent, "scroller", scroller); + + evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, layout); + evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, layout); + evas_object_smart_callback_add(scroller, "scroll,anim,start", _anim_start_cb, NULL); + evas_object_smart_callback_add(scroller, "scroll,anim,stop", _anim_stop_cb, NULL); + evas_object_smart_callback_add(scroller, "scroll,drag,start", _drag_start_cb, NULL); + evas_object_smart_callback_add(scroller, "scroll,drag,stop", _drag_stop_cb, NULL); + + /* Use the parent between box and scroller because of alignment of a page in the box. */ + box_layout = elm_box_add(scroller); + if (!box_layout) { + _E("Cannot create box_layout"); + evas_object_del(scroller); + return NULL; + } + elm_box_horizontal_set(box_layout, EINA_TRUE); + /* The weight of box_layout has to be set as EVAS_HINT_EXPAND on y-axis. */ + evas_object_size_hint_weight_set(box_layout, 0.0, EVAS_HINT_EXPAND); + evas_object_show(box_layout); + + elm_object_content_set(scroller, box_layout); + + box = elm_box_add(box_layout); + if (!box) { + _E("Cannot create box"); + evas_object_del(box_layout); + evas_object_del(scroller); + return NULL; + } + + elm_box_horizontal_set(box, EINA_TRUE); + /* The alignment of box has to be set as 0.0, 0.5 for pages */ + elm_box_align_set(box, 0.0, 0.5); + evas_object_size_hint_weight_set(box, 0.0, EVAS_HINT_EXPAND); + evas_object_show(box); + + elm_box_pack_end(box_layout, box); + + scroller_info->root_width = main_get_info()->root_w; + scroller_info->root_height = main_get_info()->root_h; + scroller_info->page_width = page_width; + scroller_info->page_height = page_height; + scroller_info->index_number = index_number; + + scroller_info->layout = layout; + scroller_info->parent = parent; + scroller_info->box_layout = box_layout; + scroller_info->box = box; + + scroller_info->scroll_focus = 1; + scroller_info->scroll_index = 1; + + _init_rotary(scroller); + + return scroller; +} + + + +HAPI w_home_error_e scroller_push_page_before(Evas_Object *scroller, Evas_Object *page, Evas_Object *before) +{ + Evas_Object *tmp = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + int center_check = 0; + + retv_if(!scroller, W_HOME_ERROR_FAIL); + retv_if(!page, W_HOME_ERROR_FAIL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, W_HOME_ERROR_FAIL); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, W_HOME_ERROR_FAIL); + + _elm_box_unpack(scroller, page); + if (before) _elm_box_pack_before(scroller, page, before); + else _elm_box_pack_end(scroller, page); + + list = elm_box_children_get(scroller_info->box); + + EINA_LIST_FOREACH_SAFE(list, l, ln, tmp) { + continue_if(!tmp); + + if (scroller_info->center == tmp) center_check = 1; + if (page == tmp) { + if (center_check) page_info->direction = PAGE_DIRECTION_RIGHT; + else page_info->direction = PAGE_DIRECTION_LEFT; + break; + } + } + eina_list_free(list); + + if (scroller_info->index[PAGE_DIRECTION_LEFT]) { + index_update(scroller_info->index[PAGE_DIRECTION_LEFT], scroller, INDEX_BRING_IN_NONE); + } + + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_update(scroller_info->index[PAGE_DIRECTION_RIGHT], scroller, INDEX_BRING_IN_NONE); + } + + return W_HOME_ERROR_NONE; +} + + + +HAPI w_home_error_e scroller_push_page_after(Evas_Object *scroller, Evas_Object *page, Evas_Object *after) +{ + Evas_Object *tmp = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + int center_check = 0; + + retv_if(!scroller, W_HOME_ERROR_FAIL); + retv_if(!page, W_HOME_ERROR_FAIL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, W_HOME_ERROR_FAIL); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, W_HOME_ERROR_FAIL); + + _elm_box_unpack(scroller, page); + if (after) _elm_box_pack_after(scroller, page, after); + else _elm_box_pack_start(scroller, page); + + list = elm_box_children_get(scroller_info->box); + + EINA_LIST_FOREACH_SAFE(list, l, ln, tmp) { + continue_if(!tmp); + + if (scroller_info->center == tmp) center_check = 1; + if (page == tmp) { + if (center_check) page_info->direction = PAGE_DIRECTION_RIGHT; + else page_info->direction = PAGE_DIRECTION_LEFT; + break; + } + } + eina_list_free(list); + + if (scroller_info->index[PAGE_DIRECTION_LEFT]) { + index_update(scroller_info->index[PAGE_DIRECTION_LEFT], scroller, INDEX_BRING_IN_NONE); + } + + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_update(scroller_info->index[PAGE_DIRECTION_RIGHT], scroller, INDEX_BRING_IN_NONE); + } + + return W_HOME_ERROR_NONE; +} + + + +static Eina_Bool _index_update_cb(void *data) +{ + Evas_Object *scroller = data; + scroller_info_s *scroller_info = NULL; + + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, ECORE_CALLBACK_CANCEL); + + scroller_info->index_update_timer = NULL; + + if (scroller_info->index[PAGE_DIRECTION_LEFT]) { + index_update(scroller_info->index[PAGE_DIRECTION_LEFT], scroller, INDEX_BRING_IN_AFTER); + } + + if (scroller_info->index[PAGE_DIRECTION_RIGHT]) { + index_update(scroller_info->index[PAGE_DIRECTION_RIGHT], scroller, INDEX_BRING_IN_AFTER); + } + + _D("Index is updated"); + + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI w_home_error_e scroller_push_page(Evas_Object *scroller, Evas_Object *page, scroller_push_type_e scroller_type) +{ + Evas_Object *tmp = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + + retv_if(!scroller, W_HOME_ERROR_FAIL); + retv_if(!page, W_HOME_ERROR_FAIL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, W_HOME_ERROR_FAIL); + + if (scroller_info->index_update_timer) { + ecore_timer_del(scroller_info->index_update_timer); + scroller_info->index_update_timer = NULL; + } + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, W_HOME_ERROR_FAIL); + + switch (scroller_type) { + case SCROLLER_PUSH_TYPE_FIRST: + case SCROLLER_PUSH_TYPE_CENTER_LEFT: + case SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_LEFT: + page_info->direction = PAGE_DIRECTION_LEFT; + break; + case SCROLLER_PUSH_TYPE_CENTER: + page_info->direction = PAGE_DIRECTION_CENTER; + break; + case SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_RIGHT: + case SCROLLER_PUSH_TYPE_CENTER_RIGHT: + case SCROLLER_PUSH_TYPE_LAST: + default: + page_info->direction = PAGE_DIRECTION_RIGHT; + break; + } + + if (!scroller_info->center) { + switch (scroller_type) { + case SCROLLER_PUSH_TYPE_CENTER_LEFT: + case SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_LEFT: + case SCROLLER_PUSH_TYPE_CENTER_RIGHT: + case SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_RIGHT: + scroller_type = SCROLLER_PUSH_TYPE_LAST; + break; + case SCROLLER_PUSH_TYPE_CENTER: + scroller_type = SCROLLER_PUSH_TYPE_LAST; + scroller_info->center = page; + break; + default: + break; + } + } + + switch (scroller_type) { + case SCROLLER_PUSH_TYPE_FIRST: + _elm_box_unpack(scroller, page); + _elm_box_pack_start(scroller, page); + break; + case SCROLLER_PUSH_TYPE_CENTER_LEFT: + _elm_box_unpack(scroller, page); + + tmp = (scroller_info->center_neighbor_left && scroller_info->center_neighbor_left != page) ? + scroller_info->center_neighbor_left : scroller_info->center; + _elm_box_pack_before(scroller, page, tmp); + break; + case SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_LEFT: + if (scroller_info->center_neighbor_left) { + _elm_box_unpack(scroller, scroller_info->center_neighbor_left); + } + _elm_box_pack_before(scroller, page, scroller_info->center); + scroller_info->center_neighbor_left = page; + break; + case SCROLLER_PUSH_TYPE_CENTER: + _elm_box_pack_after(scroller, page, scroller_info->center); + _elm_box_unpack(scroller, scroller_info->center); + + if (evas_object_data_del(scroller_info->center, PRIVATE_DATA_KEY_IS_DUMMY) != NULL) { + page_destroy(scroller_info->center); + } + scroller_info->center = page; + break; + case SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_RIGHT: + if (scroller_info->center_neighbor_right) { + _elm_box_unpack(scroller, scroller_info->center_neighbor_right); + } + _elm_box_pack_after(scroller, page, scroller_info->center); + scroller_info->center_neighbor_right = page; + break; + case SCROLLER_PUSH_TYPE_CENTER_RIGHT: + _elm_box_unpack(scroller, page); + tmp = scroller_info->center_neighbor_right && scroller_info->center_neighbor_right != page ? + scroller_info->center_neighbor_right : scroller_info->center; + _elm_box_pack_after(scroller, page, tmp); + break; + case SCROLLER_PUSH_TYPE_LAST: + default: + _elm_box_unpack(scroller, page); + _elm_box_pack_end(scroller, page); + break; + } + + scroller_info->index_update_timer = ecore_timer_add(INDEX_UPDATE_TIME, _index_update_cb, scroller); + if (!scroller_info->index_update_timer) { + _E("Cannot add an index update timer"); + } + + return W_HOME_ERROR_NONE; +} + + + +HAPI Evas_Object *scroller_pop_page(Evas_Object *scroller, Evas_Object *page) +{ + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + Evas_Object *tmp_page = NULL; + page_info_s *page_info = NULL; + int count = 0; + + retv_if(!scroller, NULL); + retv_if(!page, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + if (scroller_info->index_update_timer) { + ecore_timer_del(scroller_info->index_update_timer); + scroller_info->index_update_timer = NULL; + } + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(NULL == list, NULL); + + if (scroller_info->center == page) { + _D("The center will be removed"); + scroller_info->center = NULL; + } + + if (scroller_info->center_neighbor_left == page) { + _D("The neighbor left will be removed"); + scroller_info->center_neighbor_left = NULL; + } + + if (scroller_info->center_neighbor_right == page) { + _D("The neighbor right will be removed"); + scroller_info->center_neighbor_right = NULL; + } + + count = eina_list_count(list); + EINA_LIST_FOREACH_SAFE(list, l, ln, tmp_page) { + if (page != tmp_page) continue; + _elm_box_unpack(scroller, page); + + scroller_info->index_update_timer = ecore_timer_add(INDEX_UPDATE_TIME, _index_update_cb, scroller); + if (!scroller_info->index_update_timer) { + _E("Cannot add an index update timer"); + } + + if (1 == count) { + _D("There is only one page"); + eina_list_free(list); + return page; + } + + eina_list_free(list); + return page; + } + + eina_list_free(list); + + return NULL; +} + + + +static void _change_favorites_order_cb(keynode_t *node, void *data) +{ + int value = -1; + + _D("Change favorites order"); + + /* check Emergency Mode */ + if(emergency_mode_enabled_get()) { + _E("emergency mode enabled"); + return; + } + + // 0 : init, 1 : backup request, 2 : restore request, 3: write done + if(vconf_get_int(VCONF_KEY_WMS_FAVORITES_ORDER, &value) < 0) { + _E("Failed to get VCONF_KEY_WMS_FAVORITES_ORDER"); + return; + } + + _D("Change favorites order vconf:[%d]", value); + + wms_change_favorite_order(value); +} + + + +static Eina_Bool _push_all_page_cb(void *data) +{ + Evas_Object *scroller = data; + Eina_List *page_info_list = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + + void (*after_func)(void *); + void *after_func_data = NULL; + static int i = 0; + int count = 0; + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, ECORE_CALLBACK_CANCEL); + + page_info_list = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_LIST); + if (!page_info_list) { + _W("page_info_list is NULL"); + goto END; + } + + page_info = eina_list_nth(page_info_list, i); + if (!page_info) { + if (!i) { + _W("page_info_list is zero"); + } + goto END; + } + i++; + + page_info->item = widget_create(scroller, page_info->id, page_info->subid, page_info->period); + if (!page_info->item) { + _E("cannot create a widget"); + return ECORE_CALLBACK_RENEW; + } + widget_viewer_evas_disable_loading(page_info->item); + evas_object_resize(page_info->item, scroller_info->page_width, scroller_info->page_height); + evas_object_size_hint_min_set(page_info->item, scroller_info->page_width, scroller_info->page_height); + evas_object_show(page_info->item); + + page_info->page = page_create(scroller + , page_info->item + , page_info->id, page_info->subid + , scroller_info->page_width, scroller_info->page_height + , PAGE_CHANGEABLE_BG_ON, PAGE_REMOVABLE_ON); + if (!page_info->page) { + evas_object_del(page_info->item); + _E("cannot create a page"); + goto END; + } + widget_add_callback(page_info->item, page_info->page); + + page_set_effect(page_info->page, page_effect_none, page_effect_none); + scroller_push_page(scroller, page_info->page, SCROLLER_PUSH_TYPE_LAST); + + return ECORE_CALLBACK_RENEW; + +END: + /* If there are 7 pages, do not append the plus page */ + count = scroller_count_direction(scroller, PAGE_DIRECTION_RIGHT); + if (count < MAX_WIDGET + && !main_get_info()->is_tts + && page_create_plus_page(scroller)) + { + page_set_effect(scroller_info->plus_page, page_effect_none, page_effect_none); + scroller_push_page(scroller, scroller_info->plus_page, SCROLLER_PUSH_TYPE_LAST); + } + + after_func = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC); + after_func_data = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC_DATA); + + if (after_func) { + after_func(after_func_data); + } + + _W("It's done to push all the pages(%d)", i); + i = 0; + + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_PUSH_ALL_TIMER); + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_LIST); + + if (!main_get_booting_state()) { + _W("First boot"); + main_inc_booting_state(); + _change_favorites_order_cb(NULL, NULL); + + /* wms vconf has to be dealt after pushing pages */ + if (vconf_notify_key_changed(VCONF_KEY_WMS_FAVORITES_ORDER, _change_favorites_order_cb, NULL) < 0) { + _E("Failed to register the changed_apps_order callback"); + } + } + + /* Key register */ + key_register(); + + if (main_get_info()->is_tts) { + _W("TTS Mode : Do not save orders of widgets"); + return ECORE_CALLBACK_CANCEL; + } + + /* Widgets can be removed before launching w-home */ + /* But, we do not need to refresh the DB */ + count = scroller_count_direction(scroller, PAGE_DIRECTION_RIGHT); + if (count <= 1) { + _E("Right page is only one or zero"); + } + + wms_change_favorite_order(W_HOME_WMS_BACKUP); + + return ECORE_CALLBACK_CANCEL; +} + + + +/* This dummy will be destroyed by the clock */ +static w_home_error_e _dummy_center(Evas_Object *scroller) +{ + Evas_Object *page = NULL; + Evas_Object *center = NULL; + scroller_info_s *scroller_info = NULL; + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, W_HOME_ERROR_FAIL); + + center = evas_object_rectangle_add(main_get_info()->e); + retv_if(!center, W_HOME_ERROR_FAIL); + + page = page_create(scroller + , center + , NULL, NULL + , scroller_info->page_width, scroller_info->page_height + , PAGE_CHANGEABLE_BG_OFF, PAGE_REMOVABLE_OFF); + if (!page) { + _E("Cannot create a page"); + evas_object_del(center); + return W_HOME_ERROR_FAIL; + } + + evas_object_data_set(page, PRIVATE_DATA_KEY_IS_DUMMY, (void*)1); + page_set_effect(scroller_info->plus_page, page_effect_none, page_effect_none); + scroller_push_page(scroller, page, SCROLLER_PUSH_TYPE_CENTER); + + return W_HOME_ERROR_NONE; +} + + + +HAPI w_home_error_e scroller_push_pages(Evas_Object *scroller, Eina_List *page_info_list, void (*after_func)(void *), void *data) +{ + Ecore_Timer *timer = NULL; + scroller_info_s *scroller_info = NULL; + + retv_if(!scroller, W_HOME_ERROR_INVALID_PARAMETER); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, W_HOME_ERROR_FAIL); + + timer = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_PUSH_ALL_TIMER); + if (timer) { + _D("There is already a timer for popping all items."); + ecore_timer_del(timer); + timer = NULL; + } + + if (!scroller_info->center && W_HOME_ERROR_NONE != _dummy_center(scroller)) { + _E("Cannot create a dummy clock"); + } + + /* We have to prevent pushing pages doubly */ + /* We don't need to care about LEFT pages according to UIG */ + scroller_pop_pages(scroller, PAGE_DIRECTION_RIGHT); + + timer = ecore_timer_add(0.01f, _push_all_page_cb, scroller); + if (!timer) { + _E("Cannot add a timer"); + return W_HOME_ERROR_FAIL; + } + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_PUSH_ALL_TIMER, timer); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_LIST, page_info_list); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC, after_func); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC_DATA, data); + + return W_HOME_ERROR_NONE; +} + + + +HAPI void scroller_pop_pages(Evas_Object *scroller, page_direction_e direction) +{ + Evas_Object *page = NULL; + Eina_List *list = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + + ret_if(!scroller); + + _W("pop all the pages"); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + switch (direction) { + case PAGE_DIRECTION_LEFT: + scroller_info->center_neighbor_left = NULL; + break; + case PAGE_DIRECTION_CENTER: + scroller_info->center = NULL; + break; + case PAGE_DIRECTION_RIGHT: + scroller_info->center_neighbor_right = NULL; + page_destroy_plus_page(scroller); + break; + case PAGE_DIRECTION_ANY: + scroller_info->center_neighbor_left = NULL; + scroller_info->center = NULL; + scroller_info->center_neighbor_right = NULL; + page_destroy_plus_page(scroller); + break; + default: + _E("Cannot reach here"); + break; + } + + list = elm_box_children_get(scroller_info->box); + if (!list) return; + + EINA_LIST_FREE(list, page) { + continue_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + + if (PAGE_DIRECTION_ANY != direction + && direction != page_info->direction) + { + continue; + } + + if (PAGE_DIRECTION_RIGHT == page_info->direction) { + evas_object_del(page_info->item); + } + + scroller_pop_page(scroller, page); + page_destroy(page); + } +} + + + +HAPI int scroller_count(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + Eina_List *list = NULL; + int count; + + retv_if(NULL == scroller, 0); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, 0); + + list = elm_box_children_get(scroller_info->box); + if (NULL == list) return 0; + + count = eina_list_count(list); + eina_list_free(list); + + return count; +} + + + +HAPI int scroller_count_direction(Evas_Object *scroller, page_direction_e direction) +{ + Evas_Object *page = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + Eina_List *list = NULL; + int count = 0; + + retv_if(NULL == scroller, 0); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, 0); + + list = elm_box_children_get(scroller_info->box); + if (NULL == list) return 0; + + EINA_LIST_FREE(list, page) { + continue_if(!page); + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + + if (page_info->direction == direction) count++; + } + + return count; +} + + + +HAPI Eina_Bool scroller_is_scrolling(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + retv_if(!scroller, EINA_FALSE); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, EINA_FALSE); + + return scroller_info->scrolling? EINA_TRUE:EINA_FALSE; +} + + + +HAPI void scroller_freeze(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + elm_object_scroll_freeze_push(scroller_info->box); +} + + + +HAPI void scroller_unfreeze(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(NULL == scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + while (elm_object_scroll_freeze_get(scroller_info->box)) { + elm_object_scroll_freeze_pop(scroller_info->box); + } +} + + + +static inline int _get_index_in_list(Evas_Object *box, Evas_Object *page) +{ + Evas_Object *tmp = NULL; + Eina_List *list = NULL; + + list = elm_box_children_get(box); + retv_if(!list, 0); + + int exist = 1; + int i = 0; + + EINA_LIST_FREE(list, tmp) { + continue_if(!tmp); + if (tmp == page) + exist = 0; + i += exist; + } + + if (exist) { + i = 0; + } + return i; +} + + + +static inline void _page_bring_in(Evas_Object *scroller, int index, scroller_freeze_e is_freezed) +{ + Evas_Object *page = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + int cur_freezed = 0; + + page = scroller_get_page_at(scroller, index); + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + cur_freezed = elm_object_scroll_freeze_get(scroller_info->box); + + if (is_freezed) scroller_unfreeze(scroller); +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_FALSE, EINA_FALSE); +#endif + _D("Bring in now : %d(%p)", index, page); + elm_scroller_page_bring_in(scroller, index, 0); + if (is_freezed && cur_freezed) scroller_freeze(scroller); + if (scroller_info->index[page_info->direction]) { + index_bring_in_page(scroller_info->index[page_info->direction], page); + } +} + + + +static inline void _page_show(Evas_Object *scroller, int index, scroller_freeze_e is_freezed) +{ + Evas_Object *page = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + int cur_freezed = 0; + + page = scroller_get_page_at(scroller, index); + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + cur_freezed = elm_object_scroll_freeze_get(scroller_info->box); + + if (is_freezed) scroller_unfreeze(scroller); +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_FALSE, EINA_FALSE); +#endif + _D("Page show now : %d(%p)", index, page); + elm_scroller_page_show(scroller, index, 0); + if (is_freezed && cur_freezed) scroller_freeze(scroller); + if (scroller_info->index[page_info->direction]) { + index_bring_in_page(scroller_info->index[page_info->direction], page); + } +} + + + +static Eina_Bool _bring_in_anim_cb(void *data) +{ + Evas_Object *scroller = data; + int i = 0; + int is_freezed = 0; + + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + + i = (int) evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE); + is_freezed = (int) evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED); + + _page_bring_in(scroller, i, is_freezed); + + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM); + return ECORE_CALLBACK_CANCEL; +} + + + +static void _bring_in_job_cb(void *data) +{ + Evas_Object *scroller = data; + int i = 0; + int is_freezed = 0; + + ret_if(!scroller); + + i = (int) evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE); + is_freezed = (int) evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED); + + _page_bring_in(scroller, i, is_freezed); + + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB); +} + + + +HAPI void scroller_bring_in_by_push_type(Evas_Object *scroller, scroller_push_type_e push_type, scroller_freeze_e freeze, scroller_bring_type_e bring_type) +{ + Evas_Object *page = NULL; + Ecore_Animator *anim = NULL; + Ecore_Job *job = NULL; + scroller_info_s *scroller_info = NULL; + int i = 0; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + switch (push_type) { + case SCROLLER_PUSH_TYPE_CENTER: + page = scroller_info->center; + break; + case SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_LEFT: + page = scroller_info->center_neighbor_left; + if (page == NULL) { + page = scroller_get_left_page(scroller, scroller_info->center); + } + break; + case SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_RIGHT: + page = scroller_info->center_neighbor_right; + if (page == NULL) { + page = scroller_get_right_page(scroller, scroller_info->center); + } + break; + default: + _E("Unsupported push-type:%d", push_type); + break; + } + ret_if(!page); + i = _get_index_in_list(scroller_info->box, page); + + /* 1. Remove the old action */ + job = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB); + if (job) ecore_job_del(job); + + anim = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM); + if (anim) ecore_animator_del(anim); + + /* 2. Append the new timer */ + switch (bring_type) { + case SCROLLER_BRING_TYPE_INSTANT_SHOW: + _page_show(scroller, i, freeze); + break; + case SCROLLER_BRING_TYPE_INSTANT: + _page_bring_in(scroller, i, freeze); + break; + case SCROLLER_BRING_TYPE_JOB: + job = ecore_job_add(_bring_in_job_cb, scroller); + if (job) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB, job); + else _E("Cannot add a job"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE, (void *) i); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + break; + case SCROLLER_BRING_TYPE_ANIMATOR: + anim = ecore_animator_add(_bring_in_anim_cb, scroller); + if (anim) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM, anim); + else _E("Cannot add an animator"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE, (void *) i); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + break; + default: + _E("Unsupported bring_type:%d", bring_type); + break; + } +} + + + +HAPI void scroller_bring_in(Evas_Object *scroller, int i, scroller_freeze_e freeze, scroller_bring_type_e bring_type) +{ + Ecore_Animator *anim = NULL; + Ecore_Job *job = NULL; + + ret_if(!scroller); + + /* 1. Remove the old action */ + job = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB); + if (job) ecore_job_del(job); + + anim = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM); + if (anim) ecore_animator_del(anim); + + /* 2. Append the new timer */ + switch (bring_type) { + case SCROLLER_BRING_TYPE_INSTANT_SHOW: + _page_show(scroller, i, freeze); + break; + case SCROLLER_BRING_TYPE_INSTANT: + _page_bring_in(scroller, i, freeze); + break; + case SCROLLER_BRING_TYPE_JOB: + job = ecore_job_add(_bring_in_job_cb, scroller); + if (job) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB, job); + else _E("Cannot add a job"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE, (void *) i); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + break; + case SCROLLER_BRING_TYPE_ANIMATOR: + anim = ecore_animator_add(_bring_in_anim_cb, scroller); + if (anim) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM, anim); + else _E("Cannot add an animator"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE, (void *) i); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + break; + default: + _E("Unsupported bring_type:%d", bring_type); + break; + } +} + + + +HAPI void scroller_bring_in_page(Evas_Object *scroller, Evas_Object *page, scroller_freeze_e freeze, scroller_bring_type_e bring_type) +{ + scroller_info_s *scroller_info = NULL; + Ecore_Animator *anim = NULL; + Ecore_Job *job = NULL; + int i = 0; + + ret_if(!scroller); + ret_if(!page); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + i = _get_index_in_list(scroller_info->box, page); + + /* 1. Remove the old action */ + job = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB); + if (job) ecore_job_del(job); + + anim = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM); + if (anim) ecore_animator_del(anim); + + /* 2. Append the new timer */ + switch (bring_type) { + case SCROLLER_BRING_TYPE_INSTANT_SHOW: + _page_show(scroller, i, freeze); + break; + case SCROLLER_BRING_TYPE_INSTANT: + _page_bring_in(scroller, i, freeze); + break; + case SCROLLER_BRING_TYPE_JOB: + job = ecore_job_add(_bring_in_job_cb, scroller); + if (job) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB, job); + else _E("Cannot add a job"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE, (void *) i); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + break; + case SCROLLER_BRING_TYPE_ANIMATOR: + anim = ecore_animator_add(_bring_in_anim_cb, scroller); + if (anim) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM, anim); + else _E("Cannot add an animator"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE, (void *) i); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + break; + default: + _E("Unsupported bring_type:%d", bring_type); + break; + } + +} + + + +static Eina_Bool _bring_in_center_timer_cb(void *data) +{ + Evas_Object *scroller = data; + Evas_Object *page = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + void (*before_func)(void *); + void (*after_func)(void *); + void *func_data = NULL; + + int page_w = 0; + int total_x = 0; + + /* 1. Before function */ + before_func = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BEFORE_FUNC); + if (before_func) { + func_data = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BEFORE_FUNC_DATA); + before_func(func_data); + return ECORE_CALLBACK_RENEW; + } + + /* 2. Bring in */ + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, ECORE_CALLBACK_CANCEL); + + page = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_PRESSED_PAGE); + if (page) { + Evas_Object *tmp_page = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + int is_freezed = (int) evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED); + int sw, sh; + int cur_freezed = 0; + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, ECORE_CALLBACK_CANCEL); + + cur_freezed = elm_object_scroll_freeze_get(scroller_info->box); + + EINA_LIST_FOREACH_SAFE(list, l, ln, tmp_page) { + continue_if(!tmp_page); + if (tmp_page == page) break; + evas_object_geometry_get(tmp_page, NULL, NULL, &page_w, NULL); + total_x += page_w; + } + eina_list_free(list); + evas_object_geometry_get(scroller, NULL, NULL, &sw, &sh); + + if (is_freezed) scroller_unfreeze(scroller); + elm_scroller_region_bring_in(scroller, total_x, 0, sw, sh); + if (is_freezed && cur_freezed) scroller_freeze(scroller); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, ECORE_CALLBACK_RENEW); + + if (scroller_info->index[page_info->direction]) { + index_bring_in_page(scroller_info->index[page_info->direction], page); + } + + return ECORE_CALLBACK_RENEW; + } + + /* 3. After function */ + after_func = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC); + if (after_func) { + func_data = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC_DATA); + after_func(func_data); + } + + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER); + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI void scroller_bring_in_center_of(Evas_Object *scroller + , Evas_Object *page + , scroller_freeze_e freeze + , void (*before_func)(void *), void *before_data + , void (*after_func)(void *), void *after_data) +{ + scroller_info_s *scroller_info = NULL; + Ecore_Timer *timer = NULL; + + ret_if(!scroller); + ret_if(!page); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_PRESSED_PAGE, page); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BEFORE_FUNC, before_func); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BEFORE_FUNC_DATA, before_data); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC, after_func); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC_DATA, after_data); + + /* 1. Remove the old timer */ + timer = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER); + if (timer) { + ecore_timer_del(timer); + timer = NULL; + } + + /* 2. Append the new timer */ + timer = ecore_timer_add(0.01f, _bring_in_center_timer_cb, scroller); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER, timer); +} + + + +static Eina_Bool _region_show_center_timer_cb(void *data) +{ + Evas_Object *scroller = data; + Evas_Object *page = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + void (*before_func)(void *); + void (*after_func)(void *); + void *func_data = NULL; + + int page_w = 0; + int total_x = 0; + + /* 1. Before function */ + before_func = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BEFORE_FUNC); + if (before_func) { + func_data = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BEFORE_FUNC_DATA); + before_func(func_data); + return ECORE_CALLBACK_RENEW; + } + + /* 2. Bring in */ + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, ECORE_CALLBACK_CANCEL); + + page = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_PRESSED_PAGE); + if (page) { + Evas_Object *tmp_page = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + int is_freezed = (int) evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED); + int cur_freezed = 0; + int sw, sh; + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, ECORE_CALLBACK_CANCEL); + + cur_freezed = elm_object_scroll_freeze_get(scroller_info->box); + + EINA_LIST_FOREACH_SAFE(list, l, ln, tmp_page) { + continue_if(!tmp_page); + if (tmp_page == page) break; + evas_object_geometry_get(tmp_page, NULL, NULL, &page_w, NULL); + total_x += page_w; + } + eina_list_free(list); + evas_object_geometry_get(scroller, NULL, NULL, &sw, &sh); + + if (is_freezed) scroller_unfreeze(scroller); + _D("Region show now : %d", total_x); + elm_scroller_region_show(scroller, total_x, 0, sw, sh); + if (is_freezed && cur_freezed) scroller_freeze(scroller); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, ECORE_CALLBACK_RENEW); + + if (scroller_info->index[page_info->direction]) { + index_bring_in_page(scroller_info->index[page_info->direction], page); + } + + return ECORE_CALLBACK_RENEW; + } + + /* 3. After function */ + after_func = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC); + if (after_func) { + func_data = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC_DATA); + after_func(func_data); + } + + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER); + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI void scroller_region_show_center_of(Evas_Object *scroller + , Evas_Object *page + , scroller_freeze_e freeze + , void (*before_func)(void *), void *before_data + , void (*after_func)(void *), void *after_data) +{ + Ecore_Timer *timer = NULL; + + ret_if(!scroller); + ret_if(!page); + + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_PRESSED_PAGE, page); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BEFORE_FUNC, before_func); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BEFORE_FUNC_DATA, before_data); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC, after_func); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_AFTER_FUNC_DATA, after_data); + + /* 1. Remove the old timer */ + timer = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER); + if (timer) { + ecore_timer_del(timer); + timer = NULL; + } + + /* 2. Append the new timer */ + timer = ecore_timer_add(0.01f, _region_show_center_timer_cb, scroller); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER, timer); +} + + + +static inline void _page_region_show(Evas_Object *scroller, int index, scroller_freeze_e is_freezed) +{ + Evas_Object *page = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + int cur_freezed = 0; + + page = scroller_get_page_at(scroller, index); + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + elm_object_tree_focus_allow_set(scroller, EINA_TRUE); + page_focus(page); + + cur_freezed = elm_object_scroll_freeze_get(scroller_info->box); + + if (is_freezed) scroller_unfreeze(scroller); +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_FALSE, EINA_FALSE); +#endif + _D("Page show now : %d(%p)", index, page); + elm_scroller_page_show(scroller, index, 0); + if (is_freezed && cur_freezed) scroller_freeze(scroller); + + if (scroller_info->index[page_info->direction]) { + index_bring_in_page(scroller_info->index[page_info->direction], page); + } +} + + + +static void _region_show_job_cb(void *data) +{ + Evas_Object *scroller = data; + int i = 0; + int is_freezed = 0; + + ret_if(!scroller); + + i = (int) evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE); + is_freezed = (int) evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED); + + _page_region_show(scroller, i, is_freezed); + + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB); +} + + + +static Eina_Bool _region_show_anim_cb(void *data) +{ + Evas_Object *scroller = data; + int i = 0; + int is_freezed = 0; + + retv_if(!scroller, ECORE_CALLBACK_CANCEL); + + i = (int) evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE); + is_freezed = (int) evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED); + + _page_region_show(scroller, i, is_freezed); + + evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM); + return ECORE_CALLBACK_CANCEL; +} + + + +HAPI void scroller_region_show_by_push_type(Evas_Object *scroller, scroller_push_type_e push_type, scroller_freeze_e freeze, scroller_bring_type_e bring_type) +{ + Evas_Object *page = NULL; + Ecore_Animator *anim = NULL; + Ecore_Job *job = NULL; + scroller_info_s *scroller_info = NULL; + int i = 0; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + switch (push_type) { + case SCROLLER_PUSH_TYPE_CENTER: + page = scroller_info->center; + break; + case SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_LEFT: + page = scroller_info->center_neighbor_left; + break; + case SCROLLER_PUSH_TYPE_CENTER_NEIGHBOR_RIGHT: + page = scroller_info->center_neighbor_right; + break; + default: + _E("Unsupported push-type:%d", push_type); + break; + } + ret_if(!page); + + i = _get_index_in_list(scroller_info->box, page); + + /* 1. Remove the old action */ + job = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB); + if (job) ecore_job_del(job); + + anim = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM); + if (anim) ecore_animator_del(anim); + + /* 2. Append the new timer */ + switch (bring_type) { + case SCROLLER_BRING_TYPE_INSTANT_SHOW: + _page_show(scroller, i, freeze); + break; + case SCROLLER_BRING_TYPE_INSTANT: + _page_region_show(scroller, i, freeze); + break; + case SCROLLER_BRING_TYPE_JOB: + job = ecore_job_add(_region_show_job_cb, scroller); + if (job) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB, job); + else _E("Cannot add a job"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE, (void *) i); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + break; + case SCROLLER_BRING_TYPE_ANIMATOR: + anim = ecore_animator_add(_region_show_anim_cb, scroller); + if (anim) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM, anim); + else _E("Cannot add an animator"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE, (void *) i); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + break; + default: + _E("Unsupported bring_type:%d", bring_type); + break; + } +} + + + +HAPI void scroller_region_show_page(Evas_Object *scroller, Evas_Object *page, scroller_freeze_e freeze, scroller_bring_type_e bring_type) +{ + Ecore_Animator *anim = NULL; + Ecore_Job *job = NULL; + scroller_info_s *scroller_info = NULL; + int i = 0; + + + ret_if(!scroller); + ret_if(!page); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + i = _get_index_in_list(scroller_info->box, page); + + /* 1. Remove the old action */ + job = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB); + if (job) ecore_job_del(job); + + anim = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM); + if (anim) ecore_animator_del(anim); + + /* 2. Append the new timer */ + switch (bring_type) { + case SCROLLER_BRING_TYPE_INSTANT_SHOW: + _page_show(scroller, i, freeze); + break; + case SCROLLER_BRING_TYPE_INSTANT: + _page_region_show(scroller, i, freeze); + break; + case SCROLLER_BRING_TYPE_JOB: + job = ecore_job_add(_region_show_job_cb, scroller); + if (job) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_JOB, job); + else _E("Cannot add a job"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE, (void *) i); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + break; + case SCROLLER_BRING_TYPE_ANIMATOR: + anim = ecore_animator_add(_region_show_anim_cb, scroller); + if (anim) evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ANIM, anim); + else _E("Cannot add an animator"); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_PAGE, (void *) i); + evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_FREEZED, (void *) freeze); + break; + default: + _E("Unsupported bring_type:%d", bring_type); + break; + } +} + + + +static Evas_Object *_pop_page_in_list(Eina_List **list, const char *id, const char *subid) +{ + Evas_Object *page = NULL; + const Eina_List *l, *ln; + page_info_s *page_info = NULL; + + retv_if(!list, NULL); + retv_if(!id, NULL); + + EINA_LIST_FOREACH_SAFE(*list, l, ln, page) { + continue_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + if (!page_info->id) continue; + + if (strcmp(page_info->id, id)) continue; + + if (!subid && !page_info->subid) { + *list = eina_list_remove(*list, page); + return page; + } + + if (subid + && page_info->subid + && !strcmp(subid, page_info->subid)) + { + *list = eina_list_remove(*list, page); + return page; + } + } + + return NULL; +} + + + +static page_info_s *_get_page_info_in_list(page_info_s *scroller_page_info, Eina_List *page_info_list) +{ + const Eina_List *l, *ln; + page_info_s *page_info = NULL; + + retv_if(!scroller_page_info, NULL); + retv_if(!scroller_page_info->id, NULL); + retv_if(!page_info_list, NULL); + + EINA_LIST_FOREACH_SAFE(page_info_list, l, ln, page_info) { + continue_if(!page_info); + continue_if(!page_info->id); + + if (!strcmp(scroller_page_info->id, page_info->id)) { + if (((scroller_page_info->subid && page_info->subid) + && !strcmp(scroller_page_info->subid, page_info->subid)) + || (!scroller_page_info->subid && !page_info->subid)) + { + return page_info; + } + } + } + return NULL; +} + + + +static Evas_Object *_get_page_in_list(page_info_s *page_info, Eina_List *list) +{ + const Eina_List *l, *ln; + Evas_Object *page = NULL; + page_info_s *scroller_page_info = NULL; + + retv_if(!page_info, NULL); + retv_if(!page_info->id, NULL); + retv_if(!list, NULL); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + + scroller_page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + continue_if(!scroller_page_info); + if (!scroller_page_info->id) continue; + + if (!strcmp(scroller_page_info->id, page_info->id)) { + if (((scroller_page_info->subid && page_info->subid) + && !strcmp(scroller_page_info->subid, page_info->subid)) + || (!scroller_page_info->subid && !page_info->subid)) + { + return scroller_page_info->page; + } + } + } + return NULL; +} + + + +HAPI void scroller_read_favorites_list(Evas_Object *scroller, Eina_List *page_info_list) +{ + Evas_Object *page = NULL; + Evas_Object *scroller_page = NULL; + Evas_Object *before_page = NULL; + + Eina_List *list = NULL; + Eina_List *cloned_page_info_list = NULL; + const Eina_List *l, *ln; + + scroller_info_s *scroller_info = NULL; + page_info_s *scroller_page_info = NULL; + page_info_s *page_info = NULL; + page_info_s *clone_info = NULL; + + ret_if(!scroller); + ret_if(!page_info_list); + + cloned_page_info_list = eina_list_clone(page_info_list); + ret_if(!cloned_page_info_list); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + before_page = scroller_info->center; + + /* 1. Remove widgets those are not in the page_info_list */ + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + + scroller_page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + continue_if(!scroller_page_info); + if (!scroller_page_info->id) continue; + + if (scroller_page_info->direction != PAGE_DIRECTION_RIGHT) continue; + + clone_info = _get_page_info_in_list(scroller_page_info, cloned_page_info_list); + if (clone_info) { + _D("Keep this widget : %s(%p)", scroller_page_info->id, page); + cloned_page_info_list = eina_list_remove(cloned_page_info_list, clone_info); + continue; + } else { + _D("Do not keep this widget : %s(%p)", scroller_page_info->id, page); + list = eina_list_remove(list, scroller_page_info->page); + page_destroy(scroller_page_info->page); + } + } + + /* 2. Create widgets those are not in the scroller */ + EINA_LIST_FOREACH_SAFE(page_info_list, l, ln, page_info) { + continue_if(!page_info); + continue_if(!page_info->id); + + scroller_page = _get_page_in_list(page_info, list); + if (scroller_page) { + _D("Reorder this widget : %s(%p)", page_info->id, scroller_page); + _elm_box_unpack(scroller, scroller_page); + _elm_box_pack_after(scroller, scroller_page, before_page); + before_page = scroller_page; + continue; + } else { + /* Page create */ + page_info->item = widget_create(scroller, page_info->id, page_info->subid, page_info->period); + ret_if (!page_info->item); + widget_viewer_evas_disable_loading(page_info->item); + evas_object_resize(page_info->item, scroller_info->page_width, scroller_info->page_height); + evas_object_size_hint_min_set(page_info->item, scroller_info->page_width, scroller_info->page_height); + evas_object_show(page_info->item); + + page_info->page = page_create(scroller + , page_info->item + , page_info->id, page_info->subid + , scroller_info->page_width, scroller_info->page_height + , PAGE_CHANGEABLE_BG_ON, PAGE_REMOVABLE_ON); + if (!page_info->page) { + _E("Cannot create a page"); + evas_object_del(page_info->item); + return; + } + widget_add_callback(page_info->item, page_info->page); + + page_set_effect(page_info->page, page_effect_none, page_effect_none); + scroller_push_page(scroller, page_info->page, SCROLLER_PUSH_TYPE_LAST); + + before_page = page_info->page; + + _D("Create this widget : %s(%p)", page_info->id, page_info->page); + } + } + + eina_list_free(list); + eina_list_free(cloned_page_info_list); + + page_arrange_plus_page(scroller, 0); +} + + + +/* Caution : Do not create & destroy an item */ +HAPI void scroller_read_list(Evas_Object *scroller, Eina_List *page_info_list) +{ + Evas_Object *page = NULL; + Evas_Object *before_page = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + + ret_if(!scroller); + ret_if(!page_info_list); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + before_page = scroller_info->center; + + EINA_LIST_FOREACH_SAFE(page_info_list, l, ln, page_info) { + continue_if(!page_info); + continue_if(!page_info->id); + + if (page_info->direction != PAGE_DIRECTION_RIGHT) continue; + + page = _pop_page_in_list(&list, page_info->id, page_info->subid); + if (page) { + _elm_box_unpack(scroller, page); + _elm_box_pack_after(scroller, page, before_page); + before_page = page; + } + } + + eina_list_free(list); +} + + + +HAPI Eina_List *scroller_write_list(Evas_Object *scroller) +{ + Evas_Object *page = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + page_info_s *dup_page_info = NULL; + Eina_List *list = NULL; + Eina_List *page_info_list = NULL; + const Eina_List *l, *ln; + + retv_if(!scroller, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, NULL); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + continue_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) continue; + if (!page_info->id) continue; + if (PAGE_DIRECTION_RIGHT != page_info->direction) continue; + + dup_page_info = page_info_dup(page_info); + continue_if(!dup_page_info); + + page_info_list = eina_list_append(page_info_list, dup_page_info); + } + eina_list_free(list); + + return page_info_list; +} + + + +HAPI Evas_Object *scroller_move_page_prev(Evas_Object *scroller, Evas_Object *from_page, Evas_Object *to_page, Evas_Object *append_page) +{ + scroller_info_s *scroller_info = NULL; + + retv_if(!scroller, NULL); + retv_if(!from_page, NULL); + retv_if(!to_page, NULL); + retv_if(!append_page, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + _elm_box_unpack(scroller, from_page); + _elm_box_pack_after(scroller, append_page, to_page); + + return from_page; +} + + + +HAPI Evas_Object *scroller_move_page_next(Evas_Object *scroller, Evas_Object *from_page, Evas_Object *to_page, Evas_Object *insert_page) +{ + scroller_info_s *scroller_info = NULL; + + retv_if(!scroller, NULL); + retv_if(!from_page, NULL); + retv_if(!to_page, NULL); + retv_if(!insert_page, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + _elm_box_unpack(scroller, to_page); + _elm_box_pack_before(scroller, insert_page, from_page); + + return to_page; +} + + + +HAPI int scroller_seek_page_position(Evas_Object *scroller, Evas_Object *page) +{ + Evas_Object *tmp = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + scroller_info_s *scroller_info = NULL; + int position = 0; + + retv_if(!scroller, -1); + retv_if(!page, -1); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, -1); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, -1); + + EINA_LIST_FOREACH_SAFE(list, l, ln, tmp) { + continue_if(!tmp); + if (page == tmp) { + eina_list_free(list); + return position; + } + position++; + } + + eina_list_free(list); + return -1; +} + + + +HAPI Evas_Object *scroller_get_page_at(Evas_Object *scroller, int idx) +{ + Evas_Object *page = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + scroller_info_s *scroller_info = NULL; + int position = 0; + + retv_if(!scroller, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(NULL == list, NULL); + + EINA_LIST_FOREACH_SAFE(list, l, ln, page) { + if (idx == position) { + eina_list_free(list); + return page; + } + position ++; + } + eina_list_free(list); + return NULL; +} + + + +HAPI int scroller_get_current_page_direction(Evas_Object *scroller) +{ + Evas_Object *cur_page = NULL; + page_info_s *page_info = NULL; + + retv_if(!scroller, -1); + + cur_page = scroller_get_focused_page(scroller); + retv_if(!cur_page, -1); + + page_info = evas_object_data_get(cur_page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, -1); + + return page_info->direction; +} + + + +HAPI Evas_Object *scroller_get_left_page(Evas_Object *scroller, Evas_Object *page) +{ + Evas_Object *before_page = NULL; + Evas_Object *tmp = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + scroller_info_s *scroller_info = NULL; + + retv_if(!scroller, NULL); + retv_if(!page, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, NULL); + + EINA_LIST_FOREACH_SAFE(list, l, ln, tmp) { + continue_if(!tmp); + + if (page == tmp) break; + before_page = tmp; + } + eina_list_free(list); + return before_page; +} + + + +HAPI Evas_Object *scroller_get_right_page(Evas_Object *scroller, Evas_Object *page) +{ + Evas_Object *after_page = NULL; + Evas_Object *tmp = NULL; + Eina_List *list = NULL; + const Eina_List *l, *ln; + scroller_info_s *scroller_info = NULL; + + retv_if(!scroller, NULL); + retv_if(!page, NULL); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + retv_if(!scroller_info, NULL); + + list = elm_box_children_get(scroller_info->box); + retv_if(!list, NULL); + + EINA_LIST_FOREACH_SAFE(list, l, ln, tmp) { + continue_if(!tmp); + + if (page == tmp) { + after_page = eina_list_data_get(ln); + break; + } + } + eina_list_free(list); + return after_page; +} + + + +HAPI void scroller_region_show_page_without_timer(Evas_Object *scroller, Evas_Object *page) +{ + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + int i = 0; + ret_if(scroller == NULL); + ret_if(page == NULL); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + i = _get_index_in_list(scroller_info->box, page); + +#if 0 /* EFL Private feature */ + elm_scroller_origin_reverse_set(scroller, EINA_FALSE, EINA_FALSE); +#endif + _D("Page show now : %d(%p)", i, page); + elm_scroller_page_show(scroller, i, 0); + if (scroller_info->index[page_info->direction]) { + index_bring_in_page(scroller_info->index[page_info->direction], page); + } +} + + + +HAPI void scroller_enable_focus_on_scroll(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + _D("Enable the focus on scroll"); + + elm_object_tree_focus_allow_set(scroller, EINA_TRUE); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + scroller_info->scroll_focus = 1; +} + + + +HAPI void scroller_disable_focus_on_scroll(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + _D("Disable the focus on scroll"); + + elm_object_tree_focus_allow_set(scroller, EINA_FALSE); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + scroller_info->scroll_focus = 0; +} + + + +HAPI void scroller_enable_index_on_scroll(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + _D("Enable the index on scroll"); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + scroller_info->scroll_index = 1; +} + + + +HAPI void scroller_disable_index_on_scroll(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + _D("Disable the index on scroll"); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + scroller_info->scroll_index = 0; +} + + + +HAPI void scroller_enable_effect_on_scroll(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + _D("Enable the effect on scroll"); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + scroller_info->scroll_effect = 1; +} + + + +HAPI void scroller_disable_effect_on_scroll(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + _D("Disable the effect on scroll"); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + scroller_info->scroll_effect = 0; +} + + + +HAPI void scroller_enable_cover_on_scroll(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + scroller_info->scroll_cover = 1; +} + + + +HAPI void scroller_disable_cover_on_scroll(Evas_Object *scroller) +{ + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + scroller_info->scroll_cover = 0; +} + + + +HAPI void scroller_backup_inner_focus(Evas_Object *scroller) +{ + Evas_Object *prev_page = NULL; + Evas_Object *cur_page = NULL; + Eina_List *list = NULL; + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + ret_if(!scroller_info->box); + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + EINA_LIST_FREE(list, cur_page) { + continue_if(!cur_page); + + if (prev_page) { + page_backup_inner_focus(cur_page, prev_page, NULL); + page_backup_inner_focus(prev_page, NULL, cur_page); + } + + prev_page = cur_page; + } +} + + + +HAPI void scroller_restore_inner_focus(Evas_Object *scroller) +{ + Evas_Object *page = NULL; + Eina_List *list = NULL; + scroller_info_s *scroller_info = NULL; + + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + ret_if(!scroller_info->box); + + list = elm_box_children_get(scroller_info->box); + ret_if(!list); + + EINA_LIST_FREE(list, page) { + continue_if(!page); + page_restore_inner_focus(page); + } +} + + + +/* This function just reorders not making a notification panel or widget */ +/* CRITICAL : You have to use this function only for notification reordering */ +HAPI void scroller_reorder_with_list(Evas_Object *scroller, Eina_List *list, page_direction_e page_direction) +{ + Evas_Object *tmp_page = NULL; + Evas_Object *focus_page = NULL; + Evas_Object *after = NULL; + Eina_List *reverse_list = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + + ret_if(!scroller); + ret_if(!list); + + reverse_list = eina_list_reverse_clone(list); + ret_if(!reverse_list); + + focus_page = scroller_get_focused_page(scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + ret_if(!scroller_info->box); + + if (scroller_info->center_neighbor_right) { + after = scroller_info->center_neighbor_right; + } else { + after = scroller_info->center; + } + ret_if(!after); + + EINA_LIST_FREE(reverse_list, tmp_page) { + page_info = evas_object_data_get(tmp_page, DATA_KEY_PAGE_INFO); + continue_if(!page_info); + + switch (page_info->direction) { + case PAGE_DIRECTION_LEFT: + _D("Reorder a page(%p) with pack_start", tmp_page); + elm_box_unpack(scroller_info->box, tmp_page); + elm_box_pack_start(scroller_info->box, tmp_page); + break; + case PAGE_DIRECTION_RIGHT: + _D("Reorder a page(%p) with pack_after", tmp_page); + elm_box_unpack(scroller_info->box, tmp_page); + elm_box_pack_after(scroller_info->box, tmp_page, after); + break; + default: + _E("Cannot reach here"); + break; + } + } + + elm_box_recalculate(scroller_info->box); + elm_box_recalculate(scroller_info->box_layout); + + if (focus_page) scroller_region_show_page(scroller, focus_page, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT); + else _E("Cannot get the focused page"); + + scroller_info->index_update_timer = ecore_timer_add(INDEX_UPDATE_TIME, _index_update_cb, scroller); + if (!scroller_info->index_update_timer) { + _E("Cannot add an index update timer"); + } +} + + + +// End of this file diff --git a/home/src/tutorial.c b/home/src/tutorial.c new file mode 100755 index 0000000..7178f8d --- /dev/null +++ b/home/src/tutorial.c @@ -0,0 +1,1573 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "conf.h" +#include "log.h" +#include "util.h" +#include "layout_info.h" +#include "effect.h" +#include "key.h" +#include "main.h" +#include "page_info.h" +#include "page.h" +#include "scroller_info.h" +#include "scroller.h" +#include "tutorial.h" +#include "tutorial_info.h" +#include "clock_service.h" +#include "apps/apps_main.h" + +#define PRIVATE_DATA_KEY_TUTORIAL_PRESSED "p" +#define PRIVATE_DATA_KEY_TUTORIAL_DOWN_X "d_x" +#define PRIVATE_DATA_KEY_TUTORIAL_DOWN_Y "d_y" +#define PRIVATE_DATA_KEY_TUTORIAL_STEP "p_n" +#define PRIVATE_DATA_KEY_TUTORIAL_INFO "p_t_i" +#define PRIVATE_DATA_KEY_TUTORIAL_TEXT "p_t" +#define PRIVATE_DATA_KEY_TUTORIAL_ENABLE_INDICATOR "p_t_e_i" +#define PRIVATE_DATA_KEY_TUTORIAL_TRANSIENT_TIMER "pdk_ttt" + +#define TUTORIAL_THRESHOLD_ABLE_X 150 +#define TUTORIAL_THRESHOLD_ABLE_Y 150 + +#define TUTORIAL_THRESHOLD_DISABLE_X 250 +#define TUTORIAL_THRESHOLD_DISABLE_Y 150 + +#define STEP_APPS ((void *) 1) +#define APPS_FIRST_LIST 0 + + + +static struct { + Evas_Object *win; + Ecore_Timer *transient_timer; + Ecore_Timer *step_eight_timer; + Eina_List *transient_list; +} _tutorial_info = { + .win = NULL, + .transient_timer = NULL, + .step_eight_timer = NULL, + .transient_list = NULL, +}; + + + +static void _append_transient_list(Ecore_X_Window win, Ecore_X_Window for_win) +{ + _W("%p is transient for %p", win, for_win); + ecore_x_icccm_transient_for_set(win, for_win); + + _tutorial_info.transient_list + = eina_list_append(_tutorial_info.transient_list, (void *) win); +} + + + +static void _destroy_transient_list(void) +{ + void *xwin; + + if (!_tutorial_info.transient_list) return; + + EINA_LIST_FREE(_tutorial_info.transient_list, xwin) { + _W("%p is not transient", xwin); + ecore_x_icccm_transient_for_unset((Ecore_X_Window) xwin); + } +} + + + +static Eina_Bool _set_transient_for_timer(void *data) +{ + Ecore_X_Window home_xwin; + Ecore_X_Window tutorial_xwin; + Ecore_X_Window xwin = (Ecore_X_Window)data; + + retv_if(!xwin, ECORE_CALLBACK_CANCEL); + + _D("Set normal type window"); + + home_xwin = elm_win_xwindow_get(main_get_info()->win); + retv_if(!home_xwin, ECORE_CALLBACK_CANCEL); + + tutorial_xwin = elm_win_xwindow_get(_tutorial_info.win); + retv_if(!tutorial_xwin, ECORE_CALLBACK_CANCEL); + + /* unset transient */ + _destroy_transient_list(); + + /* set tutorial window to normal type */ + ecore_x_netwm_window_type_set(tutorial_xwin, ECORE_X_WINDOW_TYPE_NORMAL); + + /* set transient */ + _append_transient_list(tutorial_xwin, xwin); + _append_transient_list(xwin, home_xwin); + + _tutorial_info.transient_timer = NULL; + + return ECORE_CALLBACK_CANCEL; +} + + + +#define TIMER_TIME_SET_TRANSIENT 1.0f +HAPI void tutorial_set_transient_for(Ecore_X_Window xwin) +{ + ret_if(!xwin); + + if (_tutorial_info.transient_timer) { + ecore_timer_del(_tutorial_info.transient_timer); + _tutorial_info.transient_timer = NULL; + } + + _tutorial_info.transient_timer = ecore_timer_add(TIMER_TIME_SET_TRANSIENT, _set_transient_for_timer, (void *)xwin); + if (!_tutorial_info.transient_timer) _E("Cannot add a timer"); +} + + + +HAPI int tutorial_is_first_boot(void) +{ + int tutorial_enabled = 0; + + if (preference_get_int(VCONF_KEY_HOME_IS_TUTORIAL_ENABLED_TO_RUN, &tutorial_enabled) != 0) { + _E("Cannot get the vconf for %s", VCONF_KEY_HOME_IS_TUTORIAL_ENABLED_TO_RUN); + } + + /* 1 : first try, 0 : others */ + _D("Tutorial is [%d]", tutorial_enabled); + + return tutorial_enabled; +} + + + +HAPI int tutorial_is_exist(void) +{ + layout_info_s *layout_info = NULL; + + layout_info = evas_object_data_get(main_get_info()->layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, 0); + + return layout_info->tutorial? 1 : 0; +} + + + +static void _tutorial_destroy_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + _D("Tutorial will be removed"); + if (tutorial_is_exist()) { + tutorial_destroy(data); + } +} + + + +static char *_done_button_info_cb(void *data, Evas_Object *obj) +{ + char *text = NULL; + + text = strdup(_("IDS_ST_BUTTON_OK")); + retv_if(!text, NULL); + + return text; +} + + + +static void _destroy_done_button(Evas_Object *tutorial) +{ + Evas_Object *button = NULL; + ret_if(!tutorial); + + button = elm_object_part_content_unset(tutorial, "button"); + ret_if(!button); + + evas_object_del(button); +} + + + +static void _done_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *tutorial = data; + ret_if(!tutorial); + + elm_object_signal_emit(tutorial, "show", "page9,pressed"); + effect_play_vibration(); + + /* only tutorial use */ + if (preference_set_int(VCONF_KEY_HOME_IS_TUTORIAL_ENABLED_TO_RUN, 0) != 0) { + _E("Critical, cannot set the private vconf key"); + return; + } + + _D("End the tutorial"); + + _destroy_done_button(tutorial); +} + + + +static Evas_Object *_create_done_button(Evas_Object *tutorial) +{ + Evas_Object *button = NULL; + + retv_if(!tutorial, NULL); + + _D("Add done button"); + + button = elm_button_add(tutorial); + retv_if(!button, NULL); + + elm_object_style_set(button, "focus"); + elm_object_part_content_set(tutorial, "button", button); + evas_object_show(button); + + elm_object_part_text_set(tutorial, "button_text", _("IDS_ST_BUTTON_OK")); + elm_object_domain_translatable_part_text_set(tutorial, "button_text", PROJECT, "IDS_ST_BUTTON_OK"); + + elm_access_info_cb_set(button, ELM_ACCESS_INFO, _done_button_info_cb, tutorial); + evas_object_smart_callback_add(button, "clicked", _done_button_clicked_cb, tutorial); + elm_object_signal_callback_add(tutorial, "done", "button", _tutorial_destroy_cb, tutorial); + + return button; +} + + + +static char *_text_start(void) +{ + char *text = NULL; + text = strdup(_("IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB")); + retv_if(!text, NULL); + + return text; +} + + + +static char *_text_structure(void) +{ + char *text = NULL; + text = strdup(_("IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN")); + retv_if(!text, NULL); + + return text; +} + + + +static char *_text_init(void) +{ + char *text = NULL; + text = strdup(_("IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB")); + retv_if(!text, NULL); + + return text; +} + + + +static char *_text_one(void) +{ + char *text = NULL; + text = strdup(_("IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB")); + retv_if(!text, NULL); + + return text; +} + + + +static char *_text_two(void) +{ + char *text = NULL; + text = strdup(_("IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB")); + retv_if(!text, NULL); + + return text; +} + + + +static char *_text_three(void) +{ + char *text = NULL; + text = strdup(_("IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB")); + retv_if(!text, NULL); + + return text; +} + + + +static char *_text_four(void) +{ + char *text = NULL; + text = strdup(_("IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB")); + retv_if(!text, NULL); + return text; +} + + + +static char *_text_five(void) +{ + char *text = NULL; + text = strdup(_("IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB")); + retv_if(!text, NULL); + + return text; +} + + + +static char *_text_six(void) +{ + char *text = NULL; + text = strdup(_("IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB")); + retv_if(!text, NULL); + return text; +} + + + +static char *_text_seven(void) +{ + char *text = NULL; + text = strdup(_("IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB")); + retv_if(!text, NULL); + + return text; +} + + + +static char *_text_eight(void) +{ + char *text = NULL; + text = strdup(_("IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E")); + retv_if(!text, NULL); + + return text; +} + + + +static char *_access_info_cb(void *data, Evas_Object *obj) +{ + char *(*_text)(void); + Evas_Object *tutorial = data; + retv_if(!tutorial, NULL); + + _text = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT); + retv_if(!_text, NULL); + + return _text(); +} + + + +static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ei = event_info; + Evas_Object *tutorial = data; + ret_if(!tutorial); + + int x = ei->output.x; + int y = ei->output.y; + + _D("Tutorial mouse down (%d, %d)", x, y); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_PRESSED, (void *) 1); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_DOWN_X, (void *) x); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_DOWN_Y, (void *) y); +} + + + +static Eina_Bool _step_eight_timer_cb(void *data) +{ + tutorial_info_s *tutorial_info = NULL; + Evas_Object *tutorial = data; + + _tutorial_info.step_eight_timer = NULL; + + retv_if(!tutorial, ECORE_CALLBACK_CANCEL); + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + retv_if(!tutorial_info, ECORE_CALLBACK_CANCEL); + + elm_object_signal_emit(tutorial, "standard", "center"); + + elm_object_signal_emit(tutorial, "show", "page9"); + elm_object_part_text_set(tutorial, "text", _("IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E")); + elm_object_domain_translatable_part_text_set(tutorial, "text", PROJECT, "IDS_WMGR_POP_THATS_IT_E_GET_INTO_GEAR_E"); + + elm_access_highlight_set(tutorial_info->text_focus); + + if (!_create_done_button(tutorial)) _E("failed to add the add done button"); + + return ECORE_CALLBACK_CANCEL; +} + + + +#define TIMER_TIME_STEP_EIGHT 0.3f +static void _step_eight(Evas_Object *tutorial, int vec_x, int vec_y) +{ + Ecore_X_Window tutorial_xwin; + Ecore_X_Window home_xwin; + tutorial_info_s *tutorial_info = NULL; + + ret_if(!tutorial); + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + _D("Step 8"); + + if (!(abs(vec_y) > (TUTORIAL_THRESHOLD_ABLE_Y - 70) + && abs(vec_x) < TUTORIAL_THRESHOLD_DISABLE_X + && vec_y < 0)) + { + _D("Exit step 8"); + return; + } + + /* Hide indicator */ + clock_view_indicator_show(INDICATOR_HIDE); + + home_xwin = elm_win_xwindow_get(main_get_info()->win); + ret_if(!home_xwin); + tutorial_xwin = elm_win_xwindow_get(tutorial_info->win); + ret_if(!tutorial_xwin); + + /* unset transient */ + _destroy_transient_list(); + + /* set transient : home & tutorial */ + _append_transient_list(tutorial_xwin, home_xwin); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP, NULL); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT, _text_eight); + + if (_tutorial_info.step_eight_timer) { + ecore_timer_del(_tutorial_info.step_eight_timer); + _tutorial_info.step_eight_timer = NULL; + } + + elm_object_signal_emit(tutorial, "hide", "page8"); + + _tutorial_info.step_eight_timer = ecore_timer_add(TIMER_TIME_STEP_EIGHT, _step_eight_timer_cb, tutorial); + if (!_tutorial_info.step_eight_timer) _E("Cannot add a timer"); +} + + + +static void _step_seven(Evas_Object *tutorial, int vec_x, int vec_y) +{ + tutorial_info_s *tutorial_info = NULL; + Ecore_X_Window tutorial_xwin; + + ret_if(!tutorial); + + _D("Step 7"); + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP, _step_eight); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT, _text_seven); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_ENABLE_INDICATOR, (void *) 0); + + tutorial_xwin = elm_win_xwindow_get(tutorial_info->win); + ret_if(!tutorial_xwin); + + /* unset transient : home & tutorial */ + _destroy_transient_list(); + + /* set tutorial window to noti type */ + ecore_x_netwm_window_type_set(tutorial_xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION); + utilx_set_system_notification_level(ecore_x_display_get(), tutorial_xwin, UTILX_NOTIFICATION_LEVEL_LOW); + + /* Show indicator */ + clock_view_indicator_show(INDICATOR_SHOW); + + elm_object_signal_emit(tutorial, "standard", "sub"); + + elm_object_signal_emit(tutorial, "hide", "page7"); + elm_object_signal_emit(tutorial, "show", "page8"); + elm_object_part_text_set(tutorial, "text", _("IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB")); + elm_object_domain_translatable_part_text_set(tutorial, "text", PROJECT, "IDS_WNOTI_BODY_SWIPE_UPWARDS_TO_GO_BACK_TO_CLOCK_ABB"); + elm_access_highlight_set(tutorial_info->text_focus); +} + + + +static void _step_six(Evas_Object *tutorial, int vec_x, int vec_y) +{ + tutorial_info_s *tutorial_info = NULL; + + ret_if(!tutorial); + + _D("Step 6"); + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP, NULL); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT, _text_six); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_ENABLE_INDICATOR, (void *) 1); + + elm_object_signal_emit(tutorial, "standard", "sub"); + + elm_object_signal_emit(tutorial, "up", "sub"); + elm_object_signal_emit(tutorial, "hide", "page6"); + elm_object_signal_emit(tutorial, "show", "page7"); + elm_object_part_text_set(tutorial, "text", _("IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB")); + elm_object_domain_translatable_part_text_set(tutorial, "text", PROJECT, "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_SEE_INDICATOR_ICONS_ON_CLOCK_ABB"); +} + + + +static void _step_five(Evas_Object *tutorial, int vec_x, int vec_y) +{ + tutorial_info_s *tutorial_info = NULL; + Eina_List *instance_list = NULL; + instance_info_s *info = NULL; + Ecore_X_Window tutorial_xwin; + int down_y = (int) evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_DOWN_Y); + + ret_if(!tutorial); + + _D("Step 5"); + + if (main_get_info()->is_tts) { + if (!(abs(vec_y) > TUTORIAL_THRESHOLD_ABLE_Y + && abs(vec_x) < TUTORIAL_THRESHOLD_DISABLE_X + && vec_y < 0)) + { + _D("Exit step 5"); + return; + } + } else { + if (!(abs(vec_y) > (TUTORIAL_THRESHOLD_ABLE_Y - 70) + && abs(vec_x) < TUTORIAL_THRESHOLD_DISABLE_X + && down_y >= main_get_info()->root_h - BEZEL_MOVE_THRESHOLD)) + { + _D("Exit step 5"); + return; + } + } + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP, STEP_APPS); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT, _text_five); + + /* add event to checking apps state */ + instance_list = apps_main_get_info()->instance_list; + if (!instance_list) { + _D("Instance list is not exist"); + apps_main_init(); + } + info = eina_list_nth(instance_list, APPS_FIRST_LIST); + ret_if(!info); + ret_if(!info->win); + + if (main_get_info()->is_tts) { + ret_if(!info->layout); + + elm_object_tree_focus_allow_set(info->layout, EINA_FALSE); + _D("tree_focus_allow_set layout(%p) as FALSE", info->layout); + } + + tutorial_xwin = elm_win_xwindow_get(tutorial_info->win); + ret_if(!tutorial_xwin); + + /* unset transient : home & tutorial */ + _destroy_transient_list(); + + /* set tutorial window to noti type */ + ecore_x_netwm_window_type_set(tutorial_xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION); + utilx_set_system_notification_level(ecore_x_display_get(), tutorial_xwin, UTILX_NOTIFICATION_LEVEL_LOW); + + _D("Tutorial win (%p)", tutorial_xwin); + + apps_main_launch(APPS_LAUNCH_SHOW); + + elm_object_signal_emit(tutorial, "standard", "sub"); + + elm_object_signal_emit(tutorial, "up", "sub"); + elm_object_signal_emit(tutorial, "hide", "page5"); + elm_object_signal_emit(tutorial, "show", "page6"); + elm_object_part_text_set(tutorial, "text", _("IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB")); + elm_object_domain_translatable_part_text_set(tutorial, "text", PROJECT, "IDS_WNOTI_BODY_SWIPE_TOP_EDGE_DOWN_TO_GO_BACK_ABB"); +} + + + +static void _step_four(Evas_Object *tutorial, int vec_x, int vec_y) +{ + tutorial_info_s *tutorial_info = NULL; + + ret_if(!tutorial); + + _D("Step 4"); + + if (!(vec_x > TUTORIAL_THRESHOLD_ABLE_X + && abs(vec_y) < TUTORIAL_THRESHOLD_DISABLE_Y)) + { + _D("Exit step 4"); + return; + } + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP, _step_five); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT, _text_four); + + scroller_bring_in_page(tutorial_info->scroller, tutorial_info->scroller_info->center, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_INSTANT); + + elm_object_signal_emit(tutorial, "standard", "sub"); + + elm_object_signal_emit(tutorial, "hide", "page4"); + elm_object_signal_emit(tutorial, "show", "page5"); + elm_object_part_text_set(tutorial, "text", _("IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB")); + elm_object_domain_translatable_part_text_set(tutorial, "text", PROJECT, "IDS_WNOTI_BODY_SWIPE_BOTTOM_EDGE_UP_TO_VIEW_APPS_ON_CLOCK_ABB"); + elm_access_highlight_set(tutorial_info->text_focus); +} + + + +static void _step_three(Evas_Object *tutorial, int vec_x, int vec_y) +{ + Evas_Object *widget_page = NULL; + tutorial_info_s *tutorial_info = NULL; + + ret_if(!tutorial); + + _D("Step 3"); + + if (!(vec_x < -TUTORIAL_THRESHOLD_ABLE_X + && abs(vec_y) < TUTORIAL_THRESHOLD_DISABLE_Y)) + { + _D("Exit step 3"); + return; + } + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP, _step_four); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT, _text_three); + + widget_page = scroller_get_right_page(tutorial_info->scroller, tutorial_info->scroller_info->center); + ret_if(!widget_page); + ret_if(!page_is_appended(widget_page)); + scroller_bring_in_page(tutorial_info->scroller, widget_page, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_INSTANT); + + elm_object_signal_emit(tutorial, "standard", "sub"); + + elm_object_signal_emit(tutorial, "hide", "page3"); + elm_object_signal_emit(tutorial, "show", "page4"); + elm_object_part_text_set(tutorial, "text", _("IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB")); + elm_object_domain_translatable_part_text_set(tutorial, "text", PROJECT, "IDS_HELP_POP_SWIPE_RIGHT_TO_GO_BACK_TO_THE_CLOCK_ABB"); + elm_access_highlight_set(tutorial_info->text_focus); +} + + + +static void _step_two(Evas_Object *tutorial, int vec_x, int vec_y) +{ + tutorial_info_s *tutorial_info = NULL; + + ret_if(!tutorial); + + _D("Step 2"); + + if (!(vec_x < -TUTORIAL_THRESHOLD_ABLE_X + && abs(vec_y) < TUTORIAL_THRESHOLD_DISABLE_Y)) + { + _D("Exit step 2"); + return; + } + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP, _step_three); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT, _text_two); + + scroller_bring_in_page(tutorial_info->scroller, tutorial_info->scroller_info->center, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_INSTANT); + + elm_object_signal_emit(tutorial, "standard", "sub"); + + elm_object_signal_emit(tutorial, "hide", "page2"); + elm_object_signal_emit(tutorial, "show", "page3"); + elm_object_part_text_set(tutorial, "text", _("IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB")); + elm_object_domain_translatable_part_text_set(tutorial, "text", PROJECT, "IDS_HELP_POP_SWIPE_LEFT_TO_VIEW_WIDGETS_ABB"); + elm_access_highlight_set(tutorial_info->text_focus); +} + + + +static void _step_one(Evas_Object *tutorial, int vec_x, int vec_y) +{ + Evas_Object *noti_page = NULL; + tutorial_info_s *tutorial_info = NULL; + + ret_if(!tutorial); + + _D("Step 1"); + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + if (!(vec_x > TUTORIAL_THRESHOLD_ABLE_X + && abs(vec_y) < TUTORIAL_THRESHOLD_DISABLE_Y)) + { + _D("Exit step 1"); + scroller_bring_in_page(tutorial_info->scroller, tutorial_info->scroller_info->center, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_INSTANT); + return; + } + + noti_page = scroller_get_left_page(tutorial_info->scroller, tutorial_info->scroller_info->center); + if (!noti_page || !page_is_appended(noti_page)) { + _D("There is no notification"); + scroller_bring_in_page(tutorial_info->scroller, tutorial_info->scroller_info->center, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_INSTANT); + return; + } + scroller_bring_in_page(tutorial_info->scroller, noti_page, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_INSTANT); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP, _step_two); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT, _text_one); + + elm_object_signal_emit(tutorial, "standard", "sub"); + + elm_object_signal_emit(tutorial, "hide", "page1"); + elm_object_signal_emit(tutorial, "show", "page2"); + elm_object_part_text_set(tutorial, "text", _("IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB")); + elm_object_domain_translatable_part_text_set(tutorial, "text", PROJECT, "IDS_HELP_POP_SWIPE_LEFT_TO_GO_BACK_TO_THE_CLOCK_ABB"); + elm_access_highlight_set(tutorial_info->text_focus); +} + + + +static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Move *ei = event_info; + tutorial_info_s *tutorial_info = data; + + Evas_Object *tutorial = NULL; + void (*_step)(Evas_Object *, int , int); + int down_x, down_y; + int cur_x, cur_y; + int vec_x, vec_y; + + ret_if(!tutorial_info); + tutorial = tutorial_info->tutorial; + + if (!evas_object_data_del(tutorial, PRIVATE_DATA_KEY_TUTORIAL_PRESSED)) return; + + /* can use down_x or down_y in the _step functions */ + down_x = (int) evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_DOWN_X); + down_y = (int) evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_DOWN_Y); + + cur_x = ei->cur.output.x; + cur_y = ei->cur.output.y; + + _D("Tutorial mouse up (%d, %d)", cur_x, cur_y); + + vec_x = cur_x - down_x; + vec_y = cur_y - down_y; + + _step = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP); + if (!_step) { + _D("Step is done"); + return; + } else if (STEP_APPS == _step) { + _D("Step is holding"); + return; + } + _step(tutorial, vec_x, vec_y); + + evas_object_data_del(tutorial, PRIVATE_DATA_KEY_TUTORIAL_DOWN_X); + evas_object_data_del(tutorial, PRIVATE_DATA_KEY_TUTORIAL_DOWN_Y); +} + + + +static key_cb_ret_e _tutorial_back_cb(void *data) +{ + Evas_Object *tutorial = data; + + retv_if(!tutorial, KEY_CB_RET_STOP); + + _D("Back key is released"); + + /* If the Apps is down, then proceed the next step */ + if(evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_ENABLE_INDICATOR)) { + clock_h clock = NULL; + clock = clock_manager_clock_get(CLOCK_ATTACHED); + retv_if(!clock, KEY_CB_RET_CONTINUE); + retv_if(!clock->view, KEY_CB_RET_CONTINUE); + + _step_seven(tutorial, 0, 0); + + return KEY_CB_RET_CONTINUE; + } + return KEY_CB_RET_STOP; +} + + + +static w_home_error_e _resume_cb(void *data) +{ + Ecore_X_Window tutorial_xwin; + Ecore_X_Window home_xwin; + Evas_Object *tutorial = data; + void (*_step)(Evas_Object *tutorial, int vec_x, int vec_y); + + retv_if(!tutorial, W_HOME_ERROR_FAIL); + + _D("Resume window"); + + _step = evas_object_data_get(data, PRIVATE_DATA_KEY_TUTORIAL_STEP); + if (_step_one == _step) { + tutorial_info_s *tutorial_info = NULL; + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + retv_if(!tutorial_info, W_HOME_ERROR_FAIL); + + scroller_bring_in_page(tutorial_info->scroller, tutorial_info->scroller_info->center, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_INSTANT); + elm_object_focus_set(tutorial_info->text_focus, EINA_TRUE); + } else if (STEP_APPS == _step) { + tutorial_info_s *tutorial_info = NULL; + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + retv_if(!tutorial_info, W_HOME_ERROR_FAIL); + + home_xwin = elm_win_xwindow_get(main_get_info()->win); + retv_if(!home_xwin, W_HOME_ERROR_FAIL); + tutorial_xwin = elm_win_xwindow_get(tutorial_info->win); + retv_if(!tutorial_xwin, W_HOME_ERROR_FAIL); + + /* unset transient */ + _destroy_transient_list(); + + /* set transient : home & tutorial */ + _append_transient_list(tutorial_xwin, home_xwin); + + _step_six(tutorial, 0, 0); + } + + return W_HOME_ERROR_NONE; +} + + + +static void _highlighted_enabled_cb(void *data, Evas_Object *obj, void *event_info) +{ + tutorial_info_s *tutorial_info = data; + ret_if(!tutorial_info); + ret_if(!tutorial_info->text_focus); + + _D("highlight enabled"); + + elm_access_highlight_set(tutorial_info->text_focus); +} + + + +static void _highlighted_disabled_cb(void *data, Evas_Object *obj, void *event_info) +{ + _D("highlight disabled"); +} + + + +static void _tutorial_start_2_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + tutorial_info_s *tutorial_info = NULL; + Evas_Object *tutorial = data; + ret_if(!tutorial); + + _D("Show page 1"); + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP, _step_one); + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT, _text_init); + + elm_object_signal_emit(tutorial, "standard", "sub"); + + elm_object_signal_emit(tutorial, "hide", "page0"); + elm_object_signal_emit(tutorial, "show", "page1"); + elm_object_part_text_set(tutorial, "text", _("IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB")); + elm_object_domain_translatable_part_text_set(tutorial, "text", PROJECT, "IDS_HELP_POP_SWIPE_RIGHT_TO_VIEW_NOTIFICATIONS_ABB"); + elm_access_highlight_set(tutorial_info->text_focus); +} + + + +static char *_start_button_info_cb(void *data, Evas_Object *obj) +{ + char *text = NULL; + + text = strdup(_("IDS_ST_BUTTON_NEXT")); + retv_if(!text, NULL); + + return text; +} + + + +static void _destroy_start_2_button(Evas_Object *tutorial) +{ + Evas_Object *button = NULL; + ret_if(!tutorial); + + button = elm_object_part_content_unset(tutorial, "button"); + ret_if(!button); + + evas_object_del(button); +} + + + +static void _start_2_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + tutorial_info_s *tutorial_info = NULL; + + Evas_Object *tutorial = data; + ret_if(!tutorial); + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + scroller_bring_in_page(tutorial_info->scroller, tutorial_info->scroller_info->center, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_INSTANT); + + elm_object_signal_emit(tutorial, "show", "start2,pressed"); + effect_play_vibration(); + + _D("Start the tutorial"); + + _destroy_start_2_button(tutorial); +} + + + +static Evas_Object *_create_start_2_button(Evas_Object *tutorial) +{ + Evas_Object *button = NULL; + + retv_if(!tutorial, NULL); + + _D("Add start 2 button"); + + button = elm_button_add(tutorial); + retv_if(!button, NULL); + + elm_object_style_set(button, "focus"); + elm_object_part_content_set(tutorial, "button", button); + evas_object_show(button); + + elm_object_part_text_set(tutorial, "button_text", _("IDS_ST_BUTTON_NEXT")); + elm_object_domain_translatable_part_text_set(tutorial, "button_text", PROJECT, "IDS_ST_BUTTON_NEXT"); + + elm_access_info_cb_set(button, ELM_ACCESS_INFO, _start_button_info_cb, tutorial); + evas_object_smart_callback_add(button, "clicked", _start_2_button_clicked_cb, tutorial); + elm_object_signal_callback_add(tutorial, "start2", "button", _tutorial_start_2_cb, tutorial); + + return button; +} + + + +static void _tutorial_start_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + tutorial_info_s *tutorial_info = NULL; + Evas_Object *tutorial = data; + ret_if(!tutorial); + + _D("Show structure image"); + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT, _text_structure); + + elm_object_signal_emit(tutorial, "standard", "sub"); + + elm_object_signal_emit(tutorial, "show", "structure_page"); + elm_object_part_text_set(tutorial, "text", _("IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN")); + elm_object_domain_translatable_part_text_set(tutorial, "text", PROJECT, "IDS_WNOTI_BODY_THIS_IS_THE_MAIN_STRUCTURE_OF_THE_HOME_SCREEN"); + elm_access_highlight_set(tutorial_info->text_focus); + + if (!_create_start_2_button(tutorial)) _E("failed to add the add start 2 button"); +} + + + +static char *_close_button_info_cb(void *data, Evas_Object *obj) +{ + char *text = NULL; + + text = strdup(_("IDS_ST_BUTTON_EXIT")); + retv_if(!text, NULL); + + return text; +} + + + +static void _destroy_start_button(Evas_Object *tutorial) +{ + Evas_Object *button = NULL; + ret_if(!tutorial); + + button = elm_object_part_content_unset(tutorial, "button"); + ret_if(!button); + + evas_object_del(button); +} + + + +static void _destroy_close_button(Evas_Object *tutorial) +{ + Evas_Object *button = NULL; + ret_if(!tutorial); + + button = elm_object_part_content_unset(tutorial, "close_button"); + ret_if(!button); + + evas_object_del(button); +} + + + +static void _start_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + tutorial_info_s *tutorial_info = NULL; + + Evas_Object *tutorial = data; + ret_if(!tutorial); + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + scroller_bring_in_page(tutorial_info->scroller, tutorial_info->scroller_info->center, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_INSTANT); + + elm_object_signal_emit(tutorial, "show", "start,pressed"); + effect_play_vibration(); + + _D("Show structure page"); + + _destroy_start_button(tutorial); + _destroy_close_button(tutorial); +} + + + +static Evas_Object *_create_start_button(Evas_Object *tutorial) +{ + Evas_Object *button = NULL; + + retv_if(!tutorial, NULL); + + _D("Add start button"); + + button = elm_button_add(tutorial); + retv_if(!button, NULL); + + elm_object_style_set(button, "focus"); + elm_object_part_content_set(tutorial, "button", button); + evas_object_show(button); + + elm_object_part_text_set(tutorial, "button_text", _("IDS_ST_BUTTON_NEXT")); + elm_object_domain_translatable_part_text_set(tutorial, "button_text", PROJECT, "IDS_ST_BUTTON_NEXT"); + + elm_access_info_cb_set(button, ELM_ACCESS_INFO, _start_button_info_cb, tutorial); + evas_object_smart_callback_add(button, "clicked", _start_button_clicked_cb, tutorial); + elm_object_signal_callback_add(tutorial, "start", "button", _tutorial_start_cb, tutorial); + + return button; +} + + + +static void _close_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + tutorial_info_s *tutorial_info = NULL; + + Evas_Object *tutorial = data; + ret_if(!tutorial); + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + /* Scroller has to be unfreezed before using scroller_bring_in_page */ + scroller_unfreeze(tutorial_info->scroller); + scroller_bring_in_page(tutorial_info->scroller, tutorial_info->scroller_info->center, SCROLLER_FREEZE_OFF, SCROLLER_BRING_TYPE_INSTANT); + + _destroy_start_button(tutorial); + _destroy_close_button(tutorial); + + tutorial_destroy(tutorial); + + /* only tutorial use */ + if (preference_set_int(VCONF_KEY_HOME_IS_TUTORIAL_ENABLED_TO_RUN, 0) != 0) { + _E("Critical, cannot set the private vconf key"); + return; + } +} + + + +static Evas_Object *_create_close_button(Evas_Object *tutorial) +{ + Evas_Object *button = NULL; + + retv_if(!tutorial, NULL); + + _D("Add start button"); + + button = elm_button_add(tutorial); + retv_if(!button, NULL); + + elm_object_style_set(button, "focus"); + elm_object_part_content_set(tutorial, "close_button", button); + evas_object_show(button); + + elm_access_info_cb_set(button, ELM_ACCESS_INFO, _close_button_info_cb, tutorial); + evas_object_smart_callback_add(button, "clicked", _close_button_clicked_cb, tutorial); + + return button; +} + + + +static Evas_Object *_create_window(void) +{ + Evas_Object *win = NULL; + + win = elm_win_add(NULL, "Tutorial", ELM_WIN_BASIC); + retv_if(!win, NULL); + + elm_win_title_set(win, "Tutorial"); + elm_win_borderless_set(win, EINA_TRUE); + elm_win_alpha_set(win, EINA_TRUE); + elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_HIDE); + elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_BG_TRANSPARENT); + elm_win_prop_focus_skip_set(win, EINA_TRUE); + elm_win_role_set(win, "no-effect"); + + evas_object_resize(win, main_get_info()->root_w, main_get_info()->root_h); + evas_object_show(win); + + return win; +} + + + +static void _destroy_window(Evas_Object *win) +{ + ret_if(!win); + + evas_object_del(win); +} + + + +#define FILE_TUTORIAL_EDJ EDJEDIR"/tutorial.edj" +#define GROUP_TUTORIAL "tutorial" +static Evas_Object *_create_layout(Evas_Object *win) +{ + Evas_Object *tutorial = NULL; + Eina_Bool ret; + + retv_if(!win, NULL); + + tutorial = elm_layout_add(win); + retv_if(!tutorial, NULL); + + ret = elm_layout_file_set(tutorial, FILE_TUTORIAL_EDJ, GROUP_TUTORIAL); + if (EINA_FALSE == ret) return NULL; + + evas_object_size_hint_weight_set(tutorial, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_min_set(tutorial, main_get_info()->root_w, main_get_info()->root_h); + evas_object_resize(tutorial, main_get_info()->root_w, main_get_info()->root_h); + evas_object_show(tutorial); + + return tutorial; +} + + + +static void _destroy_layout(Evas_Object *tutorial) +{ + ret_if(!tutorial); + + evas_object_data_del(tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP); + evas_object_data_del(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT); + evas_object_data_del(tutorial, PRIVATE_DATA_KEY_TUTORIAL_ENABLE_INDICATOR); + + evas_object_del(tutorial); +} + + + +static Evas_Object *_create_bg(Evas_Object *tutorial) +{ + Evas *evas = NULL; + Evas_Object *bg = NULL; + + retv_if(!tutorial, NULL); + + evas = evas_object_evas_get(tutorial); + retv_if(!evas, NULL); + + bg = evas_object_rectangle_add(evas); + retv_if(!bg, NULL); + + evas_object_size_hint_min_set(bg, main_get_info()->root_w, main_get_info()->root_h); + evas_object_size_hint_max_set(bg, main_get_info()->root_w, main_get_info()->root_h); + evas_object_resize(bg, main_get_info()->root_w, main_get_info()->root_h); + elm_object_part_content_set(tutorial, "bg_area", bg); + evas_object_show(bg); + + return bg; +} + + + +static void _destroy_bg(Evas_Object *bg) +{ + ret_if(!bg); + + evas_object_del(bg); +} + + + +static void _destroy_focus_buttons(tutorial_info_s *tutorial_info) +{ + ret_if(!tutorial_info); + + if (tutorial_info->layout_focus) { + evas_object_del(tutorial_info->layout_focus); + } + + if (tutorial_info->text_focus) { + evas_object_del(tutorial_info->text_focus); + } +} + + + +static void _create_focus_buttons(Evas_Object *tutorial) +{ + tutorial_info_s *tutorial_info = NULL; + Evas_Object *focus = NULL; + + ret_if(!tutorial); + + tutorial_info = evas_object_data_get(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_TEXT, _text_start); + + /* Layout button for TTS*/ + focus = elm_button_add(tutorial); + ret_if(!focus); + + elm_object_style_set(focus, "focus"); + elm_object_part_content_set(tutorial, "focus,tutorial", focus); + evas_object_event_callback_add(focus, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, tutorial); + evas_object_event_callback_add(focus, EVAS_CALLBACK_MOUSE_UP, _up_cb, tutorial_info); + elm_object_focus_allow_set(focus, EINA_FALSE); + elm_access_object_unregister(focus); + tutorial_info->layout_focus = focus; + + /*text button for TTS */ + focus = elm_button_add(tutorial); + goto_if(!focus, ERROR); + + elm_object_style_set(focus, "focus"); + elm_object_part_content_set(tutorial, "focus,text", focus); + elm_access_info_cb_set(focus, ELM_ACCESS_TYPE, _access_info_cb, tutorial); + elm_object_focus_allow_set(focus, EINA_TRUE); + elm_object_focus_set(focus, EINA_TRUE); + tutorial_info->text_focus = focus; + + return; + +ERROR: + _destroy_focus_buttons(tutorial_info); +} + + + +HAPI Evas_Object *tutorial_create(Evas_Object *layout) +{ + Evas_Object *win = NULL; + Evas_Object *tutorial = NULL; + Evas_Object *bg = NULL; + Evas_Object *scroller = NULL; + + layout_info_s *layout_info = NULL; + scroller_info_s *scroller_info = NULL; + tutorial_info_s *tutorial_info = NULL; + Ecore_X_Window tutorial_xwin; + Ecore_X_Window home_xwin; + int ret = 0; + + retv_if(!layout, NULL); + + _D("Creat tutorial"); + + if ((ret = vconf_set_int(VCONF_KEY_HOME_IS_TUTORIAL, 1)) != 0) { + _E("Critical, cannot set the public vconf key"); + return NULL; + } + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, NULL); + + tutorial_info = calloc(1, sizeof(tutorial_info_s)); + retv_if(!tutorial_info, NULL); + + tutorial_info->layout = layout; + + scroller = evas_object_data_get(layout, DATA_KEY_SCROLLER); + goto_if(!scroller, ERROR); + tutorial_info->scroller = scroller; + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + goto_if(!scroller_info, ERROR); + tutorial_info->scroller_info = scroller_info; + + win = _create_window(); + goto_if(!win, ERROR); + tutorial_info->win = win; + _tutorial_info.win = win; + + tutorial = _create_layout(win); + goto_if(!tutorial, ERROR); + tutorial_info->tutorial = tutorial; + + bg = _create_bg(tutorial); + goto_if(!bg, ERROR); + tutorial_info->bg = bg; + + /* We have to set tutorial_info right after calloc & tutorial */ + evas_object_data_set(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO, tutorial_info); + + if (main_get_info()->is_tts) { + elm_object_tree_focus_allow_set(main_get_info()->layout, EINA_FALSE); + _D("tree_focus_allow_set layout(%p) as FALSE", main_get_info()->layout); + } + scroller_unhighlight(scroller); + + elm_object_signal_emit(tutorial, "standard", "center"); + + elm_object_signal_emit(tutorial, "start", "start"); + elm_object_part_text_set(tutorial, "text", _("IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB")); + elm_object_domain_translatable_part_text_set(tutorial, "text", PROJECT, "IDS_WMGR_BODY_WELCOME_E_TAP_THE_BUTTON_BELOW_TO_LEARN_HOW_TO_USE_YOUR_GEAR_ABB"); + if (!_create_start_button(tutorial)) _E("failed to add the add start button"); + if (!_create_close_button(tutorial)) _E("failed to add the add close button"); + + _create_focus_buttons(tutorial); + + evas_object_smart_callback_add(win, "access,highlight,enabled", _highlighted_enabled_cb, tutorial_info); + evas_object_smart_callback_add(win, "access,highlight,disabled", _highlighted_disabled_cb, tutorial_info); + + scroller_freeze(scroller); + scroller_bring_in_page(scroller, scroller_info->center, SCROLLER_FREEZE_ON, SCROLLER_BRING_TYPE_INSTANT); + + tutorial_xwin = elm_win_xwindow_get(win); + goto_if(!tutorial_xwin, ERROR); + + home_xwin = elm_win_xwindow_get(main_get_info()->win); + goto_if(!home_xwin, ERROR); + + /* set transient : home & tutorial */ + _append_transient_list(tutorial_xwin, home_xwin); + + key_register_cb(KEY_TYPE_BACK, _tutorial_back_cb, tutorial); + main_register_cb(APP_STATE_RESUME, _resume_cb, tutorial); + + layout_info->tutorial = tutorial; + + return tutorial; + +ERROR: + /* We don't need to destroy bg and so on because we don't create */ + if (tutorial) _destroy_layout(tutorial); + if (win) _destroy_window(win); + if (tutorial_info) free(tutorial_info); + + return NULL; +} + + + +HAPI void tutorial_destroy(Evas_Object *tutorial) +{ + layout_info_s *layout_info = NULL; + tutorial_info_s *tutorial_info = NULL; + Eina_List *instance_list = NULL; + instance_info_s *info = NULL; + layout_info_s *home_layout_info = NULL; + scroller_info_s *scroller_info = NULL; + + _D("Destroy tutorial"); + + ret_if(!tutorial); + + if(_tutorial_info.transient_timer) { + ecore_timer_del(_tutorial_info.transient_timer); + _tutorial_info.transient_timer = NULL; + } + + if(_tutorial_info.step_eight_timer) { + ecore_timer_del(_tutorial_info.step_eight_timer); + _tutorial_info.step_eight_timer = NULL; + } + + tutorial_info = evas_object_data_del(tutorial, PRIVATE_DATA_KEY_TUTORIAL_INFO); + ret_if(!tutorial_info); + ret_if(!tutorial_info->layout); + + layout_info = evas_object_data_get(tutorial_info->layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + main_unregister_cb(APP_STATE_RESUME, _resume_cb); + key_unregister_cb(KEY_TYPE_BACK, _tutorial_back_cb); + + instance_list = apps_main_get_info()->instance_list; + ret_if(!instance_list); + + info = eina_list_nth(instance_list, APPS_FIRST_LIST); + ret_if(!info); + ret_if(!info->win); + + if (main_get_info()->is_tts) { + elm_object_tree_focus_allow_set(main_get_info()->layout, EINA_TRUE); + _D("tree_focus_allow_set layout(%p) as TRUE", main_get_info()->layout); + + ret_if(!info->layout); + elm_object_tree_focus_allow_set(info->layout, EINA_TRUE); + _D("tree_focus_allow_set layout(%p) as TRUE", info->layout); + home_layout_info = evas_object_data_get(main_get_info()->layout, DATA_KEY_LAYOUT_INFO); + scroller_info = evas_object_data_get(home_layout_info->scroller, DATA_KEY_SCROLLER_INFO); + if (scroller_info) page_focus(scroller_info->center); + } + + scroller_highlight(tutorial_info->scroller); + + _destroy_focus_buttons(tutorial_info); + _destroy_bg(tutorial_info->bg); + _destroy_layout(tutorial_info->tutorial); + + _destroy_transient_list(); + _destroy_window(tutorial_info->win); + + scroller_unfreeze(tutorial_info->scroller); + free(tutorial_info); + + layout_info->tutorial = NULL; + + if (vconf_set_int(VCONF_KEY_HOME_IS_TUTORIAL, 0) != 0) { + _E("Critical, cannot set the public vconf key"); + return; + } +} + + + +#define TITLE_APPS "__APPS__" +HAPI int tutorial_is_apps(Ecore_X_Window xwin) +{ + layout_info_s *layout_info = NULL; + void (*_step_func)(Evas_Object *, int, int); + char *title = NULL; + + title = ecore_x_icccm_title_get(xwin); + retv_if(!title, 0); + + if (strcmp(title, TITLE_APPS)) { + _D("This is not Apps"); + free(title); + return 0; + } + free(title); + + layout_info = evas_object_data_get(main_get_info()->layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, 0); + + _step_func = evas_object_data_get(layout_info->tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP); + retv_if(!_step_func, 0); + + return _step_func == STEP_APPS ? 1 : 0; +} + + + +#define TITLE_INDICATOR "__MOMENT_VIEW__" +HAPI int tutorial_is_indicator(Ecore_X_Window xwin) +{ + layout_info_s *layout_info = NULL; + void (*_step_func)(Evas_Object *, int, int); + char *title = NULL; + + title = ecore_x_icccm_title_get(xwin); + retv_if(!title, 0); + + if (strcmp(title, TITLE_INDICATOR)) { + _D("This is not Indicator"); + free(title); + return 0; + } + free(title); + + layout_info = evas_object_data_get(main_get_info()->layout, DATA_KEY_LAYOUT_INFO); + retv_if(!layout_info, 0); + + _step_func = evas_object_data_get(layout_info->tutorial, PRIVATE_DATA_KEY_TUTORIAL_STEP); + retv_if(!_step_func, 0); + + return _step_func == _step_eight ? 1 : 0; +} + +// End of file diff --git a/home/src/util.c b/home/src/util.c new file mode 100755 index 0000000..14bac2a --- /dev/null +++ b/home/src/util.c @@ -0,0 +1,1169 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#include +#include +#include +#include + +#include "conf.h" +#include "log.h" +#include "util.h" +#include "main.h" +#include "power_mode.h" +#include "dbus.h" +#include "layout.h" +#include "layout_info.h" +#include "clock_service.h" + +#include +#include +#include + +#include "apps/layout.h" +#include "apps/apps_main.h" +#include "tutorial.h" + + + +HAPI int util_launch_app(const char *appid, const char *key, const char *value) +{ + int pid = 0; + + retv_if(!appid, W_HOME_ERROR_INVALID_PARAMETER); + + if (key && value) { + bundle *b = bundle_create(); + retv_if(!b, 0); + + bundle_add(b, key, value); + home_dbus_cpu_booster_signal_send(); + pid = aul_launch_app(appid, b); + bundle_free(b); + } else { + home_dbus_cpu_booster_signal_send(); + pid = aul_launch_app(appid, NULL); + } + + if (pid < 0) { + _E("Failed to launch %s(%d)", appid, pid); + } + + return pid; +} + + + +HAPI int util_feature_enabled_get(int feature) +{ + int is_enabled = 1; + + if (feature & FEATURE_CLOCK_HIDDEN_BUTTON) { + if (main_get_info()->is_tts) { + return 0; + } + if (cooldown_mode_enabled_get() == 1) { + return 0; + } + if (clock_service_scroller_freezed_get() == 1) { + return 0; + } + if (tutorial_is_exist() == 1) { + return 0; + } + } else if (feature & FEATURE_CLOCK_VISUAL_CUE) { + if (main_get_info()->is_tts) { + return 0; + } + if (main_get_info()->is_alpm_clock_enabled == 1) { + return 0; + } + if (emergency_mode_enabled_get() == 1) { + return 0; + } + if (cooldown_mode_enabled_get() == 1) { + return 0; + } + if (apps_main_show_count_get() > 3) { + return 0; + } + if (clock_service_scroller_freezed_get() == 1) { + return 0; + } + } else if (feature & FEATURE_CLOCK_SELECTOR) { +#if 0 //TBD, it can be disabled + return 0; +#endif +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + if (clock_manager_view_state_get(CLOCK_VIEW_TYPE_DRAWER) == 1) { + return 0; + } +#endif + if (main_get_info()->is_tts) { + return 0; + } + if (emergency_mode_enabled_get() == 1) { + return 0; + } + if (cooldown_mode_enabled_get() == 1) { + return 0; + } + if (clock_service_scroller_freezed_get() == 1) { + return 0; + } + } else if (feature & FEATURE_APPS_BY_BEZEL_UP) { + if (main_get_info()->is_tts) { + return 0; + } +#ifndef ENABLE_INDICATOR_BRIEFING_VIEW + if (clock_manager_view_state_get(CLOCK_VIEW_TYPE_DRAWER) == 1) { + return 0; + } +#endif + if (emergency_mode_enabled_get() == 1) { + return 0; + } + if (cooldown_mode_enabled_get() == 1) { + return 0; + } + if (clock_service_scroller_freezed_get() == 1) { + return 0; + } + } else if (feature & FEATURE_APPS) { + if (emergency_mode_enabled_get() == 1) { + return 0; + } + if (cooldown_mode_enabled_get() == 1) { + return 0; + } + } else if (feature & FEATURE_CLOCK_CHANGE) { + Evas_Object *win = main_get_info()->win; + retv_if(win == NULL, is_enabled); + Evas_Object *layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + retv_if(layout == NULL, is_enabled); + + // disabled in editing + if (layout_is_edit_mode(layout) == 1) { + return 0; + } + } else if (feature & FEATURE_TUTORIAL) { + if (emergency_mode_enabled_get() == 1) { + return 0; + } + if (cooldown_mode_enabled_get() == 1) { + return 0; + } + } + + return is_enabled; +} + + +#define DbgFree(a) free(a) +static inline int get_pid(Ecore_X_Window win) +{ + int pid; + Ecore_X_Atom atom; + unsigned char *in_pid; + int num; + + atom = ecore_x_atom_get("X_CLIENT_PID"); + if (!atom) { + return WIDGET_ERROR_INVALID_PARAMETER; + } + + if (ecore_x_window_prop_property_get(win, atom, ECORE_X_ATOM_CARDINAL, + sizeof(int), &in_pid, &num) == EINA_FALSE) { + if (ecore_x_netwm_pid_get(win, &pid) == EINA_FALSE) { + _E("Failed to get PID from a window 0x%X\n", win); + return WIDGET_ERROR_INVALID_PARAMETER; + } + } else if (in_pid) { + pid = *(int *)in_pid; + DbgFree(in_pid); + } else { + _E("Failed to get PID\n"); + return WIDGET_ERROR_INVALID_PARAMETER; + } + + return pid; +} + +static inline Ecore_X_Window get_user_created_window(Ecore_X_Window win) +{ + Ecore_X_Window user_win = 0; + Ecore_X_Atom atom; + + atom = ecore_x_atom_get("_E_USER_CREATED_WINDOW"); + if (!atom) { + _D("Failed to get user created atom\n"); + return 0; + } + + if (ecore_x_window_prop_xid_get(win, atom, ECORE_X_ATOM_WINDOW, &user_win, 1) == 1 && win) { + _D("User window: %x (for %x)\n", user_win, win); + return user_win; + } + + return 0; +} + +static inline int get_window_info(Ecore_X_Window parent, Ecore_X_Window user_win, int *pid, char **command) +{ + Evas_Coord x, y, w, h; + int argc; + char **argv; + Evas_Coord rx, ry, rw, rh; + Evas_Coord px, py, pw, ph; + + ecore_x_window_geometry_get(0, &rx, &ry, &rw, &rh); + ecore_x_window_geometry_get(user_win, &x, &y, &w, &h); + ecore_x_window_geometry_get(parent, &px, &py, &pw, &ph); + + if (x != rx || y != ry || w != rw || h != rh) { + _D("Size mismatch (with user,win)\n"); + return WIDGET_ERROR_INVALID_PARAMETER; + } + + if (x != px || y != py || w != pw || h != ph) { + _D("Size mismatch (with parent)\n"); + return WIDGET_ERROR_INVALID_PARAMETER; + } + + ecore_x_icccm_command_get(user_win, &argc, &argv); + _D("Get Command of %x\n", user_win); + if (argc > 0) { + int i; + *pid = get_pid(user_win); + if (command) { + *command = argv[0]; + _D("Command[0]: %s\n", argv[0]); + i = 1; + } else { + i = 0; + } + + while (i < argc) { + _D("Command[%d]: %s\n", i, argv[i]); + DbgFree(argv[i]); + i++; + } + + DbgFree(argv); + return WIDGET_ERROR_NONE; + } + + DbgFree(argv); + + return WIDGET_ERROR_INVALID_PARAMETER; +} + +HAPI int util_find_top_visible_window(char **command) +{ + Ecore_X_Window root; + Ecore_X_Window ret; + struct stack_item *new_item; + struct stack_item *item; + Eina_List *win_stack; + int pid = -1; + struct stack_item { + Ecore_X_Window *wins; + int nr_of_wins; + int i; + }; + + root = ecore_x_window_root_first_get(); + + new_item = malloc(sizeof(*new_item)); + if (!new_item) { + _E("Error : Fail to malloc - %d", errno); + return -1; + } + + new_item->nr_of_wins = 0; + new_item->wins = + ecore_x_window_children_get(root, &new_item->nr_of_wins); + new_item->i = new_item->nr_of_wins - 1; + + win_stack = NULL; + + if (new_item->wins) { + win_stack = eina_list_append(win_stack, new_item); + } else { + DbgFree(new_item); + } + + while (pid < 0 && (item = eina_list_nth(win_stack, 0))) { + win_stack = eina_list_remove(win_stack, item); + + if (!item->wins) { + DbgFree(item); + continue; + } + + while (item->i >= 0) { + ret = item->wins[item->i]; + + /* + * Now we don't need to care about visibility of window, + * just check whether it is registered or not. + * (ecore_x_window_visible_get(ret)) + */ + if (ecore_x_window_visible_get(ret) == EINA_TRUE) { + Ecore_X_Window user_win; + + user_win = get_user_created_window(ret); + if (user_win && get_window_info(ret, user_win, &pid, command) == WIDGET_ERROR_NONE) { + break; + } else { + _D("Failed to get win info: %x\n", ret); + } + } + + new_item = malloc(sizeof(*new_item)); + if (!new_item) { + _E("Error : Fail to malloc - %d", errno); + item->i++; + continue; + } + + new_item->nr_of_wins = 0; + new_item->wins = + ecore_x_window_children_get(ret, + &new_item->nr_of_wins); + new_item->i = new_item->nr_of_wins - 1; + if (new_item->wins) { + win_stack = + eina_list_append(win_stack, new_item); + } else { + DbgFree(new_item); + } + + item->i--; + } + + DbgFree(item->wins); + DbgFree(item); + } + + EINA_LIST_FREE(win_stack, item) { + DbgFree(item->wins); + DbgFree(item); + } + + return pid; +} + +/*! + * + * usage) + * app_service(...) + * { + * if (power_key pressed) { + * int pid; + * pid = util_find_top_visible_window(); + * if (pid == getpid()) { + * // if (first page) { + * // LCD_OFF + * // } else { + * // SCROLL TO THE FIRST PAGE + * // } + * } else { + * // elm_win_activate(my_win); + * } + * } + * + */ + + + +//////////////////////////////////////////////////////////////////// +// Apps util + +HAPI void _evas_object_event_changed_size_hints_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Coord w, h; + + evas_object_size_hint_min_get(obj, &w, &h); + _D("%s : min (%d:%d)", data, w, h); + + evas_object_size_hint_max_get(obj, &w, &h); + _D("%s : max (%d:%d)", data, w, h); +} + + + +HAPI void _evas_object_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Coord x; + Evas_Coord y; + Evas_Coord w; + Evas_Coord h; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + _D("%s(%p) is resized to (%d, %d, %d, %d)", data, obj, x, y, w, h); + + evas_object_size_hint_min_get(obj, &w, &h); + _D("%s : min (%d:%d)", data, w, h); + + evas_object_size_hint_max_get(obj, &w, &h); + _D("%s : max (%d:%d)", data, w, h); +} + + + +void _evas_object_event_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + _D("%s(%p) IS REMOVED!", (const char *) data, obj); +} + + + +void _evas_object_event_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Coord x; + Evas_Coord y; + Evas_Coord w; + Evas_Coord h; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + _D("%s's GEOMETRY : [%d, %d, %d, %d]", (const char *) data, x, y, w, h); +} + + + +void _evas_object_event_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Coord x; + Evas_Coord y; + Evas_Coord w; + Evas_Coord h; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + _D("%s(%p)'s GEOMETRY : [%d, %d, %d, %d]", (const char *) data, obj, x, y, w, h); +} + + + +void _evas_object_event_hide_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Coord x; + Evas_Coord y; + Evas_Coord w; + Evas_Coord h; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + _D("%s(%p)'s GEOMETRY : [%d, %d, %d, %d]", (const char *) data, obj, x, y, w, h); +} + + + +static Eina_Bool _unblock_cb(void *data) +{ + retv_if(NULL == data, EINA_FALSE); + apps_layout_unblock(data); + + return EINA_FALSE; +} + + + +HAPI void apps_util_post_message_for_launch_fail(const char *name) +{ + ret_if(NULL == name); + + int len = strlen(_("IDS_AT_TPOP_UNABLE_TO_OPEN_PS")) + strlen(name) + SPARE_LEN; + + char *inform = calloc(len, sizeof(char)); + ret_if(NULL == inform); + + snprintf(inform, len, _("IDS_AT_TPOP_UNABLE_TO_OPEN_PS"), name); + notification_status_message_post(inform); + + free(inform); + + return; +} + + + +static void _svc_cb(bundle *b, int request_code, appsvc_result_val result, void *data) +{ + _D("Request code : %d"); + + if (result != APPSVC_RES_OK) { + char* inform; + char* inform_with_ret; + int len; + + const char *name = data; + ret_if(NULL == name); + + // IDS_AT_TPOP_UNABLE_TO_OPEN_PS : "Unable to open %s" + len = strlen(_("IDS_AT_TPOP_UNABLE_TO_OPEN_PS")) + strlen(name) + SPARE_LEN; + + inform = calloc(len, sizeof(char)); + if (!inform) { + _E("cannot calloc for information"); + return; + } + snprintf(inform, len, _("IDS_AT_TPOP_UNABLE_TO_OPEN_PS"), name); + + inform_with_ret = calloc(len, sizeof(char)); + if (!inform_with_ret) { + _E("cannot calloc for information"); + free(inform); + return; + } + snprintf(inform_with_ret, len, "%s(%d)", inform, result); + notification_status_message_post(inform_with_ret); + + free(inform); + free(inform_with_ret); + } +} + + + +#define LAUNCH_WITH_SPECIAL_ROUTINE false +#define PACKAGE_ORANGE_WORLD "widgetMor.orangeMobile" +static bool _launch_special_package(const char *package, const char *name) +{ + retv_if(NULL == package, false); + retv_if(NULL == name, false); + + if (!strcmp(package, PACKAGE_ORANGE_WORLD)) { + _D("Special launch for %s", PACKAGE_ORANGE_WORLD); + bundle *b = bundle_create(); + retv_if(NULL == b, false); + + appsvc_set_operation(b, APPSVC_OPERATION_VIEW); + appsvc_set_uri(b, "http://m.orange.fr"); + appsvc_run_service(b, 0, _svc_cb, (void *) name); + + bundle_free(b); + + return true; + } + + return false; +} + + + +#define LAYOUT_BLOCK_INTERVAL 1.0 +HAPI void apps_util_launch(Evas_Object *win, const char *package, const char *name) +{ + ret_if(NULL == package); + + if (!name) name = package; + if (LAUNCH_WITH_SPECIAL_ROUTINE && _launch_special_package(package, name)) { + return; + } + + home_dbus_cpu_booster_signal_send(); + + int ret_aul = aul_open_app(package); + if (ret_aul < AUL_R_OK) { + + if(ret_aul == AUL_R_EREJECTED && cooldown_mode_warning_get()) { + util_create_toast_popup(win, _("IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH")); + } + else { + char* inform; + char* inform_with_ret; + int len; + + // IDS_AT_TPOP_UNABLE_TO_OPEN_PS : "Unable to open %s" + len = strlen(_("IDS_AT_TPOP_UNABLE_TO_OPEN_PS")) + strlen(name) + SPARE_LEN; + + inform = calloc(len, sizeof(char)); + if (!inform) { + _E("cannot calloc for information"); + return; + } + snprintf(inform, len, _("IDS_AT_TPOP_UNABLE_TO_OPEN_PS"), name); + + inform_with_ret = calloc(len, sizeof(char)); + if (!inform_with_ret) { + _E("cannot calloc for information"); + free(inform); + return; + } + snprintf(inform_with_ret, len, "%s(%d)", inform, ret_aul); + notification_status_message_post(inform_with_ret); + + free(inform); + free(inform_with_ret); + } + } else { + apps_util_notify_to_home(ret_aul); + _D("Launch app's ret : [%d]", ret_aul); + _T(package); + + Evas_Object *layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + ret_if(NULL == layout); + apps_layout_block(layout); + ecore_timer_add(LAYOUT_BLOCK_INTERVAL, _unblock_cb, layout); + } +} + + + +HAPI void apps_util_launch_main_operation(Evas_Object *win, const char *app_id, const char *name) +{ + ret_if(NULL == app_id); + + if (!name) name = app_id; + app_control_h service = NULL; + ret_if(APP_CONTROL_ERROR_NONE != app_control_create(&service)); + ret_if(NULL == service); + + app_control_set_operation(service, APP_CONTROL_OPERATION_MAIN); + app_control_set_app_id(service, app_id); + + home_dbus_cpu_booster_signal_send(); + + int ret = app_control_send_launch_request(service, NULL, NULL); + if (APP_CONTROL_ERROR_NONE != ret) { + + if(ret == APP_CONTROL_ERROR_LAUNCH_REJECTED && cooldown_mode_warning_get()) { + util_create_toast_popup(win, _("IDS_SM_BODY_THE_DEVICE_TEMPERATURE_IS_TOO_HIGH")); + } + else { + char* inform; + char* inform_with_ret; + int len; + + // IDS_AT_TPOP_UNABLE_TO_OPEN_PS : "Unable to open %s" + len = strlen(_("IDS_AT_TPOP_UNABLE_TO_OPEN_PS")) + strlen(name) + SPARE_LEN; + + inform = calloc(len, sizeof(char)); + if (!inform) { + _E("cannot calloc for information"); + goto ERROR; + } + snprintf(inform, len, _("IDS_AT_TPOP_UNABLE_TO_OPEN_PS"), name); + + inform_with_ret = calloc(len, sizeof(char)); + if (!inform_with_ret) { + _E("cannot calloc for information"); + free(inform); + goto ERROR; + } + snprintf(inform_with_ret, len, "%s(%d)", inform, ret); + notification_status_message_post(inform_with_ret); + + free(inform); + free(inform_with_ret); + } + } else { + _SD("Launch an app(%s:%s) ret : [%d]", app_id, name, ret); + _T(app_id); + + Evas_Object *layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + ret_if(NULL == layout); + apps_layout_block(layout); + ecore_timer_add(LAYOUT_BLOCK_INTERVAL, _unblock_cb, layout); + } + +ERROR: + app_control_destroy(service); +} + + + +HAPI void apps_util_launch_with_arg(Evas_Object *win, const char *app_id, const char *arg, const char *name) +{ + ret_if(NULL == app_id); + ret_if(NULL == arg); + + if (!name) name = app_id; + if (LAUNCH_WITH_SPECIAL_ROUTINE && _launch_special_package(app_id, name)) { + return; + } + + _SD("Argument:(%s)", arg); + int len = strlen(arg); + + bundle *b = NULL; + b = bundle_decode((bundle_raw *) arg, len); + + /* AUL requests : Reset the caller appid as App-tray */ + const char *value = bundle_get_val(b, AUL_K_CALLER_APPID); + if (value) bundle_del(b, AUL_K_CALLER_APPID); + + home_dbus_cpu_booster_signal_send(); + + int ret = aul_launch_app(app_id, b); + bundle_free(b); + + if (0 > ret) { + char* inform; + char* inform_with_ret; + int len; + + // IDS_AT_TPOP_UNABLE_TO_OPEN_PS : "Unable to open %s" + len = strlen(_("IDS_AT_TPOP_UNABLE_TO_OPEN_PS")) + strlen(name) + SPARE_LEN; + + inform = calloc(len, sizeof(char)); + if (!inform) { + _E("cannot calloc for information"); + return; + } + snprintf(inform, len, _("IDS_AT_TPOP_UNABLE_TO_OPEN_PS"), name); + + inform_with_ret = calloc(len, sizeof(char)); + if (!inform_with_ret) { + _E("cannot calloc for information"); + free(inform); + return; + } + snprintf(inform_with_ret, len, "%s(%d)", inform, ret); + notification_status_message_post(inform_with_ret); + + free(inform); + free(inform_with_ret); + } else { + _SD("Launch an app(%s:%s) ret : [%d]", app_id, name, ret); + _T(app_id); + + Evas_Object *layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + ret_if(NULL == layout); + apps_layout_block(layout); + ecore_timer_add(LAYOUT_BLOCK_INTERVAL, _unblock_cb, layout); + } +} + + + +HAPI void apps_util_launch_with_bundle(Evas_Object *win, const char *app_id, bundle *b, const char *name) +{ + ret_if(NULL == app_id); + ret_if(NULL == b); + + if (!name) name = app_id; + if (LAUNCH_WITH_SPECIAL_ROUTINE && _launch_special_package(app_id, name)) { + return; + } + + home_dbus_cpu_booster_signal_send(); + + int ret = aul_launch_app(app_id, b); + if (0 > ret) { + char* inform; + char* inform_with_ret; + int len; + + // IDS_AT_TPOP_UNABLE_TO_OPEN_PS : "Unable to open %s" + len = strlen(_("IDS_AT_TPOP_UNABLE_TO_OPEN_PS")) + strlen(name) + SPARE_LEN; + + inform = calloc(len, sizeof(char)); + if (!inform) { + _E("cannot calloc for information"); + return; + } + snprintf(inform, len, _("IDS_AT_TPOP_UNABLE_TO_OPEN_PS"), name); + + inform_with_ret = calloc(len, sizeof(char)); + if (!inform_with_ret) { + _E("cannot calloc for information"); + free(inform); + return; + } + snprintf(inform_with_ret, len, "%s(%d)", inform, ret); + notification_status_message_post(inform_with_ret); + + free(inform); + free(inform_with_ret); + } else { + _SD("Launch an app(%s:%s) ret : [%d]", app_id, name, ret); + _T(app_id); + + Evas_Object *layout = evas_object_data_get(win, DATA_KEY_LAYOUT); + ret_if(NULL == layout); + apps_layout_block(layout); + ecore_timer_add(LAYOUT_BLOCK_INTERVAL, _unblock_cb, layout); + } +} + + + +HAPI void apps_util_notify_to_home(int pid) +{ + char *pkgname; + + if (pid <= 0) + return; + + pkgname = vconf_get_str("db/setting/menuscreen/package_name"); + if (!pkgname) + return; + + if (strcmp(pkgname, "org.tizen.cluster-home")) { + free(pkgname); + return; + } + + _D("Service: (%s)\n", pkgname); + free(pkgname); +} + + + +static void _toast_popup_destroy_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *popup = obj; + ret_if(!popup); + + evas_object_del(popup); + + Evas_Object *parent = data; + ret_if(!parent); + + evas_object_data_del(parent, DATA_KEY_POPUP); +} + + + +static char *_toast_popup_access_info_cb(void *data, Evas_Object *obj) +{ + retv_if(!data, NULL); + + char *tmp = strdup((char*)data); + retv_if(!tmp, NULL); + + return tmp; +} + + + +/* This API is not allowed to use on the others */ +extern Evas_Object *elm_object_part_access_object_get(const Evas_Object *obj, const char *part); +#define UTIL_TOAST_POPUP_TIMER 3.0 +int util_create_toast_popup(Evas_Object *parent, const char* text) +{ + retv_if(!parent, EINA_FALSE); + + Evas_Object *popup = elm_popup_add(parent); + retv_if(!popup, EINA_FALSE); + + elm_object_style_set(popup, POPUP_STYLE_TOAST); + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM); + elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, ELM_NOTIFY_ALIGN_FILL); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_object_part_text_set(popup, "elm.text", text); + elm_object_domain_translatable_part_text_set(popup, "elm.text", PROJECT, text); + + Evas_Object *ao = elm_object_part_access_object_get(popup, "access.outline"); + elm_access_info_cb_set(ao, ELM_ACCESS_TYPE, _toast_popup_access_info_cb, text); + + if(main_get_info()->is_tts == EINA_FALSE) + elm_popup_timeout_set(popup, UTIL_TOAST_POPUP_TIMER); + + evas_object_smart_callback_add(popup, "block,clicked", _toast_popup_destroy_cb, parent); + evas_object_smart_callback_add(popup, "timeout", _toast_popup_destroy_cb, parent); + + evas_object_data_set(parent, DATA_KEY_POPUP, popup); + + evas_object_show(popup); + + return EINA_TRUE; +} + + + +#define POPUP_EDJ EDJEDIR"/popup.edj" +int util_create_check_popup(Evas_Object *parent, const char* text, void _clicked_cb(void *, Evas_Object *, void *)) +{ + Evas_Object *popup = NULL; + Evas_Object *popup_scroller = NULL; + Evas_Object *popup_layout_inner = NULL; + Evas_Object *label = NULL; + Evas_Object *check = NULL; + Evas_Object *button = NULL; + + retv_if(!parent, EINA_FALSE); + + if (evas_object_data_get(parent, DATA_KEY_CHECK_POPUP)) return EINA_TRUE; + + popup = elm_popup_add(parent); + retv_if(!popup, EINA_FALSE); + + elm_object_style_set(popup, POPUP_STYLE_DEFAULT); + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, ELM_NOTIFY_ALIGN_FILL); + + popup_scroller = elm_scroller_add(popup); + goto_if(!popup_scroller, ERROR); + elm_object_style_set(popup_scroller, "effect"); + evas_object_size_hint_weight_set(popup_scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_scroller_content_min_limit(popup_scroller, EINA_FALSE, EINA_TRUE); + evas_object_size_hint_max_set(popup_scroller, POPUP_TEXT_MAX_WIDTH, POPUP_TEXT_MAX_HEIGHT); + elm_object_content_set(popup, popup_scroller); + evas_object_show(popup_scroller); + + popup_layout_inner = elm_layout_add(popup_scroller); + goto_if(!popup_layout_inner, ERROR); + elm_layout_file_set(popup_layout_inner, POPUP_EDJ, "popup_checkview_internal"); + evas_object_size_hint_weight_set(popup_layout_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_content_set(popup_scroller, popup_layout_inner); + + label = elm_label_add(popup_layout_inner); + goto_if(!label, ERROR); + elm_object_style_set(label, "popup/default"); + elm_label_line_wrap_set(label, ELM_WRAP_MIXED); + elm_object_text_set(label, _("IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE")); + elm_object_domain_translatable_text_set(label, PROJECT, "IDS_HS_POP_TO_INSTALL_OR_UNINSTALL_APPLICATIONS_USE_THE_SAMSUNG_GEAR_APPLICATION_ON_YOUR_MOBILE_DEVICE"); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + + elm_object_part_content_set(popup_layout_inner, "label", label); + + check = elm_check_add(popup); + goto_if(!check, ERROR); + elm_object_style_set(check, "popup"); + elm_object_text_set(check, _("IDS_CLOCK_BODY_DONT_REPEAT_ABB")); + elm_object_domain_translatable_text_set(check, PROJECT, "IDS_CLOCK_BODY_DONT_REPEAT_ABB"); + elm_object_part_content_set(popup_layout_inner, "elm.swallow.end", check); + evas_object_show(check); + evas_object_data_set(popup, DATA_KEY_CHECK, check); + + button = elm_button_add(popup); + goto_if(!button, ERROR); + elm_object_style_set(button, BUTTON_STYLE_POPUP); + elm_object_text_set(button, _("IDS_ST_BUTTON_OK")); + elm_object_domain_translatable_text_set(button, PROJECT, "IDS_ST_BUTTON_OK"); + elm_object_part_content_set(popup, "button1", button); + evas_object_smart_callback_add(button, "clicked", _clicked_cb, parent); + + evas_object_data_set(parent, DATA_KEY_CHECK_POPUP, popup); + evas_object_show(popup); + + return EINA_TRUE; + +ERROR: + if (popup) evas_object_del(popup); + return EINA_FALSE; +} + + + +static char *_get_app_id(const char *pkgname) +{ + int ret = 0; + char *appid = 0; + pkgmgrinfo_pkginfo_h handle = NULL; + retv_if(pkgname == NULL, NULL); + + ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgname, &handle); + if (ret != PMINFO_R_OK) { + _E("Failed to get pkg information from pkgmgr"); + goto ERR; + } + ret = pkgmgrinfo_pkginfo_get_mainappid(handle, &appid); + if (ret != PMINFO_R_OK) { + _E("Failed to get mainapp ID information from pkgmgr"); + goto ERR; + } + + if (appid != NULL) { + appid = strdup(appid); + } +ERR: + if (handle != NULL) { + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + } + + return appid; +} + + + +static char *_get_app_pkgname(const char *appid) +{ + int ret = 0; + char *pkgname = NULL; + pkgmgrinfo_appinfo_h handle = NULL; + retv_if(appid == NULL, NULL); + + ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle); + if (ret != PMINFO_R_OK) { + _E("Failed to get app information from pkgmgr"); + goto ERR; + } + + ret = pkgmgrinfo_appinfo_get_pkgname(handle, &pkgname); + if (ret != PMINFO_R_OK) { + _E("Failed to get pkgname from app info handler"); + goto ERR; + } + if (pkgname != NULL) { + pkgname = strdup(pkgname); + } + +ERR: + if (handle != NULL) { + pkgmgrinfo_appinfo_destroy_appinfo(handle); + } + + return pkgname; +} + + + +static int _get_app_type(char *pkgname) +{ + int ret = 0; + char *apptype = NULL; + pkgmgrinfo_pkginfo_h handle = NULL; + retv_if(pkgname == NULL, APP_TYPE_NATIVE); + + ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgname, &handle); + if (ret != PMINFO_R_OK) { + _E("Failed to get pkg information from pkgmgr"); + return APP_TYPE_NATIVE; + } + + ret = pkgmgrinfo_pkginfo_get_type(handle, &apptype); + if (ret != PMINFO_R_OK) { + _E("Failed to get app type from pkginfo handler"); + goto ERR; + } + + if (apptype != NULL) { + if (strcmp(apptype, "wgt") == 0) { + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + return APP_TYPE_WEB; + } else { + char *widget_id; + widget_id = widget_service_get_widget_id(pkgname); + if (widget_id) { + _D("Widget: %s\n", widget_id); + free(widget_id); + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + return APP_TYPE_WIDGET; + } + _D("MC: %s\n", pkgname); + } + } + +ERR: + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + return APP_TYPE_NATIVE; +} + + + +HAPI int util_get_app_type(const char *appid) +{ + int pkgtype = APP_TYPE_NATIVE; + char *pkgname = NULL; + retv_if(appid == NULL, APP_TYPE_NATIVE); + + pkgname = _get_app_pkgname(appid); + if(pkgname == NULL) { + _E("Failed to get pkgname"); + goto DONE; + } + pkgtype = _get_app_type(pkgname); + +DONE: + free(pkgname); + + return pkgtype; +} + + + +/* + * This APIs should be used only for the packages which have only one app + * returned pointer have to be free by you + */ +HAPI char *util_get_pkgname_by_appid(const char *appid) +{ + return _get_app_pkgname(appid); +} + + + +HAPI char *util_get_appid_by_pkgname(const char *pkgname) +{ + return _get_app_id(pkgname); +} + + + +HAPI const char *util_basename(const char *name) +{ + int length; + length = name ? strlen(name) : 0; + if (!length) { + return "."; + } + + while (--length > 0 && name[length] != '/'); + + return length <= 0 ? name : (name + length + (name[length] == '/')); +} + + + +HAPI double util_timestamp(void) +{ +#if defined(_USE_ECORE_TIME_GET) + return ecore_time_get(); +#else + struct timeval tv; + if (gettimeofday(&tv, NULL) < 0) { + static unsigned long internal_count = 0; + _E("failed to get time of day(%d)", errno); + tv.tv_sec = internal_count++; + tv.tv_usec = 0; + } + + return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0f; +#endif +} + + + +HAPI void util_activate_home_window(void) +{ + if (apps_main_is_visible() == EINA_TRUE) { + apps_main_launch(APPS_LAUNCH_HIDE); + } + + Evas_Object *win = main_get_info()->win; + if (win) { + elm_win_activate(win); + } +} +// End of a file diff --git a/home/src/virtual_canvas.c b/home/src/virtual_canvas.c new file mode 100755 index 0000000..a45f954 --- /dev/null +++ b/home/src/virtual_canvas.c @@ -0,0 +1,204 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "virtual_canvas.h" + +#define QUALITY_N_COMPRESS "quality=100 compress=1" +#define PRIVATE_DATA_KEY_DATA "dt" + + + +HAPI Evas *virtual_canvas_create(int w, int h) +{ + Ecore_Evas *internal_ee; + Evas *internal_e; + + // Create virtual canvas + internal_ee = ecore_evas_buffer_new(w, h); + if (!internal_ee) { + _D("Failed to create a new canvas buffer\n"); + return NULL; + } + + ecore_evas_alpha_set(internal_ee, EINA_TRUE); + ecore_evas_manual_render_set(internal_ee, EINA_TRUE); + + // Get the "Evas" object from a virtual canvas + internal_e = ecore_evas_get(internal_ee); + if (!internal_e) { + ecore_evas_free(internal_ee); + _D("Faield to get Evas object\n"); + return NULL; + } + + return internal_e; +} + + + +static bool _flush_data_to_file(Evas *e, char *data, const char *filename, int w, int h) +{ + Evas_Object *output; + + output = evas_object_image_add(e); + if (!output) { + _D("Failed to create an image object\n"); + return false; + } + + evas_object_image_colorspace_set(output, EVAS_COLORSPACE_ARGB8888); + evas_object_image_alpha_set(output, EINA_TRUE); + evas_object_image_size_set(output, w, h); + evas_object_image_smooth_scale_set(output, EINA_TRUE); + evas_object_image_data_set(output, data); + evas_object_image_data_update_add(output, 0, 0, w, h); + + if (evas_object_image_save(output, filename, NULL, QUALITY_N_COMPRESS) == EINA_FALSE) { + evas_object_del(output); + _SD("Failed to save a captured image (%s)\n", filename); + return false; + } + + evas_object_del(output); + + if (access(filename, F_OK) != 0) { + _SD("File %s is not found\n", filename); + return false; + } + + return true; +} + + + +EAPI bool virtual_canvas_flush_to_file(Evas *e, const char *filename, int w, int h) +{ + void *data; + Ecore_Evas *internal_ee; + + internal_ee = ecore_evas_ecore_evas_get(e); + if (!internal_ee) { + _D("Failed to get ecore evas\n"); + return false; + } + + ecore_evas_manual_render(internal_ee); + + // Get a pointer of a buffer of the virtual canvas + data = (void *) ecore_evas_buffer_pixels_get(internal_ee); + if (!data) { + _D("Failed to get pixel data\n"); + return false; + } + + return _flush_data_to_file(e, data, filename, w, h); +} + + + +#define INDICATOR_HEIGHT 30.0 +static Evas_Object *_load_file(Evas *e, const char *file, int w, int h) +{ + Evas_Object *output = evas_object_image_filled_add(e); + retv_if(NULL == output, NULL); + + int file_w, file_h; + + evas_object_image_smooth_scale_set(output, EINA_TRUE); + evas_object_image_load_size_set(output, w, h); + evas_object_image_file_set(output, file, NULL); + + int ret = evas_object_image_load_error_get(output); + if (EVAS_LOAD_ERROR_NONE != ret) _E("Cannot load a file (%d, %s)", ret, file); + + evas_object_image_size_get(output, &file_w, &file_h); + evas_object_image_fill_set(output, 0, 0, file_w, file_h); + + float file_r = (float) file_w / (float) file_h; + float canvas_r = (float) w / ((float) h + INDICATOR_HEIGHT); + + int new_w = file_w; + if (file_r > canvas_r) new_w = (float) file_h * (float) canvas_r; + + float r = (float) w / (float) new_w; + file_w = (float) file_w * r; + file_h = (float) file_h * r; + + evas_object_resize(output, file_w, file_h); + evas_object_move(output, 0, (-INDICATOR_HEIGHT * r)); + evas_object_show(output); + + return output; +} + + + +void _del_ee_cb(Ecore_Evas *ee) +{ + Evas_Object *eoi = ecore_evas_data_get(ee, PRIVATE_DATA_KEY_DATA); + evas_object_del(eoi); +} + + + +HAPI void *virtual_canvas_load_file_to_data(Evas *e, const char *file, int w, int h) +{ + Evas_Object *eoi = _load_file(e, file, w, h); + retv_if(NULL == eoi, NULL); + + Ecore_Evas *internal_ee = ecore_evas_ecore_evas_get(e); + if (NULL == internal_ee) { + evas_object_del(eoi); + return NULL; + } + + ecore_evas_data_set(internal_ee, PRIVATE_DATA_KEY_DATA, eoi); + ecore_evas_manual_render(internal_ee); + ecore_evas_callback_pre_free_set(internal_ee, _del_ee_cb); + + // Get a pointer of a buffer of the virtual canvas + return (void *) ecore_evas_buffer_pixels_get(internal_ee); +} + + + +HAPI bool virtual_canvas_destroy(Evas *e) +{ + Ecore_Evas *ee; + + ee = ecore_evas_ecore_evas_get(e); + if (!ee) { + _D("Failed to ecore evas object\n"); + return false; + } + + ecore_evas_free(ee); + return true; +} + + + +// End of a file diff --git a/home/src/widget.c b/home/src/widget.c new file mode 100644 index 0000000..0d070b8 --- /dev/null +++ b/home/src/widget.c @@ -0,0 +1,1103 @@ +/* + * Samsung API + * Copyright (c) 2013 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 +#include +#include /* feed_access_event */ +#include + +/** + * WIDGET_ACCESS_STATUS_XXX + */ +#include + +#include "util.h" +#include "db.h" +#include "index.h" +#include "layout_info.h" +#include "log.h" +#include "main.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "page.h" +#include "edit.h" +#include "add-viewer_package.h" +#include "add-viewer_pkgmgr.h" + + +static struct info { + Eina_Bool is_scrolling; + Eina_List *pended_event_list; +} s_info = { + .is_scrolling = EINA_FALSE, + .pended_event_list = NULL, +}; + + + +#define MAX_TTL 10 +#define TAG_SCROLL "l.s" // Scroller +#define TAG_UPDATED "l.u" // Widget Updated +#define TAG_FAULT_HL "f.h" // Faulted Highlight (emulate) +#define FAULTED_HL_TIMER 0.00001f + + + +struct pended_access_event { + Evas_Object *widget; + Elm_Access_Action_Info info; + void (*cb)(Evas_Object *obj, int ret, void *data); + void *data; + int ttl; +}; + + + +static const char *action_type_string(int type) +{ + switch (type) { + case ELM_ACCESS_ACTION_HIGHLIGHT: + return "HL"; + case ELM_ACCESS_ACTION_UNHIGHLIGHT: + return "UNHL"; + case ELM_ACCESS_ACTION_HIGHLIGHT_NEXT: + return "NEXT"; + case ELM_ACCESS_ACTION_HIGHLIGHT_PREV: + return "PREV"; + case ELM_ACCESS_ACTION_VALUE_CHANGE: + return "VALUE_CHANGE"; + case ELM_ACCESS_ACTION_MOUSE: + return "MOUSE"; + case ELM_ACCESS_ACTION_BACK: + return "BACK"; + case ELM_ACCESS_ACTION_OVER: + return "OVER"; + case ELM_ACCESS_ACTION_READ: + return "READ"; + case ELM_ACCESS_ACTION_ENABLE: + return "ENABLE"; + case ELM_ACCESS_ACTION_DISABLE: + return "DISABLE"; + case ELM_ACCESS_ACTION_ACTIVATE: + return "ACTIVATE"; + case ELM_ACCESS_ACTION_SCROLL: + return "SCROLL"; + default: + return "Unknown"; + } +} + +static void push_pended_event_list(Evas_Object *obj, Elm_Access_Action_Info *info, void (*cb)(Evas_Object *obj, int ret, void *data), void *data) +{ + struct pended_access_event *_info; + + _info = malloc(sizeof(*_info)); + if (!_info) { + _E("malloc:%s\n", strerror(errno)); + return; + } + + memcpy(&_info->info, info, sizeof(*info)); + _info->widget = obj; + _info->cb = cb; + _info->data = data; + _info->ttl = MAX_TTL; + + s_info.pended_event_list = eina_list_append(s_info.pended_event_list, _info); +} + + + +static void try_again_send_event(struct pended_access_event *info) +{ + if (info->ttl < 0) { + _E("Event TTL reach to the end"); + free(info); + return; + } + + s_info.pended_event_list = eina_list_prepend(s_info.pended_event_list, info); +} + + + +static struct pended_access_event *pop_pended_event_list(void) +{ + struct pended_access_event *info; + + info = eina_list_nth(s_info.pended_event_list, 0); + if (info) { + s_info.pended_event_list = eina_list_remove(s_info.pended_event_list, info); + info->ttl--; + } + + return info; +} + + + +static void widget_pended_event_consumer(Evas_Object *obj, int ret, void *data) +{ + struct pended_access_event *info; + + info = pop_pended_event_list(); + if (info) { + int ret; + ret = widget_viewer_evas_feed_access_event(info->widget, info->info.action_type, &info->info, info->cb, info->data); + if (ret == WIDGET_ERROR_RESOURCE_BUSY) { + _E("Failed to send pended event (%s), %X", action_type_string(info->info.action_type), ret); + try_again_send_event(info); + } else { + free(info); + } + } +} + + + +static void send_access_event(Evas_Object *widget, Elm_Access_Action_Info *info, int must_be_sent, void (*cb)(Evas_Object *obj, int ret, void *data), void *data) +{ + int ret; + + ret = widget_viewer_evas_feed_access_event(widget, info->action_type, info, cb, data); + if (ret == WIDGET_ERROR_RESOURCE_BUSY && must_be_sent) { + _D("Pending event (%s)", action_type_string(info->action_type)); + push_pended_event_list(widget, info, cb, data); + } +} + + + +static void del_cb(void *data, Evas *e, Evas_Object *widget, void *event_info) +{ + const char *widget_id; + struct pended_access_event *info; + Eina_List *l; + Eina_List *n; + + EINA_LIST_FOREACH_SAFE(s_info.pended_event_list, l, n, info) { + if (info->widget == widget) { + s_info.pended_event_list = eina_list_remove(s_info.pended_event_list, info); + free(info); + } + } + + widget_id = widget_viewer_evas_get_widget_id(widget); + if (widget_id) { + struct add_viewer_package *pkginfo; + + pkginfo = add_viewer_package_find(widget_id); + if (!pkginfo) { + _E("Add viewer has no info: %s", widget_id); + } else { + add_viewer_package_set_skip(pkginfo, 0); + } + } else { + _E("Has no widget_id?"); + } +} + + + +static void _widget_created_cb(void *data, Evas_Object *obj, void *event_info) +{ +} + + + +static void _widget_updated_cb(void *data, Evas_Object *obj, void *event_info) +{ + int (*updated)(Evas_Object *obj); + + updated = evas_object_data_get(obj, TAG_UPDATED); + if (!updated) { + return; + } + + if (updated(obj) == ECORE_CALLBACK_CANCEL) { + evas_object_data_del(obj, TAG_UPDATED); + } +} + + + +static void _widget_control_scroll_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct widget_evas_event_info *ev = event_info; + int (*scroll)(Evas_Object *obj, int hold); + + scroll = evas_object_data_get(obj, TAG_SCROLL); + if (!scroll) { + return; + } + + if (scroll(obj, (ev->error == WIDGET_ERROR_NONE && ev->event == WIDGET_EVENT_HOLD_SCROLL)) == ECORE_CALLBACK_CANCEL) { + evas_object_data_del(obj, TAG_SCROLL); + } +} + + + +HAPI Evas_Object *widget_create(Evas_Object *parent, const char *id, const char *subid, double period) +{ + Evas_Object *widget = NULL; + char *pkgname = NULL; + struct add_viewer_package *pkginfo; + + retv_if(!id, NULL); + + pkgname = widget_service_get_widget_id(id); + if (pkgname) { + free(pkgname); + } else { + _D("%s is not installed in the pkgmgr DB", id); + return NULL; + } + + widget = widget_viewer_evas_add_widget(parent, id, subid, period); + retv_if(!widget, NULL); + + pkginfo = add_viewer_package_find(id); + if (!pkginfo) { + _E("add-viewer info none: %s", id); + } else { + if (add_viewer_package_is_skipped(pkginfo)) { + _E("Package marked as skip"); + } + + add_viewer_package_set_skip(pkginfo, 1); + _D("Mark added: %s", id); + } + + evas_object_event_callback_add(widget, EVAS_CALLBACK_DEL, del_cb, NULL); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_WIDGET_CREATED, _widget_created_cb, NULL); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_UPDATED, _widget_updated_cb, NULL); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_CONTROL_SCROLLER, _widget_control_scroll_cb, NULL); + return widget; +} + + + +HAPI void widget_destroy(Evas_Object *widget) +{ + ret_if(!widget); + + evas_object_smart_callback_del(widget, WIDGET_SMART_SIGNAL_WIDGET_CREATED, _widget_created_cb); + evas_object_smart_callback_del(widget, WIDGET_SMART_SIGNAL_UPDATED, _widget_updated_cb); + evas_object_smart_callback_del(widget, WIDGET_SMART_SIGNAL_CONTROL_SCROLLER, _widget_control_scroll_cb); + evas_object_del(widget); +} + + + +/* The content is updated */ +static void _widget_extra_updated_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *page = data; + layout_info_s *layout_info = NULL; + scroller_info_s *scroller_info = NULL; + page_info_s *page_info = NULL; + const char *content_info = NULL; + + int center_index = 0; + int page_index = 0; + int ordering; + + ret_if(!page); + + _D("Widget is updated"); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + ret_if(!page_info->item); + + layout_info = evas_object_data_get(page_info->layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + content_info = widget_viewer_evas_get_content_info(page_info->item); + ret_if(!content_info); + + free(page_info->subid); + page_info->subid = strdup(content_info); + ret_if(!page_info->subid); + + /* do not need to update DB on the edit mode */ + if (layout_info->edit) return; + + scroller_info = evas_object_data_get(page_info->scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + + center_index = scroller_seek_page_position(page_info->scroller, scroller_info->center); + page_index = scroller_seek_page_position(page_info->scroller, page); + ordering = page_index - center_index - 1; + + db_update_item_by_ordering(page_info->id, content_info, ordering); + + _SD("Widget is updated to [%s:%s:%d]", page_info->id, content_info, ordering); +} + + + +static void _widget_remove(Evas_Object *page) +{ + Evas_Object *proxy_page = NULL; + Evas_Object *page_current = NULL; + Evas_Object *scroller = NULL; + page_info_s *page_info = NULL; + + /* We have to delete a proxy page on the edit mode */ + proxy_page = evas_object_data_get(page, DATA_KEY_PROXY_PAGE); + if (proxy_page) { + scroller_info_s *scroller_info = NULL; + page_info_s *proxy_page_info = NULL; + + proxy_page_info = evas_object_data_get(proxy_page, DATA_KEY_PAGE_INFO); + ret_if(!proxy_page_info); + + scroller = proxy_page_info->scroller; + ret_if(!scroller); + + scroller_info = evas_object_data_get(scroller, DATA_KEY_SCROLLER_INFO); + ret_if(!scroller_info); + ret_if(!scroller_info->parent); + + scroller_pop_page(proxy_page_info->scroller, proxy_page); + edit_destroy_proxy_page(proxy_page); + + page_current = scroller_get_focused_page(scroller); + ret_if(!page_current); + + index_bring_in_page(scroller_info->index[PAGE_DIRECTION_RIGHT], page_current); + edit_change_focus(scroller, page_current); + edit_arrange_plus_page(scroller_info->parent); + } + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + _D("Widget(%s) is removed", page_info->id); + + scroller = page_info->scroller; + ret_if(!scroller); + + scroller_pop_page(page_info->scroller, page); + page_destroy(page); + if (!main_get_info()->is_tts) { + page_arrange_plus_page(scroller, 0); + } +} + + + +static void _widget_create_aborted_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct widget_evas_event_info *ev = event_info; + Evas_Object *page = data; + Eina_List *page_info_list = NULL; + layout_info_s *layout_info = NULL; + page_info_s *page_info = NULL; + + ret_if(!page); + + _D("Widget is aborted to create"); + + /* We have to get the page_info before removing it */ + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + layout_info = evas_object_data_get(page_info->layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + if (ev->error == WIDGET_ERROR_ALREADY_EXIST) { + _SW("Already exists %s", ev->widget_app_id); + _widget_remove(page); + } else if (ev->error == WIDGET_ERROR_DISABLED) { + _SW("Disable %s", ev->widget_app_id); + _widget_remove(page); + page_info_list = scroller_write_list(layout_info->scroller); + if (page_info_list) { + db_read_list(page_info_list); + page_info_list_destroy(page_info_list); + } else { + db_remove_all_item(); + } + } +} + + + +static void _widget_period_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct widget_evas_event_info *ev = event_info; + _SD("Period changed: %s -> %lf", ev->widget_app_id, widget_viewer_evas_get_period(obj)); + /* + * TODO: Update the period information - Sync with DB? + */ +} + + + +static void _widget_faulted_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct widget_evas_event_info *ev = event_info; + + _SD("Widget is faulted - %s", ev->widget_app_id); +} + + + +static void _widget_deleted_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct widget_evas_event_info *ev = event_info; + Evas_Object *page = data; + page_info_s *page_info = NULL; + + ret_if(!page); + + _D("Widget is deleted"); + + if (ev->error == WIDGET_ERROR_FAULT) { + /* DBox is faulted. */ + _SE("Widget is faulted - %s", ev->widget_app_id); + return; + } + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + if (!widget_viewer_evas_is_faulted(page_info->item)) { + _widget_remove(page); + } +} + + + +static void _widget_access_action_ret_cb(Evas_Object *obj, int ret, void *data) +{ + Evas_Object *page = data; + page_info_s *page_info; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + switch (ret) { + case WIDGET_ACCESS_STATUS_FIRST: + case WIDGET_ACCESS_STATUS_LAST: + { + Elm_Access_Action_Info action_info; + memset(&action_info, 0, sizeof(action_info)); + action_info.action_type = ELM_ACCESS_ACTION_UNHIGHLIGHT; + push_pended_event_list(page_info->item, &action_info, widget_pended_event_consumer, NULL); + } + case WIDGET_ACCESS_STATUS_ERROR: /* In case of error, we have to set focus on our page */ + page_info->need_to_unhighlight = EINA_FALSE; + page_info->highlight_changed = EINA_FALSE; + page_info->need_to_read = EINA_TRUE; + + /* Update highlight */ + _D("The result of access action is (%d) %s", ret, page_info->highlighted ? "hl" : "unhl"); + elm_access_highlight_set(page_info->focus); + break; + case WIDGET_ACCESS_STATUS_DONE: + case WIDGET_ACCESS_STATUS_READ: + default: + if (page_info->highlighted) { + page_info->need_to_unhighlight = EINA_TRUE; + if (!page_info->highlight_changed) { + page_info->highlight_changed = EINA_TRUE; + _D("Need to unhighlight"); + elm_access_highlight_set(page_info->focus); + } else { + _D("Do not change the highlight"); + } + } else { + _D("page_info->highlight EINA_FALSE"); + } + } + + widget_pended_event_consumer(obj, ret, data); +} + + + +static Eina_Bool _highlight_action_cb(void *data, Evas_Object *focus, Elm_Access_Action_Info *action_info) +{ + Evas_Object *page = data; + page_info_s *page_info; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) { + _E("Page info is not valid\n"); + return EINA_FALSE; + } + + if (page_info->highlighted == EINA_FALSE) { + page_info->highlighted = EINA_TRUE; + page_info->need_to_read = EINA_TRUE; + _D("Turn on highlight"); + return EINA_FALSE; + } + + if (page_info->need_to_unhighlight) { + page_info->need_to_unhighlight = EINA_FALSE; + _D("Turn off highlight"); + return EINA_TRUE; + } else { + _D("Turn on highlight"); + return EINA_FALSE; + } +} + + + +static Eina_Bool _unhighlight_action_cb(void *data, Evas_Object *focus, Elm_Access_Action_Info *action_info) +{ + Evas_Object *page = data; + page_info_s *page_info; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) { + _E("Page info is not valid\n"); + return EINA_FALSE; + } + + if (page_info->highlighted == EINA_TRUE) { + Elm_Access_Action_Info _action_info; + + _D("Reset highlight flags"); + page_info->highlighted = EINA_FALSE; + page_info->highlight_changed = EINA_FALSE; + + memset(&_action_info, 0, sizeof(_action_info)); + if (s_info.is_scrolling) { + if (page_info->is_scrolled_object) { + page_info->is_scrolled_object = EINA_FALSE; + + if (widget_viewer_evas_is_faulted(page_info->item)) { + _D("Faulted"); + return EINA_FALSE; + } + + // We have to cancelate the scroll event. + _action_info.mouse_type = 2; // MOUSE_UP + _action_info.action_type = ELM_ACCESS_ACTION_SCROLL; + send_access_event(page_info->item, &_action_info, 1, widget_pended_event_consumer, NULL); + + _action_info.mouse_type = 0; + _action_info.action_type = ELM_ACCESS_ACTION_UNHIGHLIGHT; + send_access_event(page_info->item, &_action_info, 1, widget_pended_event_consumer, NULL); + _D("Reset scroll event"); + } + } else { + // Need to turn of highlight + _action_info.action_type = ELM_ACCESS_ACTION_UNHIGHLIGHT; + send_access_event(page_info->item, &_action_info, 1, widget_pended_event_consumer, NULL); + } + return EINA_FALSE; + } + + _D("Unhighlighted"); + return EINA_TRUE; +} + + + +static Eina_Bool _access_action_activate_cb(void *data, Evas_Object *focus, Elm_Access_Action_Info *action_info) +{ + Evas_Object *page = data; + page_info_s *page_info; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) { + _E("Page info is not valid\n"); + /* Do not change the highlight in this case, so return EINA_TRUE */ + return EINA_FALSE; + } + + if (page_info->highlighted == EINA_FALSE) { + _D("Highlight is not exists"); + return EINA_FALSE; + } + + if (widget_viewer_evas_is_faulted(page_info->item)) { + _D("Activate Widget\n"); + widget_viewer_evas_activate_faulted_widget(page_info->item); + } else { + _D("Access action(%s) for focus(%p <> %p) is called", action_type_string(action_info->action_type), focus, page_info->focus); + send_access_event(page_info->item, action_info, 1, _widget_access_action_ret_cb, page); + /* Highligh off and then reset highlight from return callback _widget_access_action_ret_cb() */ + } + + return EINA_TRUE; +} + + + +static Eina_Bool _access_action_scroll_cb(void *data, Evas_Object *focus, Elm_Access_Action_Info *action_info) +{ + Evas_Object *page = data; + page_info_s *page_info; + int must = 0; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) { + _E("Page info is not valid\n"); + /* Do not change the highlight in this case, so return EINA_TRUE */ + return EINA_FALSE; + } + + if (page_info->highlighted == EINA_FALSE) { + _D("Highlight is not exists"); + return EINA_FALSE; + } + + if (action_info->mouse_type == 0) { // MOUSE_DOWN + s_info.is_scrolling = EINA_TRUE; + page_info->is_scrolled_object = EINA_TRUE; + must = 1; + } else if (action_info->mouse_type == 2) { // MOUSE_UP + s_info.is_scrolling = EINA_FALSE; + + if (!page_info->is_scrolled_object) { + return EINA_FALSE; + } + + page_info->is_scrolled_object = EINA_FALSE; + must = 1; + } else if (s_info.is_scrolling != EINA_TRUE) { + return EINA_FALSE; + } + + if (widget_viewer_evas_is_faulted(page_info->item)) { + _D("Faulted box, do not send any events"); + return EINA_FALSE; + } + + send_access_event(page_info->item, action_info, must, widget_pended_event_consumer, NULL); + + /* Highligh off and then reset highlight from return callback _widget_access_action_ret_cb() */ + return EINA_FALSE; +} + + + +static Eina_Bool delayed_faulted_action_cb(void *data) +{ + Evas_Object *page = data; + page_info_s *page_info; + Elm_Access_Action_Info action_info; + int ret = ECORE_CALLBACK_RENEW; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) { + return ECORE_CALLBACK_CANCEL; + } + + memset(&action_info, 0, sizeof(action_info)); + + if ((int)evas_object_data_get(page, TAG_FAULT_HL) == 1) { + action_info.action_type = ELM_ACCESS_ACTION_HIGHLIGHT; + /** + * Call elm_access_action with "HIGHLIGHT", will invoke the ELM_ACCESS_ACTION_READ callback. + * It will invoke the _access_action_forward_cb, + */ + elm_access_action(page_info->focus, action_info.action_type, &action_info); + + evas_object_data_del(page, TAG_FAULT_HL); + page_info->faulted_hl_timer = NULL; + ret = ECORE_CALLBACK_CANCEL; + } else if ((int)evas_object_data_get(page, TAG_FAULT_HL) == 0) { + action_info.action_type = ELM_ACCESS_ACTION_UNHIGHLIGHT; + elm_access_action(page_info->focus, action_info.action_type, &action_info); + + evas_object_data_set(page, TAG_FAULT_HL, (void *)1); + } + + return ret; +} + + + +/** + * ELM_ACCESS_ACTION_HIGHLIGHT_NEXT + * ELM_ACCESS_ACTION_HIGHLIGHT_PREV + * ELM_ACCESS_ACTION_VALUE_CHANGE + * ELM_ACCESS_ACTION_BACK + * ELM_ACCESS_ACTION_READ + * ELM_ACCESS_ACTION_ENABLE + * ELM_ACCESS_ACTION_DISABLE + */ +static Eina_Bool _access_action_forward_cb(void *data, Evas_Object *focus, Elm_Access_Action_Info *action_info) +{ + Evas_Object *page = data; + page_info_s *page_info; + Evas_Coord x, y; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) { + _E("Page info is not valid\n"); + /* Do not change the highlight in this case, so return EINA_TRUE */ + return EINA_FALSE; + } + + if (page_info->highlighted == EINA_FALSE) { + _D("Highlight is not exists"); + return EINA_FALSE; + } + + evas_object_geometry_get(page_info->item, &x, &y, NULL, NULL); + + if (s_info.is_scrolling || x || y) { + _D("I don't want to do anything! %dx%d", x, y); + return EINA_FALSE; + } + + if (widget_viewer_evas_is_faulted(page_info->item)) { + switch (action_info->action_type) { + case ELM_ACCESS_ACTION_READ: + break; + case ELM_ACCESS_ACTION_HIGHLIGHT_NEXT: + case ELM_ACCESS_ACTION_HIGHLIGHT_PREV: + if (!page_info->faulted_hl_timer) { + page_info->faulted_hl_timer = ecore_timer_add(FAULTED_HL_TIMER, delayed_faulted_action_cb, page); + if (!page_info->faulted_hl_timer) { + _E("Faulted box, faulted timer failed"); + } else { + _D("Faulted box, Add highlight emulate timer"); + } + } else { + _D("Faulted box, Keep highlight emulate timer"); + } + break; + default: + break; + } + page_info->need_to_read = EINA_TRUE; + + return EINA_TRUE; + } + + _D("Access action(%s) for focus(%p <> %p) is called, by(%d)", action_type_string(action_info->action_type), focus, page_info->focus, action_info->action_by); + send_access_event(page_info->item, action_info, 1, _widget_access_action_ret_cb, page); + + /* Highligh off and then reset highlight from return callback _widget_access_action_ret_cb() */ + return EINA_TRUE; +} + + + +static Eina_Bool _access_action_mouse_cb(void *data, Evas_Object *focus, Elm_Access_Action_Info *action_info) +{ + Evas_Object *page = data; + page_info_s *page_info; + int must; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) { + _E("Page info is not valid\n"); + /* Do not change the highlight in this case, so return EINA_TRUE */ + return EINA_FALSE; + } + + if (page_info->highlighted == EINA_FALSE) { + _D("Highlight is not exists"); + return EINA_FALSE; + } + + if (widget_viewer_evas_is_faulted(page_info->item)) { + _D("Faulted box, do not send any events"); + return EINA_FALSE; + } + + if (s_info.is_scrolling) { + _D("I don't want to do anything!"); + return EINA_FALSE; + } + + must = action_info->mouse_type != 1; + + _D("Access action(%s) for focus(%p <> %p) is called", action_type_string(action_info->action_type), focus, page_info->focus); + send_access_event(page_info->item, action_info, must, widget_pended_event_consumer, NULL); + + /* Highligh off and then reset highlight from return callback _widget_access_action_ret_cb() */ + return EINA_TRUE; +} + + + +static char *_access_widget_read_cb(void *data, Evas_Object *obj) +{ + Evas_Object *page = data; + page_info_s *page_info = NULL; + char *tmp; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + if (widget_viewer_evas_is_widget(page_get_item(page)) == 1) { + if (page_info->need_to_read == EINA_FALSE) { + /* + * need_to_read will be toggled by _access_page_num_cb function + * so this function should not touch it. + */ + return NULL; + } + + if (page_info->need_to_unhighlight == EINA_TRUE) { + return NULL; + } + } + + tmp = strdup(_("IDS_IDLE_HEADER_WIDGET")); + retv_if(!tmp, NULL); + return tmp; +} + + +static char *_access_page_name_cb(void *data, Evas_Object *obj) +{ + Evas_Object *page = data; + page_info_s *page_info = NULL; + char *title; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + if (widget_viewer_evas_is_widget(page_get_item(page)) == 1) { + if (page_info->need_to_read == EINA_FALSE) { + /* + * need_to_read will be toggled by _access_page_num_cb function + * so this function should not touch it. + */ + return NULL; + } + + if (page_info->need_to_unhighlight == EINA_TRUE) { + return NULL; + } + } + + if (page_info->title) { + title = strdup(page_info->title); + retv_if(!title, NULL); + return title; + } + + /* EFL will free this title. */ + title = page_read_title(page); + retv_if(!title, NULL); + + return title; +} + + + +static char *_access_context_info_cb(void *data, Evas_Object *obj) +{ + Evas_Object *page = data; + page_info_s *page_info = NULL; + char *ctx = NULL; + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + retv_if(!page_info, NULL); + + if (widget_viewer_evas_is_faulted(page_info->item)) { + if (page_info->need_to_read == EINA_FALSE) { + return NULL; + } + + if (page_info->need_to_unhighlight == EINA_TRUE) { + return NULL; + } + page_info->need_to_read = EINA_FALSE; + ctx = strdup(_("IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY")); + } + + return ctx; +} + + + +HAPI void widget_add_callback(Evas_Object *widget, Evas_Object *page) +{ + page_info_s *page_info = NULL; + + ret_if(!widget); + ret_if(!page); + + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + ret_if(!page_info); + + /* Only handling the focus set operation to page_focus */ + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_HIGHLIGHT, _highlight_action_cb, page); + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_UNHIGHLIGHT, _unhighlight_action_cb, page); + + /* Deliever events to the widget */ + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_HIGHLIGHT_NEXT, _access_action_forward_cb, page); + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_HIGHLIGHT_PREV, _access_action_forward_cb, page); + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_VALUE_CHANGE, _access_action_forward_cb, page); + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_BACK, _access_action_forward_cb, page); + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_READ, _access_action_forward_cb, page); + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_ENABLE, _access_action_forward_cb, page); + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_DISABLE, _access_action_forward_cb, page); + + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_ACTIVATE, _access_action_activate_cb, page); + + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_SCROLL, _access_action_scroll_cb, page); + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_MOUSE, _access_action_mouse_cb, page); + elm_access_action_cb_set(page_info->focus, ELM_ACCESS_ACTION_OVER, _access_action_mouse_cb, page); + + elm_access_info_cb_set(page_info->focus, ELM_ACCESS_INFO, _access_page_name_cb, page); + elm_access_info_cb_set(page_info->focus, ELM_ACCESS_TYPE, _access_widget_read_cb, page); + elm_access_info_cb_set(page_info->focus, ELM_ACCESS_CONTEXT_INFO, _access_context_info_cb, page); + + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_EXTRA_INFO_UPDATED, _widget_extra_updated_cb, page); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_WIDGET_DELETED, _widget_deleted_cb, page); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_WIDGET_FAULTED, _widget_faulted_cb, page); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_PERIOD_CHANGED, _widget_period_changed_cb, page); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_WIDGET_CREATE_ABORTED, _widget_create_aborted_cb, page); +} + + + +HAPI void widget_del_callback(Evas_Object *widget) +{ + ret_if(!widget); + + evas_object_smart_callback_del(widget, WIDGET_SMART_SIGNAL_EXTRA_INFO_UPDATED, _widget_extra_updated_cb); + evas_object_smart_callback_del(widget, WIDGET_SMART_SIGNAL_WIDGET_DELETED, _widget_deleted_cb); + evas_object_smart_callback_del(widget, WIDGET_SMART_SIGNAL_WIDGET_FAULTED, _widget_faulted_cb); + evas_object_smart_callback_del(widget, WIDGET_SMART_SIGNAL_PERIOD_CHANGED, _widget_period_changed_cb); + evas_object_smart_callback_del(widget, WIDGET_SMART_SIGNAL_WIDGET_CREATE_ABORTED, _widget_create_aborted_cb); +} + + + +HAPI void widget_set_update_callback(Evas_Object *obj, int (*updated)(Evas_Object *obj)) +{ + evas_object_data_set(obj, TAG_UPDATED, updated); +} + + + +HAPI void widget_set_scroll_callback(Evas_Object *obj, int (*scroll)(Evas_Object *obj, int hold)) +{ + evas_object_data_set(obj, TAG_SCROLL, scroll); +} + + + +static int uninstall_cb(const char *pkgname, enum pkgmgr_status status, double value, void *data) +{ + layout_info_s *layout_info; + scroller_info_s *scroller_info; + page_info_s *page_info; + Eina_List *page_list; + Evas_Object *page; + + if (status != PKGMGR_STATUS_START) { + return 0; + } + + if (!main_get_info()->layout) { + return 0; + } + + layout_info = evas_object_data_get(main_get_info()->layout, DATA_KEY_LAYOUT_INFO); + if (!layout_info) { + return 0; + } + + scroller_info = evas_object_data_get(layout_info->scroller, DATA_KEY_SCROLLER_INFO); + if (!scroller_info) { + return 0; + } + + if (!scroller_info->box) { + return 0; + } + + page_list = elm_box_children_get(scroller_info->box); + EINA_LIST_FREE(page_list, page) { + page_info = evas_object_data_get(page, DATA_KEY_PAGE_INFO); + if (!page_info) { + continue; + } + + if (page_info->direction != PAGE_DIRECTION_RIGHT) { + continue; + } + + if (!page_info->item) { + continue; + } + + if (!widget_viewer_evas_is_faulted(page_info->item)) { + continue; + } + + _D("Faulted package: %s", widget_viewer_evas_get_widget_id(page_info->item)); + _widget_remove(page); + } + + return 0; +} + + + +HAPI void widget_init(Evas_Object *win) +{ + int val; + + add_viewer_pkgmgr_add_event_callback(PKGMGR_EVENT_UNINSTALL, uninstall_cb, NULL); + + widget_viewer_evas_set_option(WIDGET_VIEWER_EVAS_AUTO_RENDER_SELECTION, 1); + + if (preference_get_int("memory/private/org.tizen.w-home/auto_feed", &val) >= 0) { + widget_viewer_evas_set_option(WIDGET_VIEWER_EVAS_EVENT_AUTO_FEED, val); + } + + if (preference_get_int("memory/private/org.tizen.w-home/sensitive_move", &val) >= 0) { + widget_viewer_evas_set_option(WIDGET_VIEWER_EVAS_SENSITIVE_MOVE, val); + } + + widget_viewer_evas_init(win); + widget_viewer_evas_set_option(WIDGET_VIEWER_EVAS_SCROLL_X, 1); +} + + + +HAPI void widget_fini(void) +{ + widget_viewer_evas_fini(); + add_viewer_pkgmgr_del_event_callback(PKGMGR_EVENT_UNINSTALL, uninstall_cb, NULL); +} + + + +// End of a file diff --git a/home/src/win.c b/home/src/win.c new file mode 100755 index 0000000..3aa4f08 --- /dev/null +++ b/home/src/win.c @@ -0,0 +1,146 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "main.h" + + + +#ifdef BOOT_OPTIMIZATION +static w_home_error_e _rotate_cb(main_s *info, int angle) +{ + _D("Enter _rotate, angle is %d", angle); + info->angle = angle; + + switch (angle) { + case 0: + _D("Portrait normal"); + info->is_rotated = 0; + break; + case 90: + _D("Landscape reverse"); + info->is_rotated = 1; + break; + case 180: + _D("Portrait reverse"); + info->is_rotated = 0; + break; + case 270: + _D("Landscape normal"); + info->is_rotated = 1; + break; + default: + _E("Cannot reach here, angle is %d", angle); + } + + /* Rotate all objects */ + + return W_HOME_ERROR_NONE; +} + + + +static void _rotation_changed_cb(void *data, Evas_Object *obj, void *event) +{ + main_s *info = data; + int changed_ang; + + ret_if(!info); + + changed_ang = elm_win_rotation_get(info->win); + if (changed_ang != info->angle) { + _rotate_cb(info, changed_ang); + } +} +#endif + + + +HAPI Evas_Object *win_create(const char *name) +{ + Evas_Object *win = NULL; + main_s *info = NULL; + Ecore_X_Window xwin; + + info = main_get_info(); + retv_if(!info, NULL); + + /* Open GL backend */ + elm_config_accel_preference_set("opengl"); + ecore_x_window_size_get(ecore_x_window_root_first_get(), &info->root_w, &info->root_h); + +#if 0 // Doesn't support app_get_preinitialized_window in the wearables + win = (Evas_Object *) app_get_preinitialized_window(name); + if (!win) win = elm_win_add(NULL, name, ELM_WIN_BASIC); +#else + win = elm_win_add(NULL, name, ELM_WIN_BASIC); +#endif + retv_if(!win, NULL); + + elm_win_title_set(win, name); + elm_win_borderless_set(win, EINA_TRUE); + elm_win_alpha_set(win, EINA_FALSE); + elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_HIDE); + elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_BG_TRANSPARENT); + +#ifdef BOOT_OPTIMIZATION + /* Set available rotations */ + if (elm_win_wm_rotation_supported_get(win)) { + const int rots[4] = {0, 90, 180, 270}; + elm_win_wm_rotation_available_rotations_set(win, (const int *) &rots, 4); + _D("Set available rotations, {0, 90, 180, 270}"); + } + evas_object_smart_callback_add(win, "wm,rotation,changed", _rotation_changed_cb, info); +#endif + + evas_object_resize(win, info->root_w, info->root_h); + evas_object_show(win); + info->win = win; + info->e = evas_object_evas_get(win); + + xwin = elm_win_xwindow_get(win); + ecore_x_vsync_animator_tick_source_set(xwin); + + return win; +} + + + +HAPI void win_destroy(Evas_Object *win) +{ + main_s *info = NULL; + + ret_if(!win); + + info = main_get_info(); + ret_if(!info); + + evas_object_del(win); + info->win = NULL; +} + + + +// End of a file diff --git a/home/src/wms.c b/home/src/wms.c new file mode 100755 index 0000000..37c2086 --- /dev/null +++ b/home/src/wms.c @@ -0,0 +1,258 @@ +/* + * Samsung API + * Copyright (c) 2013 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 "log.h" +#include "util.h" +#include "db.h" +#include "page.h" +#include "widget.h" +#include "wms.h" +#include "conf.h" +#include "layout_info.h" +#include "xml.h" +#include "page_info.h" +#include "scroller_info.h" +#include "scroller.h" +#include "apps/apps_main.h" +#include "apps/xml.h" +#include "main.h" + + + +void wms_change_apps_order(int value) +{ + switch(value) + { + case W_HOME_WMS_BACKUP: + _D("Backup"); + apps_main_list_backup(); + + //Have to set the DONE, 3, to notify that backup is completed. + vconf_set_int(VCONF_KEY_WMS_APPS_ORDER, W_HOME_WMS_DONE); + + break; + case W_HOME_WMS_RESOTRE: + _D("Restore"); + wms_unregister_setup_wizard_vconf(); + apps_main_list_restore(); + break; + case W_HOME_WMS_DONE: + _D("done"); + //No need to do anything + break; + default: + _E("Invalid value:[%d]", value); + break; + } +} + + + +#define FAVORITES_ORDER_XML_PATH DATADIR"/favorites_order.xml" +void wms_change_favorite_order(int value) +{ + Evas_Object *layout = NULL; + layout_info_s *layout_info = NULL; + Eina_List *page_info_list = NULL; + + layout = evas_object_data_get(main_get_info()->win, DATA_KEY_LAYOUT); + ret_if(!layout); + + layout_info = evas_object_data_get(layout, DATA_KEY_LAYOUT_INFO); + ret_if(!layout_info); + + switch(value) + { + case W_HOME_WMS_BACKUP: + _D("Favorite Backup"); + + page_info_list = scroller_write_list(layout_info->scroller); + if (page_info_list) { + xml_read_list(FAVORITES_ORDER_XML_PATH, page_info_list); + } + + //Have to set the DONE, 3, to notify that backup is completed. + vconf_set_int(VCONF_KEY_WMS_FAVORITES_ORDER, W_HOME_WMS_DONE); + + break; + case W_HOME_WMS_RESOTRE: + _D("Favorite Restore"); + wms_unregister_setup_wizard_vconf(); + + page_info_list = xml_write_list(FAVORITES_ORDER_XML_PATH); + if (page_info_list) { + scroller_read_favorites_list(layout_info->scroller, page_info_list); + } + break; + case W_HOME_WMS_DONE: + _D("done"); + //No need to do anything + break; + default: + _E("Invalid value:[%d]", value); + break; + } +} + + +static void _favorites_list_reset() +{ + Eina_List *page_info_list = NULL; + Eina_List *tmp_list = NULL; + const Eina_List *l, *ln; + page_info_s *page_info = NULL; + char *pkgname = NULL; + + page_info_list = db_write_list(); + ret_if(!page_info_list); + + EINA_LIST_FOREACH_SAFE(page_info_list, l, ln, page_info) { + continue_if(!page_info); + continue_if(!page_info->id); + + pkgname = widget_service_get_widget_id(page_info->id); + if (pkgname) { + tmp_list = eina_list_append(tmp_list, page_info); + free(pkgname); + } else { + _D("%s is not installed in the pkgmgr DB", page_info->id); + } + } + + xml_read_list(FAVORITES_ORDER_XML_PATH, tmp_list); +} + + + +static void _order_reset() +{ + _D("order reset"); + + //Home + _favorites_list_reset(); + vconf_set_int(VCONF_KEY_WMS_FAVORITES_ORDER, W_HOME_WMS_DONE); + + //apps + apps_main_list_reset(); + vconf_set_int(VCONF_KEY_WMS_APPS_ORDER, W_HOME_WMS_DONE); +} + + +static void _change_setup_wizard_cb(keynode_t *node, void *data) +{ + int value = -1; + + if(vconf_get_bool(VCONFKEY_SETUP_WIZARD_FIRST_BOOT, &value) < 0) { + _E("Failed to get VCONFKEY_WMS_FAVORITES_ORDER"); + return; + } + + _SD("value is changed: [%d]", value); + + if(value == 0) { + if (vconf_ignore_key_changed(VCONFKEY_SETUP_WIZARD_FIRST_BOOT, _change_setup_wizard_cb) < 0) { + _E("Failed to ignore the setup wizard firstboot callback"); + } + + _order_reset(); + } +} + + +void wms_register_setup_wizard_vconf() +{ + main_s *main_info = main_get_info(); + ret_if(!main_info); + + int value = -1; + + vconf_get_bool(VCONFKEY_SETUP_WIZARD_FIRST_BOOT, &value); + + _SD("first boot: [%d]", value); + + if(value == 1) { + if (vconf_notify_key_changed(VCONFKEY_SETUP_WIZARD_FIRST_BOOT, _change_setup_wizard_cb, NULL) < 0) { + _E("Failed to register the setup wizard firstboot callback"); + } else { + main_info->setup_wizard = 1; + } + } +} + + +void wms_unregister_setup_wizard_vconf() +{ + main_s *main_info = main_get_info(); + ret_if(!main_info); + + _SD("first boot cb: [%d]", main_info->setup_wizard); + + if(main_info->setup_wizard) { + if (vconf_ignore_key_changed(VCONFKEY_SETUP_WIZARD_FIRST_BOOT, _change_setup_wizard_cb) < 0) { + _E("Failed to ignore the setup wizard firstboot callback"); + } + main_info->setup_wizard = 0; + } +} + + +static void _launch_gear_manager_response_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data) +{ + Evas_Object *parent = (Evas_Object*)user_data; + ret_if(!parent); + + _APPS_D("result: %d", result); + + if (result == APP_CONTROL_RESULT_SUCCEEDED) { + util_create_toast_popup(parent, _("IDS_HS_TPOP_DOWNLOAD_GEAR_APPLICATIONS_USING_MOBILE_DEVICE_ABB")); + } + else { + _APPS_E("Operation is failed: %d", result); + } +} + +#define W_MANAGER_SERVICE_APP_ID "org.tizen.w-manager-service" +void wms_launch_gear_manager(Evas_Object *parent, char *link) +{ + char *type = "gear"; + app_control_h service = NULL; + + ret_if(!link); + ret_if(APP_CONTROL_ERROR_NONE != app_control_create(&service)); + ret_if(!service); + + app_control_set_operation(service, APP_CONTROL_OPERATION_DEFAULT); + app_control_set_app_id(service, W_MANAGER_SERVICE_APP_ID); + app_control_add_extra_data(service, "type", type); + app_control_add_extra_data(service, "deeplink", link); + + int ret = app_control_send_launch_request(service, _launch_gear_manager_response_cb, parent); + if (APP_CONTROL_ERROR_NONE != ret) { + _APPS_E("launch fail:[%d]", ret); + } + + app_control_destroy(service); +} + + +// End of a file diff --git a/home/src/xml.c b/home/src/xml.c new file mode 100755 index 0000000..2956526 --- /dev/null +++ b/home/src/xml.c @@ -0,0 +1,375 @@ +/* + * Samsung API + * Copyright (c) 2013 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 // WIDGET_EVAS_DEFAULT_PERIOD + +#include "log.h" +#include "page_info.h" +#include "util.h" +#include "xml.h" + +const char *XML_ENCODING = "utf-8"; +const char *PAGE_CATEGORY_IDLE_CLOCK_STR = "idle-clock"; +const char *PAGE_CATEGORY_FAVORITE_STR = "favorite"; +const char *PAGE_CATEGORY_APP_WIDGET_STR = "appwidget"; +const char *PAGE_CATEGORY_MORE_APPS_STR = "more-apps"; +const int WIDGET_PER_PAGE = 4; + +static void _get_position_by_order(int ordering, int *row, int *cellx, int *celly) +{ + ret_if(!row); + ret_if(!cellx); + ret_if(!celly); + + *row = ordering / 4; + + switch(ordering % 4) { + case 0: + *cellx = 0; + *celly = 0; + break; + case 1: + *cellx = 1; + *celly = 0; + break; + case 2: + *cellx = 0; + *celly = 1; + break; + case 3: + *cellx = 1; + *celly = 1; + break; + default: + _E("Failed to get cellx & celly"); + *cellx = -1; + *celly = -1; + break; + } +} + + + +static xmlTextWriterPtr _init_writer(const char *xml_file) +{ + xmlTextWriterPtr writer; + int ret = 0; + + writer = xmlNewTextWriterFilename(xml_file, 0); + retv_if(!writer, NULL); + + ret = xmlTextWriterStartDocument(writer, NULL, XML_ENCODING, NULL); + if (ret < 0) { + _E("Failed to start xmlTextWriterStartDocument"); + xmlFreeTextWriter(writer); + return NULL; + } + + ret = xmlTextWriterStartElement(writer, BAD_CAST "data"); + if (ret < 0) { + _E("Failed to start xmlTextWriterStartElement"); + xmlFreeTextWriter(writer); + return NULL; + } + + return writer; +} + + + +static void _destroy_writer(xmlTextWriterPtr writer) +{ + int ret = 0; + + ret = xmlTextWriterEndElement(writer); + goto_if(ret < 0, END); + + ret = xmlTextWriterEndDocument(writer); + if (ret < 0) { + _E("Cannot end the document"); + } + +END: + xmlFreeTextWriter(writer); +} + + + +HAPI w_home_error_e xml_read_list(const char *xml_file, Eina_List *page_info_list) +{ + xmlTextWriterPtr writer; + Eina_List *l = NULL; + page_info_s *page_info = NULL; + char *category = NULL; + int ret = 0; + int row = -1; + int cellx = -1; + int celly = -1; + + retv_if(!xml_file, W_HOME_ERROR_INVALID_PARAMETER); + retv_if(!page_info_list, W_HOME_ERROR_INVALID_PARAMETER); + + writer = _init_writer(xml_file); + retv_if(!writer, W_HOME_ERROR_FAIL); + + EINA_LIST_FOREACH(page_info_list, l, page_info) { + continue_if(!page_info); + + _get_position_by_order(page_info->ordering, &row, &cellx, &celly); + + switch(page_info->category) { + case PAGE_CATEGORY_IDLE_CLOCK: + category = (char *) PAGE_CATEGORY_IDLE_CLOCK_STR; + break; + case PAGE_CATEGORY_APP: + category = (char *) PAGE_CATEGORY_FAVORITE_STR; + break; + case PAGE_CATEGORY_WIDGET: + category = (char *) PAGE_CATEGORY_APP_WIDGET_STR; + break; + case PAGE_CATEGORY_MORE_APPS: + category = (char *) PAGE_CATEGORY_MORE_APPS_STR; + break; + default: + _E("page_info->category error"); + break; + } + + ret = xmlTextWriterStartElement(writer, BAD_CAST category); + goto_if(ret < 0, END); + + ret = xmlTextWriterWriteFormatElement(writer, BAD_CAST "packageName", "%s", page_info->id); + goto_if(ret < 0, END); + + if (page_info->subid) { + ret = xmlTextWriterWriteFormatElement(writer, BAD_CAST "className", "%s", page_info->subid); + } else { + ret = xmlTextWriterWriteFormatElement(writer, BAD_CAST "className", "%s", page_info->id); + } + goto_if(ret < 0, END); + + ret = xmlTextWriterWriteFormatElement(writer, BAD_CAST "screen", "%d", row); + goto_if(ret < 0, END); + + ret = xmlTextWriterWriteFormatElement(writer, BAD_CAST "cellX", "%d", cellx); + goto_if(ret < 0, END); + + ret = xmlTextWriterWriteFormatElement(writer, BAD_CAST "cellY", "%d", celly); + goto_if(ret < 0, END); + + ret = xmlTextWriterEndElement(writer); + goto_if(ret < 0, END); + } + +END: + _destroy_writer(writer); + + return W_HOME_ERROR_NONE; +} + + + +static xmlTextReaderPtr _init_reader(const char *xml_file) +{ + xmlTextReaderPtr reader = NULL; + + retv_if(!xml_file, NULL); + + reader = xmlReaderForFile(xml_file, NULL, 0); + retv_if(!reader, NULL); + + return reader; +} + + + +static void _destroy_reader(xmlTextReaderPtr reader) +{ + ret_if(!reader); + xmlFreeTextReader(reader); +} + + + +HAPI Eina_List *xml_write_list(const char *xml_file) +{ + xmlTextReaderPtr reader = NULL; + Eina_List *page_info_list = NULL; + page_info_s *page_info = NULL; + const char *name, *value; + char *element = NULL; + int ret = -1; + + retv_if(!xml_file, NULL); + + reader = _init_reader(xml_file); + retv_if(!reader, NULL); + + while ((ret = xmlTextReaderRead(reader)) == 1) { + int dep = 0; + int node_type = 0; + static int cellx = 0; + static int celly = 0; + static int page_no = 0; + + dep = xmlTextReaderDepth(reader); + node_type = xmlTextReaderNodeType(reader); + continue_if(-1 == dep || -1 == node_type); + + name = (const char*) xmlTextReaderConstName(reader); + continue_if(!name); + + value = (const char*) xmlTextReaderConstValue(reader); + /* value can be NULL in case of 'category' */ + + // Category, element is 1 + if ((1 == dep) && (1 == node_type)) { + if (page_info) { + page_info_destroy(page_info); + page_info = NULL; + } + + page_info = page_info_create(NULL, NULL, WIDGET_VIEWER_EVAS_DEFAULT_PERIOD); + goto_if(!page_info, CRITICAL_ERROR); + + if(!strcasecmp(PAGE_CATEGORY_IDLE_CLOCK_STR, name)) { + page_info->category = PAGE_CATEGORY_IDLE_CLOCK; + } else if(!strcasecmp(PAGE_CATEGORY_FAVORITE_STR, name)) { + page_info->category = PAGE_CATEGORY_APP; + } else if(!strcasecmp(PAGE_CATEGORY_APP_WIDGET_STR, name)) { + page_info->category = PAGE_CATEGORY_WIDGET; + } else if(!strcasecmp(PAGE_CATEGORY_MORE_APPS_STR, name)) { + page_info->category = PAGE_CATEGORY_MORE_APPS; + } else { + _E("Type is wrong."); + page_info_destroy(page_info); + page_info = NULL; + } + continue; + } + + // Category has to be at first. + if (!page_info) continue; + + // Element name + if ((2 == dep) && (1 == node_type)) { + if (element) { + _E("The element name is NOT NULL"); + free(element); + element = NULL; + } + + element = strdup(name); + goto_if(!element, CRITICAL_ERROR); + continue; + } + + // Element value, textfield is 3 + if ((3 == dep) && (3 == node_type)) { + continue_if(!element); + + if (!strcasecmp("packageName", element)) { + page_info->id = strdup(value); + goto_if(!page_info->id, CRITICAL_ERROR); + } else if (!strcasecmp("className", element)) { + if (page_info->id && !strcmp(value, page_info->id)) { + _D("%s subid is NULL", page_info->id); + page_info->subid = NULL; + } else { + page_info->subid = strdup(value); + goto_if(!page_info->subid, CRITICAL_ERROR); + } + } else if(!strcasecmp("screen", element)) { + page_no = atoi(value); + } else if(!strcasecmp("cellx", element)) { + cellx = atoi(value); + } else if(!strcasecmp("celly", element)) { + celly = atoi(value); + } + continue; + } + + // End of the Element + if ((2 == dep) && (15 == node_type)) { + if (!element) { + if (page_info) { + page_info_destroy(page_info); + page_info = NULL; + continue; + } + } + + free(element); + element = NULL; + continue; + } + + // End of the category + if ((1 == dep) && (15 == node_type)) { // End of the category + page_info->direction = PAGE_DIRECTION_RIGHT; + page_info->ordering = page_no * WIDGET_PER_PAGE + celly * 2 + cellx; + page_info->removable = page_info_is_removable(page_info->id); + page_info_list = eina_list_append(page_info_list, page_info); + _D("Append a package into the page_info_list : (%s:%s:%d:%d) (%d:%d:%d)" + , page_info->id, page_info->subid, page_info->category, page_info->ordering + , page_no, celly, cellx); + + page_info = NULL; + page_no = 0; + cellx = 0; + celly = 0; + } + } + + if(element) { + _E("An element is not appended properly"); + free(element); + element = NULL; + } + + if(page_info) { + _E("A node(%s) is not appended into the page_info_list", page_info->subid); + page_info_destroy(page_info); + page_info = NULL; + } + goto_if(ret, CRITICAL_ERROR); + + _destroy_reader(reader); + return page_info_list; + +CRITICAL_ERROR: + if (page_info) page_info_destroy(page_info); + page_info_list_destroy(page_info_list); + _destroy_reader(reader); + free(element); + return NULL; +} + + + +// End of a file diff --git a/packaging/org.tizen.w-home.spec b/packaging/org.tizen.w-home.spec new file mode 100755 index 0000000..bdda9d9 --- /dev/null +++ b/packaging/org.tizen.w-home.spec @@ -0,0 +1,194 @@ +Name: org.tizen.w-home +Summary: Home for the wearable devices +Version: 0.1.0 +Release: 1 +Group: Applications/System +License: Flora-1.1 +Source0: %{name}-%{version}.tar.gz + +%if "%{?tizen_profile_name}"=="mobile" +ExcludeArch: %{arm} %ix86 x86_64 +%endif + +BuildRequires: cmake, gettext-tools, smack, coreutils +BuildRequires: pkgconfig(ail) +BuildRequires: pkgconfig(appcore-efl) +BuildRequires: pkgconfig(badge) +BuildRequires: pkgconfig(bundle) +BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(capi-media-player) +BuildRequires: pkgconfig(capi-media-sound-manager) +BuildRequires: pkgconfig(capi-appfw-preference) +BuildRequires: pkgconfig(capi-system-runtime-info) +BuildRequires: pkgconfig(capi-system-device) +BuildRequires: pkgconfig(deviced) +BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(ecore-x) +BuildRequires: pkgconfig(efl-assist) +BuildRequires: pkgconfig(efl-extension) +BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(feedback) +BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(widget_service) +BuildRequires: pkgconfig(widget_viewer_evas) +BuildRequires: pkgconfig(minicontrol-monitor) +BuildRequires: pkgconfig(minicontrol-viewer) +BuildRequires: pkgconfig(pkgmgr) +BuildRequires: pkgconfig(pkgmgr-info) +BuildRequires: pkgconfig(syspopup-caller) +BuildRequires: pkgconfig(utilX) +BuildRequires: pkgconfig(syspopup-caller) +BuildRequires: pkgconfig(appsvc) +BuildRequires: pkgconfig(capi-base-utils-i18n) +BuildRequires: pkgconfig(capi-system-system-settings) +BuildRequires: pkgconfig(capi-message-port) +BuildRequires: pkgconfig(capi-media-image-util) +BuildRequires: pkgconfig(notification) +BuildRequires: pkgconfig(rua) + +%ifarch %{arm} +%define ARCH arm +BuildRequires: pkgconfig(dbus-1) +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(dbus-glib-1) +BuildRequires: pkgconfig(json) +BuildRequires: pkgconfig(journal) +BuildRequires: pkgconfig(tapi) +%else +%define ARCH emulator +%endif + +BuildRequires: cmake +BuildRequires: edje-bin +BuildRequires: embryo-bin +BuildRequires: gettext-devel +BuildRequires: hash-signer +BuildRequires: model-build-features + +%description +Home for wearable devices + +%prep +%setup -q + +%define PREFIX /usr/apps/%{name} +%define DATADIR /opt%{PREFIX}/data + +%build + +%if "%{model_build_feature_formfactor}" == "circle" + %define CIRCLE "circle" +%else + %define CIRCLE "rectangle" +%endif + +%if 0%{?tizen_build_binary_release_type_eng} +export CFLAGS="$CFLAGS -DTIZEN_ENGINEER_MODE" +export CXXFLAGS="$CXXFLAGS -DTIZEN_ENGINEER_MODE" +export FFLAGS="$FFLAGS -DTIZEN_ENGINEER_MODE" +%endif + +%if 0%{?sec_build_binary_debug_enable} +export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE" +export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE" +export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE" +%endif +RPM_OPT=`echo $CFLAGS|sed 's/-Wp,-D_FORTIFY_SOURCE=2//'` +export CFLAGS=$RPM_OPT +cmake -DCMAKE_INSTALL_PREFIX="%{PREFIX}" -DARCH=%{ARCH} -DCIRCLE="%{CIRCLE}" +make %{?jobs:-j%jobs} + + + +%install +rm -rf %{buildroot} +%make_install +mkdir -p %{buildroot}/usr/share/license +mkdir -p %{buildroot}/opt/usr/share/w-launcher +%define tizen_sign 1 +%define tizen_sign_base /usr/apps/%{name} +%define tizen_sign_level platform +%define tizen_author_sign 1 +%define tizen_dist_sign 1 + +%post +/usr/bin/signing-client/hash-signer-client.sh -a -d -p platform /usr/apps/%{name} + +INHOUSE_ID="5000" +make_data_directory() +{ + I="%{DATADIR}" + if [ ! -d $I ]; then + mkdir -p $I + fi + chmod 775 $I + chown :$INHOUSE_ID $I +} +make_data_directory + +sqlite3 %{DATADIR}/.home.db 'PRAGMA journal_mode = PERSIST; + CREATE TABLE IF NOT EXISTS home ( + id TEXT, + subid TEXT, + ordering INTEGER + ); +' +chmod 666 %{DATADIR}/.home.db* + +sqlite3 %{DATADIR}/.home_tts.db 'PRAGMA journal_mode = PERSIST; + CREATE TABLE IF NOT EXISTS home ( + id TEXT, + subid TEXT, + ordering INTEGER + ); +' +chmod 666 %{DATADIR}/.home_tts.db* + +# apps +sqlite3 %{DATADIR}/.apps.db 'PRAGMA journal_mode = PERSIST; + CREATE TABLE IF NOT EXISTS apps ( + id TEXT NOT NULL PRIMARY KEY, + ordering INTEGER + ); +' +chmod 666 %{DATADIR}/.apps.db* + +if [ -f /usr/lib/rpm-plugins/msm.so ] +then +chsmack -a '%{name}' /opt%{PREFIX} +chsmack -a '%{name}' %{DATADIR} +chsmack -a '%{name}' %{DATADIR}/.home.db* +chsmack -a '%{name}' %{DATADIR}/.home_tts.db* +chsmack -a '%{name}' %{DATADIR}/.apps.db* +fi + +vconftool set -t int "memory/private/org.tizen.w-home/tutorial" 0 -i -g $INHOUSE_ID -f -s %{name} +vconftool set -t int "db/private/org.tizen.w-home/enabled_tutorial" 0 -g $INHOUSE_ID -f -s %{name} +vconftool set -t int "db/private/org.tizen.w-home/apps_first_boot" 1 -g $INHOUSE_ID -f -s %{name} +vconftool set -t int "db/private/org.tizen.w-home/apps_flickup_count" 0 -g $INHOUSE_ID -f -s %{name} +vconftool set -t int "db/private/org.tizen.w-home/apps_initial_popup" 0 -g $INHOUSE_ID -f -s %{name} +vconftool set -t string "db/private/org.tizen.w-home/logging" ";" -g $INHOUSE_ID -f -s system::vconf_system +vconftool set -t int "memory/homescreen/clock_visibility" 0 -i -g $INHOUSE_ID -f -s system::vconf_system +vconftool set -t string "memory/homescreen/music_status" ";" -i -g $INHOUSE_ID -f -s system::vconf_system +vconftool set -t int "memory/private/org.tizen.w-home/auto_feed" 1 -i -g $INHOUSE_ID -f -s %{name} +vconftool set -t int "memory/private/org.tizen.w-home/sensitive_move" 1 -i -g $INHOUSE_ID -f -s %{name} +vconftool set -t string "db/wms/clocks_set_idle" "org.tizen.idle-clock-digital" -u $INHOUSE_ID -s system::vconf + +%files +%manifest home/%{name}.manifest +%defattr(-,root,root,-) +/usr/share/license/%{name} +/usr/share/packages/%{name}.xml +/usr/share/icons/default/small/%{name}*.png +/etc/smack/accesses.d/%{name}.efl +/etc/opt/upgrade/*.sh +%{PREFIX}/*.xml +%{PREFIX}/bin/* +%{PREFIX}/shared/* +%{PREFIX}/res/*.xml +%{PREFIX}/res/*.list +%{PREFIX}/res/*.sh +%{PREFIX}/res/edje/* +%{PREFIX}/res/images/* +%{PREFIX}/res/locale/*/*/*.mo +/opt/etc/dump.d/module.d/dump_w-home.sh -- cgit v1.2.3